[FFmpeg-devel] [PATCH] doc/examples/muxing: Fix av_frame_make_writable usage
wm4
nfxjfg at googlemail.com
Wed Nov 23 03:09:14 EET 2016
On Mon, 24 Oct 2016 00:12:00 +0200
Sam Hocevar <sam at 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 <sam at 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.
More information about the ffmpeg-devel
mailing list