mirror of
https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git
synced 2025-09-01 17:23:48 +00:00
fallbacksrc: Don't keep CustomSource state locked while adding/removing pads
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2474>
This commit is contained in:
parent
6fb729d771
commit
a005cf8e05
1 changed files with 16 additions and 4 deletions
|
@ -608,23 +608,35 @@ impl CustomSource {
|
|||
.src(&*self.obj())
|
||||
.build();
|
||||
|
||||
self.expose_only_selected_streams(state);
|
||||
self.expose_only_selected_streams(state_guard);
|
||||
Some(message)
|
||||
}
|
||||
|
||||
fn expose_only_selected_streams(&self, state: &mut State) {
|
||||
fn expose_only_selected_streams(&self, state: MutexGuard<State>) {
|
||||
let mut to_add = vec![];
|
||||
let mut to_remove = vec![];
|
||||
|
||||
for stream in state.pads.iter() {
|
||||
if stream.is_selected && !stream.is_exposed() {
|
||||
let event = gst::event::StreamStart::builder(&stream.stream.stream_id().unwrap())
|
||||
.stream(stream.stream.clone())
|
||||
.build();
|
||||
stream.ghost_pad.store_sticky_event(&event).unwrap();
|
||||
self.obj().add_pad(&stream.ghost_pad).unwrap();
|
||||
to_add.push(stream.ghost_pad.clone());
|
||||
} else if !stream.is_selected && stream.is_exposed() {
|
||||
let _ = stream.ghost_pad.set_target(None::<&gst::Pad>);
|
||||
let _ = self.obj().remove_pad(&stream.ghost_pad);
|
||||
to_remove.push(stream.ghost_pad.clone());
|
||||
}
|
||||
}
|
||||
drop(state);
|
||||
|
||||
for pad in to_add {
|
||||
self.obj().add_pad(&pad).unwrap();
|
||||
}
|
||||
|
||||
for pad in to_remove {
|
||||
let _ = self.obj().remove_pad(&pad);
|
||||
}
|
||||
}
|
||||
|
||||
fn stop(&self) {
|
||||
|
|
Loading…
Reference in a new issue