vorbisdec: add a flush() function
authorJustin Ruggles <justin.ruggles@gmail.com>
Tue, 24 Jan 2012 23:10:28 +0000 (18:10 -0500)
committerJustin Ruggles <justin.ruggles@gmail.com>
Fri, 24 Feb 2012 22:37:25 +0000 (17:37 -0500)
clear MDCT overlap buffer and reset previous window mode when seeking

libavcodec/vorbisdec.c

index 11d6d76..d3f6faf 100644 (file)
@@ -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,