avcodec/roqvideoenc: Allocate and reference coded_frame correctly

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
pull/113/head^2
Michael Niedermayer 10 years ago
parent 6c9537b807
commit 96e7c9cbfc
  1. 7
      libavcodec/roqvideoenc.c

@ -960,7 +960,8 @@ static int roq_encode_video(RoqContext *enc)
reconstruct_and_encode_image(enc, tempData, enc->width, enc->height, reconstruct_and_encode_image(enc, tempData, enc->width, enc->height,
enc->width*enc->height/64); enc->width*enc->height/64);
enc->avctx->coded_frame = enc->current_frame; av_frame_unref(enc->avctx->coded_frame);
av_frame_ref(enc->avctx->coded_frame, enc->current_frame);
/* Rotate frame history */ /* Rotate frame history */
FFSWAP(AVFrame *, enc->current_frame, enc->last_frame); FFSWAP(AVFrame *, enc->current_frame, enc->last_frame);
@ -981,6 +982,7 @@ static av_cold int roq_encode_end(AVCodecContext *avctx)
av_frame_free(&enc->current_frame); av_frame_free(&enc->current_frame);
av_frame_free(&enc->last_frame); av_frame_free(&enc->last_frame);
av_frame_free(&enc->avctx->coded_frame);
av_freep(&enc->tmpData); av_freep(&enc->tmpData);
av_freep(&enc->this_motion4); av_freep(&enc->this_motion4);
@ -1019,7 +1021,8 @@ static av_cold int roq_encode_init(AVCodecContext *avctx)
enc->last_frame = av_frame_alloc(); enc->last_frame = av_frame_alloc();
enc->current_frame = av_frame_alloc(); enc->current_frame = av_frame_alloc();
if (!enc->last_frame || !enc->current_frame) { avctx->coded_frame = av_frame_alloc();
if (!enc->last_frame || !enc->current_frame || !avctx->coded_frame) {
roq_encode_end(avctx); roq_encode_end(avctx);
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
} }

Loading…
Cancel
Save