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

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


---
 libavcodec/vorbisdec.c |   27 ++++++++++++---------------
 1 files changed, 12 insertions(+), 15 deletions(-)

diff --git a/libavcodec/vorbisdec.c b/libavcodec/vorbisdec.c
index eacfa5f..cad30a9 100644
--- a/libavcodec/vorbisdec.c
+++ b/libavcodec/vorbisdec.c
@@ -1007,12 +1007,9 @@ static av_cold int vorbis_decode_init(AVCodecContext *avccontext)
     avccontext->channels    = vc->audio_channels;
     avccontext->sample_rate = vc->audio_samplerate;
     avccontext->frame_size  = FFMIN(vc->blocksize[0], vc->blocksize[1]) >> 2;
-    /* ffdshow custom code */
-#if CONFIG_AUDIO_FLOAT
-    avccontext->sample_fmt  = AV_SAMPLE_FMT_FLT;
-#else
-    avccontext->sample_fmt  = AV_SAMPLE_FMT_S16;
-#endif
+    avccontext->sample_fmt  =
+        avccontext->request_sample_fmt == AV_SAMPLE_FMT_FLT ?
+        AV_SAMPLE_FMT_FLT : AV_SAMPLE_FMT_S16;
 
     return 0 ;
 }
@@ -1640,15 +1637,15 @@ static int vorbis_decode_frame(AVCodecContext *avccontext,
                               len * ff_vorbis_channel_layout_offsets[vc->audio_channels - 1][i];
     }
 
-    /* ffdshow custom code */
-#if CONFIG_AUDIO_FLOAT
-    float_interleave(data, channel_ptrs, len, vc->audio_channels);
-    *data_size = len * sizeof(float) * vc->audio_channels;
-#else
-    vc->fmt_conv.float_to_int16_interleave(data, channel_ptrs, len,
-                                           vc->audio_channels);
-    *data_size = len * 2 * vc->audio_channels;
-#endif
+    *data_size = len * vc->audio_channels;
+    if (avccontext->sample_fmt == AV_SAMPLE_FMT_FLT) {
+        float_interleave(data, channel_ptrs, len, vc->audio_channels);
+        *data_size *= sizeof(float);
+    } else {
+        vc->fmt_conv.float_to_int16_interleave(data, channel_ptrs, len,
+                                               vc->audio_channels);
+        *data_size *= 2;
+    }
 
     return buf_size ;
 }
-- 
1.7.4.4



More information about the ffmpeg-devel mailing list