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: diff --git a/libavcodec/version.h b/libavcodec/version.h index ccb28905ad..9acf08126e 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -29,7 +29,7 @@ #define LIBAVCODEC_VERSION_MAJOR 57 #define LIBAVCODEC_VERSION_MINOR 57 -#define LIBAVCODEC_VERSION_MICRO 100 +#define LIBAVCODEC_VERSION_MICRO 101 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \