Add support for VAAPI VP8 encoder

This commit is contained in:
Nils Kattenbeck 2022-04-28 11:10:15 +02:00 committed by Mathieu Duponchelle
parent 843875e95d
commit e4846d0d53

View file

@ -336,8 +336,9 @@ fn configure_encoder(enc: &gst::Element) {
enc.set_property_from_str("rc-mode", "cbr-ld-hq"); enc.set_property_from_str("rc-mode", "cbr-ld-hq");
enc.set_property("zerolatency", true); enc.set_property("zerolatency", true);
} }
"vaapih264enc" => { "vaapih264enc" | "vaapivp8enc" => {
enc.set_property("bitrate", 2048u32); enc.set_property("bitrate", 2048u32);
enc.set_property("keyframe-period", 2560u32);
} }
_ => (), _ => (),
} }
@ -519,8 +520,10 @@ impl VideoEncoder {
fn bitrate(&self) -> i32 { fn bitrate(&self) -> i32 {
match self.factory_name.as_str() { match self.factory_name.as_str() {
"vp8enc" | "vp9enc" => self.element.property::<i32>("target-bitrate"), "vp8enc" | "vp9enc" => self.element.property::<i32>("target-bitrate"),
"x264enc" | "nvh264enc" | "vaapih264enc" => (self.element.property::<u32>("bitrate") * 1000) as i32, "x264enc" | "nvh264enc" | "vaapih264enc" | "vaapivp8enc" => {
factory => unreachable!("Factory {} is currently not supported", factory), (self.element.property::<u32>("bitrate") * 1000) as i32
}
factory => unimplemented!("Factory {} is currently not supported", factory),
} }
} }
@ -541,10 +544,10 @@ impl VideoEncoder {
fn set_bitrate(&mut self, element: &super::WebRTCSink, bitrate: i32) { fn set_bitrate(&mut self, element: &super::WebRTCSink, bitrate: i32) {
match self.factory_name.as_str() { match self.factory_name.as_str() {
"vp8enc" | "vp9enc" => self.element.set_property("target-bitrate", bitrate), "vp8enc" | "vp9enc" => self.element.set_property("target-bitrate", bitrate),
"x264enc" | "nvh264enc" | "vaapih264enc" => self "x264enc" | "nvh264enc" | "vaapih264enc" | "vaapivp8enc" => self
.element .element
.set_property("bitrate", (bitrate / 1000) as u32), .set_property("bitrate", (bitrate / 1000) as u32),
factory => unreachable!("Factory {} is currently not supported", factory), factory => unimplemented!("Factory {} is currently not supported", factory),
} }
let current_caps = self.filter.property::<gst::Caps>("caps"); let current_caps = self.filter.property::<gst::Caps>("caps");