X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fhqx.c;h=bc24ba91d12a6fb66bb43da46589dead6e2639da;hb=8103c595223613c08e44bcf56ae7098d3c31be8b;hp=1bc123e6591792559943556b0032b2b7826e23ef;hpb=d14a1bd8e4705ffb306ee049e041e83978f0c89d;p=ffmpeg diff --git a/libavcodec/hqx.c b/libavcodec/hqx.c index 1bc123e6591..bc24ba91d12 100644 --- a/libavcodec/hqx.c +++ b/libavcodec/hqx.c @@ -27,6 +27,7 @@ #include "canopus.h" #include "get_bits.h" #include "internal.h" +#include "thread.h" #include "hqx.h" #include "hqxdsp.h" @@ -405,6 +406,7 @@ static int hqx_decode_frame(AVCodecContext *avctx, void *data, int *got_picture_ptr, AVPacket *avpkt) { HQXContext *ctx = avctx->priv_data; + ThreadFrame frame = { .f = data }; uint8_t *src = avpkt->data; uint32_t info_tag; int data_start; @@ -491,7 +493,7 @@ static int hqx_decode_frame(AVCodecContext *avctx, void *data, return AVERROR_INVALIDDATA; } - ret = ff_get_buffer(avctx, ctx->pic, 0); + ret = ff_thread_get_buffer(avctx, &frame, 0); if (ret < 0) return ret; @@ -510,6 +512,9 @@ static av_cold int hqx_decode_close(AVCodecContext *avctx) int i; HQXContext *ctx = avctx->priv_data; + if (avctx->internal->is_copy) + return 0; + ff_free_vlc(&ctx->cbp_vlc); for (i = 0; i < 3; i++) { ff_free_vlc(&ctx->dc_vlc[i]); @@ -536,7 +541,8 @@ AVCodec ff_hqx_decoder = { .init = hqx_decode_init, .decode = hqx_decode_frame, .close = hqx_decode_close, - .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_SLICE_THREADS, + .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_SLICE_THREADS | + AV_CODEC_CAP_FRAME_THREADS, .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, };