[FFmpeg-devel] [PATCH] dca: allow selecting float output at runtime.

Reimar Döffinger Reimar.Doeffinger at gmx.de
Mon Apr 25 12:29:55 CEST 2011


---
 libavcodec/dca.c |   28 ++++++++++------------------
 1 files changed, 10 insertions(+), 18 deletions(-)

diff --git a/libavcodec/dca.c b/libavcodec/dca.c
index 2053121..a615d5d 100644
--- a/libavcodec/dca.c
+++ b/libavcodec/dca.c
@@ -1626,12 +1626,8 @@ static int dca_decode_frame(AVCodecContext * avctx,
     int lfe_samples;
     int num_core_channels = 0;
     int i;
-    /* ffdshow custom code */
-#if CONFIG_AUDIO_FLOAT
-    float *samples = data;
-#else
+    float *samples_flt = data;
     int16_t *samples = data;
-#endif
     DCAContext *s = avctx->priv_data;
     int channels;
     int core_ss_end;
@@ -1840,13 +1836,13 @@ static int dca_decode_frame(AVCodecContext * avctx,
         }
 
         /* interleave samples */
-#if CONFIG_AUDIO_FLOAT
-        /* ffdshow custom code */
-        float_interleave(samples, s->samples_chanptr, 256, channels);
-#else
-        s->fmt_conv.float_to_int16_interleave(samples, s->samples_chanptr, 256, channels);
-#endif
-        samples += 256 * channels;
+        if (avctx->sample_fmt == AV_SAMPLE_FMT_FLT) {
+            float_interleave(samples_flt, s->samples_chanptr, 256, channels);
+            samples_flt += 256 * channels;
+        } else {
+            s->fmt_conv.float_to_int16_interleave(samples, s->samples_chanptr, 256, channels);
+            samples += 256 * channels;
+        }
     }
 
     /* update lfe history */
@@ -1882,12 +1878,8 @@ static av_cold int dca_decode_init(AVCodecContext * avctx)
 
     for (i = 0; i < DCA_PRIM_CHANNELS_MAX+1; i++)
         s->samples_chanptr[i] = s->samples + i * 256;
-    /* ffdshow custom code */
-#if CONFIG_AUDIO_FLOAT
-    avctx->sample_fmt = AV_SAMPLE_FMT_FLT;
-#else
-    avctx->sample_fmt = AV_SAMPLE_FMT_S16;
-#endif
+    avctx->sample_fmt = avctx->request_sample_fmt == AV_SAMPLE_FMT_FLT ?
+                        AV_SAMPLE_FMT_FLT : AV_SAMPLE_FMT_S16;
 
     s->scale_bias = 1.0;
 
-- 
1.7.4.4



More information about the ffmpeg-devel mailing list