[FFmpeg-cvslog] mpegvideo: set extended_data in ff_update_duplicate_context()

Janne Grunau git at videolan.org
Thu Oct 4 13:18:03 CEST 2012


ffmpeg | branch: master | Janne Grunau <janne-libav at jannau.net> | Wed Oct  3 21:41:52 2012 +0200| [1481e198251192c9801d4e7818c3c23bc217f705] | committer: Janne Grunau

mpegvideo: set extended_data in ff_update_duplicate_context()

AVFrame.extended_data has to reset to the AVFrame.data of the current
thread context after copying the frame contents.
Fixes crashes with frame-threading after 2bc0de38584.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=1481e198251192c9801d4e7818c3c23bc217f705
---

 libavcodec/mpegvideo.c |    5 +++++
 1 file changed, 5 insertions(+)

diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c
index 592b4f2..ed40c10 100644
--- a/libavcodec/mpegvideo.c
+++ b/libavcodec/mpegvideo.c
@@ -531,6 +531,7 @@ void ff_update_duplicate_context(MpegEncContext *dst, MpegEncContext *src)
 int ff_mpeg_update_thread_context(AVCodecContext *dst,
                                   const AVCodecContext *src)
 {
+    int i;
     MpegEncContext *s = dst->priv_data, *s1 = src->priv_data;
 
     if (dst == src || !s1->context_initialized)
@@ -572,6 +573,10 @@ int ff_mpeg_update_thread_context(AVCodecContext *dst,
     memcpy(&s->last_picture, &s1->last_picture,
            (char *) &s1->last_picture_ptr - (char *) &s1->last_picture);
 
+    // reset s->picture[].f.extended_data to s->picture[].f.data
+    for (i = 0; i < s->picture_count; i++)
+        s->picture[i].f.extended_data = s->picture[i].f.data;
+
     s->last_picture_ptr    = REBASE_PICTURE(s1->last_picture_ptr,    s, s1);
     s->current_picture_ptr = REBASE_PICTURE(s1->current_picture_ptr, s, s1);
     s->next_picture_ptr    = REBASE_PICTURE(s1->next_picture_ptr,    s, s1);



More information about the ffmpeg-cvslog mailing list