diff options
author | Philippe Normand <philn@igalia.com> | 2023-01-03 19:07:20 +0300 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2023-01-03 20:35:45 +0300 |
commit | 0fd63ece7d25cad588ce8959fdf0d1cd1e9c9560 (patch) | |
tree | a067e010f48f16ee19f2c6ce1b4c979e8adc1def /net/rtp | |
parent | af9d9c0a5cd749181197c33f4eb0d207986b4df7 (diff) |
rtpav1depay: Implement srcpad set_caps
Without this auto-pluggers such as decodebin or parsebin will be unable to
process AV1 RTP payloads.
Tested with: `videotestsrc num-buffers=50 ! videoconvert ! av1enc ! av1parse ! rtpav1pay ! queue ! decodebin3 ! videoconvert ! queue ! autovideosink`
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1034>
Diffstat (limited to 'net/rtp')
-rw-r--r-- | net/rtp/src/av1/depay/imp.rs | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/net/rtp/src/av1/depay/imp.rs b/net/rtp/src/av1/depay/imp.rs index 88b26fce..2312026e 100644 --- a/net/rtp/src/av1/depay/imp.rs +++ b/net/rtp/src/av1/depay/imp.rs @@ -8,6 +8,7 @@ // SPDX-License-Identifier: MPL-2.0 use gst::{glib, subclass::prelude::*}; +use gst_rtp::prelude::*; use gst_rtp::subclass::prelude::*; use std::{ cmp::Ordering, @@ -142,6 +143,15 @@ impl ElementImpl for RTPAv1Depay { } impl RTPBaseDepayloadImpl for RTPAv1Depay { + fn set_caps(&self, _caps: &gst::Caps) -> Result<(), gst::LoggableError> { + let element = self.obj(); + let src_pad = element.src_pad(); + let src_caps = src_pad.pad_template_caps(); + src_pad.push_event(gst::event::Caps::builder(&src_caps).build()); + + Ok(()) + } + fn handle_event(&self, event: gst::Event) -> bool { match event.view() { gst::EventView::Eos(_) | gst::EventView::FlushStop(_) => { @@ -445,7 +455,6 @@ impl RTPAv1Depay { #[rustfmt::skip] mod tests { use super::*; - use gst_rtp::prelude::*; use std::io::Cursor; #[test] |