mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
fix bitstream filter option mapping when using -newvideo and friends
There was an off-by-one when addressing bitstream_filters[] in this situation. Originally committed as revision 25398 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
6c2142809c
commit
ca8064d2d1
51
ffmpeg.c
51
ffmpeg.c
@ -3390,7 +3390,7 @@ static void check_audio_video_sub_inputs(int *has_video_ptr, int *has_audio_ptr,
|
||||
*has_subtitle_ptr = has_subtitle;
|
||||
}
|
||||
|
||||
static void new_video_stream(AVFormatContext *oc)
|
||||
static void new_video_stream(AVFormatContext *oc, int file_idx)
|
||||
{
|
||||
AVStream *st;
|
||||
AVCodecContext *video_enc;
|
||||
@ -3417,11 +3417,11 @@ static void new_video_stream(AVFormatContext *oc)
|
||||
}
|
||||
|
||||
avcodec_get_context_defaults3(st->codec, codec);
|
||||
bitstream_filters[nb_output_files] =
|
||||
grow_array(bitstream_filters[nb_output_files],
|
||||
sizeof(*bitstream_filters[nb_output_files]),
|
||||
&nb_bitstream_filters[nb_output_files], oc->nb_streams);
|
||||
bitstream_filters[nb_output_files][oc->nb_streams - 1]= video_bitstream_filters;
|
||||
bitstream_filters[file_idx] =
|
||||
grow_array(bitstream_filters[file_idx],
|
||||
sizeof(*bitstream_filters[file_idx]),
|
||||
&nb_bitstream_filters[file_idx], oc->nb_streams);
|
||||
bitstream_filters[file_idx][oc->nb_streams - 1]= video_bitstream_filters;
|
||||
video_bitstream_filters= NULL;
|
||||
|
||||
avcodec_thread_init(st->codec, thread_count);
|
||||
@ -3534,7 +3534,7 @@ static void new_video_stream(AVFormatContext *oc)
|
||||
frame_pix_fmt = PIX_FMT_NONE;
|
||||
}
|
||||
|
||||
static void new_audio_stream(AVFormatContext *oc)
|
||||
static void new_audio_stream(AVFormatContext *oc, int file_idx)
|
||||
{
|
||||
AVStream *st;
|
||||
AVCodec *codec= NULL;
|
||||
@ -3562,11 +3562,11 @@ static void new_audio_stream(AVFormatContext *oc)
|
||||
|
||||
avcodec_get_context_defaults3(st->codec, codec);
|
||||
|
||||
bitstream_filters[nb_output_files] =
|
||||
grow_array(bitstream_filters[nb_output_files],
|
||||
sizeof(*bitstream_filters[nb_output_files]),
|
||||
&nb_bitstream_filters[nb_output_files], oc->nb_streams);
|
||||
bitstream_filters[nb_output_files][oc->nb_streams - 1]= audio_bitstream_filters;
|
||||
bitstream_filters[file_idx] =
|
||||
grow_array(bitstream_filters[file_idx],
|
||||
sizeof(*bitstream_filters[file_idx]),
|
||||
&nb_bitstream_filters[file_idx], oc->nb_streams);
|
||||
bitstream_filters[file_idx][oc->nb_streams - 1]= audio_bitstream_filters;
|
||||
audio_bitstream_filters= NULL;
|
||||
|
||||
avcodec_thread_init(st->codec, thread_count);
|
||||
@ -3614,7 +3614,7 @@ static void new_audio_stream(AVFormatContext *oc)
|
||||
audio_stream_copy = 0;
|
||||
}
|
||||
|
||||
static void new_subtitle_stream(AVFormatContext *oc)
|
||||
static void new_subtitle_stream(AVFormatContext *oc, int file_idx)
|
||||
{
|
||||
AVStream *st;
|
||||
AVCodec *codec=NULL;
|
||||
@ -3634,11 +3634,11 @@ static void new_subtitle_stream(AVFormatContext *oc)
|
||||
}
|
||||
avcodec_get_context_defaults3(st->codec, codec);
|
||||
|
||||
bitstream_filters[nb_output_files] =
|
||||
grow_array(bitstream_filters[nb_output_files],
|
||||
sizeof(*bitstream_filters[nb_output_files]),
|
||||
&nb_bitstream_filters[nb_output_files], oc->nb_streams);
|
||||
bitstream_filters[nb_output_files][oc->nb_streams - 1]= subtitle_bitstream_filters;
|
||||
bitstream_filters[file_idx] =
|
||||
grow_array(bitstream_filters[file_idx],
|
||||
sizeof(*bitstream_filters[file_idx]),
|
||||
&nb_bitstream_filters[file_idx], oc->nb_streams);
|
||||
bitstream_filters[file_idx][oc->nb_streams - 1]= subtitle_bitstream_filters;
|
||||
subtitle_bitstream_filters= NULL;
|
||||
|
||||
subtitle_enc->codec_type = AVMEDIA_TYPE_SUBTITLE;
|
||||
@ -3665,15 +3665,16 @@ static void new_subtitle_stream(AVFormatContext *oc)
|
||||
static int opt_new_stream(const char *opt, const char *arg)
|
||||
{
|
||||
AVFormatContext *oc;
|
||||
int file_idx = nb_output_files - 1;
|
||||
if (nb_output_files <= 0) {
|
||||
fprintf(stderr, "At least one output file must be specified\n");
|
||||
ffmpeg_exit(1);
|
||||
}
|
||||
oc = output_files[nb_output_files - 1];
|
||||
oc = output_files[file_idx];
|
||||
|
||||
if (!strcmp(opt, "newvideo" )) new_video_stream (oc);
|
||||
else if (!strcmp(opt, "newaudio" )) new_audio_stream (oc);
|
||||
else if (!strcmp(opt, "newsubtitle")) new_subtitle_stream(oc);
|
||||
if (!strcmp(opt, "newvideo" )) new_video_stream (oc, file_idx);
|
||||
else if (!strcmp(opt, "newaudio" )) new_audio_stream (oc, file_idx);
|
||||
else if (!strcmp(opt, "newsubtitle")) new_subtitle_stream(oc, file_idx);
|
||||
else av_assert0(0);
|
||||
return 0;
|
||||
}
|
||||
@ -3776,15 +3777,15 @@ static void opt_output_file(const char *filename)
|
||||
}
|
||||
|
||||
if (use_video) {
|
||||
new_video_stream(oc);
|
||||
new_video_stream(oc, nb_output_files);
|
||||
}
|
||||
|
||||
if (use_audio) {
|
||||
new_audio_stream(oc);
|
||||
new_audio_stream(oc, nb_output_files);
|
||||
}
|
||||
|
||||
if (use_subtitle) {
|
||||
new_subtitle_stream(oc);
|
||||
new_subtitle_stream(oc, nb_output_files);
|
||||
}
|
||||
|
||||
oc->timestamp = recording_timestamp;
|
||||
|
Loading…
Reference in New Issue
Block a user