From 9419730ea4325266ac16337808053fd53c380174 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Fri, 10 Nov 2023 16:47:18 +0200 Subject: [PATCH] video: Add `VIDEO_FORMATS_ANY` and iterator over the formats Part-of: --- gstreamer-video/src/video_format.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/gstreamer-video/src/video_format.rs b/gstreamer-video/src/video_format.rs index 45c4edadf..2691f0f7d 100644 --- a/gstreamer-video/src/video_format.rs +++ b/gstreamer-video/src/video_format.rs @@ -209,6 +209,18 @@ pub static VIDEO_FORMATS_ALL: Lazy> = Lazy::new(|| { } }); +#[cfg(feature = "v1_24")] +pub static VIDEO_FORMATS_ANY: Lazy> = Lazy::new(|| unsafe { + let mut len: u32 = 0; + let mut res = Vec::with_capacity(len as usize); + let formats = ffi::gst_video_formats_any(&mut len); + for i in 0..len { + let format = formats.offset(i as isize); + res.push(from_glib(*format)); + } + res.into_boxed_slice() +}); + #[derive(PartialEq, Eq, Copy, Clone, Debug, Hash)] pub enum VideoEndianness { Unknown, @@ -285,6 +297,11 @@ impl crate::VideoFormat { pub fn iter_raw() -> VideoFormatIterator { VideoFormatIterator::default() } + + #[cfg(feature = "v1_24")] + pub fn iter_any() -> impl Iterator { + VIDEO_FORMATS_ANY.iter().copied() + } } impl str::FromStr for crate::VideoFormat {