summaryrefslogtreecommitdiffstats
path: root/libavcodec/msrle.c
diff options
context:
space:
mode:
Diffstat (limited to 'libavcodec/msrle.c')
-rw-r--r--libavcodec/msrle.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/libavcodec/msrle.c b/libavcodec/msrle.c
index f1fa8f5..a263318 100644
--- a/libavcodec/msrle.c
+++ b/libavcodec/msrle.c
@@ -26,9 +26,6 @@
* http://www.pcisys.net/~melanson/codecs/
*
* The MS RLE decoder outputs PAL8 colorspace data.
- *
- * Note that this decoder expects the palette colors from the end of the
- * BITMAPINFO header passed through palctrl.
*/
#include <stdio.h>
@@ -46,6 +43,7 @@ typedef struct MsrleContext {
const unsigned char *buf;
int size;
+ uint32_t pal[256];
} MsrleContext;
static av_cold int msrle_decode_init(AVCodecContext *avctx)
@@ -91,13 +89,16 @@ static int msrle_decode_frame(AVCodecContext *avctx,
return -1;
}
- if (s->avctx->palctrl) {
- /* make the palette available */
- memcpy(s->frame.data[1], s->avctx->palctrl->palette, AVPALETTE_SIZE);
- if (s->avctx->palctrl->palette_changed) {
+ if (avctx->bits_per_coded_sample <= 8) {
+ const uint8_t *pal = av_packet_get_side_data(avpkt, AV_PKT_DATA_PALETTE, NULL);
+
+ if (pal) {
s->frame.palette_has_changed = 1;
- s->avctx->palctrl->palette_changed = 0;
+ memcpy(s->pal, pal, AVPALETTE_SIZE);
}
+
+ /* make the palette available */
+ memcpy(s->frame.data[1], s->pal, AVPALETTE_SIZE);
}
/* FIXME how to correctly detect RLE ??? */
OpenPOWER on IntegriCloud