diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2016-09-01 14:25:58 +0300 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2016-09-30 13:46:55 +0300 |
commit | a1794b689fa99d5bae39ceca8ab69d5333f7929e (patch) | |
tree | f0e2a7e3a2207c5045a35b434fc6bd90d88de13a | |
parent | a7698d38802a36ef4768f89d51bb74aecd7ee804 (diff) |
decklink: Fix-up last commit that was not meant to be pushed yet
-rw-r--r-- | sys/decklink/gstdecklinkvideosink.cpp | 34 | ||||
-rw-r--r-- | sys/decklink/gstdecklinkvideosrc.cpp | 26 |
2 files changed, 31 insertions, 29 deletions
diff --git a/sys/decklink/gstdecklinkvideosink.cpp b/sys/decklink/gstdecklinkvideosink.cpp index e38d02d4d..8bd039ef0 100644 --- a/sys/decklink/gstdecklinkvideosink.cpp +++ b/sys/decklink/gstdecklinkvideosink.cpp @@ -626,19 +626,19 @@ gst_decklink_video_sink_start_scheduled_playback (GstElement * element) GstClockTime start_time; HRESULT res; bool active; - GstClock *clock; - - clock = gst_element_get_clock (element); - if (!clock) { - GST_ELEMENT_ERROR (self, STREAM, FAILED, (NULL), - ("Scheduled playback supposed to start but we have no clock")); - return; - } if (self->output->video_enabled && (!self->output->audiosink || self->output->audio_enabled) && (GST_STATE (self) == GST_STATE_PLAYING || GST_STATE_PENDING (self) == GST_STATE_PLAYING)) { + GstClock *clock = NULL; + + clock = gst_element_get_clock (element); + if (!clock) { + GST_ELEMENT_ERROR (self, STREAM, FAILED, (NULL), + ("Scheduled playback supposed to start but we have no clock")); + return; + } // Need to unlock to get the clock time g_mutex_unlock (&self->output->lock); @@ -666,8 +666,10 @@ gst_decklink_video_sink_start_scheduled_playback (GstElement * element) g_mutex_lock (&self->output->lock); // Check if someone else started in the meantime - if (self->output->started) - goto done; + if (self->output->started) { + gst_object_unref (clock); + return; + } active = false; self->output->output->IsScheduledPlaybackRunning (&active); @@ -680,7 +682,8 @@ gst_decklink_video_sink_start_scheduled_playback (GstElement * element) if (res != S_OK) { GST_ELEMENT_ERROR (self, STREAM, FAILED, (NULL), ("Failed to stop scheduled playback: 0x%08x", res)); - goto done; + gst_object_unref (clock); + return; } } @@ -694,7 +697,8 @@ gst_decklink_video_sink_start_scheduled_playback (GstElement * element) if (res != S_OK) { GST_ELEMENT_ERROR (self, STREAM, FAILED, (NULL), ("Failed to start scheduled playback: 0x%08x", res)); - goto done; + gst_object_unref (clock); + return; } self->output->started = TRUE; @@ -709,12 +713,10 @@ gst_decklink_video_sink_start_scheduled_playback (GstElement * element) gst_clock_get_internal_time (self->output->clock); self->external_base_time = gst_clock_get_internal_time (clock); g_mutex_lock (&self->output->lock); + gst_object_unref (clock); } else { GST_DEBUG_OBJECT (self, "Not starting scheduled playback yet"); } - -done: - gst_object_unref (clock); } static GstStateChangeReturn @@ -722,7 +724,7 @@ gst_decklink_video_sink_change_state (GstElement * element, GstStateChange transition) { GstDecklinkVideoSink *self = GST_DECKLINK_VIDEO_SINK_CAST (element); - GstStateChangeReturn ret; + GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; switch (transition) { case GST_STATE_CHANGE_READY_TO_PAUSED: diff --git a/sys/decklink/gstdecklinkvideosrc.cpp b/sys/decklink/gstdecklinkvideosrc.cpp index ee0ded7c6..e414385ac 100644 --- a/sys/decklink/gstdecklinkvideosrc.cpp +++ b/sys/decklink/gstdecklinkvideosrc.cpp @@ -705,26 +705,28 @@ gst_decklink_video_src_start_streams (GstElement * element) { GstDecklinkVideoSrc *self = GST_DECKLINK_VIDEO_SRC_CAST (element); HRESULT res; - GstClock *clock; - - clock = gst_element_get_clock (element); - if (!clock) { - GST_ELEMENT_ERROR (self, STREAM, FAILED, (NULL), - ("Streams supposed to start but we have no clock")); - return; - } if (self->input->video_enabled && (!self->input->audiosrc || self->input->audio_enabled) && (GST_STATE (self) == GST_STATE_PLAYING || GST_STATE_PENDING (self) == GST_STATE_PLAYING)) { + GstClock *clock; + + clock = gst_element_get_clock (element); + if (!clock) { + GST_ELEMENT_ERROR (self, STREAM, FAILED, (NULL), + ("Streams supposed to start but we have no clock")); + return; + } + GST_DEBUG_OBJECT (self, "Starting streams"); res = self->input->input->StartStreams (); if (res != S_OK) { GST_ELEMENT_ERROR (self, STREAM, FAILED, (NULL), ("Failed to start streams: 0x%08x", res)); - goto done; + gst_object_unref (clock); + return; } self->input->started = TRUE; @@ -742,13 +744,11 @@ gst_decklink_video_src_start_streams (GstElement * element) self->internal_base_time = gst_clock_get_internal_time (self->input->clock); self->external_base_time = gst_clock_get_internal_time (clock); + gst_object_unref (clock); g_mutex_lock (&self->input->lock); } else { GST_DEBUG_OBJECT (self, "Not starting streams yet"); } - -done: - gst_object_unref (clock); } static GstStateChangeReturn @@ -756,7 +756,7 @@ gst_decklink_video_src_change_state (GstElement * element, GstStateChange transition) { GstDecklinkVideoSrc *self = GST_DECKLINK_VIDEO_SRC_CAST (element); - GstStateChangeReturn ret; + GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; switch (transition) { case GST_STATE_CHANGE_NULL_TO_READY: |