h264parse: Do not trigger caps update if we only have PPS updates
authorEdward Hervey <edward@collabora.com>
Sat, 3 Aug 2013 12:20:47 +0000 (14:20 +0200)
committerEdward Hervey <edward@collabora.com>
Sun, 4 Aug 2013 10:08:57 +0000 (12:08 +0200)
Updating caps results in downstream elements potentially reconfiguring themselves
(such as decoders). If we do this in the middle of keyframes, we would result
in those elements being reconfigured and handling garbage until the next keyframe.

Instead of this only send (potentially) new codec_data when we have *both* SPS and
PPS.

https://bugzilla.gnome.org/show_bug.cgi?id=705333

gst/videoparsers/gsth264parse.c

index f0d6e87..0a2f69d 100644 (file)
@@ -509,8 +509,10 @@ gst_h264_parse_process_nal (GstH264Parse * h264parse, GstH264NalUnit * nalu)
         GST_WARNING_OBJECT (h264parse, "failed to parse PPS:");
 
       /* parameters might have changed, force caps check */
-      GST_DEBUG_OBJECT (h264parse, "triggering src caps check");
-      h264parse->update_caps = TRUE;
+      if (!h264parse->have_pps) {
+        GST_DEBUG_OBJECT (h264parse, "triggering src caps check");
+        h264parse->update_caps = TRUE;
+      }
       h264parse->have_pps = TRUE;
       if (h264parse->push_codec && h264parse->have_sps) {
         /* SPS and PPS found in stream before the first pre_push_frame, no need