pad-monitor: add another acceptable flow return combination scenarios
authorThiago Santos <thiago.sousa.santos@collabora.com>
Mon, 26 Aug 2013 23:30:07 +0000 (20:30 -0300)
committerThiago Santos <thiago.sousa.santos@collabora.com>
Mon, 26 Aug 2013 23:33:23 +0000 (20:33 -0300)
A demuxer knows when to return EOS after samples are over, so it is
ok for it to return even when all src pads returned OK

validate/gst/validate/gst-validate-element-monitor.c
validate/gst/validate/gst-validate-element-monitor.h
validate/gst/validate/gst-validate-pad-monitor.c

index 220f42d..2d5c696 100644 (file)
@@ -132,6 +132,7 @@ gst_validate_element_monitor_inspect (GstValidateElementMonitor * monitor)
       gst_element_class_get_metadata (klass, GST_ELEMENT_METADATA_KLASS);
   monitor->is_decoder = strstr (klassname, "Decoder") != NULL;
   monitor->is_encoder = strstr (klassname, "Encoder") != NULL;
+  monitor->is_demuxer = strstr (klassname, "Demuxer") != NULL;
 }
 
 static gboolean
index 014d618..d113e22 100644 (file)
@@ -41,6 +41,7 @@ G_BEGIN_DECLS
 #define GST_VALIDATE_ELEMENT_MONITOR_GET_ELEMENT(m) (GST_ELEMENT_CAST (GST_VALIDATE_MONITOR_GET_OBJECT (m)))
 #define GST_VALIDATE_ELEMENT_MONITOR_ELEMENT_IS_DECODER(m) (GST_VALIDATE_ELEMENT_MONITOR_CAST (m)->is_decoder)
 #define GST_VALIDATE_ELEMENT_MONITOR_ELEMENT_IS_ENCODER(m) (GST_VALIDATE_ELEMENT_MONITOR_CAST (m)->is_encoder)
+#define GST_VALIDATE_ELEMENT_MONITOR_ELEMENT_IS_DEMUXER(m) (GST_VALIDATE_ELEMENT_MONITOR_CAST (m)->is_demuxer)
 
 typedef struct _GstValidateElementMonitor GstValidateElementMonitor;
 typedef struct _GstValidateElementMonitorClass GstValidateElementMonitorClass;
@@ -61,6 +62,7 @@ struct _GstValidateElementMonitor {
 
   gboolean       is_decoder;
   gboolean       is_encoder;
+  gboolean       is_demuxer;
 };
 
 /**
index 8a0a2d7..931919b 100644 (file)
@@ -833,10 +833,21 @@ gst_validate_pad_monitor_check_aggregated_return (GstValidatePadMonitor *
     /* no peer pad found, nothing to do */
     return;
   }
-  if (monitor->is_eos && ret == GST_FLOW_EOS) {
-    /* this is acceptable */
-    return;
+  if (aggregated == GST_FLOW_OK || aggregated == GST_FLOW_EOS) {
+    /* those are acceptable situations */
+
+    if (monitor->is_eos && ret == GST_FLOW_EOS) {
+      /* this element received eos and returned eos */
+      return;
+    }
+
+    if (GST_VALIDATE_ELEMENT_MONITOR_ELEMENT_IS_DEMUXER (monitor)
+        && ret == GST_FLOW_EOS) {
+      /* a demuxer can return EOS when the samples end */
+      return;
+    }
   }
+
   if (aggregated != ret) {
     GST_VALIDATE_REPORT (monitor, WRONG_FLOW_RETURN,
         "Wrong combined flow return %s(%d). Expected: %s(%d)",