---
 libavcodec/vorbisdec.c |   28 ++++++++--------------------
 1 files changed, 8 insertions(+), 20 deletions(-)

diff --git a/libavcodec/vorbisdec.c b/libavcodec/vorbisdec.c
index f5a541a..ab6017b 100644
--- a/libavcodec/vorbisdec.c
+++ b/libavcodec/vorbisdec.c
@@ -153,7 +153,6 @@ typedef struct vorbis_context_s {
     float        *channel_residues;
     float        *channel_floors;
     float        *saved;
-    float         scale_bias; // for float->int conversion
 } vorbis_context;
 
 /* Helper functions */
@@ -955,8 +954,8 @@ static int vorbis_parse_id_hdr(vorbis_context *vc)
     vc->saved            =  av_mallocz((vc->blocksize[1] / 4) * 
vc->audio_channels * sizeof(*vc->saved));
     vc->previous_window  = 0;
 
-    ff_mdct_init(&vc->mdct[0], bl0, 1, -vc->scale_bias);
-    ff_mdct_init(&vc->mdct[1], bl1, 1, -vc->scale_bias);
+    ff_mdct_init(&vc->mdct[0], bl0, 1, -1.0);
+    ff_mdct_init(&vc->mdct[1], bl1, 1, -1.0);
 
     av_dlog(NULL, " vorbis version %d \n audio_channels %d \n audio_samplerate 
%d \n bitrate_max %d \n bitrate_nom %d \n bitrate_min %d \n blk_0 %d blk_1 %d 
\n ",
             vc->version, vc->audio_channels, vc->audio_samplerate, 
vc->bitrate_maximum, vc->bitrate_nominal, vc->bitrate_minimum, 
vc->blocksize[0], vc->blocksize[1]);
@@ -988,13 +987,7 @@ static av_cold int vorbis_decode_init(AVCodecContext 
*avccontext)
     avpriv_float_dsp_init(&vc->fdsp, avccontext->flags & CODEC_FLAG_BITEXACT);
     ff_fmt_convert_init(&vc->fmt_conv, avccontext);
 
-    if (avccontext->request_sample_fmt == AV_SAMPLE_FMT_FLT) {
-        avccontext->sample_fmt = AV_SAMPLE_FMT_FLT;
-        vc->scale_bias = 1.0f;
-    } else {
-        avccontext->sample_fmt = AV_SAMPLE_FMT_S16;
-        vc->scale_bias = 32768.0f;
-    }
+    avccontext->sample_fmt = AV_SAMPLE_FMT_FLTP;
 
     if (!headers_len) {
         av_log(avccontext, AV_LOG_ERROR, "Extradata missing.\n");
@@ -1690,13 +1683,9 @@ static int vorbis_decode_frame(AVCodecContext 
*avccontext, void *data,
                               len * 
ff_vorbis_channel_layout_offsets[vc->audio_channels - 1][i];
     }
 
-    if (avccontext->sample_fmt == AV_SAMPLE_FMT_FLT)
-        vc->fmt_conv.float_interleave((float *)vc->frame.data[0], channel_ptrs,
-                                      len, vc->audio_channels);
-    else
-        vc->fmt_conv.float_to_int16_interleave((int16_t *)vc->frame.data[0],
-                                               channel_ptrs, len,
-                                               vc->audio_channels);
+    for (i = 0; i < vc->audio_channels; i++)
+        memcpy(vc->frame.extended_data[i], channel_ptrs[i],
+               len * sizeof(*channel_ptrs[i]));
 
     *got_frame_ptr   = 1;
     *(AVFrame *)data = vc->frame;
@@ -1738,7 +1727,6 @@ AVCodec ff_vorbis_decoder = {
     .capabilities    = CODEC_CAP_DR1,
     .long_name       = NULL_IF_CONFIG_SMALL("Vorbis"),
     .channel_layouts = ff_vorbis_channel_layouts,
-    .sample_fmts     = (const enum AVSampleFormat[]) {
-        AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE
-    },
+    .sample_fmts     = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,
+                                                       AV_SAMPLE_FMT_NONE },
 };
-- 
1.7.1

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to