Browse Source

avcodec/snow: ensure current_picture is writable before modifying its data

current_picture was not writable here because a reference existed in
at least avctx->coded_frame, and potentially elsewhere if the caller
created new ones from it.

Signed-off-by: James Almer <jamrial@gmail.com>
tags/n4.4
James Almer 5 years ago
parent
commit
1ee3c984b9
1 changed files with 12 additions and 1 deletions
  1. +12
    -1
      libavcodec/snowenc.c

+ 12
- 1
libavcodec/snowenc.c View File

@@ -1625,10 +1625,22 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
s->lambda = 0;
}//else keep previous frame's qlog until after motion estimation

#if FF_API_CODED_FRAME
FF_DISABLE_DEPRECATION_WARNINGS
av_frame_unref(avctx->coded_frame);
FF_ENABLE_DEPRECATION_WARNINGS
#endif

if (s->current_picture->data[0]) {
int w = s->avctx->width;
int h = s->avctx->height;

#if FF_API_CODED_FRAME
ret = av_frame_make_writable(s->current_picture);
if (ret < 0)
return ret;
#endif

s->mpvencdsp.draw_edges(s->current_picture->data[0],
s->current_picture->linesize[0], w , h ,
EDGE_WIDTH , EDGE_WIDTH , EDGE_TOP | EDGE_BOTTOM);
@@ -1646,7 +1658,6 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
ff_snow_frame_start(s);
#if FF_API_CODED_FRAME
FF_DISABLE_DEPRECATION_WARNINGS
av_frame_unref(avctx->coded_frame);
ret = av_frame_ref(avctx->coded_frame, s->current_picture);
FF_ENABLE_DEPRECATION_WARNINGS
#endif


Loading…
Cancel
Save