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
This commit is contained in:
Thibault Saunier 2017-04-12 11:07:44 -03:00
parent 91d2d2dc2b
commit 26b388c349

View 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