From fe274ac6e7d8a812766631b563b7ee95fc7453e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Tue, 23 Jun 2020 10:01:27 +0300 Subject: [PATCH] fallbacksrc: Use new proxy_pad_chain_function() support when building pads Less unsafe code. --- utils/fallbackswitch/src/fallbacksrc.rs | 28 +++++++++++-------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/utils/fallbackswitch/src/fallbacksrc.rs b/utils/fallbackswitch/src/fallbacksrc.rs index 1a9325c4..f78d9048 100644 --- a/utils/fallbackswitch/src/fallbacksrc.rs +++ b/utils/fallbackswitch/src/fallbacksrc.rs @@ -781,25 +781,21 @@ impl FallbackSrc { .get_pad_template(if is_audio { "audio" } else { "video" }) .unwrap(); let ghostpad = gst::GhostPad::builder_with_template(&templ, Some(&templ.get_name())) + .proxy_pad_chain_function({ + let element_weak = element.downgrade(); + move |pad, _parent, buffer| { + let element = match element_weak.upgrade() { + None => return Err(gst::FlowError::Flushing), + Some(element) => element, + }; + + let src = FallbackSrc::from_instance(&element); + src.proxy_pad_chain(&element, pad, buffer) + } + }) .build_with_target(&srcpad) .unwrap(); - let proxypad = ghostpad.get_internal().expect("no internal pad"); - let element_weak = element.downgrade(); - // Safety: Nothing else can have a reference to the proxy pad yet apart from the ghost pad - // itself, so changing the chain function is still safe. - unsafe { - proxypad.set_chain_function(move |pad, _parent, buffer| { - let element = match element_weak.upgrade() { - None => return Err(gst::FlowError::Flushing), - Some(element) => element, - }; - - let src = FallbackSrc::from_instance(&element); - src.proxy_pad_chain(&element, pad, buffer) - }); - } - element.add_pad(&ghostpad).unwrap(); Ok(Stream {