diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2015-09-22 19:35:00 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2015-09-24 09:32:27 +0200 |
commit | e0fd5317df193acb671e67f276a2ca2e5fa8c4b8 (patch) | |
tree | b7fb49d97958a1c1f6cca2fb36c32772fc208575 /sys/decklink/gstdecklinkaudiosrc.cpp | |
parent | 3417a1507657505cae943d161282dc72982c2241 (diff) | |
download | gstreamer-plugins-bad-e0fd5317df193acb671e67f276a2ca2e5fa8c4b8.tar.gz |
decklink: Disable inputs/outputs in PAUSED->READY to allow going to PAUSED again from there
https://bugzilla.gnome.org/show_bug.cgi?id=755426
Diffstat (limited to 'sys/decklink/gstdecklinkaudiosrc.cpp')
-rw-r--r-- | sys/decklink/gstdecklinkaudiosrc.cpp | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/sys/decklink/gstdecklinkaudiosrc.cpp b/sys/decklink/gstdecklinkaudiosrc.cpp index 70cfa7496..a9284d193 100644 --- a/sys/decklink/gstdecklinkaudiosrc.cpp +++ b/sys/decklink/gstdecklinkaudiosrc.cpp @@ -109,6 +109,8 @@ static GstFlowReturn gst_decklink_audio_src_create (GstPushSrc * psrc, static gboolean gst_decklink_audio_src_open (GstDecklinkAudioSrc * self); static gboolean gst_decklink_audio_src_close (GstDecklinkAudioSrc * self); +static gboolean gst_decklink_audio_src_stop (GstDecklinkAudioSrc * self); + #define parent_class gst_decklink_audio_src_parent_class G_DEFINE_TYPE (GstDecklinkAudioSrc, gst_decklink_audio_src, GST_TYPE_PUSH_SRC); @@ -646,7 +648,7 @@ gst_decklink_audio_src_unlock_stop (GstBaseSrc * bsrc) static gboolean gst_decklink_audio_src_open (GstDecklinkAudioSrc * self) { - GST_DEBUG_OBJECT (self, "Starting"); + GST_DEBUG_OBJECT (self, "Opening"); self->input = gst_decklink_acquire_nth_input (self->device_number, @@ -666,18 +668,13 @@ gst_decklink_audio_src_open (GstDecklinkAudioSrc * self) static gboolean gst_decklink_audio_src_close (GstDecklinkAudioSrc * self) { - - GST_DEBUG_OBJECT (self, "Stopping"); + GST_DEBUG_OBJECT (self, "Closing"); if (self->input) { g_mutex_lock (&self->input->lock); self->input->got_audio_packet = NULL; - self->input->audio_enabled = FALSE; - if (self->input->start_streams && self->input->videosrc) - self->input->start_streams (self->input->videosrc); g_mutex_unlock (&self->input->lock); - self->input->input->DisableAudioInput (); gst_decklink_release_nth_input (self->device_number, GST_ELEMENT_CAST (self), TRUE); self->input = NULL; @@ -686,6 +683,26 @@ gst_decklink_audio_src_close (GstDecklinkAudioSrc * self) return TRUE; } +static gboolean +gst_decklink_audio_src_stop (GstDecklinkAudioSrc * self) +{ + GST_DEBUG_OBJECT (self, "Stopping"); + + g_queue_foreach (&self->current_packets, (GFunc) capture_packet_free, + NULL); + g_queue_clear (&self->current_packets); + + if (self->input && self->input->audio_enabled) { + g_mutex_lock (&self->input->lock); + self->input->audio_enabled = FALSE; + g_mutex_unlock (&self->input->lock); + + self->input->input->DisableAudioInput (); + } + + return TRUE; +} + #if 0 static gboolean in_same_pipeline (GstElement * a, GstElement * b) @@ -769,9 +786,7 @@ gst_decklink_audio_src_change_state (GstElement * element, switch (transition) { case GST_STATE_CHANGE_PAUSED_TO_READY: - g_queue_foreach (&self->current_packets, (GFunc) capture_packet_free, - NULL); - g_queue_clear (&self->current_packets); + gst_decklink_audio_src_stop (self); break; case GST_STATE_CHANGE_READY_TO_NULL: gst_decklink_audio_src_close (self); |