gstreamer_video/
video_filter.rs
1use glib::{prelude::*, translate::*};
4use gst::prelude::*;
5use gst_base::prelude::*;
6
7use crate::{ffi, VideoFilter};
8
9pub trait VideoFilterExtManual: IsA<VideoFilter> + 'static {
10 fn input_video_info(&self) -> Option<crate::VideoInfo> {
11 unsafe {
12 let ptr = self.as_ptr() as *mut ffi::GstVideoFilter;
13 let sinkpad = self.as_ref().sink_pad();
14 let _guard = sinkpad.stream_lock();
15
16 let info = &(*ptr).in_info;
17
18 if info.finfo.is_null() || info.width <= 0 || info.height <= 0 {
19 return None;
20 }
21
22 Some(from_glib_none(mut_override(
23 info as *const ffi::GstVideoInfo,
24 )))
25 }
26 }
27
28 fn output_video_info(&self) -> Option<crate::VideoInfo> {
29 unsafe {
30 let ptr = self.as_ptr() as *mut ffi::GstVideoFilter;
31 let sinkpad = self.as_ref().sink_pad();
32 let _guard = sinkpad.stream_lock();
33
34 let info = &(*ptr).out_info;
35
36 if info.finfo.is_null() || info.width <= 0 || info.height <= 0 {
37 return None;
38 }
39
40 Some(from_glib_none(mut_override(
41 info as *const ffi::GstVideoInfo,
42 )))
43 }
44 }
45}
46
47impl<O: IsA<VideoFilter>> VideoFilterExtManual for O {}