On 06/15/2011 03:10 PM, Anton Khirnov wrote:

> It's broken with multiple files or audio streams.
> 
> This removes the default samplerate of 44100 for raw input, hence all
> the FATE changes.
> ---
> Arrrgh, I could swear I fixed it the first time.
> ---
>  ffmpeg.c                  |   24 +++++++++++++-----------
>  tests/fate2.mak           |    2 +-
>  tests/lavf-regression.sh  |   12 ++++++------
>  tests/regression-funcs.sh |    2 +-
>  4 files changed, 21 insertions(+), 19 deletions(-)
> 
> diff --git a/ffmpeg.c b/ffmpeg.c
> index 04672cc..1a00bdb 100644
> --- a/ffmpeg.c
> +++ b/ffmpeg.c
> @@ -163,7 +163,7 @@ static char *vfilters = NULL;
>  #endif
>  
>  static int intra_only = 0;
> -static int audio_sample_rate = 44100;
> +static int audio_sample_rate = 0;
>  static int64_t channel_layout = 0;
>  #define QSCALE_NONE -99999
>  static float audio_qscale = QSCALE_NONE;
> @@ -2170,6 +2170,13 @@ static int transcode(AVFormatContext **output_files,
>                  if(!ost->fifo)
>                      goto fail;
>                  ost->reformat_pair = 
> MAKE_SFMT_PAIR(AV_SAMPLE_FMT_NONE,AV_SAMPLE_FMT_NONE);
> +                if (!codec->sample_rate) {
> +                    codec->sample_rate = icodec->sample_rate;
> +                    if (icodec->lowres)
> +                        codec->sample_rate >>= icodec->lowres;
> +                }
> +                choose_sample_rate(ost->st, codec->codec);
> +                codec->time_base = (AVRational){1, codec->sample_rate};
>                  ost->audio_resample = codec->sample_rate != 
> icodec->sample_rate || audio_sync_method > 1;
>                  icodec->request_channels = codec->channels;
>                  ist->decoding_needed = 1;
> @@ -3268,15 +3275,9 @@ static int opt_input_file(const char *opt, const char 
> *filename)
>              set_context_opts(dec, avcodec_opts[AVMEDIA_TYPE_AUDIO], 
> AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_DECODING_PARAM, 
> input_codecs[nb_input_codecs-1]);
>              channel_layout    = dec->channel_layout;
>              audio_channels    = dec->channels;
> -            audio_sample_rate = dec->sample_rate;
>              audio_sample_fmt  = dec->sample_fmt;
>              if(audio_disable)
>                  st->discard= AVDISCARD_ALL;
> -            /* Note that av_find_stream_info can add more streams, and we
> -             * currently have no chance of setting up lowres decoding
> -             * early enough for them. */
> -            if (dec->lowres)
> -                audio_sample_rate >>= dec->lowres;
>              break;
>          case AVMEDIA_TYPE_VIDEO:
>              input_codecs[nb_input_codecs-1] = 
> avcodec_find_decoder_by_name(video_codec_name);
> @@ -3338,6 +3339,7 @@ static int opt_input_file(const char *opt, const char 
> *filename)
>      input_files[nb_input_files - 1].ist_index  = nb_input_streams - 
> ic->nb_streams;
>  
>      video_channel = 0;
> +    audio_sample_rate = 0;
>  
>      av_freep(&video_codec_name);
>      av_freep(&audio_codec_name);
> @@ -3585,7 +3587,6 @@ static void new_audio_stream(AVFormatContext *oc, int 
> file_idx)
>      if (audio_stream_copy) {
>          st->stream_copy = 1;
>          audio_enc->channels = audio_channels;
> -        audio_enc->sample_rate = audio_sample_rate;
>      } else {
>          audio_enc->codec_id = codec_id;
>          set_context_opts(audio_enc, avcodec_opts[AVMEDIA_TYPE_AUDIO], 
> AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM, codec);
> @@ -3596,14 +3597,13 @@ static void new_audio_stream(AVFormatContext *oc, int 
> file_idx)
>          }
>          audio_enc->channels = audio_channels;
>          audio_enc->sample_fmt = audio_sample_fmt;
> -        audio_enc->sample_rate = audio_sample_rate;
> +        if (audio_sample_rate)
> +            audio_enc->sample_rate = audio_sample_rate;
>          audio_enc->channel_layout = channel_layout;
>          if (av_get_channel_layout_nb_channels(channel_layout) != 
> audio_channels)
>              audio_enc->channel_layout = 0;
>          choose_sample_fmt(st, codec);
> -        choose_sample_rate(st, codec);
>      }
> -    audio_enc->time_base= (AVRational){1, audio_sample_rate};
>      if (audio_language) {
>          av_dict_set(&st->metadata, "language", audio_language, 0);
>          av_freep(&audio_language);
> @@ -3889,6 +3889,8 @@ static void opt_output_file(const char *filename)
>  
>      set_context_opts(oc, avformat_opts, AV_OPT_FLAG_ENCODING_PARAM, NULL);
>  
> +    audio_sample_rate = 0;
> +
>      av_freep(&forced_key_frames);
>      uninit_opts();
>      init_opts();
> diff --git a/tests/fate2.mak b/tests/fate2.mak
> index 6a9448f..066f9ef 100644
> --- a/tests/fate2.mak
> +++ b/tests/fate2.mak
> @@ -165,7 +165,7 @@ fate-wmapro-2ch: CMP = oneoff
>  fate-wmapro-2ch: REF = $(SAMPLES)/wmapro/Beethovens_9th-1_small.pcm
>  
>  FATE_TESTS += fate-ansi
> -fate-ansi: CMD = framecrc -i $(SAMPLES)/ansi/TRE-IOM5.ANS -pix_fmt rgb24
> +fate-ansi: CMD = framecrc -ar 44100 -i $(SAMPLES)/ansi/TRE-IOM5.ANS -pix_fmt 
> rgb24
>  
>  FATE_TESTS += fate-wmv8-drm
>  # discard last packet to avoid fails due to overread of VC-1 decoder
> diff --git a/tests/lavf-regression.sh b/tests/lavf-regression.sh
> index 94d2583..39e752b 100755
> --- a/tests/lavf-regression.sh
> +++ b/tests/lavf-regression.sh
> @@ -14,7 +14,7 @@ eval do_$test=y
>  do_lavf()
>  {
>      file=${outfile}lavf.$1
> -    do_ffmpeg $file $DEC_OPTS -f image2 -vcodec pgmyuv -i $raw_src $DEC_OPTS 
> -f s16le -i $pcm_src $ENC_OPTS -t 1 -qscale 10 $2
> +    do_ffmpeg $file $DEC_OPTS -f image2 -vcodec pgmyuv -i $raw_src $DEC_OPTS 
> -ar 44100 -f s16le -i $pcm_src $ENC_OPTS -t 1 -qscale 10 $2
>      do_ffmpeg_crc $file $DEC_OPTS -i $target_path/$file $3
>  }
>  
> @@ -39,8 +39,8 @@ do_image_formats()
>  do_audio_only()
>  {
>      file=${outfile}lavf.$1
> -    do_ffmpeg $file $DEC_OPTS $2 -f s16le -i $pcm_src $ENC_OPTS -t 1 -qscale 
> 10 $3
> -    do_ffmpeg_crc $file $DEC_OPTS -i $target_path/$file
> +    do_ffmpeg $file $DEC_OPTS $2 -ar 44100 -f s16le -i $pcm_src $ENC_OPTS -t 
> 1 -qscale 10 $3
> +    do_ffmpeg_crc $file $DEC_OPTS $4 -i $target_path/$file
>  }
>  
>  rm -f "$logfile"
> @@ -55,7 +55,7 @@ fi
>  
>  if [ -n "$do_rm" ] ; then
>  file=${outfile}lavf.rm
> -do_ffmpeg $file $DEC_OPTS -f image2 -vcodec pgmyuv -i $raw_src $DEC_OPTS -f 
> s16le -i $pcm_src $ENC_OPTS -t 1 -qscale 10 -acodec ac3_fixed
> +do_ffmpeg $file $DEC_OPTS -f image2 -vcodec pgmyuv -i $raw_src $DEC_OPTS -ar 
> 44100 -f s16le -i $pcm_src $ENC_OPTS -t 1 -qscale 10 -acodec ac3_fixed
>  # broken
>  #do_ffmpeg_crc $file -i $target_path/$file
>  fi
> @@ -181,11 +181,11 @@ do_audio_only wav
>  fi
>  
>  if [ -n "$do_alaw" ] ; then
> -do_audio_only al
> +do_audio_only al "" "" "-ar 44100"
>  fi
>  
>  if [ -n "$do_mulaw" ] ; then
> -do_audio_only ul
> +do_audio_only ul "" "" "-ar 44100"
>  fi
>  
>  if [ -n "$do_au" ] ; then
> diff --git a/tests/regression-funcs.sh b/tests/regression-funcs.sh
> index 4cf2e20..e57cdf1 100755
> --- a/tests/regression-funcs.sh
> +++ b/tests/regression-funcs.sh
> @@ -114,7 +114,7 @@ do_video_encoding()
>  do_audio_encoding()
>  {
>      file=${outfile}$1
> -    do_ffmpeg $file $DEC_OPTS -ac 2 -f s16le -i $pcm_src -ab 128k $ENC_OPTS 
> $2
> +    do_ffmpeg $file $DEC_OPTS -ac 2 -ar 44100 -f s16le -i $pcm_src -ab 128k 
> $ENC_OPTS $2
>  }
>  
>  do_audio_decoding()


Ok.

-Justin

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to