h264: don't drop B-frames after next keyframe on POC reset.
authorRonald S. Bultje <rsbultje@gmail.com>
Mon, 12 Dec 2011 20:02:58 +0000 (12:02 -0800)
committerRonald S. Bultje <rsbultje@gmail.com>
Fri, 16 Dec 2011 19:24:18 +0000 (11:24 -0800)
The keyframe after a POC reset may not be the first to be returned to
the user. Therefore, don't reset the expected next POC once we return
a keyframe to the user, but once we know that the next frame in the
return-queue is a keyframe.

libavcodec/h264.c

index 109a109..77acd71 100644 (file)
@@ -1530,7 +1530,11 @@ static void decode_postinit(H264Context *h, int setup_finished){
                 h->next_outputed_poc = INT_MIN;
             }
         } else {
                 h->next_outputed_poc = INT_MIN;
             }
         } else {
-            h->next_outputed_poc = out->poc;
+            if (out_idx == 0 && pics > 1 && h->delayed_pic[0]->f.key_frame) {
+                h->next_outputed_poc = INT_MIN;
+            } else {
+                h->next_outputed_poc = out->poc;
+            }
         }
         h->mmco_reset = 0;
     }else{
         }
         h->mmco_reset = 0;
     }else{