gstreamer_video/
video_aggregator_pad.rs

1use glib::{object::IsA, translate::*};
2use gst::prelude::*;
3
4use crate::{ffi, subclass::AggregateFramesToken, VideoAggregatorPad};
5
6mod sealed {
7    pub trait Sealed {}
8    impl<T: super::IsA<super::VideoAggregatorPad>> Sealed for T {}
9}
10
11pub trait VideoAggregatorPadExtManual: sealed::Sealed + IsA<VideoAggregatorPad> + 'static {
12    #[doc(alias = "gst_video_aggregator_pad_has_current_buffer")]
13    fn has_current_buffer(&self, _token: &AggregateFramesToken) -> bool {
14        unsafe {
15            from_glib(ffi::gst_video_aggregator_pad_has_current_buffer(
16                self.as_ref().to_glib_none().0,
17            ))
18        }
19    }
20
21    #[doc(alias = "gst_video_aggregator_pad_get_current_buffer")]
22    fn current_buffer(&self, _token: &AggregateFramesToken) -> Option<gst::Buffer> {
23        unsafe {
24            from_glib_none(ffi::gst_video_aggregator_pad_get_current_buffer(
25                self.as_ref().to_glib_none().0,
26            ))
27        }
28    }
29
30    #[doc(alias = "gst_video_aggregator_pad_get_prepared_frame")]
31    fn prepared_frame<'a>(
32        &self,
33        _token: &'a AggregateFramesToken,
34    ) -> Option<crate::VideoFrameRef<&'a gst::BufferRef>> {
35        unsafe {
36            let ptr =
37                ffi::gst_video_aggregator_pad_get_prepared_frame(self.as_ref().to_glib_none().0);
38
39            if ptr.is_null() {
40                None
41            } else {
42                Some(crate::VideoFrameRef::from_glib_borrow(ptr).into_inner())
43            }
44        }
45    }
46
47    fn video_info(&self) -> Option<crate::VideoInfo> {
48        unsafe {
49            let ptr = self.as_ptr() as *mut ffi::GstVideoAggregatorPad;
50            let _guard = self.as_ref().object_lock();
51
52            let info = &(*ptr).info;
53
54            if info.finfo.is_null() || info.width <= 0 || info.height <= 0 {
55                return None;
56            }
57
58            Some(from_glib_none(mut_override(
59                info as *const ffi::GstVideoInfo,
60            )))
61        }
62    }
63}
64
65impl<O: IsA<VideoAggregatorPad>> VideoAggregatorPadExtManual for O {}