mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 20:21:24 +00:00
decklinkvideosink: Stop scheduled playback shortly in PAUSED->PLAYING if it was running already
This fixes handling of flushing seeks, where we will get a PAUSED->PLAYING state transition after the previous one without actually going to PAUSED first.
This commit is contained in:
parent
92fa187d11
commit
5a12b2670e
1 changed files with 15 additions and 1 deletions
|
@ -539,7 +539,6 @@ gst_decklink_video_sink_change_state (GstElement * element,
|
||||||
GstDecklinkVideoSink *self = GST_DECKLINK_VIDEO_SINK_CAST (element);
|
GstDecklinkVideoSink *self = GST_DECKLINK_VIDEO_SINK_CAST (element);
|
||||||
GstStateChangeReturn ret;
|
GstStateChangeReturn ret;
|
||||||
|
|
||||||
|
|
||||||
switch (transition) {
|
switch (transition) {
|
||||||
case GST_STATE_CHANGE_READY_TO_PAUSED:
|
case GST_STATE_CHANGE_READY_TO_PAUSED:
|
||||||
gst_element_post_message (element,
|
gst_element_post_message (element,
|
||||||
|
@ -614,6 +613,7 @@ gst_decklink_video_sink_change_state (GstElement * element,
|
||||||
case GST_STATE_CHANGE_PAUSED_TO_PLAYING:{
|
case GST_STATE_CHANGE_PAUSED_TO_PLAYING:{
|
||||||
GstClockTime start_time;
|
GstClockTime start_time;
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
|
bool active;
|
||||||
|
|
||||||
// FIXME: start time is the same for the complete pipeline,
|
// FIXME: start time is the same for the complete pipeline,
|
||||||
// but what we need here is the start time of this element!
|
// but what we need here is the start time of this element!
|
||||||
|
@ -638,6 +638,20 @@ gst_decklink_video_sink_change_state (GstElement * element,
|
||||||
|
|
||||||
convert_to_internal_clock (self, &start_time, NULL);
|
convert_to_internal_clock (self, &start_time, NULL);
|
||||||
|
|
||||||
|
active = false;
|
||||||
|
self->output->output->IsScheduledPlaybackRunning (&active);
|
||||||
|
if (active) {
|
||||||
|
GST_DEBUG_OBJECT (self, "Stopping scheduled playback");
|
||||||
|
|
||||||
|
res = self->output->output->StopScheduledPlayback (0, 0, 0);
|
||||||
|
if (res != S_OK) {
|
||||||
|
GST_ELEMENT_ERROR (self, STREAM, FAILED,
|
||||||
|
(NULL), ("Failed to stop scheduled playback: 0x%08x", res));
|
||||||
|
ret = GST_STATE_CHANGE_FAILURE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (self,
|
GST_DEBUG_OBJECT (self,
|
||||||
"Starting scheduled playback at %" GST_TIME_FORMAT,
|
"Starting scheduled playback at %" GST_TIME_FORMAT,
|
||||||
GST_TIME_ARGS (start_time));
|
GST_TIME_ARGS (start_time));
|
||||||
|
|
Loading…
Reference in a new issue