Commit 833ae5f4 authored by Paul B Mahol's avatar Paul B Mahol

avcodec/dvdec: add frame threads

parent b272d5b9
...@@ -49,6 +49,7 @@ ...@@ -49,6 +49,7 @@
#include "internal.h" #include "internal.h"
#include "put_bits.h" #include "put_bits.h"
#include "simple_idct.h" #include "simple_idct.h"
#include "thread.h"
typedef struct BlockInfo { typedef struct BlockInfo {
const uint32_t *factor_table; const uint32_t *factor_table;
...@@ -499,7 +500,7 @@ static int dvvideo_decode_frame(AVCodecContext *avctx, void *data, ...@@ -499,7 +500,7 @@ static int dvvideo_decode_frame(AVCodecContext *avctx, void *data,
uint8_t *buf = avpkt->data; uint8_t *buf = avpkt->data;
int buf_size = avpkt->size; int buf_size = avpkt->size;
DVVideoContext *s = avctx->priv_data; DVVideoContext *s = avctx->priv_data;
AVFrame *frame = data; ThreadFrame frame = { .f = data };
const uint8_t *vsc_pack; const uint8_t *vsc_pack;
int apt, is16_9, ret; int apt, is16_9, ret;
const AVDVProfile *sys; const AVDVProfile *sys;
...@@ -520,9 +521,9 @@ static int dvvideo_decode_frame(AVCodecContext *avctx, void *data, ...@@ -520,9 +521,9 @@ static int dvvideo_decode_frame(AVCodecContext *avctx, void *data,
s->sys = sys; s->sys = sys;
} }
s->frame = frame; s->frame = frame.f;
frame->key_frame = 1; frame.f->key_frame = 1;
frame->pict_type = AV_PICTURE_TYPE_I; frame.f->pict_type = AV_PICTURE_TYPE_I;
avctx->pix_fmt = s->sys->pix_fmt; avctx->pix_fmt = s->sys->pix_fmt;
avctx->framerate = av_inv_q(s->sys->time_base); avctx->framerate = av_inv_q(s->sys->time_base);
...@@ -539,14 +540,14 @@ static int dvvideo_decode_frame(AVCodecContext *avctx, void *data, ...@@ -539,14 +540,14 @@ static int dvvideo_decode_frame(AVCodecContext *avctx, void *data,
ff_set_sar(avctx, s->sys->sar[is16_9]); 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; return ret;
frame->interlaced_frame = 1; frame.f->interlaced_frame = 1;
frame->top_field_first = 0; frame.f->top_field_first = 0;
/* Determine the codec's field order from the packet */ /* Determine the codec's field order from the packet */
if ( *vsc_pack == dv_video_control ) { 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; s->buf = buf;
...@@ -569,6 +570,6 @@ AVCodec ff_dvvideo_decoder = { ...@@ -569,6 +570,6 @@ AVCodec ff_dvvideo_decoder = {
.priv_data_size = sizeof(DVVideoContext), .priv_data_size = sizeof(DVVideoContext),
.init = dvvideo_decode_init, .init = dvvideo_decode_init,
.decode = dvvideo_decode_frame, .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, .max_lowres = 3,
}; };
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment