From 11777eb8142117864bff0c8060f17b4089434143 Mon Sep 17 00:00:00 2001 From: Carl Eugen Hoyos Date: Mon, 19 Sep 2016 23:26:06 +0200 Subject: lavc/rscc: Support pal8 in rscc. Fixes the colours of the sample for ticket #5611. --- libavcodec/rscc.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'libavcodec/rscc.c') diff --git a/libavcodec/rscc.c b/libavcodec/rscc.c index 3b3703cf19..7f280a9a97 100644 --- a/libavcodec/rscc.c +++ b/libavcodec/rscc.c @@ -31,7 +31,7 @@ * and it can be deflated or not. Similarly, pixel data comes after the header * and a variable size value, and it can be deflated or just raw. * - * Supports: GRAY8, BGRA, BGR24, RGB555, RGB8 + * Supports: BGRA, BGR24, RGB555, PAL8 */ #include @@ -58,6 +58,7 @@ typedef struct RsccContext { Tile *tiles; unsigned int tiles_size; int component_size; + uint32_t pal[AVPALETTE_COUNT]; /* zlib interaction */ uint8_t *inflated_buf; @@ -89,7 +90,7 @@ static av_cold int rscc_init(AVCodecContext *avctx) ctx->component_size = avctx->bits_per_coded_sample / 8; switch (avctx->bits_per_coded_sample) { case 8: - avctx->pix_fmt = AV_PIX_FMT_GRAY8; + avctx->pix_fmt = AV_PIX_FMT_PAL8; break; case 16: avctx->pix_fmt = AV_PIX_FMT_RGB555LE; @@ -308,6 +309,16 @@ static int rscc_decode_frame(AVCodecContext *avctx, void *data, } else { frame->pict_type = AV_PICTURE_TYPE_P; } + if (avctx->pix_fmt == AV_PIX_FMT_PAL8) { + const uint8_t *pal = av_packet_get_side_data(avpkt, + AV_PKT_DATA_PALETTE, + NULL); + if (pal) { + frame->palette_has_changed = 1; + memcpy(ctx->pal, pal, AVPALETTE_SIZE); + } + memcpy (frame->data[1], ctx->pal, AVPALETTE_SIZE); + } *got_frame = 1; end: -- cgit v1.2.3