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