From 19adb0bc2d42ad88d6137efa5420e13696e721d0 Mon Sep 17 00:00:00 2001 From: Justin Ruggles Date: Tue, 24 Jan 2012 18:10:28 -0500 Subject: vorbisdec: add a flush() function clear MDCT overlap buffer and reset previous window mode when seeking --- libavcodec/vorbisdec.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'libavcodec/vorbisdec.c') diff --git a/libavcodec/vorbisdec.c b/libavcodec/vorbisdec.c index 11d6d76235..d3f6faff69 100644 --- a/libavcodec/vorbisdec.c +++ b/libavcodec/vorbisdec.c @@ -1698,6 +1698,17 @@ static av_cold int vorbis_decode_close(AVCodecContext *avccontext) return 0; } +static av_cold void vorbis_decode_flush(AVCodecContext *avccontext) +{ + vorbis_context *vc = avccontext->priv_data; + + if (vc->saved) { + memset(vc->saved, 0, (vc->blocksize[1] / 4) * vc->audio_channels * + sizeof(*vc->saved)); + } + vc->previous_window = 0; +} + AVCodec ff_vorbis_decoder = { .name = "vorbis", .type = AVMEDIA_TYPE_AUDIO, @@ -1706,6 +1717,7 @@ AVCodec ff_vorbis_decoder = { .init = vorbis_decode_init, .close = vorbis_decode_close, .decode = vorbis_decode_frame, + .flush = vorbis_decode_flush, .capabilities = CODEC_CAP_DR1, .long_name = NULL_IF_CONFIG_SMALL("Vorbis"), .channel_layouts = ff_vorbis_channel_layouts, -- cgit v1.2.3