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>
This commit is contained in:
@@ -1625,10 +1625,22 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
|
|||||||
s->lambda = 0;
|
s->lambda = 0;
|
||||||
}//else keep previous frame's qlog until after motion estimation
|
}//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]) {
|
if (s->current_picture->data[0]) {
|
||||||
int w = s->avctx->width;
|
int w = s->avctx->width;
|
||||||
int h = s->avctx->height;
|
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->mpvencdsp.draw_edges(s->current_picture->data[0],
|
||||||
s->current_picture->linesize[0], w , h ,
|
s->current_picture->linesize[0], w , h ,
|
||||||
EDGE_WIDTH , EDGE_WIDTH , EDGE_TOP | EDGE_BOTTOM);
|
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);
|
ff_snow_frame_start(s);
|
||||||
#if FF_API_CODED_FRAME
|
#if FF_API_CODED_FRAME
|
||||||
FF_DISABLE_DEPRECATION_WARNINGS
|
FF_DISABLE_DEPRECATION_WARNINGS
|
||||||
av_frame_unref(avctx->coded_frame);
|
|
||||||
ret = av_frame_ref(avctx->coded_frame, s->current_picture);
|
ret = av_frame_ref(avctx->coded_frame, s->current_picture);
|
||||||
FF_ENABLE_DEPRECATION_WARNINGS
|
FF_ENABLE_DEPRECATION_WARNINGS
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user