summaryrefslogtreecommitdiff
path: root/doc/examples/muxing.c
diff options
context:
space:
mode:
authorSam Hocevar <sam@hocevar.net>2016-10-24 00:12:00 +0200
committerMichael Niedermayer <michael@niedermayer.cc>2016-11-23 03:28:04 +0100
commit3115550abe96de674dac42f02a0b464e137bfc20 (patch)
tree85967208c3c49f696a8a20863e10464c25de1653 /doc/examples/muxing.c
parent69f7dd3524d92bd24804a23ede2ecaf8ce4bf3c1 (diff)
doc/examples/muxing: Fix av_frame_make_writable usage
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@hocevar.net> Reviewed-by: wm4 Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'doc/examples/muxing.c')
-rw-r--r--doc/examples/muxing.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/doc/examples/muxing.c b/doc/examples/muxing.c
index f1f5bb8239..1df5912ca7 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 */