From 21eafa18e6e0768e806eb40cbeb1e80eecbc1257 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Mon, 6 Aug 2012 19:34:09 +0200 Subject: [PATCH] msrle: fix extradata palette handling Fixes Ticket1273 Signed-off-by: Michael Niedermayer --- libavcodec/msrle.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/libavcodec/msrle.c b/libavcodec/msrle.c index 0c54f9af5e..db76648a1c 100644 --- a/libavcodec/msrle.c +++ b/libavcodec/msrle.c @@ -50,6 +50,7 @@ typedef struct MsrleContext { static av_cold int msrle_decode_init(AVCodecContext *avctx) { MsrleContext *s = avctx->priv_data; + int i; s->avctx = avctx; @@ -72,6 +73,10 @@ static av_cold int msrle_decode_init(AVCodecContext *avctx) avcodec_get_frame_defaults(&s->frame); s->frame.data[0] = NULL; + if (avctx->extradata_size >= AVPALETTE_SIZE) + for (i = 0; i < AVPALETTE_SIZE/4; i++) + s->pal[i] = 0xFF<<24 | AV_RL32(avctx->extradata+4*i); + return 0; } @@ -101,11 +106,11 @@ static int msrle_decode_frame(AVCodecContext *avctx, s->frame.palette_has_changed = 1; memcpy(s->pal, pal, AVPALETTE_SIZE); } - - /* make the palette available */ - memcpy(s->frame.data[1], s->pal, AVPALETTE_SIZE); } + /* make the palette available */ + memcpy(s->frame.data[1], s->pal, AVPALETTE_SIZE); + /* FIXME how to correctly detect RLE ??? */ if (avctx->height * istride == avpkt->size) { /* assume uncompressed */ int linesize = (avctx->width * avctx->bits_per_coded_sample + 7) / 8;