From d4b3827efa8cf03a7e426ccd72818be8cfbe37da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Tue, 18 Jul 2023 15:18:08 +0300 Subject: [PATCH] webrtcsink: NVIDIA V4L2 encoders always require NVMM memory And if the input is not like that then a corresponding converter must be inserted. Part-of: --- net/webrtc/src/webrtcsink/imp.rs | 42 ++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/net/webrtc/src/webrtcsink/imp.rs b/net/webrtc/src/webrtcsink/imp.rs index 262ad11b..e670e7bb 100644 --- a/net/webrtc/src/webrtcsink/imp.rs +++ b/net/webrtc/src/webrtcsink/imp.rs @@ -360,7 +360,7 @@ impl Default for State { } } -fn make_converter_for_video_caps(caps: &gst::Caps) -> Result { +fn make_converter_for_video_caps(caps: &gst::Caps, codec: &Codec) -> Result { assert!(caps.is_fixed()); let video_info = gst_video::VideoInfo::from_caps(caps)?; @@ -369,7 +369,27 @@ fn make_converter_for_video_caps(caps: &gst::Caps) -> Result Result make_converter_for_video_caps(&self.input_caps)?.upcast(), + true => make_converter_for_video_caps(&self.input_caps, &self.codec)?.upcast(), false => { gst::parse_bin_from_description("audioresample ! audioconvert", true)?.upcast() } @@ -2761,7 +2767,7 @@ impl BaseWebRTCSink { let src = discovery_info.create_src(); let mut elements = vec![src.clone().upcast::()]; let encoding_chain_src = if codec.is_video() && has_raw_input { - elements.push(make_converter_for_video_caps(&input_caps)?); + elements.push(make_converter_for_video_caps(&input_caps, &codec)?); let capsfilter = make_element("capsfilter", Some("raw_capsfilter"))?; elements.push(capsfilter.clone());