diff options
author | Paul B Mahol <onemda@gmail.com> | 2017-04-08 12:11:39 +0200 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2017-04-09 10:50:11 +0200 |
commit | 20f7872d9903120ca3609a1e3ad973132bd686cc (patch) | |
tree | d95404bf66b5565768542834661dbda933e302c8 | |
parent | 24d9b0c29c9de41239c78d2c0b22fa791326bc50 (diff) | |
download | ffmpeg-20f7872d9903120ca3609a1e3ad973132bd686cc.tar.gz |
avcodec/hqx: add support for frame threads
Signed-off-by: Paul B Mahol <onemda@gmail.com>
-rw-r--r-- | libavcodec/hqx.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/libavcodec/hqx.c b/libavcodec/hqx.c index 1bc123e659..bc24ba91d1 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, }; |