---
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