h265parse: Don't add latency when not needed
authorNicolas Dufresne <nicolas.dufresne@collabora.com>
Wed, 3 Oct 2018 20:43:14 +0000 (16:43 -0400)
committerNicolas Dufresne <nicolas@ndufresne.ca>
Wed, 15 Apr 2020 14:10:16 +0000 (14:10 +0000)
We no longer add latency when doing AU->AU, AU->NAL and NAL->NAL
parsing.

gst/videoparsers/gsth265parse.c

index 0aa3663..c1f094f 100644 (file)
@@ -2065,7 +2065,7 @@ gst_h265_parse_update_src_caps (GstH265Parse * h265parse, GstCaps * caps)
       gint fps_num = h265parse->fps_num;
       gint fps_den = h265parse->fps_den;
       gint width, height;
-      GstClockTime latency;
+      GstClockTime latency = 0;
 
       caps = gst_caps_copy (sink_caps);
 
@@ -2088,7 +2088,7 @@ gst_h265_parse_update_src_caps (GstH265Parse * h265parse, GstCaps * caps)
         gst_structure_get_fraction (s, "framerate", &fps_num, &fps_den);
 
       /* but not necessarily or reliably this */
-      if (fps_num > 0 && fps_den > 0) {
+      if (fps_den > 0) {
         GstStructure *s2;
         GstClockTime val;
 
@@ -2102,7 +2102,15 @@ gst_h265_parse_update_src_caps (GstH265Parse * h265parse, GstCaps * caps)
             fps_num, fps_den, 0, 0);
         val = sps->profile_tier_level.interlaced_source_flag ? GST_SECOND / 2 :
             GST_SECOND;
-        latency = gst_util_uint64_scale (val, fps_den, fps_num);
+
+        /* If we know the frame duration, and if we are not in one of the zero
+         * latency pattern, add one frame of latency */
+        if (fps_num > 0 &&
+            h265parse->in_align != GST_H265_PARSE_ALIGN_AU &&
+            !(h265parse->in_align == GST_H265_PARSE_ALIGN_NAL &&
+                h265parse->align == GST_H265_PARSE_ALIGN_NAL))
+          latency = gst_util_uint64_scale (val, fps_den, fps_num);
+
         gst_base_parse_set_latency (GST_BASE_PARSE (h265parse), latency,
             latency);
       }