[FFmpeg-cvslog] avcodec/proresenc_kostya: fix coded_frame handling

Clément Bœsch git at videolan.org
Mon Mar 2 22:56:14 CET 2015


ffmpeg | branch: master | Clément Bœsch <u at pkh.me> | Mon Mar  2 20:55:16 2015 +0100| [da2a49ac9ab55c857fe4116c0996728c49e2be77] | committer: Clément Bœsch

avcodec/proresenc_kostya: fix coded_frame handling

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=da2a49ac9ab55c857fe4116c0996728c49e2be77
---

 libavcodec/proresenc_kostya.c |   12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/libavcodec/proresenc_kostya.c b/libavcodec/proresenc_kostya.c
index 59f73fb..440cc8b 100644
--- a/libavcodec/proresenc_kostya.c
+++ b/libavcodec/proresenc_kostya.c
@@ -914,7 +914,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, arg,
                              (mb + 1) * TRELLIS_WIDTH, x, y,
                              mbs_per_slice, td);
     }
@@ -942,10 +942,6 @@ 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);
     uint8_t frame_flags;
 
-    *avctx->coded_frame           = *pic;
-    avctx->coded_frame->pict_type = AV_PICTURE_TYPE_I;
-    avctx->coded_frame->key_frame = 1;
-
     pkt_size = ctx->frame_size_upper_bound;
 
     if ((ret = ff_alloc_packet2(avctx, pkt, pkt_size + FF_MIN_BUFFER_SIZE)) < 0)
@@ -1006,7 +1002,7 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
 
         // slices
         if (!ctx->force_quant) {
-            ret = avctx->execute2(avctx, find_quant_thread, NULL, NULL,
+            ret = avctx->execute2(avctx, find_quant_thread, (void*)pic, NULL,
                                   ctx->mb_height);
             if (ret)
                 return ret;
@@ -1096,7 +1092,7 @@ static av_cold int encode_close(AVCodecContext *avctx)
     ProresContext *ctx = avctx->priv_data;
     int i;
 
-    av_freep(&avctx->coded_frame);
+    av_frame_free(&avctx->coded_frame);
 
     if (ctx->tdata) {
         for (i = 0; i < avctx->thread_count; i++)
@@ -1134,6 +1130,8 @@ static av_cold int encode_init(AVCodecContext *avctx)
     avctx->coded_frame = av_frame_alloc();
     if (!avctx->coded_frame)
         return AVERROR(ENOMEM);
+    avctx->coded_frame->pict_type = AV_PICTURE_TYPE_I;
+    avctx->coded_frame->key_frame = 1;
 
     ctx->fdct      = prores_fdct;
     ctx->scantable = interlaced ? ff_prores_interlaced_scan



More information about the ffmpeg-cvslog mailing list