]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/tscc.c
Merge remote branch 'qatar/master'
[ffmpeg] / libavcodec / tscc.c
index d200c8aabd3ef719f759b3809e6a9317a993a989..e12b9a31fccc6bde1ddf7c3dcfe49ed61270b897 100644 (file)
@@ -20,7 +20,7 @@
  */
 
 /**
- * @file libavcodec/tscc.c
+ * @file
  * TechSmith Camtasia decoder
  *
  * Fourcc: TSCC
@@ -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){
@@ -197,7 +202,7 @@ static av_cold int decode_end(AVCodecContext *avctx)
     return 0;
 }
 
-AVCodec tscc_decoder = {
+AVCodec ff_tscc_decoder = {
         "camtasia",
         AVMEDIA_TYPE_VIDEO,
         CODEC_ID_TSCC,