diff options
author | Vittorio Giovara <vittorio.giovara@gmail.com> | 2015-07-15 18:41:11 +0100 |
---|---|---|
committer | Vittorio Giovara <vittorio.giovara@gmail.com> | 2015-07-20 14:13:42 +0100 |
commit | 05fb4c9aaf84b59f8ab1ce8d4c0f49dd12113024 (patch) | |
tree | 2ebd8ae9a99a69e75feefc2abb645aad78c25071 /libavcodec | |
parent | 91767360d86ac786571593ab11c7291010ab3829 (diff) | |
download | ffmpeg-05fb4c9aaf84b59f8ab1ce8d4c0f49dd12113024.tar.gz |
proresenc: Do not entangle coded_frame
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/proresenc.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/libavcodec/proresenc.c b/libavcodec/proresenc.c index 3a5524aa4c..b71a7db9b4 100644 --- a/libavcodec/proresenc.c +++ b/libavcodec/proresenc.c @@ -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; |