decklinkaudiosink: Fix playback when video caps is configured before audio

Scheduled playback starts on videosink's state change or on caps
but it's possible that audiosink is configure without caps yet.
Try start scheduled playback on audiosink's caps event as well

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4368>
This commit is contained in:
Seungha Yang 2023-04-07 22:13:24 +09:00 committed by Tim-Philipp Müller
parent 1ff0e6d305
commit 5f17cb9f3d

View file

@ -332,9 +332,11 @@ gst_decklink_audio_sink_set_caps (GstBaseSink * bsink, GstCaps * caps)
sample_depth = bmdAudioSampleType32bitInteger; sample_depth = bmdAudioSampleType32bitInteger;
} }
g_mutex_lock (&self->output->lock);
ret = self->output->output->EnableAudioOutput (bmdAudioSampleRate48kHz, ret = self->output->output->EnableAudioOutput (bmdAudioSampleRate48kHz,
sample_depth, info.channels, bmdAudioOutputStreamContinuous); sample_depth, info.channels, bmdAudioOutputStreamContinuous);
if (ret != S_OK) { if (ret != S_OK) {
g_mutex_unlock (&self->output->lock);
GST_WARNING_OBJECT (self, "Failed to enable audio output 0x%08lx", GST_WARNING_OBJECT (self, "Failed to enable audio output 0x%08lx",
(unsigned long) ret); (unsigned long) ret);
return FALSE; return FALSE;
@ -343,6 +345,10 @@ gst_decklink_audio_sink_set_caps (GstBaseSink * bsink, GstCaps * caps)
self->output->audio_enabled = TRUE; self->output->audio_enabled = TRUE;
self->info = info; self->info = info;
if (self->output->start_scheduled_playback && self->output->videosink)
self->output->start_scheduled_playback (self->output->videosink);
g_mutex_unlock (&self->output->lock);
// Create a new resampler as needed // Create a new resampler as needed
if (self->resampler) if (self->resampler)
gst_audio_resampler_free (self->resampler); gst_audio_resampler_free (self->resampler);