X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Ftscc.c;h=e12b9a31fccc6bde1ddf7c3dcfe49ed61270b897;hb=6d6b0c96fdc576f4643e3d4066e5ebebdb693ade;hp=9de53a726763719f681f420e54e94c40491aefed;hpb=c0e51ec9c625ccd7b3a8c74754145e6c023a3848;p=ffmpeg diff --git a/libavcodec/tscc.c b/libavcodec/tscc.c index 9de53a72676..e12b9a31fcc 100644 --- a/libavcodec/tscc.c +++ b/libavcodec/tscc.c @@ -60,6 +60,8 @@ typedef struct TsccContext { unsigned char* decomp_buf; int height; z_stream zstream; + + uint32_t pal[256]; } CamtasiaContext; /* @@ -111,11 +113,13 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPac /* make the palette available on the way out */ if (c->avctx->pix_fmt == PIX_FMT_PAL8) { - memcpy(c->pic.data[1], c->avctx->palctrl->palette, AVPALETTE_SIZE); - if (c->avctx->palctrl->palette_changed) { + const uint8_t *pal = av_packet_get_side_data(avpkt, AV_PKT_DATA_PALETTE, NULL); + + if (pal) { c->pic.palette_has_changed = 1; - c->avctx->palctrl->palette_changed = 0; + memcpy(c->pal, pal, AVPALETTE_SIZE); } + memcpy(c->pic.data[1], c->pal, AVPALETTE_SIZE); } *data_size = sizeof(AVFrame); @@ -141,6 +145,7 @@ static av_cold int decode_init(AVCodecContext *avctx) c->height = avctx->height; + avcodec_get_frame_defaults(&c->pic); // Needed if zlib unused or init aborted before inflateInit memset(&(c->zstream), 0, sizeof(z_stream)); switch(avctx->bits_per_coded_sample){