From 10d0f5e0352a8794a3e2bc657b5bd6e11ef0dfb9 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Thu, 22 Apr 2010 09:40:51 +0000 Subject: Make sure ffmpeg chooses a supported samplerte if the encoder supports just some. Originally committed as revision 22943 to svn://svn.ffmpeg.org/ffmpeg/trunk --- ffmpeg.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'ffmpeg.c') diff --git a/ffmpeg.c b/ffmpeg.c index 3b211f0873..a314126fb3 100644 --- a/ffmpeg.c +++ b/ffmpeg.c @@ -485,6 +485,23 @@ static void choose_sample_fmt(AVStream *st, AVCodec *codec) } } +static void choose_sample_rate(AVStream *st, AVCodec *codec) +{ + if(codec && codec->supported_samplerates){ + const int *p= codec->supported_samplerates; + int best; + int best_dist=INT_MAX; + for(; *p; p++){ + int dist= abs(st->codec->sample_rate - *p); + if(dist < best_dist){ + best_dist= dist; + best= *p; + } + } + st->codec->sample_rate= best; + } +} + static void choose_pixel_fmt(AVStream *st, AVCodec *codec) { if(codec && codec->pix_fmts){ @@ -3312,6 +3329,7 @@ static void new_audio_stream(AVFormatContext *oc) if (audio_stream_copy) { st->stream_copy = 1; audio_enc->channels = audio_channels; + audio_enc->sample_rate = audio_sample_rate; } else { AVCodec *codec; @@ -3333,13 +3351,14 @@ static void new_audio_stream(AVFormatContext *oc) } audio_enc->channels = audio_channels; audio_enc->sample_fmt = audio_sample_fmt; + audio_enc->sample_rate = audio_sample_rate; audio_enc->channel_layout = channel_layout; if (avcodec_channel_layout_num_channels(channel_layout) != audio_channels) audio_enc->channel_layout = 0; choose_sample_fmt(st, codec); + choose_sample_rate(st, codec); } nb_ocodecs++; - audio_enc->sample_rate = audio_sample_rate; audio_enc->time_base= (AVRational){1, audio_sample_rate}; if (audio_language) { av_metadata_set(&st->metadata, "language", audio_language); -- cgit v1.2.3