|
|
|
@ -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, |
|
|
|
|
}; |
|
|
|
|