viddec: Drop frames if out of segment master
authorRam Prasad <x0038811@ti.com>
Wed, 6 Mar 2019 12:23:42 +0000 (12:23 +0000)
committerRamprasad N <x0038811@ti.com>
Wed, 15 May 2019 04:29:46 +0000 (09:59 +0530)
Drop the decoded frames, don't post to next element
if the frame is out of the current segment.

Signed-off-by: Ramprasad N <x0038811@ti.com>
src/gstducatividdec.c
src/gstducatividdec.h

index 0c80b47557505b8b2bbbdc5373c2c49331ac117b..efebe107da111085769d1560c5501de8ca79d2ae 100644 (file)
@@ -715,7 +715,7 @@ codec_process (GstDucatiVidDec * self, gboolean send, gboolean flush,
 
     }
 
-    if (send) {
+    if (send && self->out_of_segment == FALSE ) {
       GstClockTime ts;
 
       ts = GST_BUFFER_PTS (outbuf);
@@ -1304,6 +1304,7 @@ gst_ducati_viddec_do_qos (GstDucatiVidDec * self, GstBuffer * buf)
   GstDucatiVidDecClass *klass = GST_DUCATIVIDDEC_GET_CLASS (self);
   gint64 diff;
 
+  self->out_of_segment = FALSE;
   if (self->wait_keyframe) {
     if (GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_DELTA_UNIT)) {
       GST_INFO_OBJECT (self, "skipping until the next keyframe");
@@ -1314,8 +1315,7 @@ gst_ducati_viddec_do_qos (GstDucatiVidDec * self, GstBuffer * buf)
   }
 
   timestamp = GST_BUFFER_PTS (buf);
-  if (self->segment.format != GST_FORMAT_TIME ||
-      self->qos_earliest_time == GST_CLOCK_TIME_NONE)
+  if (self->segment.format != GST_FORMAT_TIME)
     goto no_qos;
 
   if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (timestamp)))
@@ -1323,9 +1323,12 @@ gst_ducati_viddec_do_qos (GstDucatiVidDec * self, GstBuffer * buf)
 
   qostime = gst_segment_to_running_time (&self->segment,
       GST_FORMAT_TIME, timestamp);
-  if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (qostime)))
+  if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (qostime))) {
+    self->out_of_segment = TRUE;
     /* out of segment */
+    GST_DEBUG_OBJECT(self, "out of segment\n");
     goto no_qos;
+  }
 
   /* see how our next timestamp relates to the latest qos timestamp. negative
    * values mean we are early, positive values mean we are too late. */
index 44c09bf6c4482e12b1a3e6f0d83b4c374410d958..accdf60243c51e663f687e9cf287fe0e8e497ca8 100644 (file)
@@ -152,6 +152,7 @@ struct _GstDucatiVidDec
   gint displayDelay;
 
   gboolean codec_debug_info;
+  gboolean out_of_segment;
 
   const char *error_strings[32];
 };