omxvideo: check difference between frame and requested ts
authorGuillaume Desmottes <guillaume.desmottes@collabora.com>
Fri, 14 Jun 2019 10:57:37 +0000 (16:27 +0530)
committerGuillaume Desmottes <guillaume.desmottes@collabora.com>
Mon, 17 Jun 2019 03:47:14 +0000 (09:17 +0530)
This has proven to be very useful when debugging to detect bugs where we
match the wrong gst frame with an output OMX buffer.

omx/gstomxvideo.c

index 9b57b55..627d708 100644 (file)
@@ -213,9 +213,20 @@ gst_omx_video_find_nearest_frame (GstElement * element, GstOMXBuffer * buf,
     }
   }
 
-  if (best)
+  if (best) {
     gst_video_codec_frame_ref (best);
 
+    /* OMX timestamps are in microseconds while gst ones are in nanoseconds.
+     * So if the difference between them is higher than 1 microsecond we likely
+     * picked the wrong frame. */
+    if (best_diff >= GST_USECOND)
+      GST_WARNING_OBJECT (element,
+          "Difference between ts (%" GST_TIME_FORMAT ") and frame %u (%"
+          GST_TIME_FORMAT ") seems too high (%" GST_TIME_FORMAT ")",
+          GST_TIME_ARGS (timestamp), best->system_frame_number,
+          GST_TIME_ARGS (best->pts), GST_TIME_ARGS (best_diff));
+  }
+
   g_list_foreach (frames, (GFunc) gst_video_codec_frame_unref, NULL);
   g_list_free (frames);