diff options
author | Paul B Mahol <onemda@gmail.com> | 2019-04-17 18:15:51 +0200 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2019-04-21 19:43:14 +0200 |
commit | 833ae5f4bfdc73f7b3a4852469b6a62979e3d203 (patch) | |
tree | ebf9e81bc346004ec53bf472faa2dfd515a4b174 /libavcodec/dvdec.c | |
parent | b272d5b9b6e189cb855ad393edf8524066bd0d07 (diff) | |
download | ffmpeg-833ae5f4bfdc73f7b3a4852469b6a62979e3d203.tar.gz |
avcodec/dvdec: add frame threads
Diffstat (limited to 'libavcodec/dvdec.c')
-rw-r--r-- | libavcodec/dvdec.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/libavcodec/dvdec.c b/libavcodec/dvdec.c index 7b16787e27..89864f2edc 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, }; |