Commit 10d0f5e0 authored by Michael Niedermayer's avatar Michael Niedermayer

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
parent 951776c4
...@@ -485,6 +485,23 @@ static void choose_sample_fmt(AVStream *st, AVCodec *codec) ...@@ -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) static void choose_pixel_fmt(AVStream *st, AVCodec *codec)
{ {
if(codec && codec->pix_fmts){ if(codec && codec->pix_fmts){
...@@ -3312,6 +3329,7 @@ static void new_audio_stream(AVFormatContext *oc) ...@@ -3312,6 +3329,7 @@ static void new_audio_stream(AVFormatContext *oc)
if (audio_stream_copy) { if (audio_stream_copy) {
st->stream_copy = 1; st->stream_copy = 1;
audio_enc->channels = audio_channels; audio_enc->channels = audio_channels;
audio_enc->sample_rate = audio_sample_rate;
} else { } else {
AVCodec *codec; AVCodec *codec;
...@@ -3333,13 +3351,14 @@ static void new_audio_stream(AVFormatContext *oc) ...@@ -3333,13 +3351,14 @@ static void new_audio_stream(AVFormatContext *oc)
} }
audio_enc->channels = audio_channels; audio_enc->channels = audio_channels;
audio_enc->sample_fmt = audio_sample_fmt; audio_enc->sample_fmt = audio_sample_fmt;
audio_enc->sample_rate = audio_sample_rate;
audio_enc->channel_layout = channel_layout; audio_enc->channel_layout = channel_layout;
if (avcodec_channel_layout_num_channels(channel_layout) != audio_channels) if (avcodec_channel_layout_num_channels(channel_layout) != audio_channels)
audio_enc->channel_layout = 0; audio_enc->channel_layout = 0;
choose_sample_fmt(st, codec); choose_sample_fmt(st, codec);
choose_sample_rate(st, codec);
} }
nb_ocodecs++; nb_ocodecs++;
audio_enc->sample_rate = audio_sample_rate;
audio_enc->time_base= (AVRational){1, audio_sample_rate}; audio_enc->time_base= (AVRational){1, audio_sample_rate};
if (audio_language) { if (audio_language) {
av_metadata_set(&st->metadata, "language", audio_language); av_metadata_set(&st->metadata, "language", audio_language);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment