Commit f2a581e2 authored by Michael Niedermayer's avatar Michael Niedermayer

Merge commit '05fb4c9a'

* commit '05fb4c9a':
  proresenc: Do not entangle coded_frame

Conflicts:
	libavcodec/proresenc_kostya.c
Merged-by: 's avatarMichael Niedermayer <michael@niedermayer.cc>
parents a99f0ad1 05fb4c9a
...@@ -199,6 +199,7 @@ typedef struct ProresContext { ...@@ -199,6 +199,7 @@ typedef struct ProresContext {
int linesize, int16_t *block); int linesize, int16_t *block);
FDCTDSPContext fdsp; FDCTDSPContext fdsp;
const AVFrame *pic;
int mb_width, mb_height; int mb_width, mb_height;
int mbs_per_slice; int mbs_per_slice;
int num_chroma_blocks, chroma_factor; int num_chroma_blocks, chroma_factor;
...@@ -745,7 +746,7 @@ static int estimate_alpha_plane(ProresContext *ctx, int *error, ...@@ -745,7 +746,7 @@ static int estimate_alpha_plane(ProresContext *ctx, int *error,
return bits; 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, int trellis_node, int x, int y, int mbs_per_slice,
ProresThreadData *td) ProresThreadData *td)
{ {
...@@ -767,7 +768,7 @@ static int find_slice_quant(AVCodecContext *avctx, const AVFrame *pic, ...@@ -767,7 +768,7 @@ static int find_slice_quant(AVCodecContext *avctx, const AVFrame *pic,
if (ctx->pictures_per_frame == 1) if (ctx->pictures_per_frame == 1)
line_add = 0; line_add = 0;
else 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; mbs = x + mbs_per_slice;
for (i = 0; i < ctx->num_planes; i++) { for (i = 0; i < ctx->num_planes; i++) {
...@@ -787,9 +788,9 @@ static int find_slice_quant(AVCodecContext *avctx, const AVFrame *pic, ...@@ -787,9 +788,9 @@ static int find_slice_quant(AVCodecContext *avctx, const AVFrame *pic,
pwidth = avctx->width >> 1; pwidth = avctx->width >> 1;
} }
linesize[i] = pic->linesize[i] * ctx->pictures_per_frame; linesize[i] = ctx->pic->linesize[i] * ctx->pictures_per_frame;
src = (const uint16_t*)(pic->data[i] + yp * linesize[i] + src = (const uint16_t *)(ctx->pic->data[i] + yp * linesize[i] +
line_add * pic->linesize[i]) + xp; line_add * ctx->pic->linesize[i]) + xp;
if (i < 3) { if (i < 3) {
get_slice_data(ctx, src, linesize[i], xp, yp, get_slice_data(ctx, src, linesize[i], xp, yp,
...@@ -912,7 +913,7 @@ static int find_quant_thread(AVCodecContext *avctx, void *arg, ...@@ -912,7 +913,7 @@ static int find_quant_thread(AVCodecContext *avctx, void *arg,
for (x = mb = 0; x < ctx->mb_width; x += mbs_per_slice, mb++) { for (x = mb = 0; x < ctx->mb_width; x += mbs_per_slice, mb++) {
while (ctx->mb_width - x < mbs_per_slice) while (ctx->mb_width - x < mbs_per_slice)
mbs_per_slice >>= 1; mbs_per_slice >>= 1;
q = find_slice_quant(avctx, arg, q = find_slice_quant(avctx,
(mb + 1) * TRELLIS_WIDTH, x, y, (mb + 1) * TRELLIS_WIDTH, x, y,
mbs_per_slice, td); mbs_per_slice, td);
} }
...@@ -940,6 +941,7 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, ...@@ -940,6 +941,7 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
int max_slice_size = (ctx->frame_size_upper_bound - 200) / (ctx->pictures_per_frame * ctx->slices_per_picture + 1); int max_slice_size = (ctx->frame_size_upper_bound - 200) / (ctx->pictures_per_frame * ctx->slices_per_picture + 1);
uint8_t frame_flags; uint8_t frame_flags;
ctx->pic = pic;
pkt_size = ctx->frame_size_upper_bound; pkt_size = ctx->frame_size_upper_bound;
if ((ret = ff_alloc_packet2(avctx, pkt, pkt_size + FF_MIN_BUFFER_SIZE)) < 0) if ((ret = ff_alloc_packet2(avctx, pkt, pkt_size + FF_MIN_BUFFER_SIZE)) < 0)
......
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