Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Ruggles <justin.ruggles@gmail.com>2012-06-01 23:19:45 +0400
committerJustin Ruggles <justin.ruggles@gmail.com>2012-07-08 23:22:11 +0400
commit8ca08066fc813c48722e9c5a79fcd58e725cc80f (patch)
tree17254bcf69cf623af1881ed6e532e91a25c316ed /libavresample
parentdb0e7bd0bd1344b0edfd6a779e832fcd47cacd00 (diff)
lavr: Use AV_SAMPLE_FMT_NONE to auto-select the internal sample format
Also make this the default value.
Diffstat (limited to 'libavresample')
-rw-r--r--libavresample/options.c2
-rw-r--r--libavresample/utils.c27
2 files changed, 17 insertions, 12 deletions
diff --git a/libavresample/options.c b/libavresample/options.c
index a1a0b0ca21..45678dceaa 100644
--- a/libavresample/options.c
+++ b/libavresample/options.c
@@ -39,7 +39,7 @@ static const AVOption options[] = {
{ "out_channel_layout", "Output Channel Layout", OFFSET(out_channel_layout), AV_OPT_TYPE_INT64, { 0 }, INT64_MIN, INT64_MAX, PARAM },
{ "out_sample_fmt", "Output Sample Format", OFFSET(out_sample_fmt), AV_OPT_TYPE_INT, { AV_SAMPLE_FMT_S16 }, AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_NB-1, PARAM },
{ "out_sample_rate", "Output Sample Rate", OFFSET(out_sample_rate), AV_OPT_TYPE_INT, { 48000 }, 1, INT_MAX, PARAM },
- { "internal_sample_fmt", "Internal Sample Format", OFFSET(internal_sample_fmt), AV_OPT_TYPE_INT, { AV_SAMPLE_FMT_FLTP }, AV_SAMPLE_FMT_NONE, AV_SAMPLE_FMT_NB-1, PARAM },
+ { "internal_sample_fmt", "Internal Sample Format", OFFSET(internal_sample_fmt), AV_OPT_TYPE_INT, { AV_SAMPLE_FMT_NONE }, AV_SAMPLE_FMT_NONE, AV_SAMPLE_FMT_NB-1, PARAM },
{ "mix_coeff_type", "Mixing Coefficient Type", OFFSET(mix_coeff_type), AV_OPT_TYPE_INT, { AV_MIX_COEFF_TYPE_FLT }, AV_MIX_COEFF_TYPE_Q8, AV_MIX_COEFF_TYPE_NB-1, PARAM, "mix_coeff_type" },
{ "q8", "16-bit 8.8 Fixed-Point", 0, AV_OPT_TYPE_CONST, { AV_MIX_COEFF_TYPE_Q8 }, INT_MIN, INT_MAX, PARAM, "mix_coeff_type" },
{ "q15", "32-bit 17.15 Fixed-Point", 0, AV_OPT_TYPE_CONST, { AV_MIX_COEFF_TYPE_Q15 }, INT_MIN, INT_MAX, PARAM, "mix_coeff_type" },
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)