|
|
@@ -195,6 +195,7 @@ typedef struct ProresContext { |
|
|
|
int linesize, int16_t *block); |
|
|
|
FDCTDSPContext fdsp; |
|
|
|
|
|
|
|
const AVFrame *pic; |
|
|
|
int mb_width, mb_height; |
|
|
|
int mbs_per_slice; |
|
|
|
int num_chroma_blocks, chroma_factor; |
|
|
@@ -743,7 +744,7 @@ static int estimate_alpha_plane(ProresContext *ctx, int *error, |
|
|
|
return bits; |
|
|
|
} |
|
|
|
|
|
|
|
static int find_slice_quant(AVCodecContext *avctx, const AVFrame *pic, |
|
|
|
static int find_slice_quant(AVCodecContext *avctx, |
|
|
|
int trellis_node, int x, int y, int mbs_per_slice, |
|
|
|
ProresThreadData *td) |
|
|
|
{ |
|
|
@@ -765,7 +766,7 @@ static int find_slice_quant(AVCodecContext *avctx, const AVFrame *pic, |
|
|
|
if (ctx->pictures_per_frame == 1) |
|
|
|
line_add = 0; |
|
|
|
else |
|
|
|
line_add = ctx->cur_picture_idx ^ !pic->top_field_first; |
|
|
|
line_add = ctx->cur_picture_idx ^ !ctx->pic->top_field_first; |
|
|
|
mbs = x + mbs_per_slice; |
|
|
|
|
|
|
|
for (i = 0; i < ctx->num_planes; i++) { |
|
|
@@ -785,9 +786,9 @@ static int find_slice_quant(AVCodecContext *avctx, const AVFrame *pic, |
|
|
|
pwidth = avctx->width >> 1; |
|
|
|
} |
|
|
|
|
|
|
|
linesize[i] = pic->linesize[i] * ctx->pictures_per_frame; |
|
|
|
src = (const uint16_t*)(pic->data[i] + yp * linesize[i] + |
|
|
|
line_add * pic->linesize[i]) + xp; |
|
|
|
linesize[i] = ctx->pic->linesize[i] * ctx->pictures_per_frame; |
|
|
|
src = (const uint16_t *)(ctx->pic->data[i] + yp * linesize[i] + |
|
|
|
line_add * ctx->pic->linesize[i]) + xp; |
|
|
|
|
|
|
|
if (i < 3) { |
|
|
|
get_slice_data(ctx, src, linesize[i], xp, yp, |
|
|
@@ -910,7 +911,7 @@ static int find_quant_thread(AVCodecContext *avctx, void *arg, |
|
|
|
for (x = mb = 0; x < ctx->mb_width; x += mbs_per_slice, mb++) { |
|
|
|
while (ctx->mb_width - x < mbs_per_slice) |
|
|
|
mbs_per_slice >>= 1; |
|
|
|
q = find_slice_quant(avctx, avctx->coded_frame, |
|
|
|
q = find_slice_quant(avctx, |
|
|
|
(mb + 1) * TRELLIS_WIDTH, x, y, |
|
|
|
mbs_per_slice, td); |
|
|
|
} |
|
|
@@ -937,7 +938,7 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, |
|
|
|
int pkt_size, ret, max_slice_size = 0; |
|
|
|
uint8_t frame_flags; |
|
|
|
|
|
|
|
*avctx->coded_frame = *pic; |
|
|
|
ctx->pic = pic; |
|
|
|
avctx->coded_frame->pict_type = AV_PICTURE_TYPE_I; |
|
|
|
avctx->coded_frame->key_frame = 1; |
|
|
|
|
|
|
|