static gboolean gst_decklink_video_sink_open (GstBaseSink * bsink) { GstDecklinkVideoSink *self = GST_DECKLINK_VIDEO_SINK_CAST (bsink); const GstDecklinkMode *mode; GST_DEBUG_OBJECT (self, "Stopping"); self->output = gst_decklink_acquire_nth_output (self->device_number, GST_ELEMENT_CAST (self), FALSE); if (!self->output) { GST_ERROR_OBJECT (self, "Failed to acquire output"); return FALSE; } mode = gst_decklink_get_mode (self->mode); g_assert (mode != NULL); g_mutex_lock (&self->output->lock); self->output->mode = mode; self->output->start_scheduled_playback = gst_decklink_video_sink_start_scheduled_playback; self->output->clock_start_time = GST_CLOCK_TIME_NONE; self->output->clock_epoch += self->output->clock_last_time; self->output->clock_last_time = 0; self->output->clock_offset = 0; g_mutex_unlock (&self->output->lock); return TRUE; }
static gboolean gst_decklink_audio_sink_open (GstBaseSink * bsink) { GstDecklinkAudioSink *self = GST_DECKLINK_AUDIO_SINK_CAST (bsink); GST_DEBUG_OBJECT (self, "Starting"); self->output = gst_decklink_acquire_nth_output (self->device_number, GST_ELEMENT_CAST (self), TRUE); if (!self->output) { GST_ERROR_OBJECT (self, "Failed to acquire output"); return FALSE; } g_object_notify (G_OBJECT (self), "hw-serial-number"); return TRUE; }
static gboolean gst_decklink_audio_sink_ringbuffer_open_device (GstAudioRingBuffer * rb) { GstDecklinkAudioSinkRingBuffer *self = GST_DECKLINK_AUDIO_SINK_RING_BUFFER_CAST (rb); GST_DEBUG_OBJECT (self->sink, "Open device"); self->output = gst_decklink_acquire_nth_output (self->sink->device_number, GST_ELEMENT_CAST (self), TRUE); if (!self->output) { GST_ERROR_OBJECT (self, "Failed to acquire output"); return FALSE; } gst_decklink_output_set_audio_clock (self->output, GST_AUDIO_BASE_SINK_CAST (self->sink)->provided_clock); return TRUE; }