From 26b388c349fe5ba59820a4a25d09a7532a8f3b47 Mon Sep 17 00:00:00 2001 From: Thibault Saunier Date: Wed, 12 Apr 2017 11:07:44 -0300 Subject: [PATCH] validate: Do not expect track switch to be synchronous for playbin3 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 | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/validate/gst/validate/gst-validate-scenario.c b/validate/gst/validate/gst-validate-scenario.c index 1d8faf9971..3272e72e4c 100644 --- a/validate/gst/validate/gst-validate-scenario.c +++ b/validate/gst/validate/gst-validate-scenario.c @@ -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