diff options
author | Justin Ruggles <justin.ruggles@gmail.com> | 2012-06-01 15:19:45 -0400 |
---|---|---|
committer | Justin Ruggles <justin.ruggles@gmail.com> | 2012-07-08 15:22:11 -0400 |
commit | 8ca08066fc813c48722e9c5a79fcd58e725cc80f (patch) | |
tree | 17254bcf69cf623af1881ed6e532e91a25c316ed /libavresample/utils.c | |
parent | db0e7bd0bd1344b0edfd6a779e832fcd47cacd00 (diff) | |
download | ffmpeg-8ca08066fc813c48722e9c5a79fcd58e725cc80f.tar.gz |
lavr: Use AV_SAMPLE_FMT_NONE to auto-select the internal sample format
Also make this the default value.
Diffstat (limited to 'libavresample/utils.c')
-rw-r--r-- | libavresample/utils.c | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/libavresample/utils.c b/libavresample/utils.c index 6d4509d7c1..ac1c36e17c 100644 --- a/libavresample/utils.c +++ b/libavresample/utils.c @@ -57,18 +57,23 @@ int avresample_open(AVAudioResampleContext *avr) avr->resample_needed = avr->in_sample_rate != avr->out_sample_rate || avr->force_resampling; - /* set sample format conversion parameters */ - /* override user-requested internal format to avoid unexpected failures - TODO: support more internal formats */ - if (avr->resample_needed && avr->internal_sample_fmt != AV_SAMPLE_FMT_S16P) { - av_log(avr, AV_LOG_WARNING, "Using s16p as internal sample format\n"); - avr->internal_sample_fmt = AV_SAMPLE_FMT_S16P; - } else if (avr->mixing_needed && - avr->internal_sample_fmt != AV_SAMPLE_FMT_S16P && - avr->internal_sample_fmt != AV_SAMPLE_FMT_FLTP) { - av_log(avr, AV_LOG_WARNING, "Using fltp as internal sample format\n"); - avr->internal_sample_fmt = AV_SAMPLE_FMT_FLTP; + /* select internal sample format if not specified by the user */ + if (avr->internal_sample_fmt == AV_SAMPLE_FMT_NONE && + (avr->mixing_needed || avr->resample_needed)) { + enum AVSampleFormat in_fmt = av_get_planar_sample_fmt(avr->in_sample_fmt); + enum AVSampleFormat out_fmt = av_get_planar_sample_fmt(avr->out_sample_fmt); + int max_bps = FFMAX(av_get_bytes_per_sample(in_fmt), + av_get_bytes_per_sample(out_fmt)); + if (avr->resample_needed || max_bps <= 2) { + avr->internal_sample_fmt = AV_SAMPLE_FMT_S16P; + } else if (avr->mixing_needed) { + avr->internal_sample_fmt = AV_SAMPLE_FMT_FLTP; + } + av_log(avr, AV_LOG_DEBUG, "Using %s as internal sample format\n", + av_get_sample_fmt_name(avr->internal_sample_fmt)); } + + /* set sample format conversion parameters */ if (avr->in_channels == 1) avr->in_sample_fmt = av_get_planar_sample_fmt(avr->in_sample_fmt); if (avr->out_channels == 1) |