On Mon, 24 Oct 2016 00:12:00 +0200 Sam Hocevar <s...@hocevar.net> wrote:
> This patch moves the av_frame_make_writable() call from fill_yuv_image > to get_video_frame so that its argument can be the actual frame that > will be sent to the encoder. > > This fixes data corruption issues in codecs that keep references on > one or several previous frames. > > Signed-off-by: Sam Hocevar <s...@hocevar.net> > --- > doc/examples/muxing.c | 15 ++++++--------- > 1 file changed, 6 insertions(+), 9 deletions(-) > > diff --git a/doc/examples/muxing.c b/doc/examples/muxing.c > index f1f5bb8..1df5912 100644 > --- a/doc/examples/muxing.c > +++ b/doc/examples/muxing.c > @@ -440,15 +440,7 @@ static void open_video(AVFormatContext *oc, AVCodec > *codec, OutputStream *ost, A > static void fill_yuv_image(AVFrame *pict, int frame_index, > int width, int height) > { > - int x, y, i, ret; > - > - /* when we pass a frame to the encoder, it may keep a reference to it > - * internally; > - * make sure we do not overwrite it here > - */ > - ret = av_frame_make_writable(pict); > - if (ret < 0) > - exit(1); > + int x, y, i; > > i = frame_index; > > @@ -475,6 +467,11 @@ static AVFrame *get_video_frame(OutputStream *ost) > STREAM_DURATION, (AVRational){ 1, 1 }) >= 0) > return NULL; > > + /* when we pass a frame to the encoder, it may keep a reference to it > + * internally; make sure we do not overwrite it here */ > + if (av_frame_make_writable(ost->frame) < 0) > + exit(1); > + > if (c->pix_fmt != AV_PIX_FMT_YUV420P) { > /* as we only generate a YUV420P picture, we must convert it > * to the codec pixel format if needed */ LGTM, but I'm not in a position to push now. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel