summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2016-09-01 14:25:58 +0300
committerSebastian Dröge <sebastian@centricular.com>2016-09-30 13:46:55 +0300
commita1794b689fa99d5bae39ceca8ab69d5333f7929e (patch)
treef0e2a7e3a2207c5045a35b434fc6bd90d88de13a
parenta7698d38802a36ef4768f89d51bb74aecd7ee804 (diff)
decklink: Fix-up last commit that was not meant to be pushed yet
-rw-r--r--sys/decklink/gstdecklinkvideosink.cpp34
-rw-r--r--sys/decklink/gstdecklinkvideosrc.cpp26
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: