From 833ae5f4bfdc73f7b3a4852469b6a62979e3d203 Mon Sep 17 00:00:00 2001 From: Paul B Mahol Date: Wed, 17 Apr 2019 18:15:51 +0200 Subject: avcodec/dvdec: add frame threads --- libavcodec/dvdec.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'libavcodec/dvdec.c') diff --git a/libavcodec/dvdec.c b/libavcodec/dvdec.c index 7b16787..89864f2 100644 --- a/libavcodec/dvdec.c +++ b/libavcodec/dvdec.c @@ -49,6 +49,7 @@ #include "internal.h" #include "put_bits.h" #include "simple_idct.h" +#include "thread.h" typedef struct BlockInfo { const uint32_t *factor_table; @@ -499,7 +500,7 @@ static int dvvideo_decode_frame(AVCodecContext *avctx, void *data, uint8_t *buf = avpkt->data; int buf_size = avpkt->size; DVVideoContext *s = avctx->priv_data; - AVFrame *frame = data; + ThreadFrame frame = { .f = data }; const uint8_t *vsc_pack; int apt, is16_9, ret; const AVDVProfile *sys; @@ -520,9 +521,9 @@ static int dvvideo_decode_frame(AVCodecContext *avctx, void *data, s->sys = sys; } - s->frame = frame; - frame->key_frame = 1; - frame->pict_type = AV_PICTURE_TYPE_I; + s->frame = frame.f; + frame.f->key_frame = 1; + frame.f->pict_type = AV_PICTURE_TYPE_I; avctx->pix_fmt = s->sys->pix_fmt; avctx->framerate = av_inv_q(s->sys->time_base); @@ -539,14 +540,14 @@ static int dvvideo_decode_frame(AVCodecContext *avctx, void *data, ff_set_sar(avctx, s->sys->sar[is16_9]); } - if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) + if ((ret = ff_thread_get_buffer(avctx, &frame, 0)) < 0) return ret; - frame->interlaced_frame = 1; - frame->top_field_first = 0; + frame.f->interlaced_frame = 1; + frame.f->top_field_first = 0; /* Determine the codec's field order from the packet */ if ( *vsc_pack == dv_video_control ) { - frame->top_field_first = !(vsc_pack[3] & 0x40); + frame.f->top_field_first = !(vsc_pack[3] & 0x40); } s->buf = buf; @@ -569,6 +570,6 @@ AVCodec ff_dvvideo_decoder = { .priv_data_size = sizeof(DVVideoContext), .init = dvvideo_decode_init, .decode = dvvideo_decode_frame, - .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_SLICE_THREADS, + .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | AV_CODEC_CAP_SLICE_THREADS, .max_lowres = 3, }; -- cgit v1.1