X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Ftscc.c;h=043d78d0188031e59f978a95cd4654dfda2e8d42;hb=bd96c54fe4819b3ca9a975e2083d67f4443c559b;hp=31e7caeeebe7a00c4b41300399e1848c46035887;hpb=ce47f1589e9f5a6cf8372a269bdd862ff0cc3f91;p=ffmpeg diff --git a/libavcodec/tscc.c b/libavcodec/tscc.c index 31e7caeeebe..043d78d0188 100644 --- a/libavcodec/tscc.c +++ b/libavcodec/tscc.c @@ -38,6 +38,7 @@ #include #include "avcodec.h" +#include "decode.h" #include "internal.h" #include "msrledec.h" @@ -72,15 +73,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, int palette_has_changed = 0; if (c->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) { - palette_has_changed = 1; - memcpy(c->pal, pal, AVPALETTE_SIZE); - } else if (pal) { - av_log(avctx, AV_LOG_ERROR, "Palette size %d is wrong\n", size); - } + palette_has_changed = ff_copy_palette(c->pal, avpkt, avctx); } ret = inflateReset(&c->zstream); @@ -103,7 +96,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, return AVERROR_UNKNOWN; } - if ((ret = ff_reget_buffer(avctx, frame)) < 0) + if ((ret = ff_reget_buffer(avctx, frame, 0)) < 0) return ret; if (ret != Z_DATA_ERROR) { @@ -169,6 +162,8 @@ static av_cold int decode_init(AVCodecContext *avctx) } c->frame = av_frame_alloc(); + if (!c->frame) + return AVERROR(ENOMEM); return 0; } @@ -185,7 +180,7 @@ static av_cold int decode_end(AVCodecContext *avctx) return 0; } -AVCodec ff_tscc_decoder = { +const AVCodec ff_tscc_decoder = { .name = "camtasia", .long_name = NULL_IF_CONFIG_SMALL("TechSmith Screen Capture Codec"), .type = AVMEDIA_TYPE_VIDEO, @@ -195,4 +190,5 @@ AVCodec ff_tscc_decoder = { .close = decode_end, .decode = decode_frame, .capabilities = AV_CODEC_CAP_DR1, + .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, };