diff options
author | Clément Bœsch <u@pkh.me> | 2017-03-23 11:33:27 +0100 |
---|---|---|
committer | Clément Bœsch <u@pkh.me> | 2017-03-23 11:33:27 +0100 |
commit | 5f044d23726375f451463ae443bb9a33827374be (patch) | |
tree | 05e245519ad79c3a495cdb098651e83c737d06b2 /libavcodec/rscc.c | |
parent | 7b3a3e6276c42e6974cba2e9f36d140b8d760b0b (diff) | |
parent | c19830aa2c19f9713b612f7e2fdb437df91ba266 (diff) | |
download | ffmpeg-5f044d23726375f451463ae443bb9a33827374be.tar.gz |
Merge commit 'c19830aa2c19f9713b612f7e2fdb437df91ba266'
* commit 'c19830aa2c19f9713b612f7e2fdb437df91ba266':
rscc: Support palette format
See 11777eb8142117864bff0c8060f17b4089434143
Merged-by: Clément Bœsch <u@pkh.me>
Diffstat (limited to 'libavcodec/rscc.c')
-rw-r--r-- | libavcodec/rscc.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/libavcodec/rscc.c b/libavcodec/rscc.c index f13706cd75..ebacd3f62c 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: BGRA, BGR24, RGB555, PAL8 + * Supports: PAL8, BGRA, BGR24, RGB555 */ #include <stdint.h> @@ -58,7 +58,8 @@ typedef struct RsccContext { Tile *tiles; unsigned int tiles_size; int component_size; - uint32_t pal[AVPALETTE_COUNT]; + + uint8_t palette[AVPALETTE_SIZE]; /* zlib interaction */ uint8_t *inflated_buf; @@ -309,19 +310,22 @@ static int rscc_decode_frame(AVCodecContext *avctx, void *data, } else { frame->pict_type = AV_PICTURE_TYPE_P; } + + /* Palette handling */ if (avctx->pix_fmt == AV_PIX_FMT_PAL8) { int size; - const uint8_t *pal = av_packet_get_side_data(avpkt, - AV_PKT_DATA_PALETTE, - &size); - if (pal && size == AVPALETTE_SIZE) { + const uint8_t *palette = av_packet_get_side_data(avpkt, + AV_PKT_DATA_PALETTE, + &size); + if (palette && size == AVPALETTE_SIZE) { frame->palette_has_changed = 1; - memcpy(ctx->pal, pal, AVPALETTE_SIZE); - } else if (pal) { + memcpy(ctx->palette, palette, AVPALETTE_SIZE); + } else if (palette) { av_log(avctx, AV_LOG_ERROR, "Palette size %d is wrong\n", size); } - memcpy (frame->data[1], ctx->pal, AVPALETTE_SIZE); + memcpy (frame->data[1], ctx->palette, AVPALETTE_SIZE); } + *got_frame = 1; ret = avpkt->size; |