]> git.sesse.net Git - ffmpeg/commitdiff
Float output for libavcodec Vorbis decoder
authorclsid2 <clsid2@3b938f2f-1a1a-0410-8054-a526ea5ff92c>
Mon, 7 Mar 2011 00:46:59 +0000 (00:46 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 3 Apr 2011 20:52:58 +0000 (22:52 +0200)
git-svn-id: https://ffdshow-tryout.svn.sourceforge.net/svnroot/ffdshow-tryout@3771 3b938f2f-1a1a-0410-8054-a526ea5ff92c

libavcodec/vorbis_dec.c

index 637f510df460e6d70627698b55fdca5b850748e9..5ed36319503aa3916e7088dcc37806a6ff1acb88 100644 (file)
@@ -1007,7 +1007,12 @@ 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
 
     return 0 ;
 }
@@ -1635,9 +1640,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
 
     return buf_size ;
 }