qpeg: reset palette on seeks
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 28 Nov 2012 04:16:15 +0000 (05:16 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Wed, 28 Nov 2012 04:16:15 +0000 (05:16 +0100)
Fixes Ticket1921

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavcodec/qpeg.c

index 4d8781e..0a7c788 100644 (file)
@@ -301,6 +301,18 @@ static int decode_frame(AVCodecContext *avctx,
     return avpkt->size;
 }
 
+static void decode_flush(AVCodecContext *avctx){
+    QpegContext * const a = avctx->priv_data;
+    int i, pal_size;
+    const uint8_t *pal_src;
+
+    pal_size = FFMIN(1024U, avctx->extradata_size);
+    pal_src = avctx->extradata + avctx->extradata_size - pal_size;
+
+    for (i=0; i<pal_size/4; i++)
+        a->pal[i] = 0xFFU<<24 | AV_RL32(pal_src+4*i);
+}
+
 static av_cold int decode_init(AVCodecContext *avctx){
     QpegContext * const a = avctx->priv_data;
 
@@ -309,6 +321,8 @@ static av_cold int decode_init(AVCodecContext *avctx){
     a->avctx = avctx;
     avctx->pix_fmt= AV_PIX_FMT_PAL8;
 
+    decode_flush(avctx);
+
     return 0;
 }
 
@@ -333,6 +347,7 @@ AVCodec ff_qpeg_decoder = {
     .init           = decode_init,
     .close          = decode_end,
     .decode         = decode_frame,
+    .flush          = decode_flush,
     .capabilities   = CODEC_CAP_DR1,
     .long_name      = NULL_IF_CONFIG_SMALL("Q-team QPEG"),
 };