validate: Do not expect track switch to be synchronous for playbin3
authorThibault Saunier <thibault.saunier@osg.samsung.com>
Wed, 12 Apr 2017 14:07:44 +0000 (11:07 -0300)
committerThibault Saunier <thibault.saunier@osg.samsung.com>
Wed, 12 Apr 2017 14:28:50 +0000 (11:28 -0300)
And let following actions to be executed (setting the action as
INTERLACED) which will make sure the track switch happened at some
point. It means the user has to set the pipeline to PLAYING so we can
make it works but we do not have choice here I think

https://bugzilla.gnome.org/show_bug.cgi?id=781213

validate/gst/validate/gst-validate-scenario.c

index 1d8faf9..3272e72 100644 (file)
@@ -1184,6 +1184,7 @@ static gboolean
 execute_switch_track_pb3 (GstValidateScenario * scenario,
     GstValidateAction * action)
 {
+  GstValidateExecuteActionReturn res = GST_VALIDATE_EXECUTE_ACTION_ERROR;
   GstValidateScenarioPrivate *priv = scenario->priv;
   gint index;
   GstStreamType stype;
@@ -1195,12 +1196,12 @@ execute_switch_track_pb3 (GstValidateScenario * scenario,
 
   if (!monitor->stream_collection) {
     GST_ERROR ("No stream collection message received on the bus");
-    return GST_VALIDATE_EXECUTE_ACTION_ERROR;
+    return res;
   }
 
   if (!monitor->streams_selected) {
     GST_ERROR ("No streams selected message received on the bus");
-    return GST_VALIDATE_EXECUTE_ACTION_ERROR;
+    return res;
   }
 
   type = gst_structure_get_string (action->structure, "type");
@@ -1230,15 +1231,22 @@ execute_switch_track_pb3 (GstValidateScenario * scenario,
       ACTION_EXPECTED_STREAM_QUARK, g_list_copy (new_streams),
       (GDestroyNotify) g_list_free);
 
-  priv->pending_switch_track = action;
-
   if (!gst_element_send_event (scenario->pipeline,
           gst_event_new_select_streams (new_streams))) {
     GST_ERROR ("select-streams event not handled");
-    return GST_VALIDATE_EXECUTE_ACTION_ERROR;
+    return res;
   }
 
-  return GST_VALIDATE_EXECUTE_ACTION_ASYNC;
+  priv->pending_switch_track = action;
+  if (scenario->priv->target_state > GST_STATE_PAUSED) {
+    res = GST_VALIDATE_EXECUTE_ACTION_ASYNC;
+  } else {
+    gst_mini_object_ref ((GstMiniObject *) action);
+    res = GST_VALIDATE_EXECUTE_ACTION_INTERLACED;
+  }
+
+
+  return res;
 }
 
 static gboolean