viddec: Drop frames if out of segment
[glsdk/gst-plugin-ducati.git] / src / gstducatividdec.c
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. */