diff options
author | Kostya Shishkov <kostya.shishkov@gmail.com> | 2011-04-09 15:49:51 +0200 |
---|---|---|
committer | Luca Barbato <lu_zero@gentoo.org> | 2011-04-15 18:02:05 +0200 |
commit | 2d8591c27e2dc582a7020e2580e16278dbfbddff (patch) | |
tree | 5e251cc6e974c0b9e2c99b3f6e622b4983e4941a /libavcodec/8bps.c | |
parent | 4de339e219908ff44cbb1d823edeeead3b8facda (diff) | |
download | ffmpeg-2d8591c27e2dc582a7020e2580e16278dbfbddff.tar.gz |
make containers pass palette change in AVPacket
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
Diffstat (limited to 'libavcodec/8bps.c')
-rw-r--r-- | libavcodec/8bps.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/libavcodec/8bps.c b/libavcodec/8bps.c index 1c6d4068b0..055715fde5 100644 --- a/libavcodec/8bps.c +++ b/libavcodec/8bps.c @@ -50,6 +50,8 @@ typedef struct EightBpsContext { unsigned char planes; unsigned char planemap[4]; + + uint32_t pal[256]; } EightBpsContext; @@ -129,13 +131,16 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPac } } - if (avctx->palctrl) { - memcpy (c->pic.data[1], avctx->palctrl->palette, AVPALETTE_SIZE); - if (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) { c->pic.palette_has_changed = 1; - avctx->palctrl->palette_changed = 0; - } else - c->pic.palette_has_changed = 0; + memcpy(c->pal, pal, AVPALETTE_SIZE); + } + + memcpy (c->pic.data[1], c->pal, AVPALETTE_SIZE); } *data_size = sizeof(AVFrame); @@ -164,10 +169,6 @@ static av_cold int decode_init(AVCodecContext *avctx) avctx->pix_fmt = PIX_FMT_PAL8; c->planes = 1; c->planemap[0] = 0; // 1st plane is palette indexes - if (avctx->palctrl == NULL) { - av_log(avctx, AV_LOG_ERROR, "Error: PAL8 format but no palette from demuxer.\n"); - return -1; - } break; case 24: avctx->pix_fmt = avctx->get_format(avctx, pixfmt_rgb24); |