diff options
author | Aurelien Jacobs <aurel@gnuage.org> | 2010-10-07 19:25:48 +0000 |
---|---|---|
committer | Aurelien Jacobs <aurel@gnuage.org> | 2010-10-07 19:25:48 +0000 |
commit | ca8064d2d1b293d7a8011bf0a08005c11ae8ba67 (patch) | |
tree | cdcf2fc31cef74fb2ad380b44895080de683ce4f /ffmpeg.c | |
parent | 6c2142809cc46e3801006ddf5f0adc85243a3a2b (diff) | |
download | ffmpeg-ca8064d2d1b293d7a8011bf0a08005c11ae8ba67.tar.gz |
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
Diffstat (limited to 'ffmpeg.c')
-rw-r--r-- | ffmpeg.c | 51 |
1 files changed, 26 insertions, 25 deletions
@@ -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; |