diff --git a/subprojects/gst-integration-testsuites/testsuites/validate.testslist b/subprojects/gst-integration-testsuites/testsuites/validate.testslist index cc6389b1ee9..7f826b76ca3 100644 --- a/subprojects/gst-integration-testsuites/testsuites/validate.testslist +++ b/subprojects/gst-integration-testsuites/testsuites/validate.testslist @@ -952,6 +952,7 @@ validate.test.mse.segment_future_past_nomse validate.test.nle.urisource.play validate.test.playbin.check_active_stream validate.test.playbin3.ignore_raw_audio_from_demuxer +validate.test.playbin3.intensive_state_change_selecting_stream validate.test.playbin3.ogv_vp8 validate.test.playbin3.sourcebin_check_mixed_static_and_dyanmic_pads validate.test.rtp.h264.payloader_fail_nego_force_profile diff --git a/subprojects/gst-integration-testsuites/testsuites/validate/playbin3/intensive_state_change_selecting_stream.validatetest b/subprojects/gst-integration-testsuites/testsuites/validate/playbin3/intensive_state_change_selecting_stream.validatetest new file mode 100644 index 00000000000..aac67f23eab --- /dev/null +++ b/subprojects/gst-integration-testsuites/testsuites/validate/playbin3/intensive_state_change_selecting_stream.validatetest @@ -0,0 +1,19 @@ +set-globals, + media_dir="$(test_dir)/../../../medias", + file="file://$(media_dir)/defaults/matroska/flac_jpeg.1.mkv" + + +meta, + handles-states=true, + ignore-eos=true, + args = { + "playbin3 uri=$(file) name=p video-sink=\"$(videosink)\" audio-sink=\"$(audiosink)\"", + } + +foreach, i=[0, 40], + actions = { + "select-streams, indexes=0", + "play", + "set-state, state=null", + } +stop; diff --git a/subprojects/gst-plugins-base/gst/playback/gstplaybin3.c b/subprojects/gst-plugins-base/gst/playback/gstplaybin3.c index 3b543963b35..51cf97b8a15 100644 --- a/subprojects/gst-plugins-base/gst/playback/gstplaybin3.c +++ b/subprojects/gst-plugins-base/gst/playback/gstplaybin3.c @@ -1857,10 +1857,11 @@ gst_play_bin3_send_event (GstElement * element, GstEvent * event) /* Don't reconfigure playsink just yet, until the streams-selected * message(s) tell us as streams become active / available */ + GST_PLAY_BIN3_UNLOCK (playbin); + /* Send this event directly to uridecodebin, so it works even * if uridecodebin didn't add any pads yet */ res = gst_element_send_event (playbin->uridecodebin, event); - GST_PLAY_BIN3_UNLOCK (playbin); return res; }