aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/dvdec.c
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2019-04-17 18:15:51 +0200
committerPaul B Mahol <onemda@gmail.com>2019-04-21 19:43:14 +0200
commit833ae5f4bfdc73f7b3a4852469b6a62979e3d203 (patch)
treeebf9e81bc346004ec53bf472faa2dfd515a4b174 /libavcodec/dvdec.c
parentb272d5b9b6e189cb855ad393edf8524066bd0d07 (diff)
downloadffmpeg-833ae5f4bfdc73f7b3a4852469b6a62979e3d203.tar.gz
avcodec/dvdec: add frame threads
Diffstat (limited to 'libavcodec/dvdec.c')
-rw-r--r--libavcodec/dvdec.c19
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,
};