mirror of
https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git
synced 2024-11-24 20:41:00 +00:00
transcriberbin: take passthrough state into account in more places
Fixes: https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/630 Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1925>
This commit is contained in:
parent
1fc1ed2539
commit
29b5ccacdf
1 changed files with 27 additions and 10 deletions
|
@ -247,6 +247,7 @@ impl TranscriberBin {
|
||||||
pad_name: &str,
|
pad_name: &str,
|
||||||
pad_state: &TranscriberSinkPadState,
|
pad_state: &TranscriberSinkPadState,
|
||||||
state: &mut State,
|
state: &mut State,
|
||||||
|
pad_settings: &TranscriberSinkPadSettings,
|
||||||
) -> Result<(), Error> {
|
) -> Result<(), Error> {
|
||||||
gst::debug!(CAT, imp = self, "Linking input audio stream {pad_name}");
|
gst::debug!(CAT, imp = self, "Linking input audio stream {pad_name}");
|
||||||
|
|
||||||
|
@ -324,7 +325,13 @@ impl TranscriberBin {
|
||||||
|
|
||||||
if let Some(ref transcriber) = pad_state.transcriber {
|
if let Some(ref transcriber) = pad_state.transcriber {
|
||||||
let srcpad_name = channel.link_transcriber(transcriber)?;
|
let srcpad_name = channel.link_transcriber(transcriber)?;
|
||||||
pad_state.link_transcriber_pads(&self.obj(), &srcpad_name, channel, state)?;
|
pad_state.link_transcriber_pads(
|
||||||
|
&self.obj(),
|
||||||
|
&srcpad_name,
|
||||||
|
channel,
|
||||||
|
state,
|
||||||
|
pad_settings.passthrough,
|
||||||
|
)?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -438,8 +445,9 @@ impl TranscriberBin {
|
||||||
// FIXME: replace this pattern with https://doc.rust-lang.org/nightly/std/sync/struct.MappedMutexGuard.html
|
// FIXME: replace this pattern with https://doc.rust-lang.org/nightly/std/sync/struct.MappedMutexGuard.html
|
||||||
let ps = pad.imp().state.lock().unwrap();
|
let ps = pad.imp().state.lock().unwrap();
|
||||||
let pad_state = ps.as_ref().unwrap();
|
let pad_state = ps.as_ref().unwrap();
|
||||||
|
let pad_settings = pad.imp().settings.lock().unwrap();
|
||||||
|
|
||||||
self.link_input_audio_stream("sink_audio", pad_state, state)?;
|
self.link_input_audio_stream("sink_audio", pad_state, state, &pad_settings)?;
|
||||||
|
|
||||||
let internal_audio_sinkpad =
|
let internal_audio_sinkpad =
|
||||||
gst::GhostPad::builder_with_target(&pad_state.clocksync.static_pad("sink").unwrap())
|
gst::GhostPad::builder_with_target(&pad_state.clocksync.static_pad("sink").unwrap())
|
||||||
|
@ -551,13 +559,14 @@ impl TranscriberBin {
|
||||||
for pad in state.audio_sink_pads.values() {
|
for pad in state.audio_sink_pads.values() {
|
||||||
let ps = pad.imp().state.lock().unwrap();
|
let ps = pad.imp().state.lock().unwrap();
|
||||||
let pad_state = ps.as_ref().unwrap();
|
let pad_state = ps.as_ref().unwrap();
|
||||||
pad_state.transcription_bin.set_locked_state(false);
|
|
||||||
pad_state
|
|
||||||
.transcription_bin
|
|
||||||
.sync_state_with_parent()
|
|
||||||
.unwrap();
|
|
||||||
let pad_settings = pad.imp().settings.lock().unwrap();
|
let pad_settings = pad.imp().settings.lock().unwrap();
|
||||||
|
|
||||||
if !pad_settings.passthrough {
|
if !pad_settings.passthrough {
|
||||||
|
pad_state.transcription_bin.set_locked_state(false);
|
||||||
|
pad_state
|
||||||
|
.transcription_bin
|
||||||
|
.sync_state_with_parent()
|
||||||
|
.unwrap();
|
||||||
let transcription_sink_pad =
|
let transcription_sink_pad =
|
||||||
state.transcription_bin.static_pad(&pad.name()).unwrap();
|
state.transcription_bin.static_pad(&pad.name()).unwrap();
|
||||||
// Might be linked already if "translation-languages" is set
|
// Might be linked already if "translation-languages" is set
|
||||||
|
@ -1008,7 +1017,13 @@ impl TranscriberBin {
|
||||||
|
|
||||||
if let Some(ref transcriber) = pad_state.transcriber {
|
if let Some(ref transcriber) = pad_state.transcriber {
|
||||||
let srcpad_name = channel.link_transcriber(transcriber)?;
|
let srcpad_name = channel.link_transcriber(transcriber)?;
|
||||||
pad_state.link_transcriber_pads(&self.obj(), &srcpad_name, channel, state)?;
|
pad_state.link_transcriber_pads(
|
||||||
|
&self.obj(),
|
||||||
|
&srcpad_name,
|
||||||
|
channel,
|
||||||
|
state,
|
||||||
|
pad_settings.passthrough,
|
||||||
|
)?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1713,7 +1728,8 @@ impl ElementImpl for TranscriberBin {
|
||||||
|
|
||||||
pad_state.serial = Some(state.audio_serial);
|
pad_state.serial = Some(state.audio_serial);
|
||||||
|
|
||||||
if let Err(e) = self.link_input_audio_stream(&name, pad_state, state) {
|
if let Err(e) = self.link_input_audio_stream(&name, pad_state, state, &pad_settings)
|
||||||
|
{
|
||||||
gst::error!(CAT, "Failed to link secondary audio stream: {e}");
|
gst::error!(CAT, "Failed to link secondary audio stream: {e}");
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
@ -2020,6 +2036,7 @@ impl TranscriberSinkPadState {
|
||||||
srcpad_name: &str,
|
srcpad_name: &str,
|
||||||
channel: &TranscriptionChannel,
|
channel: &TranscriptionChannel,
|
||||||
state: &State,
|
state: &State,
|
||||||
|
passthrough: bool,
|
||||||
) -> Result<(), Error> {
|
) -> Result<(), Error> {
|
||||||
self.expose_unsynced_pads(topbin, state, srcpad_name)?;
|
self.expose_unsynced_pads(topbin, state, srcpad_name)?;
|
||||||
|
|
||||||
|
@ -2030,7 +2047,7 @@ impl TranscriberSinkPadState {
|
||||||
|
|
||||||
self.transcription_bin.add_pad(&srcpad)?;
|
self.transcription_bin.add_pad(&srcpad)?;
|
||||||
|
|
||||||
if state.ccmux.static_pad(&channel.ccmux_pad_name).is_none() {
|
if state.ccmux.static_pad(&channel.ccmux_pad_name).is_none() && !passthrough {
|
||||||
let ccmux_pad = state
|
let ccmux_pad = state
|
||||||
.ccmux
|
.ccmux
|
||||||
.request_pad_simple(&channel.ccmux_pad_name)
|
.request_pad_simple(&channel.ccmux_pad_name)
|
||||||
|
|
Loading…
Reference in a new issue