ff_dsputil_init(&ctx->dsp, avctx);
ff_proresdsp_init(&ctx->prodsp, avctx);
- avctx->coded_frame = &ctx->frame;
- ctx->frame.type = AV_PICTURE_TYPE_I;
- ctx->frame.key_frame = 1;
-
ff_init_scantable_permutation(idct_permutation,
ctx->prodsp.idct_permutation_type);
ctx->scan = ctx->progressive_scan; // permuted
} else {
ctx->scan = ctx->interlaced_scan; // permuted
- ctx->frame.interlaced_frame = 1;
- ctx->frame.top_field_first = ctx->frame_type == 1;
+ ctx->frame->interlaced_frame = 1;
+ ctx->frame->top_field_first = ctx->frame_type == 1;
}
avctx->pix_fmt = (buf[12] & 0xC0) == 0xC0 ? AV_PIX_FMT_YUV444P10 : AV_PIX_FMT_YUV422P10;
ProresContext *ctx = avctx->priv_data;
SliceContext *slice = &ctx->slices[jobnr];
const uint8_t *buf = slice->data;
- AVFrame *pic = avctx->coded_frame;
+ AVFrame *pic = ctx->frame;
int i, hdr_size, qscale, log2_chroma_blocks_per_mb;
int luma_stride, chroma_stride;
int y_data_size, u_data_size, v_data_size;
dest_u = pic->data[1] + (slice->mb_y << 4) * chroma_stride + (slice->mb_x << mb_x_shift);
dest_v = pic->data[2] + (slice->mb_y << 4) * chroma_stride + (slice->mb_x << mb_x_shift);
- if (ctx->frame_type && ctx->first_field ^ ctx->frame.top_field_first) {
+ if (ctx->frame_type && ctx->first_field ^ ctx->frame->top_field_first) {
dest_y += pic->linesize[0];
dest_u += pic->linesize[1];
dest_v += pic->linesize[2];
AVPacket *avpkt)
{
ProresContext *ctx = avctx->priv_data;
- AVFrame *frame = avctx->coded_frame;
+ AVFrame *frame = data;
const uint8_t *buf = avpkt->data;
int buf_size = avpkt->size;
int frame_hdr_size, pic_size;
return -1;
}
+ ctx->frame = frame;
+ ctx->frame->pict_type = AV_PICTURE_TYPE_I;
+ ctx->frame->key_frame = 1;
ctx->first_field = 1;
buf += 8;
buf += frame_hdr_size;
buf_size -= frame_hdr_size;
- if (frame->data[0])
- avctx->release_buffer(avctx, frame);
-
- if (ff_get_buffer(avctx, frame) < 0)
+ if (ff_get_buffer(avctx, frame, 0) < 0)
return -1;
decode_picture:
}
*got_frame = 1;
- *(AVFrame*)data = *frame;
return avpkt->size;
}
{
ProresContext *ctx = avctx->priv_data;
- AVFrame *frame = avctx->coded_frame;
- if (frame->data[0])
- avctx->release_buffer(avctx, frame);
av_freep(&ctx->slices);
return 0;