mpegvideo: dont allow last == current
authorMichael Niedermayer <michaelni@gmx.at>
Mon, 11 Mar 2013 19:19:34 +0000 (20:19 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Tue, 12 Mar 2013 02:23:53 +0000 (03:23 +0100)
this fixes deadlocks

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavcodec/mpegvideo.c

index 0628f58..9fe93bf 100644 (file)
@@ -1434,6 +1434,8 @@ static inline int pic_is_unused(MpegEncContext *s, Picture *pic)
         && pic->f.qscale_table //check if the frame has anything allocated
         && pic->period_since_free < s->avctx->thread_count)
         return 0;
+    if (pic == s->last_picture_ptr)
+        return 0;
     if (pic->f.data[0] == NULL)
         return 1;
     if (pic->needs_realloc && !(pic->reference & DELAYED_PIC_REF))
@@ -1447,7 +1449,7 @@ static int find_unused_picture(MpegEncContext *s, int shared)
 
     if (shared) {
         for (i = 0; i < MAX_PICTURE_COUNT; i++) {
-            if (s->picture[i].f.data[0] == NULL)
+            if (s->picture[i].f.data[0] == NULL && &s->picture[i] != s->last_picture_ptr)
                 return i;
         }
     } else {