From 2f89ef46fee0b53e4ce65f81b7c5260eb7f62a18 Mon Sep 17 00:00:00 2001 From: Paul Brossier Date: Mon, 28 Nov 2016 18:44:44 +0100 Subject: [PATCH] src/io/source_avcodec.c: use AV_SAMPLE_FMT_DBL when compiling with HAVE_AUBIO_DOUBLE --- src/io/source_avcodec.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/io/source_avcodec.c b/src/io/source_avcodec.c index 871b07e6..74a321a9 100644 --- a/src/io/source_avcodec.c +++ b/src/io/source_avcodec.c @@ -60,7 +60,7 @@ struct _aubio_source_avcodec_t { AVCodecContext *avCodecCtx; AVFrame *avFrame; AVAudioResampleContext *avr; - float *output; + smpl_t *output; uint_t read_samples; uint_t read_index; sint_t selected_stream; @@ -205,7 +205,7 @@ aubio_source_avcodec_t * new_aubio_source_avcodec(const char_t * path, uint_t sa } /* allocate output for avr */ - s->output = (float *)av_malloc(AUBIO_AVCODEC_MAX_BUFFER_SIZE * sizeof(float)); + s->output = (smpl_t *)av_malloc(AUBIO_AVCODEC_MAX_BUFFER_SIZE * sizeof(smpl_t)); s->read_samples = 0; s->read_index = 0; @@ -232,6 +232,7 @@ beach: } void aubio_source_avcodec_reset_resampler(aubio_source_avcodec_t * s, uint_t multi) { + // create or reset resampler to/from mono/multi-channel if ( (multi != s->multi) || (s->avr == NULL) ) { int64_t input_layout = av_get_default_channel_layout(s->input_channels); uint_t output_channels = multi ? s->input_channels : 1; @@ -249,7 +250,13 @@ void aubio_source_avcodec_reset_resampler(aubio_source_avcodec_t * s, uint_t mul av_opt_set_int(avr, "in_sample_rate", s->input_samplerate, 0); av_opt_set_int(avr, "out_sample_rate", s->samplerate, 0); av_opt_set_int(avr, "in_sample_fmt", s->avCodecCtx->sample_fmt, 0); +#if HAVE_AUBIO_DOUBLE + av_opt_set_int(avr, "out_sample_fmt", AV_SAMPLE_FMT_DBL, 0); +#else av_opt_set_int(avr, "out_sample_fmt", AV_SAMPLE_FMT_FLT, 0); +#endif + // TODO: use planar? + //av_opt_set_int(avr, "out_sample_fmt", AV_SAMPLE_FMT_FLTP, 0); int err; if ( ( err = avresample_open(avr) ) < 0) { char errorstr[256]; -- 2.11.0