From 23e7226c94dd4b2c86ae1844f2fb9390d7ae2317 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 | 46 +++++++++++++++++++------------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/net/webrtc/src/webrtcsink/imp.rs b/net/webrtc/src/webrtcsink/imp.rs index 839affbc..99dceb5e 100644 --- a/net/webrtc/src/webrtcsink/imp.rs +++ b/net/webrtc/src/webrtcsink/imp.rs @@ -92,6 +92,10 @@ impl Codec { self.encoder .has_type(gst::ElementFactoryType::VIDEO_ENCODER) } + + fn encoder_factory(&self) -> &gst::ElementFactory { + &self.encoder + } } /// Wrapper around our sink pads @@ -314,7 +318,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)?; @@ -323,7 +327,27 @@ fn make_converter_for_video_caps(caps: &gst::Caps) -> Result Result Result<(gst::Element, gst::Element, gst::Element), Error> { let conv = match codec.is_video() { - true => make_converter_for_video_caps(input_caps)?.upcast(), + true => make_converter_for_video_caps(input_caps, codec)?.upcast(), false => gst::parse_bin_from_description("audioresample ! audioconvert", true)?.upcast(), }; @@ -2178,7 +2188,7 @@ impl WebRTCSink { let mut elements = vec![src.clone()]; if codec.is_video() { - elements.push(make_converter_for_video_caps(caps)?); + elements.push(make_converter_for_video_caps(caps, &codec)?); } gst::debug!(