Skip to main content

gstreamer_video/auto/
enums.rs

1// This file was generated by gir (https://github.com/gtk-rs/gir)
2// from gir-files (https://github.com/gtk-rs/gir-files)
3// from gst-gir-files (https://gitlab.freedesktop.org/gstreamer/gir-files-rs.git)
4// DO NOT EDIT
5
6use crate::ffi;
7use glib::{GStr, prelude::*, translate::*};
8
9/// Location of a `GstAncillaryMeta`.
10#[cfg(feature = "v1_24")]
11#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
12#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
13#[non_exhaustive]
14#[doc(alias = "GstAncillaryMetaField")]
15pub enum AncillaryMetaField {
16    /// Progressive or no field specified (default)
17    #[doc(alias = "GST_ANCILLARY_META_FIELD_PROGRESSIVE")]
18    Progressive,
19    /// Interlaced first field
20    #[doc(alias = "GST_ANCILLARY_META_FIELD_INTERLACED_FIRST")]
21    InterlacedFirst,
22    /// Interlaced second field
23    #[doc(alias = "GST_ANCILLARY_META_FIELD_INTERLACED_SECOND")]
24    InterlacedSecond,
25    #[doc(hidden)]
26    __Unknown(i32),
27}
28
29#[cfg(feature = "v1_24")]
30#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
31#[doc(hidden)]
32impl IntoGlib for AncillaryMetaField {
33    type GlibType = ffi::GstAncillaryMetaField;
34
35    #[inline]
36    fn into_glib(self) -> ffi::GstAncillaryMetaField {
37        match self {
38            Self::Progressive => ffi::GST_ANCILLARY_META_FIELD_PROGRESSIVE,
39            Self::InterlacedFirst => ffi::GST_ANCILLARY_META_FIELD_INTERLACED_FIRST,
40            Self::InterlacedSecond => ffi::GST_ANCILLARY_META_FIELD_INTERLACED_SECOND,
41            Self::__Unknown(value) => value,
42        }
43    }
44}
45
46#[cfg(feature = "v1_24")]
47#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
48#[doc(hidden)]
49impl FromGlib<ffi::GstAncillaryMetaField> for AncillaryMetaField {
50    #[inline]
51    unsafe fn from_glib(value: ffi::GstAncillaryMetaField) -> Self {
52        skip_assert_initialized!();
53
54        match value {
55            ffi::GST_ANCILLARY_META_FIELD_PROGRESSIVE => Self::Progressive,
56            ffi::GST_ANCILLARY_META_FIELD_INTERLACED_FIRST => Self::InterlacedFirst,
57            ffi::GST_ANCILLARY_META_FIELD_INTERLACED_SECOND => Self::InterlacedSecond,
58            value => Self::__Unknown(value),
59        }
60    }
61}
62
63#[cfg(feature = "v1_24")]
64#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
65impl StaticType for AncillaryMetaField {
66    #[inline]
67    #[doc(alias = "gst_ancillary_meta_field_get_type")]
68    fn static_type() -> glib::Type {
69        unsafe { from_glib(ffi::gst_ancillary_meta_field_get_type()) }
70    }
71}
72
73#[cfg(feature = "v1_24")]
74#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
75impl glib::HasParamSpec for AncillaryMetaField {
76    type ParamSpec = glib::ParamSpecEnum;
77    type SetValue = Self;
78    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
79
80    fn param_spec_builder() -> Self::BuilderFn {
81        Self::ParamSpec::builder_with_default
82    }
83}
84
85#[cfg(feature = "v1_24")]
86#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
87impl glib::value::ValueType for AncillaryMetaField {
88    type Type = Self;
89}
90
91#[cfg(feature = "v1_24")]
92#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
93unsafe impl<'a> glib::value::FromValue<'a> for AncillaryMetaField {
94    type Checker = glib::value::GenericValueTypeChecker<Self>;
95
96    #[inline]
97    unsafe fn from_value(value: &'a glib::Value) -> Self {
98        skip_assert_initialized!();
99        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
100    }
101}
102
103#[cfg(feature = "v1_24")]
104#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
105impl ToValue for AncillaryMetaField {
106    #[inline]
107    fn to_value(&self) -> glib::Value {
108        let mut value = glib::Value::for_value_type::<Self>();
109        unsafe {
110            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
111        }
112        value
113    }
114
115    #[inline]
116    fn value_type(&self) -> glib::Type {
117        Self::static_type()
118    }
119}
120
121#[cfg(feature = "v1_24")]
122#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
123impl From<AncillaryMetaField> for glib::Value {
124    #[inline]
125    fn from(v: AncillaryMetaField) -> Self {
126        skip_assert_initialized!();
127        ToValue::to_value(&v)
128    }
129}
130
131/// An enumeration indicating whether an element implements color balancing
132/// operations in software or in dedicated hardware. In general, dedicated
133/// hardware implementations (such as those provided by xvimagesink) are
134/// preferred.
135#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
136#[non_exhaustive]
137#[doc(alias = "GstColorBalanceType")]
138pub enum ColorBalanceType {
139    /// Color balance is implemented with dedicated
140    ///  hardware.
141    #[doc(alias = "GST_COLOR_BALANCE_HARDWARE")]
142    Hardware,
143    /// Color balance is implemented via software
144    ///  processing.
145    #[doc(alias = "GST_COLOR_BALANCE_SOFTWARE")]
146    Software,
147    #[doc(hidden)]
148    __Unknown(i32),
149}
150
151#[doc(hidden)]
152impl IntoGlib for ColorBalanceType {
153    type GlibType = ffi::GstColorBalanceType;
154
155    #[inline]
156    fn into_glib(self) -> ffi::GstColorBalanceType {
157        match self {
158            Self::Hardware => ffi::GST_COLOR_BALANCE_HARDWARE,
159            Self::Software => ffi::GST_COLOR_BALANCE_SOFTWARE,
160            Self::__Unknown(value) => value,
161        }
162    }
163}
164
165#[doc(hidden)]
166impl FromGlib<ffi::GstColorBalanceType> for ColorBalanceType {
167    #[inline]
168    unsafe fn from_glib(value: ffi::GstColorBalanceType) -> Self {
169        skip_assert_initialized!();
170
171        match value {
172            ffi::GST_COLOR_BALANCE_HARDWARE => Self::Hardware,
173            ffi::GST_COLOR_BALANCE_SOFTWARE => Self::Software,
174            value => Self::__Unknown(value),
175        }
176    }
177}
178
179impl StaticType for ColorBalanceType {
180    #[inline]
181    #[doc(alias = "gst_color_balance_type_get_type")]
182    fn static_type() -> glib::Type {
183        unsafe { from_glib(ffi::gst_color_balance_type_get_type()) }
184    }
185}
186
187impl glib::HasParamSpec for ColorBalanceType {
188    type ParamSpec = glib::ParamSpecEnum;
189    type SetValue = Self;
190    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
191
192    fn param_spec_builder() -> Self::BuilderFn {
193        Self::ParamSpec::builder_with_default
194    }
195}
196
197impl glib::value::ValueType for ColorBalanceType {
198    type Type = Self;
199}
200
201unsafe impl<'a> glib::value::FromValue<'a> for ColorBalanceType {
202    type Checker = glib::value::GenericValueTypeChecker<Self>;
203
204    #[inline]
205    unsafe fn from_value(value: &'a glib::Value) -> Self {
206        skip_assert_initialized!();
207        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
208    }
209}
210
211impl ToValue for ColorBalanceType {
212    #[inline]
213    fn to_value(&self) -> glib::Value {
214        let mut value = glib::Value::for_value_type::<Self>();
215        unsafe {
216            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
217        }
218        value
219    }
220
221    #[inline]
222    fn value_type(&self) -> glib::Type {
223        Self::static_type()
224    }
225}
226
227impl From<ColorBalanceType> for glib::Value {
228    #[inline]
229    fn from(v: ColorBalanceType) -> Self {
230        skip_assert_initialized!();
231        ToValue::to_value(&v)
232    }
233}
234
235/// A set of commands that may be issued to an element providing the
236/// [`Navigation`][crate::Navigation] interface. The available commands can be queried via
237/// the `gst_navigation_query_new_commands()` query.
238///
239/// For convenience in handling DVD navigation, the MENU commands are aliased as:
240///  GST_NAVIGATION_COMMAND_DVD_MENU = [`Menu1`][Self::Menu1]
241///  GST_NAVIGATION_COMMAND_DVD_TITLE_MENU = [`Menu2`][Self::Menu2]
242///  GST_NAVIGATION_COMMAND_DVD_ROOT_MENU = [`Menu3`][Self::Menu3]
243///  GST_NAVIGATION_COMMAND_DVD_SUBPICTURE_MENU = [`Menu4`][Self::Menu4]
244///  GST_NAVIGATION_COMMAND_DVD_AUDIO_MENU = [`Menu5`][Self::Menu5]
245///  GST_NAVIGATION_COMMAND_DVD_ANGLE_MENU = [`Menu6`][Self::Menu6]
246///  GST_NAVIGATION_COMMAND_DVD_CHAPTER_MENU = [`Menu7`][Self::Menu7]
247#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
248#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
249#[non_exhaustive]
250#[doc(alias = "GstNavigationCommand")]
251pub enum NavigationCommand {
252    /// An invalid command entry
253    #[doc(alias = "GST_NAVIGATION_COMMAND_INVALID")]
254    Invalid,
255    /// Execute navigation menu command 1. For DVD,
256    /// this enters the DVD root menu, or exits back to the title from the menu.
257    #[doc(alias = "GST_NAVIGATION_COMMAND_MENU1")]
258    Menu1,
259    /// Execute navigation menu command 2. For DVD,
260    /// this jumps to the DVD title menu.
261    #[doc(alias = "GST_NAVIGATION_COMMAND_MENU2")]
262    Menu2,
263    /// Execute navigation menu command 3. For DVD,
264    /// this jumps into the DVD root menu.
265    #[doc(alias = "GST_NAVIGATION_COMMAND_MENU3")]
266    Menu3,
267    /// Execute navigation menu command 4. For DVD,
268    /// this jumps to the Subpicture menu.
269    #[doc(alias = "GST_NAVIGATION_COMMAND_MENU4")]
270    Menu4,
271    /// Execute navigation menu command 5. For DVD,
272    /// the jumps to the audio menu.
273    #[doc(alias = "GST_NAVIGATION_COMMAND_MENU5")]
274    Menu5,
275    /// Execute navigation menu command 6. For DVD,
276    /// this jumps to the angles menu.
277    #[doc(alias = "GST_NAVIGATION_COMMAND_MENU6")]
278    Menu6,
279    /// Execute navigation menu command 7. For DVD,
280    /// this jumps to the chapter menu.
281    #[doc(alias = "GST_NAVIGATION_COMMAND_MENU7")]
282    Menu7,
283    /// Select the next button to the left in a menu,
284    /// if such a button exists.
285    #[doc(alias = "GST_NAVIGATION_COMMAND_LEFT")]
286    Left,
287    /// Select the next button to the right in a menu,
288    /// if such a button exists.
289    #[doc(alias = "GST_NAVIGATION_COMMAND_RIGHT")]
290    Right,
291    /// Select the button above the current one in a
292    /// menu, if such a button exists.
293    #[doc(alias = "GST_NAVIGATION_COMMAND_UP")]
294    Up,
295    /// Select the button below the current one in a
296    /// menu, if such a button exists.
297    #[doc(alias = "GST_NAVIGATION_COMMAND_DOWN")]
298    Down,
299    /// Activate (click) the currently selected
300    /// button in a menu, if such a button exists.
301    #[doc(alias = "GST_NAVIGATION_COMMAND_ACTIVATE")]
302    Activate,
303    /// Switch to the previous angle in a
304    /// multiangle feature.
305    #[doc(alias = "GST_NAVIGATION_COMMAND_PREV_ANGLE")]
306    PrevAngle,
307    /// Switch to the next angle in a multiangle
308    /// feature.
309    #[doc(alias = "GST_NAVIGATION_COMMAND_NEXT_ANGLE")]
310    NextAngle,
311    #[doc(hidden)]
312    __Unknown(i32),
313}
314
315#[doc(hidden)]
316impl IntoGlib for NavigationCommand {
317    type GlibType = ffi::GstNavigationCommand;
318
319    fn into_glib(self) -> ffi::GstNavigationCommand {
320        match self {
321            Self::Invalid => ffi::GST_NAVIGATION_COMMAND_INVALID,
322            Self::Menu1 => ffi::GST_NAVIGATION_COMMAND_MENU1,
323            Self::Menu2 => ffi::GST_NAVIGATION_COMMAND_MENU2,
324            Self::Menu3 => ffi::GST_NAVIGATION_COMMAND_MENU3,
325            Self::Menu4 => ffi::GST_NAVIGATION_COMMAND_MENU4,
326            Self::Menu5 => ffi::GST_NAVIGATION_COMMAND_MENU5,
327            Self::Menu6 => ffi::GST_NAVIGATION_COMMAND_MENU6,
328            Self::Menu7 => ffi::GST_NAVIGATION_COMMAND_MENU7,
329            Self::Left => ffi::GST_NAVIGATION_COMMAND_LEFT,
330            Self::Right => ffi::GST_NAVIGATION_COMMAND_RIGHT,
331            Self::Up => ffi::GST_NAVIGATION_COMMAND_UP,
332            Self::Down => ffi::GST_NAVIGATION_COMMAND_DOWN,
333            Self::Activate => ffi::GST_NAVIGATION_COMMAND_ACTIVATE,
334            Self::PrevAngle => ffi::GST_NAVIGATION_COMMAND_PREV_ANGLE,
335            Self::NextAngle => ffi::GST_NAVIGATION_COMMAND_NEXT_ANGLE,
336            Self::__Unknown(value) => value,
337        }
338    }
339}
340
341#[doc(hidden)]
342impl FromGlib<ffi::GstNavigationCommand> for NavigationCommand {
343    unsafe fn from_glib(value: ffi::GstNavigationCommand) -> Self {
344        skip_assert_initialized!();
345
346        match value {
347            ffi::GST_NAVIGATION_COMMAND_INVALID => Self::Invalid,
348            ffi::GST_NAVIGATION_COMMAND_MENU1 => Self::Menu1,
349            ffi::GST_NAVIGATION_COMMAND_MENU2 => Self::Menu2,
350            ffi::GST_NAVIGATION_COMMAND_MENU3 => Self::Menu3,
351            ffi::GST_NAVIGATION_COMMAND_MENU4 => Self::Menu4,
352            ffi::GST_NAVIGATION_COMMAND_MENU5 => Self::Menu5,
353            ffi::GST_NAVIGATION_COMMAND_MENU6 => Self::Menu6,
354            ffi::GST_NAVIGATION_COMMAND_MENU7 => Self::Menu7,
355            ffi::GST_NAVIGATION_COMMAND_LEFT => Self::Left,
356            ffi::GST_NAVIGATION_COMMAND_RIGHT => Self::Right,
357            ffi::GST_NAVIGATION_COMMAND_UP => Self::Up,
358            ffi::GST_NAVIGATION_COMMAND_DOWN => Self::Down,
359            ffi::GST_NAVIGATION_COMMAND_ACTIVATE => Self::Activate,
360            ffi::GST_NAVIGATION_COMMAND_PREV_ANGLE => Self::PrevAngle,
361            ffi::GST_NAVIGATION_COMMAND_NEXT_ANGLE => Self::NextAngle,
362            value => Self::__Unknown(value),
363        }
364    }
365}
366
367impl StaticType for NavigationCommand {
368    #[inline]
369    #[doc(alias = "gst_navigation_command_get_type")]
370    fn static_type() -> glib::Type {
371        unsafe { from_glib(ffi::gst_navigation_command_get_type()) }
372    }
373}
374
375impl glib::HasParamSpec for NavigationCommand {
376    type ParamSpec = glib::ParamSpecEnum;
377    type SetValue = Self;
378    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
379
380    fn param_spec_builder() -> Self::BuilderFn {
381        Self::ParamSpec::builder_with_default
382    }
383}
384
385impl glib::value::ValueType for NavigationCommand {
386    type Type = Self;
387}
388
389unsafe impl<'a> glib::value::FromValue<'a> for NavigationCommand {
390    type Checker = glib::value::GenericValueTypeChecker<Self>;
391
392    #[inline]
393    unsafe fn from_value(value: &'a glib::Value) -> Self {
394        skip_assert_initialized!();
395        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
396    }
397}
398
399impl ToValue for NavigationCommand {
400    #[inline]
401    fn to_value(&self) -> glib::Value {
402        let mut value = glib::Value::for_value_type::<Self>();
403        unsafe {
404            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
405        }
406        value
407    }
408
409    #[inline]
410    fn value_type(&self) -> glib::Type {
411        Self::static_type()
412    }
413}
414
415impl From<NavigationCommand> for glib::Value {
416    #[inline]
417    fn from(v: NavigationCommand) -> Self {
418        skip_assert_initialized!();
419        ToValue::to_value(&v)
420    }
421}
422
423/// Enum values for the various events that an element implementing the
424/// GstNavigation interface might send up the pipeline. Touch events have been
425/// inspired by the libinput API, and have the same meaning here.
426#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
427#[non_exhaustive]
428#[doc(alias = "GstNavigationEventType")]
429pub enum NavigationEventType {
430    /// Returned from
431    /// [`Navigation::event_get_type()`][crate::Navigation::event_get_type()] when the passed event is not a navigation event.
432    #[doc(alias = "GST_NAVIGATION_EVENT_INVALID")]
433    Invalid,
434    /// A key press event. Use
435    /// [`Navigation::event_parse_key_event()`][crate::Navigation::event_parse_key_event()] to extract the details from the event.
436    #[doc(alias = "GST_NAVIGATION_EVENT_KEY_PRESS")]
437    KeyPress,
438    /// A key release event. Use
439    /// [`Navigation::event_parse_key_event()`][crate::Navigation::event_parse_key_event()] to extract the details from the event.
440    #[doc(alias = "GST_NAVIGATION_EVENT_KEY_RELEASE")]
441    KeyRelease,
442    /// A mouse button press event. Use
443    /// [`Navigation::event_parse_mouse_button_event()`][crate::Navigation::event_parse_mouse_button_event()] to extract the details from the
444    /// event.
445    #[doc(alias = "GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS")]
446    MouseButtonPress,
447    /// A mouse button release event. Use
448    /// [`Navigation::event_parse_mouse_button_event()`][crate::Navigation::event_parse_mouse_button_event()] to extract the details from the
449    /// event.
450    #[doc(alias = "GST_NAVIGATION_EVENT_MOUSE_BUTTON_RELEASE")]
451    MouseButtonRelease,
452    /// A mouse movement event. Use
453    /// [`Navigation::event_parse_mouse_move_event()`][crate::Navigation::event_parse_mouse_move_event()] to extract the details from the
454    /// event.
455    #[doc(alias = "GST_NAVIGATION_EVENT_MOUSE_MOVE")]
456    MouseMove,
457    /// A navigation command event. Use
458    /// [`Navigation::event_parse_command()`][crate::Navigation::event_parse_command()] to extract the details from the event.
459    #[doc(alias = "GST_NAVIGATION_EVENT_COMMAND")]
460    Command,
461    /// A mouse scroll event. Use [`Navigation::event_parse_mouse_scroll_event()`][crate::Navigation::event_parse_mouse_scroll_event()]
462    /// to extract the details from the event.
463    #[cfg(feature = "v1_18")]
464    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
465    #[doc(alias = "GST_NAVIGATION_EVENT_MOUSE_SCROLL")]
466    MouseScroll,
467    /// An event describing a new touch point, which will be assigned an identifier
468    /// that is unique to it for the duration of its movement on the screen.
469    /// Use [`Navigation::event_parse_touch_event()`][crate::Navigation::event_parse_touch_event()] to extract the details
470    /// from the event.
471    #[cfg(feature = "v1_22")]
472    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
473    #[doc(alias = "GST_NAVIGATION_EVENT_TOUCH_DOWN")]
474    TouchDown,
475    /// An event describing the movement of an active touch point across
476    /// the screen. Use [`Navigation::event_parse_touch_event()`][crate::Navigation::event_parse_touch_event()] to extract
477    /// the details from the event.
478    #[cfg(feature = "v1_22")]
479    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
480    #[doc(alias = "GST_NAVIGATION_EVENT_TOUCH_MOTION")]
481    TouchMotion,
482    /// An event describing a removed touch point. After this event,
483    /// its identifier may be reused for any new touch points.
484    /// Use [`Navigation::event_parse_touch_up_event()`][crate::Navigation::event_parse_touch_up_event()] to extract the details
485    /// from the event.
486    #[cfg(feature = "v1_22")]
487    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
488    #[doc(alias = "GST_NAVIGATION_EVENT_TOUCH_UP")]
489    TouchUp,
490    /// An event signaling the end of a sequence of simultaneous touch events.
491    #[cfg(feature = "v1_22")]
492    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
493    #[doc(alias = "GST_NAVIGATION_EVENT_TOUCH_FRAME")]
494    TouchFrame,
495    /// An event cancelling all currently active touch points.
496    #[cfg(feature = "v1_22")]
497    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
498    #[doc(alias = "GST_NAVIGATION_EVENT_TOUCH_CANCEL")]
499    TouchCancel,
500    /// A mouse button double click event.
501    /// Use [`Navigation::event_parse_mouse_button_event()`][crate::Navigation::event_parse_mouse_button_event()] to extract the details
502    /// from the event.
503    #[cfg(feature = "v1_26")]
504    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
505    #[doc(alias = "GST_NAVIGATION_EVENT_MOUSE_DOUBLE_CLICK")]
506    MouseDoubleClick,
507    #[doc(hidden)]
508    __Unknown(i32),
509}
510
511#[doc(hidden)]
512impl IntoGlib for NavigationEventType {
513    type GlibType = ffi::GstNavigationEventType;
514
515    fn into_glib(self) -> ffi::GstNavigationEventType {
516        match self {
517            Self::Invalid => ffi::GST_NAVIGATION_EVENT_INVALID,
518            Self::KeyPress => ffi::GST_NAVIGATION_EVENT_KEY_PRESS,
519            Self::KeyRelease => ffi::GST_NAVIGATION_EVENT_KEY_RELEASE,
520            Self::MouseButtonPress => ffi::GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS,
521            Self::MouseButtonRelease => ffi::GST_NAVIGATION_EVENT_MOUSE_BUTTON_RELEASE,
522            Self::MouseMove => ffi::GST_NAVIGATION_EVENT_MOUSE_MOVE,
523            Self::Command => ffi::GST_NAVIGATION_EVENT_COMMAND,
524            #[cfg(feature = "v1_18")]
525            Self::MouseScroll => ffi::GST_NAVIGATION_EVENT_MOUSE_SCROLL,
526            #[cfg(feature = "v1_22")]
527            Self::TouchDown => ffi::GST_NAVIGATION_EVENT_TOUCH_DOWN,
528            #[cfg(feature = "v1_22")]
529            Self::TouchMotion => ffi::GST_NAVIGATION_EVENT_TOUCH_MOTION,
530            #[cfg(feature = "v1_22")]
531            Self::TouchUp => ffi::GST_NAVIGATION_EVENT_TOUCH_UP,
532            #[cfg(feature = "v1_22")]
533            Self::TouchFrame => ffi::GST_NAVIGATION_EVENT_TOUCH_FRAME,
534            #[cfg(feature = "v1_22")]
535            Self::TouchCancel => ffi::GST_NAVIGATION_EVENT_TOUCH_CANCEL,
536            #[cfg(feature = "v1_26")]
537            Self::MouseDoubleClick => ffi::GST_NAVIGATION_EVENT_MOUSE_DOUBLE_CLICK,
538            Self::__Unknown(value) => value,
539        }
540    }
541}
542
543#[doc(hidden)]
544impl FromGlib<ffi::GstNavigationEventType> for NavigationEventType {
545    unsafe fn from_glib(value: ffi::GstNavigationEventType) -> Self {
546        skip_assert_initialized!();
547
548        match value {
549            ffi::GST_NAVIGATION_EVENT_INVALID => Self::Invalid,
550            ffi::GST_NAVIGATION_EVENT_KEY_PRESS => Self::KeyPress,
551            ffi::GST_NAVIGATION_EVENT_KEY_RELEASE => Self::KeyRelease,
552            ffi::GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS => Self::MouseButtonPress,
553            ffi::GST_NAVIGATION_EVENT_MOUSE_BUTTON_RELEASE => Self::MouseButtonRelease,
554            ffi::GST_NAVIGATION_EVENT_MOUSE_MOVE => Self::MouseMove,
555            ffi::GST_NAVIGATION_EVENT_COMMAND => Self::Command,
556            #[cfg(feature = "v1_18")]
557            ffi::GST_NAVIGATION_EVENT_MOUSE_SCROLL => Self::MouseScroll,
558            #[cfg(feature = "v1_22")]
559            ffi::GST_NAVIGATION_EVENT_TOUCH_DOWN => Self::TouchDown,
560            #[cfg(feature = "v1_22")]
561            ffi::GST_NAVIGATION_EVENT_TOUCH_MOTION => Self::TouchMotion,
562            #[cfg(feature = "v1_22")]
563            ffi::GST_NAVIGATION_EVENT_TOUCH_UP => Self::TouchUp,
564            #[cfg(feature = "v1_22")]
565            ffi::GST_NAVIGATION_EVENT_TOUCH_FRAME => Self::TouchFrame,
566            #[cfg(feature = "v1_22")]
567            ffi::GST_NAVIGATION_EVENT_TOUCH_CANCEL => Self::TouchCancel,
568            #[cfg(feature = "v1_26")]
569            ffi::GST_NAVIGATION_EVENT_MOUSE_DOUBLE_CLICK => Self::MouseDoubleClick,
570            value => Self::__Unknown(value),
571        }
572    }
573}
574
575impl StaticType for NavigationEventType {
576    #[inline]
577    #[doc(alias = "gst_navigation_event_type_get_type")]
578    fn static_type() -> glib::Type {
579        unsafe { from_glib(ffi::gst_navigation_event_type_get_type()) }
580    }
581}
582
583impl glib::HasParamSpec for NavigationEventType {
584    type ParamSpec = glib::ParamSpecEnum;
585    type SetValue = Self;
586    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
587
588    fn param_spec_builder() -> Self::BuilderFn {
589        Self::ParamSpec::builder_with_default
590    }
591}
592
593impl glib::value::ValueType for NavigationEventType {
594    type Type = Self;
595}
596
597unsafe impl<'a> glib::value::FromValue<'a> for NavigationEventType {
598    type Checker = glib::value::GenericValueTypeChecker<Self>;
599
600    #[inline]
601    unsafe fn from_value(value: &'a glib::Value) -> Self {
602        skip_assert_initialized!();
603        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
604    }
605}
606
607impl ToValue for NavigationEventType {
608    #[inline]
609    fn to_value(&self) -> glib::Value {
610        let mut value = glib::Value::for_value_type::<Self>();
611        unsafe {
612            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
613        }
614        value
615    }
616
617    #[inline]
618    fn value_type(&self) -> glib::Type {
619        Self::static_type()
620    }
621}
622
623impl From<NavigationEventType> for glib::Value {
624    #[inline]
625    fn from(v: NavigationEventType) -> Self {
626        skip_assert_initialized!();
627        ToValue::to_value(&v)
628    }
629}
630
631/// A set of notifications that may be received on the bus when navigation
632/// related status changes.
633#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
634#[non_exhaustive]
635#[doc(alias = "GstNavigationMessageType")]
636pub enum NavigationMessageType {
637    /// Returned from
638    /// [`Navigation::message_get_type()`][crate::Navigation::message_get_type()] when the passed message is not a
639    /// navigation message.
640    #[doc(alias = "GST_NAVIGATION_MESSAGE_INVALID")]
641    Invalid,
642    /// Sent when the mouse moves over or leaves a
643    /// clickable region of the output, such as a DVD menu button.
644    #[doc(alias = "GST_NAVIGATION_MESSAGE_MOUSE_OVER")]
645    MouseOver,
646    /// Sent when the set of available commands
647    /// changes and should re-queried by interested applications.
648    #[doc(alias = "GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED")]
649    CommandsChanged,
650    /// Sent when display angles in a multi-angle
651    /// feature (such as a multiangle DVD) change - either angles have appeared or
652    /// disappeared.
653    #[doc(alias = "GST_NAVIGATION_MESSAGE_ANGLES_CHANGED")]
654    AnglesChanged,
655    /// Sent when a navigation event was not handled
656    /// by any element in the pipeline (Since: 1.6)
657    #[doc(alias = "GST_NAVIGATION_MESSAGE_EVENT")]
658    Event,
659    #[doc(hidden)]
660    __Unknown(i32),
661}
662
663#[doc(hidden)]
664impl IntoGlib for NavigationMessageType {
665    type GlibType = ffi::GstNavigationMessageType;
666
667    #[inline]
668    fn into_glib(self) -> ffi::GstNavigationMessageType {
669        match self {
670            Self::Invalid => ffi::GST_NAVIGATION_MESSAGE_INVALID,
671            Self::MouseOver => ffi::GST_NAVIGATION_MESSAGE_MOUSE_OVER,
672            Self::CommandsChanged => ffi::GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED,
673            Self::AnglesChanged => ffi::GST_NAVIGATION_MESSAGE_ANGLES_CHANGED,
674            Self::Event => ffi::GST_NAVIGATION_MESSAGE_EVENT,
675            Self::__Unknown(value) => value,
676        }
677    }
678}
679
680#[doc(hidden)]
681impl FromGlib<ffi::GstNavigationMessageType> for NavigationMessageType {
682    #[inline]
683    unsafe fn from_glib(value: ffi::GstNavigationMessageType) -> Self {
684        skip_assert_initialized!();
685
686        match value {
687            ffi::GST_NAVIGATION_MESSAGE_INVALID => Self::Invalid,
688            ffi::GST_NAVIGATION_MESSAGE_MOUSE_OVER => Self::MouseOver,
689            ffi::GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED => Self::CommandsChanged,
690            ffi::GST_NAVIGATION_MESSAGE_ANGLES_CHANGED => Self::AnglesChanged,
691            ffi::GST_NAVIGATION_MESSAGE_EVENT => Self::Event,
692            value => Self::__Unknown(value),
693        }
694    }
695}
696
697impl StaticType for NavigationMessageType {
698    #[inline]
699    #[doc(alias = "gst_navigation_message_type_get_type")]
700    fn static_type() -> glib::Type {
701        unsafe { from_glib(ffi::gst_navigation_message_type_get_type()) }
702    }
703}
704
705impl glib::HasParamSpec for NavigationMessageType {
706    type ParamSpec = glib::ParamSpecEnum;
707    type SetValue = Self;
708    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
709
710    fn param_spec_builder() -> Self::BuilderFn {
711        Self::ParamSpec::builder_with_default
712    }
713}
714
715impl glib::value::ValueType for NavigationMessageType {
716    type Type = Self;
717}
718
719unsafe impl<'a> glib::value::FromValue<'a> for NavigationMessageType {
720    type Checker = glib::value::GenericValueTypeChecker<Self>;
721
722    #[inline]
723    unsafe fn from_value(value: &'a glib::Value) -> Self {
724        skip_assert_initialized!();
725        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
726    }
727}
728
729impl ToValue for NavigationMessageType {
730    #[inline]
731    fn to_value(&self) -> glib::Value {
732        let mut value = glib::Value::for_value_type::<Self>();
733        unsafe {
734            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
735        }
736        value
737    }
738
739    #[inline]
740    fn value_type(&self) -> glib::Type {
741        Self::static_type()
742    }
743}
744
745impl From<NavigationMessageType> for glib::Value {
746    #[inline]
747    fn from(v: NavigationMessageType) -> Self {
748        skip_assert_initialized!();
749        ToValue::to_value(&v)
750    }
751}
752
753/// Types of navigation interface queries.
754#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
755#[non_exhaustive]
756#[doc(alias = "GstNavigationQueryType")]
757pub enum NavigationQueryType {
758    /// invalid query
759    #[doc(alias = "GST_NAVIGATION_QUERY_INVALID")]
760    Invalid,
761    /// command query
762    #[doc(alias = "GST_NAVIGATION_QUERY_COMMANDS")]
763    Commands,
764    /// viewing angle query
765    #[doc(alias = "GST_NAVIGATION_QUERY_ANGLES")]
766    Angles,
767    #[doc(hidden)]
768    __Unknown(i32),
769}
770
771#[doc(hidden)]
772impl IntoGlib for NavigationQueryType {
773    type GlibType = ffi::GstNavigationQueryType;
774
775    #[inline]
776    fn into_glib(self) -> ffi::GstNavigationQueryType {
777        match self {
778            Self::Invalid => ffi::GST_NAVIGATION_QUERY_INVALID,
779            Self::Commands => ffi::GST_NAVIGATION_QUERY_COMMANDS,
780            Self::Angles => ffi::GST_NAVIGATION_QUERY_ANGLES,
781            Self::__Unknown(value) => value,
782        }
783    }
784}
785
786#[doc(hidden)]
787impl FromGlib<ffi::GstNavigationQueryType> for NavigationQueryType {
788    #[inline]
789    unsafe fn from_glib(value: ffi::GstNavigationQueryType) -> Self {
790        skip_assert_initialized!();
791
792        match value {
793            ffi::GST_NAVIGATION_QUERY_INVALID => Self::Invalid,
794            ffi::GST_NAVIGATION_QUERY_COMMANDS => Self::Commands,
795            ffi::GST_NAVIGATION_QUERY_ANGLES => Self::Angles,
796            value => Self::__Unknown(value),
797        }
798    }
799}
800
801impl StaticType for NavigationQueryType {
802    #[inline]
803    #[doc(alias = "gst_navigation_query_type_get_type")]
804    fn static_type() -> glib::Type {
805        unsafe { from_glib(ffi::gst_navigation_query_type_get_type()) }
806    }
807}
808
809impl glib::HasParamSpec for NavigationQueryType {
810    type ParamSpec = glib::ParamSpecEnum;
811    type SetValue = Self;
812    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
813
814    fn param_spec_builder() -> Self::BuilderFn {
815        Self::ParamSpec::builder_with_default
816    }
817}
818
819impl glib::value::ValueType for NavigationQueryType {
820    type Type = Self;
821}
822
823unsafe impl<'a> glib::value::FromValue<'a> for NavigationQueryType {
824    type Checker = glib::value::GenericValueTypeChecker<Self>;
825
826    #[inline]
827    unsafe fn from_value(value: &'a glib::Value) -> Self {
828        skip_assert_initialized!();
829        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
830    }
831}
832
833impl ToValue for NavigationQueryType {
834    #[inline]
835    fn to_value(&self) -> glib::Value {
836        let mut value = glib::Value::for_value_type::<Self>();
837        unsafe {
838            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
839        }
840        value
841    }
842
843    #[inline]
844    fn value_type(&self) -> glib::Type {
845        Self::static_type()
846    }
847}
848
849impl From<NavigationQueryType> for glib::Value {
850    #[inline]
851    fn from(v: NavigationQueryType) -> Self {
852        skip_assert_initialized!();
853        ToValue::to_value(&v)
854    }
855}
856
857/// Enumeration of the different standards that may apply to AFD data:
858///
859/// 0) ETSI/DVB:
860/// https://www.etsi.org/deliver/etsi_ts/101100_101199/101154/02.01.01_60/ts_101154v020101p.pdf
861///
862/// 1) ATSC A/53:
863/// https://www.atsc.org/wp-content/uploads/2015/03/a_53-Part-4-2009.pdf
864///
865/// 2) SMPTE ST2016-1:
866#[cfg(feature = "v1_18")]
867#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
868#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
869#[non_exhaustive]
870#[doc(alias = "GstVideoAFDSpec")]
871pub enum VideoAFDSpec {
872    /// AFD value is from DVB/ETSI standard
873    #[doc(alias = "GST_VIDEO_AFD_SPEC_DVB_ETSI")]
874    DvbEtsi,
875    /// AFD value is from ATSC A/53 standard
876    #[doc(alias = "GST_VIDEO_AFD_SPEC_ATSC_A53")]
877    AtscA53,
878    #[doc(alias = "GST_VIDEO_AFD_SPEC_SMPTE_ST2016_1")]
879    SmpteSt20161,
880    #[doc(hidden)]
881    __Unknown(i32),
882}
883
884#[cfg(feature = "v1_18")]
885#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
886#[doc(hidden)]
887impl IntoGlib for VideoAFDSpec {
888    type GlibType = ffi::GstVideoAFDSpec;
889
890    #[inline]
891    fn into_glib(self) -> ffi::GstVideoAFDSpec {
892        match self {
893            Self::DvbEtsi => ffi::GST_VIDEO_AFD_SPEC_DVB_ETSI,
894            Self::AtscA53 => ffi::GST_VIDEO_AFD_SPEC_ATSC_A53,
895            Self::SmpteSt20161 => ffi::GST_VIDEO_AFD_SPEC_SMPTE_ST2016_1,
896            Self::__Unknown(value) => value,
897        }
898    }
899}
900
901#[cfg(feature = "v1_18")]
902#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
903#[doc(hidden)]
904impl FromGlib<ffi::GstVideoAFDSpec> for VideoAFDSpec {
905    #[inline]
906    unsafe fn from_glib(value: ffi::GstVideoAFDSpec) -> Self {
907        skip_assert_initialized!();
908
909        match value {
910            ffi::GST_VIDEO_AFD_SPEC_DVB_ETSI => Self::DvbEtsi,
911            ffi::GST_VIDEO_AFD_SPEC_ATSC_A53 => Self::AtscA53,
912            ffi::GST_VIDEO_AFD_SPEC_SMPTE_ST2016_1 => Self::SmpteSt20161,
913            value => Self::__Unknown(value),
914        }
915    }
916}
917
918#[cfg(feature = "v1_18")]
919#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
920impl StaticType for VideoAFDSpec {
921    #[inline]
922    #[doc(alias = "gst_video_afd_spec_get_type")]
923    fn static_type() -> glib::Type {
924        unsafe { from_glib(ffi::gst_video_afd_spec_get_type()) }
925    }
926}
927
928#[cfg(feature = "v1_18")]
929#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
930impl glib::HasParamSpec for VideoAFDSpec {
931    type ParamSpec = glib::ParamSpecEnum;
932    type SetValue = Self;
933    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
934
935    fn param_spec_builder() -> Self::BuilderFn {
936        Self::ParamSpec::builder_with_default
937    }
938}
939
940#[cfg(feature = "v1_18")]
941#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
942impl glib::value::ValueType for VideoAFDSpec {
943    type Type = Self;
944}
945
946#[cfg(feature = "v1_18")]
947#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
948unsafe impl<'a> glib::value::FromValue<'a> for VideoAFDSpec {
949    type Checker = glib::value::GenericValueTypeChecker<Self>;
950
951    #[inline]
952    unsafe fn from_value(value: &'a glib::Value) -> Self {
953        skip_assert_initialized!();
954        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
955    }
956}
957
958#[cfg(feature = "v1_18")]
959#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
960impl ToValue for VideoAFDSpec {
961    #[inline]
962    fn to_value(&self) -> glib::Value {
963        let mut value = glib::Value::for_value_type::<Self>();
964        unsafe {
965            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
966        }
967        value
968    }
969
970    #[inline]
971    fn value_type(&self) -> glib::Type {
972        Self::static_type()
973    }
974}
975
976#[cfg(feature = "v1_18")]
977#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
978impl From<VideoAFDSpec> for glib::Value {
979    #[inline]
980    fn from(v: VideoAFDSpec) -> Self {
981        skip_assert_initialized!();
982        ToValue::to_value(&v)
983    }
984}
985
986///  should be accompanied by Bar Data to define the exact vertical or horizontal extent
987/// of the active image.
988/// 2) AFD 0 is reserved for DVB/ETSI
989/// 3) values 1, 5, 6, 7, and 12 are reserved for both ATSC and DVB/ETSI
990/// 4) values 2 and 3 are not recommended for ATSC, but are valid for DVB/ETSI
991#[cfg(feature = "v1_18")]
992#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
993#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
994#[non_exhaustive]
995#[doc(alias = "GstVideoAFDValue")]
996pub enum VideoAFDValue {
997    /// Unavailable (see note 0 below).
998    #[doc(alias = "GST_VIDEO_AFD_UNAVAILABLE")]
999    Unavailable,
1000    /// For 4:3 coded frame, letterbox 16:9 image,
1001    ///  at top of the coded frame. For 16:9 coded frame, full frame 16:9 image,
1002    ///  the same as the coded frame.
1003    #[doc(alias = "GST_VIDEO_AFD_16_9_TOP_ALIGNED")]
1004    _169TopAligned,
1005    /// For 4:3 coded frame, letterbox 14:9 image,
1006    ///  at top of the coded frame. For 16:9 coded frame, pillarbox 14:9 image,
1007    ///  horizontally centered in the coded frame.
1008    #[doc(alias = "GST_VIDEO_AFD_14_9_TOP_ALIGNED")]
1009    _149TopAligned,
1010    /// For 4:3 coded frame, letterbox image with an aspect ratio
1011    ///  greater than 16:9, vertically centered in the coded frame. For 16:9 coded frame,
1012    ///  letterbox image with an aspect ratio greater than 16:9.
1013    #[doc(alias = "GST_VIDEO_AFD_GREATER_THAN_16_9")]
1014    GreaterThan169,
1015    /// For 4:3 coded frame, full frame 4:3 image,
1016    ///  the same as the coded frame. For 16:9 coded frame, full frame 16:9 image, the same as
1017    ///  the coded frame.
1018    #[doc(alias = "GST_VIDEO_AFD_4_3_FULL_16_9_FULL")]
1019    _43Full169Full,
1020    /// For 4:3 coded frame, full frame 4:3 image, the same as
1021    ///  the coded frame. For 16:9 coded frame, pillarbox 4:3 image, horizontally centered in the
1022    ///  coded frame.
1023    #[doc(alias = "GST_VIDEO_AFD_4_3_FULL_4_3_PILLAR")]
1024    _43Full43Pillar,
1025    /// For 4:3 coded frame, letterbox 16:9 image, vertically centered in
1026    ///  the coded frame with all image areas protected. For 16:9 coded frame, full frame 16:9 image,
1027    ///  with all image areas protected.
1028    #[doc(alias = "GST_VIDEO_AFD_16_9_LETTER_16_9_FULL")]
1029    _169Letter169Full,
1030    /// For 4:3 coded frame, letterbox 14:9 image, vertically centered in
1031    ///  the coded frame. For 16:9 coded frame, pillarbox 14:9 image, horizontally centered in the
1032    ///  coded frame.
1033    #[doc(alias = "GST_VIDEO_AFD_14_9_LETTER_14_9_PILLAR")]
1034    _149Letter149Pillar,
1035    /// For 4:3 coded frame, full frame 4:3 image, with alternative 14:9
1036    ///  center. For 16:9 coded frame, pillarbox 4:3 image, with alternative 14:9 center.
1037    #[doc(alias = "GST_VIDEO_AFD_4_3_FULL_14_9_CENTER")]
1038    _43Full149Center,
1039    /// For 4:3 coded frame, letterbox 16:9 image, with alternative 14:9
1040    ///  center. For 16:9 coded frame, full frame 16:9 image, with alternative 14:9 center.
1041    #[doc(alias = "GST_VIDEO_AFD_16_9_LETTER_14_9_CENTER")]
1042    _169Letter149Center,
1043    /// For 4:3 coded frame, letterbox 16:9 image, with alternative 4:3
1044    ///  center. For 16:9 coded frame, full frame 16:9 image, with alternative 4:3 center.
1045    #[doc(alias = "GST_VIDEO_AFD_16_9_LETTER_4_3_CENTER")]
1046    _169Letter43Center,
1047    #[doc(hidden)]
1048    __Unknown(i32),
1049}
1050
1051#[cfg(feature = "v1_18")]
1052#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
1053#[doc(hidden)]
1054impl IntoGlib for VideoAFDValue {
1055    type GlibType = ffi::GstVideoAFDValue;
1056
1057    #[inline]
1058    fn into_glib(self) -> ffi::GstVideoAFDValue {
1059        match self {
1060            Self::Unavailable => ffi::GST_VIDEO_AFD_UNAVAILABLE,
1061            Self::_169TopAligned => ffi::GST_VIDEO_AFD_16_9_TOP_ALIGNED,
1062            Self::_149TopAligned => ffi::GST_VIDEO_AFD_14_9_TOP_ALIGNED,
1063            Self::GreaterThan169 => ffi::GST_VIDEO_AFD_GREATER_THAN_16_9,
1064            Self::_43Full169Full => ffi::GST_VIDEO_AFD_4_3_FULL_16_9_FULL,
1065            Self::_43Full43Pillar => ffi::GST_VIDEO_AFD_4_3_FULL_4_3_PILLAR,
1066            Self::_169Letter169Full => ffi::GST_VIDEO_AFD_16_9_LETTER_16_9_FULL,
1067            Self::_149Letter149Pillar => ffi::GST_VIDEO_AFD_14_9_LETTER_14_9_PILLAR,
1068            Self::_43Full149Center => ffi::GST_VIDEO_AFD_4_3_FULL_14_9_CENTER,
1069            Self::_169Letter149Center => ffi::GST_VIDEO_AFD_16_9_LETTER_14_9_CENTER,
1070            Self::_169Letter43Center => ffi::GST_VIDEO_AFD_16_9_LETTER_4_3_CENTER,
1071            Self::__Unknown(value) => value,
1072        }
1073    }
1074}
1075
1076#[cfg(feature = "v1_18")]
1077#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
1078#[doc(hidden)]
1079impl FromGlib<ffi::GstVideoAFDValue> for VideoAFDValue {
1080    #[inline]
1081    unsafe fn from_glib(value: ffi::GstVideoAFDValue) -> Self {
1082        skip_assert_initialized!();
1083
1084        match value {
1085            ffi::GST_VIDEO_AFD_UNAVAILABLE => Self::Unavailable,
1086            ffi::GST_VIDEO_AFD_16_9_TOP_ALIGNED => Self::_169TopAligned,
1087            ffi::GST_VIDEO_AFD_14_9_TOP_ALIGNED => Self::_149TopAligned,
1088            ffi::GST_VIDEO_AFD_GREATER_THAN_16_9 => Self::GreaterThan169,
1089            ffi::GST_VIDEO_AFD_4_3_FULL_16_9_FULL => Self::_43Full169Full,
1090            ffi::GST_VIDEO_AFD_4_3_FULL_4_3_PILLAR => Self::_43Full43Pillar,
1091            ffi::GST_VIDEO_AFD_16_9_LETTER_16_9_FULL => Self::_169Letter169Full,
1092            ffi::GST_VIDEO_AFD_14_9_LETTER_14_9_PILLAR => Self::_149Letter149Pillar,
1093            ffi::GST_VIDEO_AFD_4_3_FULL_14_9_CENTER => Self::_43Full149Center,
1094            ffi::GST_VIDEO_AFD_16_9_LETTER_14_9_CENTER => Self::_169Letter149Center,
1095            ffi::GST_VIDEO_AFD_16_9_LETTER_4_3_CENTER => Self::_169Letter43Center,
1096            value => Self::__Unknown(value),
1097        }
1098    }
1099}
1100
1101#[cfg(feature = "v1_18")]
1102#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
1103impl StaticType for VideoAFDValue {
1104    #[inline]
1105    #[doc(alias = "gst_video_afd_value_get_type")]
1106    fn static_type() -> glib::Type {
1107        unsafe { from_glib(ffi::gst_video_afd_value_get_type()) }
1108    }
1109}
1110
1111#[cfg(feature = "v1_18")]
1112#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
1113impl glib::HasParamSpec for VideoAFDValue {
1114    type ParamSpec = glib::ParamSpecEnum;
1115    type SetValue = Self;
1116    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1117
1118    fn param_spec_builder() -> Self::BuilderFn {
1119        Self::ParamSpec::builder_with_default
1120    }
1121}
1122
1123#[cfg(feature = "v1_18")]
1124#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
1125impl glib::value::ValueType for VideoAFDValue {
1126    type Type = Self;
1127}
1128
1129#[cfg(feature = "v1_18")]
1130#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
1131unsafe impl<'a> glib::value::FromValue<'a> for VideoAFDValue {
1132    type Checker = glib::value::GenericValueTypeChecker<Self>;
1133
1134    #[inline]
1135    unsafe fn from_value(value: &'a glib::Value) -> Self {
1136        skip_assert_initialized!();
1137        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1138    }
1139}
1140
1141#[cfg(feature = "v1_18")]
1142#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
1143impl ToValue for VideoAFDValue {
1144    #[inline]
1145    fn to_value(&self) -> glib::Value {
1146        let mut value = glib::Value::for_value_type::<Self>();
1147        unsafe {
1148            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1149        }
1150        value
1151    }
1152
1153    #[inline]
1154    fn value_type(&self) -> glib::Type {
1155        Self::static_type()
1156    }
1157}
1158
1159#[cfg(feature = "v1_18")]
1160#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
1161impl From<VideoAFDValue> for glib::Value {
1162    #[inline]
1163    fn from(v: VideoAFDValue) -> Self {
1164        skip_assert_initialized!();
1165        ToValue::to_value(&v)
1166    }
1167}
1168
1169/// Different alpha modes.
1170#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1171#[non_exhaustive]
1172#[doc(alias = "GstVideoAlphaMode")]
1173pub enum VideoAlphaMode {
1174    /// When input and output have alpha, it will be copied.
1175    ///  When the input has no alpha, alpha will be set to
1176    ///  `GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE`
1177    #[doc(alias = "GST_VIDEO_ALPHA_MODE_COPY")]
1178    Copy,
1179    /// set all alpha to
1180    ///  `GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE`
1181    #[doc(alias = "GST_VIDEO_ALPHA_MODE_SET")]
1182    Set,
1183    /// multiply all alpha with
1184    ///  `GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE`.
1185    ///  When the input format has no alpha but the output format has, the
1186    ///  alpha value will be set to `GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE`
1187    #[doc(alias = "GST_VIDEO_ALPHA_MODE_MULT")]
1188    Mult,
1189    #[doc(hidden)]
1190    __Unknown(i32),
1191}
1192
1193#[doc(hidden)]
1194impl IntoGlib for VideoAlphaMode {
1195    type GlibType = ffi::GstVideoAlphaMode;
1196
1197    #[inline]
1198    fn into_glib(self) -> ffi::GstVideoAlphaMode {
1199        match self {
1200            Self::Copy => ffi::GST_VIDEO_ALPHA_MODE_COPY,
1201            Self::Set => ffi::GST_VIDEO_ALPHA_MODE_SET,
1202            Self::Mult => ffi::GST_VIDEO_ALPHA_MODE_MULT,
1203            Self::__Unknown(value) => value,
1204        }
1205    }
1206}
1207
1208#[doc(hidden)]
1209impl FromGlib<ffi::GstVideoAlphaMode> for VideoAlphaMode {
1210    #[inline]
1211    unsafe fn from_glib(value: ffi::GstVideoAlphaMode) -> Self {
1212        skip_assert_initialized!();
1213
1214        match value {
1215            ffi::GST_VIDEO_ALPHA_MODE_COPY => Self::Copy,
1216            ffi::GST_VIDEO_ALPHA_MODE_SET => Self::Set,
1217            ffi::GST_VIDEO_ALPHA_MODE_MULT => Self::Mult,
1218            value => Self::__Unknown(value),
1219        }
1220    }
1221}
1222
1223impl StaticType for VideoAlphaMode {
1224    #[inline]
1225    #[doc(alias = "gst_video_alpha_mode_get_type")]
1226    fn static_type() -> glib::Type {
1227        unsafe { from_glib(ffi::gst_video_alpha_mode_get_type()) }
1228    }
1229}
1230
1231impl glib::HasParamSpec for VideoAlphaMode {
1232    type ParamSpec = glib::ParamSpecEnum;
1233    type SetValue = Self;
1234    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1235
1236    fn param_spec_builder() -> Self::BuilderFn {
1237        Self::ParamSpec::builder_with_default
1238    }
1239}
1240
1241impl glib::value::ValueType for VideoAlphaMode {
1242    type Type = Self;
1243}
1244
1245unsafe impl<'a> glib::value::FromValue<'a> for VideoAlphaMode {
1246    type Checker = glib::value::GenericValueTypeChecker<Self>;
1247
1248    #[inline]
1249    unsafe fn from_value(value: &'a glib::Value) -> Self {
1250        skip_assert_initialized!();
1251        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1252    }
1253}
1254
1255impl ToValue for VideoAlphaMode {
1256    #[inline]
1257    fn to_value(&self) -> glib::Value {
1258        let mut value = glib::Value::for_value_type::<Self>();
1259        unsafe {
1260            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1261        }
1262        value
1263    }
1264
1265    #[inline]
1266    fn value_type(&self) -> glib::Type {
1267        Self::static_type()
1268    }
1269}
1270
1271impl From<VideoAlphaMode> for glib::Value {
1272    #[inline]
1273    fn from(v: VideoAlphaMode) -> Self {
1274        skip_assert_initialized!();
1275        ToValue::to_value(&v)
1276    }
1277}
1278
1279#[cfg(feature = "v1_16")]
1280#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1281#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1282#[non_exhaustive]
1283#[doc(alias = "GstVideoAncillaryDID")]
1284pub enum VideoAncillaryDID {
1285    #[doc(alias = "GST_VIDEO_ANCILLARY_DID_UNDEFINED")]
1286    Undefined,
1287    #[doc(alias = "GST_VIDEO_ANCILLARY_DID_DELETION")]
1288    Deletion,
1289    #[doc(alias = "GST_VIDEO_ANCILLARY_DID_HANC_3G_AUDIO_DATA_FIRST")]
1290    Hanc3gAudioDataFirst,
1291    #[doc(alias = "GST_VIDEO_ANCILLARY_DID_HANC_3G_AUDIO_DATA_LAST")]
1292    Hanc3gAudioDataLast,
1293    #[doc(alias = "GST_VIDEO_ANCILLARY_DID_HANC_HDTV_AUDIO_DATA_FIRST")]
1294    HancHdtvAudioDataFirst,
1295    #[doc(alias = "GST_VIDEO_ANCILLARY_DID_HANC_HDTV_AUDIO_DATA_LAST")]
1296    HancHdtvAudioDataLast,
1297    #[doc(alias = "GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_1_FIRST")]
1298    HancSdtvAudioData1First,
1299    #[doc(alias = "GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_1_LAST")]
1300    HancSdtvAudioData1Last,
1301    #[doc(alias = "GST_VIDEO_ANCILLARY_DID_CAMERA_POSITION")]
1302    CameraPosition,
1303    #[doc(alias = "GST_VIDEO_ANCILLARY_DID_HANC_ERROR_DETECTION")]
1304    HancErrorDetection,
1305    #[doc(alias = "GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_2_FIRST")]
1306    HancSdtvAudioData2First,
1307    #[doc(alias = "GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_2_LAST")]
1308    HancSdtvAudioData2Last,
1309    #[doc(hidden)]
1310    __Unknown(i32),
1311}
1312
1313#[cfg(feature = "v1_16")]
1314#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1315#[doc(hidden)]
1316impl IntoGlib for VideoAncillaryDID {
1317    type GlibType = ffi::GstVideoAncillaryDID;
1318
1319    #[inline]
1320    fn into_glib(self) -> ffi::GstVideoAncillaryDID {
1321        match self {
1322            Self::Undefined => ffi::GST_VIDEO_ANCILLARY_DID_UNDEFINED,
1323            Self::Deletion => ffi::GST_VIDEO_ANCILLARY_DID_DELETION,
1324            Self::Hanc3gAudioDataFirst => ffi::GST_VIDEO_ANCILLARY_DID_HANC_3G_AUDIO_DATA_FIRST,
1325            Self::Hanc3gAudioDataLast => ffi::GST_VIDEO_ANCILLARY_DID_HANC_3G_AUDIO_DATA_LAST,
1326            Self::HancHdtvAudioDataFirst => ffi::GST_VIDEO_ANCILLARY_DID_HANC_HDTV_AUDIO_DATA_FIRST,
1327            Self::HancHdtvAudioDataLast => ffi::GST_VIDEO_ANCILLARY_DID_HANC_HDTV_AUDIO_DATA_LAST,
1328            Self::HancSdtvAudioData1First => {
1329                ffi::GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_1_FIRST
1330            }
1331            Self::HancSdtvAudioData1Last => {
1332                ffi::GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_1_LAST
1333            }
1334            Self::CameraPosition => ffi::GST_VIDEO_ANCILLARY_DID_CAMERA_POSITION,
1335            Self::HancErrorDetection => ffi::GST_VIDEO_ANCILLARY_DID_HANC_ERROR_DETECTION,
1336            Self::HancSdtvAudioData2First => {
1337                ffi::GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_2_FIRST
1338            }
1339            Self::HancSdtvAudioData2Last => {
1340                ffi::GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_2_LAST
1341            }
1342            Self::__Unknown(value) => value,
1343        }
1344    }
1345}
1346
1347#[cfg(feature = "v1_16")]
1348#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1349#[doc(hidden)]
1350impl FromGlib<ffi::GstVideoAncillaryDID> for VideoAncillaryDID {
1351    #[inline]
1352    unsafe fn from_glib(value: ffi::GstVideoAncillaryDID) -> Self {
1353        skip_assert_initialized!();
1354
1355        match value {
1356            ffi::GST_VIDEO_ANCILLARY_DID_UNDEFINED => Self::Undefined,
1357            ffi::GST_VIDEO_ANCILLARY_DID_DELETION => Self::Deletion,
1358            ffi::GST_VIDEO_ANCILLARY_DID_HANC_3G_AUDIO_DATA_FIRST => Self::Hanc3gAudioDataFirst,
1359            ffi::GST_VIDEO_ANCILLARY_DID_HANC_3G_AUDIO_DATA_LAST => Self::Hanc3gAudioDataLast,
1360            ffi::GST_VIDEO_ANCILLARY_DID_HANC_HDTV_AUDIO_DATA_FIRST => Self::HancHdtvAudioDataFirst,
1361            ffi::GST_VIDEO_ANCILLARY_DID_HANC_HDTV_AUDIO_DATA_LAST => Self::HancHdtvAudioDataLast,
1362            ffi::GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_1_FIRST => {
1363                Self::HancSdtvAudioData1First
1364            }
1365            ffi::GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_1_LAST => {
1366                Self::HancSdtvAudioData1Last
1367            }
1368            ffi::GST_VIDEO_ANCILLARY_DID_CAMERA_POSITION => Self::CameraPosition,
1369            ffi::GST_VIDEO_ANCILLARY_DID_HANC_ERROR_DETECTION => Self::HancErrorDetection,
1370            ffi::GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_2_FIRST => {
1371                Self::HancSdtvAudioData2First
1372            }
1373            ffi::GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_2_LAST => {
1374                Self::HancSdtvAudioData2Last
1375            }
1376            value => Self::__Unknown(value),
1377        }
1378    }
1379}
1380
1381#[cfg(feature = "v1_16")]
1382#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1383impl StaticType for VideoAncillaryDID {
1384    #[inline]
1385    #[doc(alias = "gst_video_ancillary_did_get_type")]
1386    fn static_type() -> glib::Type {
1387        unsafe { from_glib(ffi::gst_video_ancillary_did_get_type()) }
1388    }
1389}
1390
1391#[cfg(feature = "v1_16")]
1392#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1393impl glib::HasParamSpec for VideoAncillaryDID {
1394    type ParamSpec = glib::ParamSpecEnum;
1395    type SetValue = Self;
1396    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1397
1398    fn param_spec_builder() -> Self::BuilderFn {
1399        Self::ParamSpec::builder_with_default
1400    }
1401}
1402
1403#[cfg(feature = "v1_16")]
1404#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1405impl glib::value::ValueType for VideoAncillaryDID {
1406    type Type = Self;
1407}
1408
1409#[cfg(feature = "v1_16")]
1410#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1411unsafe impl<'a> glib::value::FromValue<'a> for VideoAncillaryDID {
1412    type Checker = glib::value::GenericValueTypeChecker<Self>;
1413
1414    #[inline]
1415    unsafe fn from_value(value: &'a glib::Value) -> Self {
1416        skip_assert_initialized!();
1417        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1418    }
1419}
1420
1421#[cfg(feature = "v1_16")]
1422#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1423impl ToValue for VideoAncillaryDID {
1424    #[inline]
1425    fn to_value(&self) -> glib::Value {
1426        let mut value = glib::Value::for_value_type::<Self>();
1427        unsafe {
1428            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1429        }
1430        value
1431    }
1432
1433    #[inline]
1434    fn value_type(&self) -> glib::Type {
1435        Self::static_type()
1436    }
1437}
1438
1439#[cfg(feature = "v1_16")]
1440#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1441impl From<VideoAncillaryDID> for glib::Value {
1442    #[inline]
1443    fn from(v: VideoAncillaryDID) -> Self {
1444        skip_assert_initialized!();
1445        ToValue::to_value(&v)
1446    }
1447}
1448
1449/// Some know types of Ancillary Data identifiers.
1450#[cfg(feature = "v1_16")]
1451#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1452#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1453#[non_exhaustive]
1454#[doc(alias = "GstVideoAncillaryDID16")]
1455pub enum VideoAncillaryDID16 {
1456    /// CEA 708 Ancillary data according to SMPTE 334
1457    #[doc(alias = "GST_VIDEO_ANCILLARY_DID16_S334_EIA_708")]
1458    S334Eia708,
1459    /// CEA 608 Ancillary data according to SMPTE 334
1460    #[doc(alias = "GST_VIDEO_ANCILLARY_DID16_S334_EIA_608")]
1461    S334Eia608,
1462    /// AFD/Bar Ancillary data according to SMPTE 2016-3 (Since: 1.18)
1463    #[doc(alias = "GST_VIDEO_ANCILLARY_DID16_S2016_3_AFD_BAR")]
1464    S20163AfdBar,
1465    #[doc(hidden)]
1466    __Unknown(i32),
1467}
1468
1469#[cfg(feature = "v1_16")]
1470#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1471#[doc(hidden)]
1472impl IntoGlib for VideoAncillaryDID16 {
1473    type GlibType = ffi::GstVideoAncillaryDID16;
1474
1475    #[inline]
1476    fn into_glib(self) -> ffi::GstVideoAncillaryDID16 {
1477        match self {
1478            Self::S334Eia708 => ffi::GST_VIDEO_ANCILLARY_DID16_S334_EIA_708,
1479            Self::S334Eia608 => ffi::GST_VIDEO_ANCILLARY_DID16_S334_EIA_608,
1480            Self::S20163AfdBar => ffi::GST_VIDEO_ANCILLARY_DID16_S2016_3_AFD_BAR,
1481            Self::__Unknown(value) => value,
1482        }
1483    }
1484}
1485
1486#[cfg(feature = "v1_16")]
1487#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1488#[doc(hidden)]
1489impl FromGlib<ffi::GstVideoAncillaryDID16> for VideoAncillaryDID16 {
1490    #[inline]
1491    unsafe fn from_glib(value: ffi::GstVideoAncillaryDID16) -> Self {
1492        skip_assert_initialized!();
1493
1494        match value {
1495            ffi::GST_VIDEO_ANCILLARY_DID16_S334_EIA_708 => Self::S334Eia708,
1496            ffi::GST_VIDEO_ANCILLARY_DID16_S334_EIA_608 => Self::S334Eia608,
1497            ffi::GST_VIDEO_ANCILLARY_DID16_S2016_3_AFD_BAR => Self::S20163AfdBar,
1498            value => Self::__Unknown(value),
1499        }
1500    }
1501}
1502
1503#[cfg(feature = "v1_16")]
1504#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1505impl StaticType for VideoAncillaryDID16 {
1506    #[inline]
1507    #[doc(alias = "gst_video_ancillary_di_d16_get_type")]
1508    fn static_type() -> glib::Type {
1509        unsafe { from_glib(ffi::gst_video_ancillary_di_d16_get_type()) }
1510    }
1511}
1512
1513#[cfg(feature = "v1_16")]
1514#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1515impl glib::HasParamSpec for VideoAncillaryDID16 {
1516    type ParamSpec = glib::ParamSpecEnum;
1517    type SetValue = Self;
1518    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1519
1520    fn param_spec_builder() -> Self::BuilderFn {
1521        Self::ParamSpec::builder_with_default
1522    }
1523}
1524
1525#[cfg(feature = "v1_16")]
1526#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1527impl glib::value::ValueType for VideoAncillaryDID16 {
1528    type Type = Self;
1529}
1530
1531#[cfg(feature = "v1_16")]
1532#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1533unsafe impl<'a> glib::value::FromValue<'a> for VideoAncillaryDID16 {
1534    type Checker = glib::value::GenericValueTypeChecker<Self>;
1535
1536    #[inline]
1537    unsafe fn from_value(value: &'a glib::Value) -> Self {
1538        skip_assert_initialized!();
1539        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1540    }
1541}
1542
1543#[cfg(feature = "v1_16")]
1544#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1545impl ToValue for VideoAncillaryDID16 {
1546    #[inline]
1547    fn to_value(&self) -> glib::Value {
1548        let mut value = glib::Value::for_value_type::<Self>();
1549        unsafe {
1550            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1551        }
1552        value
1553    }
1554
1555    #[inline]
1556    fn value_type(&self) -> glib::Type {
1557        Self::static_type()
1558    }
1559}
1560
1561#[cfg(feature = "v1_16")]
1562#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1563impl From<VideoAncillaryDID16> for glib::Value {
1564    #[inline]
1565    fn from(v: VideoAncillaryDID16) -> Self {
1566        skip_assert_initialized!();
1567        ToValue::to_value(&v)
1568    }
1569}
1570
1571/// The various known types of Closed Caption (CC).
1572#[cfg(feature = "v1_16")]
1573#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1574#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1575#[non_exhaustive]
1576#[doc(alias = "GstVideoCaptionType")]
1577pub enum VideoCaptionType {
1578    /// Unknown type of CC
1579    #[doc(alias = "GST_VIDEO_CAPTION_TYPE_UNKNOWN")]
1580    Unknown,
1581    /// CEA-608 as byte pairs. Note that
1582    ///  this format is not recommended since is does not specify to
1583    ///  which field the caption comes from and therefore assumes
1584    ///  it comes from the first field (and that there is no information
1585    ///  on the second field). Use [`Cea708Raw`][Self::Cea708Raw]
1586    ///  if you wish to store CEA-608 from two fields and prefix each byte pair
1587    ///  with 0xFC for the first field and 0xFD for the second field.
1588    #[doc(alias = "GST_VIDEO_CAPTION_TYPE_CEA608_RAW")]
1589    Cea608Raw,
1590    /// CEA-608 as byte triplets as defined
1591    ///  in SMPTE S334-1 Annex A. The second and third byte of the byte triplet
1592    ///  is the raw CEA608 data, the first byte is a bitfield: The top/7th bit is
1593    ///  0 for the second field, 1 for the first field, bit 6 and 5 are 0 and
1594    ///  bits 4 to 0 are a 5 bit unsigned integer that represents the line
1595    ///  offset relative to the base-line of the original image format (line 9
1596    ///  for 525-line field 1, line 272 for 525-line field 2, line 5 for
1597    ///  625-line field 1 and line 318 for 625-line field 2).
1598    #[doc(alias = "GST_VIDEO_CAPTION_TYPE_CEA608_S334_1A")]
1599    Cea608S3341a,
1600    /// CEA-708 as cc_data byte triplets. They
1601    ///  can also contain 608-in-708 and the first byte of each triplet has to
1602    ///  be inspected for detecting the type.
1603    #[doc(alias = "GST_VIDEO_CAPTION_TYPE_CEA708_RAW")]
1604    Cea708Raw,
1605    /// CEA-708 (and optionally CEA-608) in
1606    ///  a CDP (Caption Distribution Packet) defined by SMPTE S-334-2.
1607    ///  Contains the whole CDP (starting with 0x9669).
1608    #[doc(alias = "GST_VIDEO_CAPTION_TYPE_CEA708_CDP")]
1609    Cea708Cdp,
1610    #[doc(hidden)]
1611    __Unknown(i32),
1612}
1613
1614#[cfg(feature = "v1_16")]
1615#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1616impl VideoCaptionType {
1617    #[doc(alias = "gst_video_caption_type_to_caps")]
1618    pub fn to_caps(self) -> gst::Caps {
1619        assert_initialized_main_thread!();
1620        unsafe { from_glib_full(ffi::gst_video_caption_type_to_caps(self.into_glib())) }
1621    }
1622}
1623
1624#[cfg(feature = "v1_16")]
1625#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1626#[doc(hidden)]
1627impl IntoGlib for VideoCaptionType {
1628    type GlibType = ffi::GstVideoCaptionType;
1629
1630    #[inline]
1631    fn into_glib(self) -> ffi::GstVideoCaptionType {
1632        match self {
1633            Self::Unknown => ffi::GST_VIDEO_CAPTION_TYPE_UNKNOWN,
1634            Self::Cea608Raw => ffi::GST_VIDEO_CAPTION_TYPE_CEA608_RAW,
1635            Self::Cea608S3341a => ffi::GST_VIDEO_CAPTION_TYPE_CEA608_S334_1A,
1636            Self::Cea708Raw => ffi::GST_VIDEO_CAPTION_TYPE_CEA708_RAW,
1637            Self::Cea708Cdp => ffi::GST_VIDEO_CAPTION_TYPE_CEA708_CDP,
1638            Self::__Unknown(value) => value,
1639        }
1640    }
1641}
1642
1643#[cfg(feature = "v1_16")]
1644#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1645#[doc(hidden)]
1646impl FromGlib<ffi::GstVideoCaptionType> for VideoCaptionType {
1647    #[inline]
1648    unsafe fn from_glib(value: ffi::GstVideoCaptionType) -> Self {
1649        skip_assert_initialized!();
1650
1651        match value {
1652            ffi::GST_VIDEO_CAPTION_TYPE_UNKNOWN => Self::Unknown,
1653            ffi::GST_VIDEO_CAPTION_TYPE_CEA608_RAW => Self::Cea608Raw,
1654            ffi::GST_VIDEO_CAPTION_TYPE_CEA608_S334_1A => Self::Cea608S3341a,
1655            ffi::GST_VIDEO_CAPTION_TYPE_CEA708_RAW => Self::Cea708Raw,
1656            ffi::GST_VIDEO_CAPTION_TYPE_CEA708_CDP => Self::Cea708Cdp,
1657            value => Self::__Unknown(value),
1658        }
1659    }
1660}
1661
1662#[cfg(feature = "v1_16")]
1663#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1664impl StaticType for VideoCaptionType {
1665    #[inline]
1666    #[doc(alias = "gst_video_caption_type_get_type")]
1667    fn static_type() -> glib::Type {
1668        unsafe { from_glib(ffi::gst_video_caption_type_get_type()) }
1669    }
1670}
1671
1672#[cfg(feature = "v1_16")]
1673#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1674impl glib::HasParamSpec for VideoCaptionType {
1675    type ParamSpec = glib::ParamSpecEnum;
1676    type SetValue = Self;
1677    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1678
1679    fn param_spec_builder() -> Self::BuilderFn {
1680        Self::ParamSpec::builder_with_default
1681    }
1682}
1683
1684#[cfg(feature = "v1_16")]
1685#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1686impl glib::value::ValueType for VideoCaptionType {
1687    type Type = Self;
1688}
1689
1690#[cfg(feature = "v1_16")]
1691#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1692unsafe impl<'a> glib::value::FromValue<'a> for VideoCaptionType {
1693    type Checker = glib::value::GenericValueTypeChecker<Self>;
1694
1695    #[inline]
1696    unsafe fn from_value(value: &'a glib::Value) -> Self {
1697        skip_assert_initialized!();
1698        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1699    }
1700}
1701
1702#[cfg(feature = "v1_16")]
1703#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1704impl ToValue for VideoCaptionType {
1705    #[inline]
1706    fn to_value(&self) -> glib::Value {
1707        let mut value = glib::Value::for_value_type::<Self>();
1708        unsafe {
1709            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1710        }
1711        value
1712    }
1713
1714    #[inline]
1715    fn value_type(&self) -> glib::Type {
1716        Self::static_type()
1717    }
1718}
1719
1720#[cfg(feature = "v1_16")]
1721#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1722impl From<VideoCaptionType> for glib::Value {
1723    #[inline]
1724    fn from(v: VideoCaptionType) -> Self {
1725        skip_assert_initialized!();
1726        ToValue::to_value(&v)
1727    }
1728}
1729
1730/// Different chroma downsampling and upsampling modes
1731#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1732#[non_exhaustive]
1733#[doc(alias = "GstVideoChromaMode")]
1734pub enum VideoChromaMode {
1735    /// do full chroma up and down sampling
1736    #[doc(alias = "GST_VIDEO_CHROMA_MODE_FULL")]
1737    Full,
1738    /// only perform chroma upsampling
1739    #[doc(alias = "GST_VIDEO_CHROMA_MODE_UPSAMPLE_ONLY")]
1740    UpsampleOnly,
1741    /// only perform chroma downsampling
1742    #[doc(alias = "GST_VIDEO_CHROMA_MODE_DOWNSAMPLE_ONLY")]
1743    DownsampleOnly,
1744    /// disable chroma resampling
1745    #[doc(alias = "GST_VIDEO_CHROMA_MODE_NONE")]
1746    None,
1747    #[doc(hidden)]
1748    __Unknown(i32),
1749}
1750
1751#[doc(hidden)]
1752impl IntoGlib for VideoChromaMode {
1753    type GlibType = ffi::GstVideoChromaMode;
1754
1755    #[inline]
1756    fn into_glib(self) -> ffi::GstVideoChromaMode {
1757        match self {
1758            Self::Full => ffi::GST_VIDEO_CHROMA_MODE_FULL,
1759            Self::UpsampleOnly => ffi::GST_VIDEO_CHROMA_MODE_UPSAMPLE_ONLY,
1760            Self::DownsampleOnly => ffi::GST_VIDEO_CHROMA_MODE_DOWNSAMPLE_ONLY,
1761            Self::None => ffi::GST_VIDEO_CHROMA_MODE_NONE,
1762            Self::__Unknown(value) => value,
1763        }
1764    }
1765}
1766
1767#[doc(hidden)]
1768impl FromGlib<ffi::GstVideoChromaMode> for VideoChromaMode {
1769    #[inline]
1770    unsafe fn from_glib(value: ffi::GstVideoChromaMode) -> Self {
1771        skip_assert_initialized!();
1772
1773        match value {
1774            ffi::GST_VIDEO_CHROMA_MODE_FULL => Self::Full,
1775            ffi::GST_VIDEO_CHROMA_MODE_UPSAMPLE_ONLY => Self::UpsampleOnly,
1776            ffi::GST_VIDEO_CHROMA_MODE_DOWNSAMPLE_ONLY => Self::DownsampleOnly,
1777            ffi::GST_VIDEO_CHROMA_MODE_NONE => Self::None,
1778            value => Self::__Unknown(value),
1779        }
1780    }
1781}
1782
1783impl StaticType for VideoChromaMode {
1784    #[inline]
1785    #[doc(alias = "gst_video_chroma_mode_get_type")]
1786    fn static_type() -> glib::Type {
1787        unsafe { from_glib(ffi::gst_video_chroma_mode_get_type()) }
1788    }
1789}
1790
1791impl glib::HasParamSpec for VideoChromaMode {
1792    type ParamSpec = glib::ParamSpecEnum;
1793    type SetValue = Self;
1794    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1795
1796    fn param_spec_builder() -> Self::BuilderFn {
1797        Self::ParamSpec::builder_with_default
1798    }
1799}
1800
1801impl glib::value::ValueType for VideoChromaMode {
1802    type Type = Self;
1803}
1804
1805unsafe impl<'a> glib::value::FromValue<'a> for VideoChromaMode {
1806    type Checker = glib::value::GenericValueTypeChecker<Self>;
1807
1808    #[inline]
1809    unsafe fn from_value(value: &'a glib::Value) -> Self {
1810        skip_assert_initialized!();
1811        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1812    }
1813}
1814
1815impl ToValue for VideoChromaMode {
1816    #[inline]
1817    fn to_value(&self) -> glib::Value {
1818        let mut value = glib::Value::for_value_type::<Self>();
1819        unsafe {
1820            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1821        }
1822        value
1823    }
1824
1825    #[inline]
1826    fn value_type(&self) -> glib::Type {
1827        Self::static_type()
1828    }
1829}
1830
1831impl From<VideoChromaMode> for glib::Value {
1832    #[inline]
1833    fn from(v: VideoChromaMode) -> Self {
1834        skip_assert_initialized!();
1835        ToValue::to_value(&v)
1836    }
1837}
1838
1839/// The color matrix is used to convert between Y'PbPr and
1840/// non-linear RGB (R'G'B')
1841#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1842#[non_exhaustive]
1843#[doc(alias = "GstVideoColorMatrix")]
1844pub enum VideoColorMatrix {
1845    /// unknown matrix
1846    #[doc(alias = "GST_VIDEO_COLOR_MATRIX_UNKNOWN")]
1847    Unknown,
1848    /// identity matrix. Order of coefficients is
1849    /// actually GBR, also IEC 61966-2-1 (sRGB)
1850    #[doc(alias = "GST_VIDEO_COLOR_MATRIX_RGB")]
1851    Rgb,
1852    /// FCC Title 47 Code of Federal Regulations 73.682 (a)(20)
1853    #[doc(alias = "GST_VIDEO_COLOR_MATRIX_FCC")]
1854    Fcc,
1855    /// ITU-R BT.709 color matrix, also ITU-R BT1361
1856    /// / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B
1857    #[doc(alias = "GST_VIDEO_COLOR_MATRIX_BT709")]
1858    Bt709,
1859    /// ITU-R BT.601 color matrix, also SMPTE170M / ITU-R BT1358 525 / ITU-R BT1700 NTSC
1860    #[doc(alias = "GST_VIDEO_COLOR_MATRIX_BT601")]
1861    Bt601,
1862    /// SMPTE 240M color matrix
1863    #[doc(alias = "GST_VIDEO_COLOR_MATRIX_SMPTE240M")]
1864    Smpte240m,
1865    /// ITU-R BT.2020 color matrix. Since: 1.6
1866    #[doc(alias = "GST_VIDEO_COLOR_MATRIX_BT2020")]
1867    Bt2020,
1868    #[doc(hidden)]
1869    __Unknown(i32),
1870}
1871
1872impl VideoColorMatrix {
1873    #[cfg(feature = "v1_18")]
1874    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
1875    #[doc(alias = "gst_video_color_matrix_from_iso")]
1876    pub fn from_iso(value: u32) -> VideoColorMatrix {
1877        assert_initialized_main_thread!();
1878        unsafe { from_glib(ffi::gst_video_color_matrix_from_iso(value)) }
1879    }
1880
1881    #[cfg(feature = "v1_18")]
1882    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
1883    #[doc(alias = "gst_video_color_matrix_to_iso")]
1884    pub fn to_iso(self) -> u32 {
1885        assert_initialized_main_thread!();
1886        unsafe { ffi::gst_video_color_matrix_to_iso(self.into_glib()) }
1887    }
1888}
1889
1890#[doc(hidden)]
1891impl IntoGlib for VideoColorMatrix {
1892    type GlibType = ffi::GstVideoColorMatrix;
1893
1894    #[inline]
1895    fn into_glib(self) -> ffi::GstVideoColorMatrix {
1896        match self {
1897            Self::Unknown => ffi::GST_VIDEO_COLOR_MATRIX_UNKNOWN,
1898            Self::Rgb => ffi::GST_VIDEO_COLOR_MATRIX_RGB,
1899            Self::Fcc => ffi::GST_VIDEO_COLOR_MATRIX_FCC,
1900            Self::Bt709 => ffi::GST_VIDEO_COLOR_MATRIX_BT709,
1901            Self::Bt601 => ffi::GST_VIDEO_COLOR_MATRIX_BT601,
1902            Self::Smpte240m => ffi::GST_VIDEO_COLOR_MATRIX_SMPTE240M,
1903            Self::Bt2020 => ffi::GST_VIDEO_COLOR_MATRIX_BT2020,
1904            Self::__Unknown(value) => value,
1905        }
1906    }
1907}
1908
1909#[doc(hidden)]
1910impl FromGlib<ffi::GstVideoColorMatrix> for VideoColorMatrix {
1911    #[inline]
1912    unsafe fn from_glib(value: ffi::GstVideoColorMatrix) -> Self {
1913        skip_assert_initialized!();
1914
1915        match value {
1916            ffi::GST_VIDEO_COLOR_MATRIX_UNKNOWN => Self::Unknown,
1917            ffi::GST_VIDEO_COLOR_MATRIX_RGB => Self::Rgb,
1918            ffi::GST_VIDEO_COLOR_MATRIX_FCC => Self::Fcc,
1919            ffi::GST_VIDEO_COLOR_MATRIX_BT709 => Self::Bt709,
1920            ffi::GST_VIDEO_COLOR_MATRIX_BT601 => Self::Bt601,
1921            ffi::GST_VIDEO_COLOR_MATRIX_SMPTE240M => Self::Smpte240m,
1922            ffi::GST_VIDEO_COLOR_MATRIX_BT2020 => Self::Bt2020,
1923            value => Self::__Unknown(value),
1924        }
1925    }
1926}
1927
1928impl StaticType for VideoColorMatrix {
1929    #[inline]
1930    #[doc(alias = "gst_video_color_matrix_get_type")]
1931    fn static_type() -> glib::Type {
1932        unsafe { from_glib(ffi::gst_video_color_matrix_get_type()) }
1933    }
1934}
1935
1936impl glib::HasParamSpec for VideoColorMatrix {
1937    type ParamSpec = glib::ParamSpecEnum;
1938    type SetValue = Self;
1939    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1940
1941    fn param_spec_builder() -> Self::BuilderFn {
1942        Self::ParamSpec::builder_with_default
1943    }
1944}
1945
1946impl glib::value::ValueType for VideoColorMatrix {
1947    type Type = Self;
1948}
1949
1950unsafe impl<'a> glib::value::FromValue<'a> for VideoColorMatrix {
1951    type Checker = glib::value::GenericValueTypeChecker<Self>;
1952
1953    #[inline]
1954    unsafe fn from_value(value: &'a glib::Value) -> Self {
1955        skip_assert_initialized!();
1956        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1957    }
1958}
1959
1960impl ToValue for VideoColorMatrix {
1961    #[inline]
1962    fn to_value(&self) -> glib::Value {
1963        let mut value = glib::Value::for_value_type::<Self>();
1964        unsafe {
1965            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1966        }
1967        value
1968    }
1969
1970    #[inline]
1971    fn value_type(&self) -> glib::Type {
1972        Self::static_type()
1973    }
1974}
1975
1976impl From<VideoColorMatrix> for glib::Value {
1977    #[inline]
1978    fn from(v: VideoColorMatrix) -> Self {
1979        skip_assert_initialized!();
1980        ToValue::to_value(&v)
1981    }
1982}
1983
1984/// The color primaries define the how to transform linear RGB values to and from
1985/// the CIE XYZ colorspace.
1986#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1987#[non_exhaustive]
1988#[doc(alias = "GstVideoColorPrimaries")]
1989pub enum VideoColorPrimaries {
1990    /// unknown color primaries
1991    #[doc(alias = "GST_VIDEO_COLOR_PRIMARIES_UNKNOWN")]
1992    Unknown,
1993    /// BT709 primaries, also ITU-R BT1361 / IEC
1994    /// 61966-2-4 / SMPTE RP177 Annex B
1995    #[doc(alias = "GST_VIDEO_COLOR_PRIMARIES_BT709")]
1996    Bt709,
1997    /// BT470M primaries, also FCC Title 47 Code
1998    /// of Federal Regulations 73.682 (a)(20)
1999    #[doc(alias = "GST_VIDEO_COLOR_PRIMARIES_BT470M")]
2000    Bt470m,
2001    ///  SECAM
2002    #[doc(alias = "GST_VIDEO_COLOR_PRIMARIES_BT470BG")]
2003    Bt470bg,
2004    /// SMPTE170M primaries, also ITU-R
2005    /// BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC
2006    #[doc(alias = "GST_VIDEO_COLOR_PRIMARIES_SMPTE170M")]
2007    Smpte170m,
2008    /// SMPTE240M primaries
2009    #[doc(alias = "GST_VIDEO_COLOR_PRIMARIES_SMPTE240M")]
2010    Smpte240m,
2011    /// Generic film (colour filters using
2012    /// Illuminant C)
2013    #[doc(alias = "GST_VIDEO_COLOR_PRIMARIES_FILM")]
2014    Film,
2015    /// ITU-R BT2020 primaries. Since: 1.6
2016    #[doc(alias = "GST_VIDEO_COLOR_PRIMARIES_BT2020")]
2017    Bt2020,
2018    /// Adobe RGB primaries. Since: 1.8
2019    #[doc(alias = "GST_VIDEO_COLOR_PRIMARIES_ADOBERGB")]
2020    Adobergb,
2021    /// SMPTE ST 428 primaries (CIE 1931
2022    /// XYZ). Since: 1.16
2023    #[cfg(feature = "v1_16")]
2024    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
2025    #[doc(alias = "GST_VIDEO_COLOR_PRIMARIES_SMPTEST428")]
2026    Smptest428,
2027    /// SMPTE RP 431 primaries (ST 431-2
2028    /// (2011) / DCI P3). Since: 1.16
2029    #[cfg(feature = "v1_16")]
2030    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
2031    #[doc(alias = "GST_VIDEO_COLOR_PRIMARIES_SMPTERP431")]
2032    Smpterp431,
2033    /// SMPTE EG 432 primaries (ST 432-1
2034    /// (2010) / P3 D65). Since: 1.16
2035    #[cfg(feature = "v1_16")]
2036    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
2037    #[doc(alias = "GST_VIDEO_COLOR_PRIMARIES_SMPTEEG432")]
2038    Smpteeg432,
2039    /// EBU 3213 primaries (JEDEC P22
2040    /// phosphors). Since: 1.16
2041    #[cfg(feature = "v1_16")]
2042    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
2043    #[doc(alias = "GST_VIDEO_COLOR_PRIMARIES_EBU3213")]
2044    Ebu3213,
2045    #[doc(hidden)]
2046    __Unknown(i32),
2047}
2048
2049impl VideoColorPrimaries {
2050    #[cfg(feature = "v1_18")]
2051    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
2052    #[doc(alias = "gst_video_color_primaries_from_iso")]
2053    pub fn from_iso(value: u32) -> VideoColorPrimaries {
2054        assert_initialized_main_thread!();
2055        unsafe { from_glib(ffi::gst_video_color_primaries_from_iso(value)) }
2056    }
2057
2058    //#[doc(alias = "gst_video_color_primaries_get_info")]
2059    //#[doc(alias = "get_info")]
2060    //pub fn info(self) -> /*Ignored*/VideoColorPrimariesInfo {
2061    //    unsafe { TODO: call ffi:gst_video_color_primaries_get_info() }
2062    //}
2063
2064    #[cfg(feature = "v1_22")]
2065    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
2066    #[doc(alias = "gst_video_color_primaries_is_equivalent")]
2067    pub fn is_equivalent(self, other: VideoColorPrimaries) -> bool {
2068        assert_initialized_main_thread!();
2069        unsafe {
2070            from_glib(ffi::gst_video_color_primaries_is_equivalent(
2071                self.into_glib(),
2072                other.into_glib(),
2073            ))
2074        }
2075    }
2076
2077    #[cfg(feature = "v1_18")]
2078    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
2079    #[doc(alias = "gst_video_color_primaries_to_iso")]
2080    pub fn to_iso(self) -> u32 {
2081        assert_initialized_main_thread!();
2082        unsafe { ffi::gst_video_color_primaries_to_iso(self.into_glib()) }
2083    }
2084}
2085
2086#[doc(hidden)]
2087impl IntoGlib for VideoColorPrimaries {
2088    type GlibType = ffi::GstVideoColorPrimaries;
2089
2090    fn into_glib(self) -> ffi::GstVideoColorPrimaries {
2091        match self {
2092            Self::Unknown => ffi::GST_VIDEO_COLOR_PRIMARIES_UNKNOWN,
2093            Self::Bt709 => ffi::GST_VIDEO_COLOR_PRIMARIES_BT709,
2094            Self::Bt470m => ffi::GST_VIDEO_COLOR_PRIMARIES_BT470M,
2095            Self::Bt470bg => ffi::GST_VIDEO_COLOR_PRIMARIES_BT470BG,
2096            Self::Smpte170m => ffi::GST_VIDEO_COLOR_PRIMARIES_SMPTE170M,
2097            Self::Smpte240m => ffi::GST_VIDEO_COLOR_PRIMARIES_SMPTE240M,
2098            Self::Film => ffi::GST_VIDEO_COLOR_PRIMARIES_FILM,
2099            Self::Bt2020 => ffi::GST_VIDEO_COLOR_PRIMARIES_BT2020,
2100            Self::Adobergb => ffi::GST_VIDEO_COLOR_PRIMARIES_ADOBERGB,
2101            #[cfg(feature = "v1_16")]
2102            Self::Smptest428 => ffi::GST_VIDEO_COLOR_PRIMARIES_SMPTEST428,
2103            #[cfg(feature = "v1_16")]
2104            Self::Smpterp431 => ffi::GST_VIDEO_COLOR_PRIMARIES_SMPTERP431,
2105            #[cfg(feature = "v1_16")]
2106            Self::Smpteeg432 => ffi::GST_VIDEO_COLOR_PRIMARIES_SMPTEEG432,
2107            #[cfg(feature = "v1_16")]
2108            Self::Ebu3213 => ffi::GST_VIDEO_COLOR_PRIMARIES_EBU3213,
2109            Self::__Unknown(value) => value,
2110        }
2111    }
2112}
2113
2114#[doc(hidden)]
2115impl FromGlib<ffi::GstVideoColorPrimaries> for VideoColorPrimaries {
2116    unsafe fn from_glib(value: ffi::GstVideoColorPrimaries) -> Self {
2117        skip_assert_initialized!();
2118
2119        match value {
2120            ffi::GST_VIDEO_COLOR_PRIMARIES_UNKNOWN => Self::Unknown,
2121            ffi::GST_VIDEO_COLOR_PRIMARIES_BT709 => Self::Bt709,
2122            ffi::GST_VIDEO_COLOR_PRIMARIES_BT470M => Self::Bt470m,
2123            ffi::GST_VIDEO_COLOR_PRIMARIES_BT470BG => Self::Bt470bg,
2124            ffi::GST_VIDEO_COLOR_PRIMARIES_SMPTE170M => Self::Smpte170m,
2125            ffi::GST_VIDEO_COLOR_PRIMARIES_SMPTE240M => Self::Smpte240m,
2126            ffi::GST_VIDEO_COLOR_PRIMARIES_FILM => Self::Film,
2127            ffi::GST_VIDEO_COLOR_PRIMARIES_BT2020 => Self::Bt2020,
2128            ffi::GST_VIDEO_COLOR_PRIMARIES_ADOBERGB => Self::Adobergb,
2129            #[cfg(feature = "v1_16")]
2130            ffi::GST_VIDEO_COLOR_PRIMARIES_SMPTEST428 => Self::Smptest428,
2131            #[cfg(feature = "v1_16")]
2132            ffi::GST_VIDEO_COLOR_PRIMARIES_SMPTERP431 => Self::Smpterp431,
2133            #[cfg(feature = "v1_16")]
2134            ffi::GST_VIDEO_COLOR_PRIMARIES_SMPTEEG432 => Self::Smpteeg432,
2135            #[cfg(feature = "v1_16")]
2136            ffi::GST_VIDEO_COLOR_PRIMARIES_EBU3213 => Self::Ebu3213,
2137            value => Self::__Unknown(value),
2138        }
2139    }
2140}
2141
2142impl StaticType for VideoColorPrimaries {
2143    #[inline]
2144    #[doc(alias = "gst_video_color_primaries_get_type")]
2145    fn static_type() -> glib::Type {
2146        unsafe { from_glib(ffi::gst_video_color_primaries_get_type()) }
2147    }
2148}
2149
2150impl glib::HasParamSpec for VideoColorPrimaries {
2151    type ParamSpec = glib::ParamSpecEnum;
2152    type SetValue = Self;
2153    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
2154
2155    fn param_spec_builder() -> Self::BuilderFn {
2156        Self::ParamSpec::builder_with_default
2157    }
2158}
2159
2160impl glib::value::ValueType for VideoColorPrimaries {
2161    type Type = Self;
2162}
2163
2164unsafe impl<'a> glib::value::FromValue<'a> for VideoColorPrimaries {
2165    type Checker = glib::value::GenericValueTypeChecker<Self>;
2166
2167    #[inline]
2168    unsafe fn from_value(value: &'a glib::Value) -> Self {
2169        skip_assert_initialized!();
2170        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
2171    }
2172}
2173
2174impl ToValue for VideoColorPrimaries {
2175    #[inline]
2176    fn to_value(&self) -> glib::Value {
2177        let mut value = glib::Value::for_value_type::<Self>();
2178        unsafe {
2179            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
2180        }
2181        value
2182    }
2183
2184    #[inline]
2185    fn value_type(&self) -> glib::Type {
2186        Self::static_type()
2187    }
2188}
2189
2190impl From<VideoColorPrimaries> for glib::Value {
2191    #[inline]
2192    fn from(v: VideoColorPrimaries) -> Self {
2193        skip_assert_initialized!();
2194        ToValue::to_value(&v)
2195    }
2196}
2197
2198/// Different dithering methods to use.
2199#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
2200#[non_exhaustive]
2201#[doc(alias = "GstVideoDitherMethod")]
2202pub enum VideoDitherMethod {
2203    /// no dithering
2204    #[doc(alias = "GST_VIDEO_DITHER_NONE")]
2205    None,
2206    /// propagate rounding errors downwards
2207    #[doc(alias = "GST_VIDEO_DITHER_VERTERR")]
2208    Verterr,
2209    /// Dither with floyd-steinberg error diffusion
2210    #[doc(alias = "GST_VIDEO_DITHER_FLOYD_STEINBERG")]
2211    FloydSteinberg,
2212    /// Dither with Sierra Lite error diffusion
2213    #[doc(alias = "GST_VIDEO_DITHER_SIERRA_LITE")]
2214    SierraLite,
2215    /// ordered dither using a bayer pattern
2216    #[doc(alias = "GST_VIDEO_DITHER_BAYER")]
2217    Bayer,
2218    #[doc(hidden)]
2219    __Unknown(i32),
2220}
2221
2222#[doc(hidden)]
2223impl IntoGlib for VideoDitherMethod {
2224    type GlibType = ffi::GstVideoDitherMethod;
2225
2226    #[inline]
2227    fn into_glib(self) -> ffi::GstVideoDitherMethod {
2228        match self {
2229            Self::None => ffi::GST_VIDEO_DITHER_NONE,
2230            Self::Verterr => ffi::GST_VIDEO_DITHER_VERTERR,
2231            Self::FloydSteinberg => ffi::GST_VIDEO_DITHER_FLOYD_STEINBERG,
2232            Self::SierraLite => ffi::GST_VIDEO_DITHER_SIERRA_LITE,
2233            Self::Bayer => ffi::GST_VIDEO_DITHER_BAYER,
2234            Self::__Unknown(value) => value,
2235        }
2236    }
2237}
2238
2239#[doc(hidden)]
2240impl FromGlib<ffi::GstVideoDitherMethod> for VideoDitherMethod {
2241    #[inline]
2242    unsafe fn from_glib(value: ffi::GstVideoDitherMethod) -> Self {
2243        skip_assert_initialized!();
2244
2245        match value {
2246            ffi::GST_VIDEO_DITHER_NONE => Self::None,
2247            ffi::GST_VIDEO_DITHER_VERTERR => Self::Verterr,
2248            ffi::GST_VIDEO_DITHER_FLOYD_STEINBERG => Self::FloydSteinberg,
2249            ffi::GST_VIDEO_DITHER_SIERRA_LITE => Self::SierraLite,
2250            ffi::GST_VIDEO_DITHER_BAYER => Self::Bayer,
2251            value => Self::__Unknown(value),
2252        }
2253    }
2254}
2255
2256impl StaticType for VideoDitherMethod {
2257    #[inline]
2258    #[doc(alias = "gst_video_dither_method_get_type")]
2259    fn static_type() -> glib::Type {
2260        unsafe { from_glib(ffi::gst_video_dither_method_get_type()) }
2261    }
2262}
2263
2264impl glib::HasParamSpec for VideoDitherMethod {
2265    type ParamSpec = glib::ParamSpecEnum;
2266    type SetValue = Self;
2267    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
2268
2269    fn param_spec_builder() -> Self::BuilderFn {
2270        Self::ParamSpec::builder_with_default
2271    }
2272}
2273
2274impl glib::value::ValueType for VideoDitherMethod {
2275    type Type = Self;
2276}
2277
2278unsafe impl<'a> glib::value::FromValue<'a> for VideoDitherMethod {
2279    type Checker = glib::value::GenericValueTypeChecker<Self>;
2280
2281    #[inline]
2282    unsafe fn from_value(value: &'a glib::Value) -> Self {
2283        skip_assert_initialized!();
2284        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
2285    }
2286}
2287
2288impl ToValue for VideoDitherMethod {
2289    #[inline]
2290    fn to_value(&self) -> glib::Value {
2291        let mut value = glib::Value::for_value_type::<Self>();
2292        unsafe {
2293            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
2294        }
2295        value
2296    }
2297
2298    #[inline]
2299    fn value_type(&self) -> glib::Type {
2300        Self::static_type()
2301    }
2302}
2303
2304impl From<VideoDitherMethod> for glib::Value {
2305    #[inline]
2306    fn from(v: VideoDitherMethod) -> Self {
2307        skip_assert_initialized!();
2308        ToValue::to_value(&v)
2309    }
2310}
2311
2312/// Field order of interlaced content. This is only valid for
2313/// interlace-mode=interleaved and not interlace-mode=mixed. In the case of
2314/// mixed or GST_VIDEO_FIELD_ORDER_UNKOWN, the field order is signalled via
2315/// buffer flags.
2316#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
2317#[non_exhaustive]
2318#[doc(alias = "GstVideoFieldOrder")]
2319pub enum VideoFieldOrder {
2320    /// unknown field order for interlaced content.
2321    ///  The actual field order is signalled via buffer flags.
2322    #[doc(alias = "GST_VIDEO_FIELD_ORDER_UNKNOWN")]
2323    Unknown,
2324    /// top field is first
2325    #[doc(alias = "GST_VIDEO_FIELD_ORDER_TOP_FIELD_FIRST")]
2326    TopFieldFirst,
2327    /// bottom field is first
2328    #[doc(alias = "GST_VIDEO_FIELD_ORDER_BOTTOM_FIELD_FIRST")]
2329    BottomFieldFirst,
2330    #[doc(hidden)]
2331    __Unknown(i32),
2332}
2333
2334impl VideoFieldOrder {
2335    #[doc(alias = "gst_video_field_order_from_string")]
2336    pub fn from_string(order: &str) -> VideoFieldOrder {
2337        assert_initialized_main_thread!();
2338        unsafe {
2339            from_glib(ffi::gst_video_field_order_from_string(
2340                order.to_glib_none().0,
2341            ))
2342        }
2343    }
2344}
2345
2346impl std::fmt::Display for VideoFieldOrder {
2347    #[inline]
2348    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
2349        f.write_str(&self.to_str())
2350    }
2351}
2352
2353#[doc(hidden)]
2354impl IntoGlib for VideoFieldOrder {
2355    type GlibType = ffi::GstVideoFieldOrder;
2356
2357    #[inline]
2358    fn into_glib(self) -> ffi::GstVideoFieldOrder {
2359        match self {
2360            Self::Unknown => ffi::GST_VIDEO_FIELD_ORDER_UNKNOWN,
2361            Self::TopFieldFirst => ffi::GST_VIDEO_FIELD_ORDER_TOP_FIELD_FIRST,
2362            Self::BottomFieldFirst => ffi::GST_VIDEO_FIELD_ORDER_BOTTOM_FIELD_FIRST,
2363            Self::__Unknown(value) => value,
2364        }
2365    }
2366}
2367
2368#[doc(hidden)]
2369impl FromGlib<ffi::GstVideoFieldOrder> for VideoFieldOrder {
2370    #[inline]
2371    unsafe fn from_glib(value: ffi::GstVideoFieldOrder) -> Self {
2372        skip_assert_initialized!();
2373
2374        match value {
2375            ffi::GST_VIDEO_FIELD_ORDER_UNKNOWN => Self::Unknown,
2376            ffi::GST_VIDEO_FIELD_ORDER_TOP_FIELD_FIRST => Self::TopFieldFirst,
2377            ffi::GST_VIDEO_FIELD_ORDER_BOTTOM_FIELD_FIRST => Self::BottomFieldFirst,
2378            value => Self::__Unknown(value),
2379        }
2380    }
2381}
2382
2383impl StaticType for VideoFieldOrder {
2384    #[inline]
2385    #[doc(alias = "gst_video_field_order_get_type")]
2386    fn static_type() -> glib::Type {
2387        unsafe { from_glib(ffi::gst_video_field_order_get_type()) }
2388    }
2389}
2390
2391impl glib::HasParamSpec for VideoFieldOrder {
2392    type ParamSpec = glib::ParamSpecEnum;
2393    type SetValue = Self;
2394    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
2395
2396    fn param_spec_builder() -> Self::BuilderFn {
2397        Self::ParamSpec::builder_with_default
2398    }
2399}
2400
2401impl glib::value::ValueType for VideoFieldOrder {
2402    type Type = Self;
2403}
2404
2405unsafe impl<'a> glib::value::FromValue<'a> for VideoFieldOrder {
2406    type Checker = glib::value::GenericValueTypeChecker<Self>;
2407
2408    #[inline]
2409    unsafe fn from_value(value: &'a glib::Value) -> Self {
2410        skip_assert_initialized!();
2411        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
2412    }
2413}
2414
2415impl ToValue for VideoFieldOrder {
2416    #[inline]
2417    fn to_value(&self) -> glib::Value {
2418        let mut value = glib::Value::for_value_type::<Self>();
2419        unsafe {
2420            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
2421        }
2422        value
2423    }
2424
2425    #[inline]
2426    fn value_type(&self) -> glib::Type {
2427        Self::static_type()
2428    }
2429}
2430
2431impl From<VideoFieldOrder> for glib::Value {
2432    #[inline]
2433    fn from(v: VideoFieldOrder) -> Self {
2434        skip_assert_initialized!();
2435        ToValue::to_value(&v)
2436    }
2437}
2438
2439/// Enum value describing the most common video formats.
2440///
2441/// See the [GStreamer raw video format design document](https://gstreamer.freedesktop.org/documentation/additional/design/mediatype-video-raw.html`formats`)
2442/// for details about the layout and packing of these formats in memory.
2443#[derive(Debug, Eq, PartialEq, Hash, Clone, Copy)]
2444#[non_exhaustive]
2445#[doc(alias = "GstVideoFormat")]
2446pub enum VideoFormat {
2447    /// Unknown or unset video format id
2448    #[doc(alias = "GST_VIDEO_FORMAT_UNKNOWN")]
2449    Unknown,
2450    /// Encoded video format. Only ever use that in caps for
2451    ///  special video formats in combination with non-system
2452    ///  memory GstCapsFeatures where it does not make sense
2453    ///  to specify a real video format.
2454    #[doc(alias = "GST_VIDEO_FORMAT_ENCODED")]
2455    Encoded,
2456    /// planar 4:2:0 YUV
2457    #[doc(alias = "GST_VIDEO_FORMAT_I420")]
2458    I420,
2459    /// planar 4:2:0 YVU (like I420 but UV planes swapped)
2460    #[doc(alias = "GST_VIDEO_FORMAT_YV12")]
2461    Yv12,
2462    /// packed 4:2:2 YUV (Y0-U0-Y1-V0 Y2-U2-Y3-V2 Y4 ...)
2463    #[doc(alias = "GST_VIDEO_FORMAT_YUY2")]
2464    Yuy2,
2465    /// packed 4:2:2 YUV (U0-Y0-V0-Y1 U2-Y2-V2-Y3 U4 ...)
2466    #[doc(alias = "GST_VIDEO_FORMAT_UYVY")]
2467    Uyvy,
2468    /// packed 4:4:4 YUV with alpha channel (A0-Y0-U0-V0 ...)
2469    #[doc(alias = "GST_VIDEO_FORMAT_AYUV")]
2470    Ayuv,
2471    /// sparse rgb packed into 32 bit, space last
2472    #[doc(alias = "GST_VIDEO_FORMAT_RGBx")]
2473    Rgbx,
2474    /// sparse reverse rgb packed into 32 bit, space last
2475    #[doc(alias = "GST_VIDEO_FORMAT_BGRx")]
2476    Bgrx,
2477    /// sparse rgb packed into 32 bit, space first
2478    #[doc(alias = "GST_VIDEO_FORMAT_xRGB")]
2479    Xrgb,
2480    /// sparse reverse rgb packed into 32 bit, space first
2481    #[doc(alias = "GST_VIDEO_FORMAT_xBGR")]
2482    Xbgr,
2483    /// rgb with alpha channel last
2484    #[doc(alias = "GST_VIDEO_FORMAT_RGBA")]
2485    Rgba,
2486    /// reverse rgb with alpha channel last
2487    #[doc(alias = "GST_VIDEO_FORMAT_BGRA")]
2488    Bgra,
2489    /// rgb with alpha channel first
2490    #[doc(alias = "GST_VIDEO_FORMAT_ARGB")]
2491    Argb,
2492    /// reverse rgb with alpha channel first
2493    #[doc(alias = "GST_VIDEO_FORMAT_ABGR")]
2494    Abgr,
2495    /// RGB packed into 24 bits without padding (`R-G-B-R-G-B`)
2496    #[doc(alias = "GST_VIDEO_FORMAT_RGB")]
2497    Rgb,
2498    /// reverse RGB packed into 24 bits without padding (`B-G-R-B-G-R`)
2499    #[doc(alias = "GST_VIDEO_FORMAT_BGR")]
2500    Bgr,
2501    /// planar 4:1:1 YUV
2502    #[doc(alias = "GST_VIDEO_FORMAT_Y41B")]
2503    Y41b,
2504    /// planar 4:2:2 YUV
2505    #[doc(alias = "GST_VIDEO_FORMAT_Y42B")]
2506    Y42b,
2507    /// packed 4:2:2 YUV (Y0-V0-Y1-U0 Y2-V2-Y3-U2 Y4 ...)
2508    #[doc(alias = "GST_VIDEO_FORMAT_YVYU")]
2509    Yvyu,
2510    /// planar 4:4:4 YUV
2511    #[doc(alias = "GST_VIDEO_FORMAT_Y444")]
2512    Y444,
2513    /// packed 4:2:2 10-bit YUV, complex format
2514    #[doc(alias = "GST_VIDEO_FORMAT_v210")]
2515    V210,
2516    /// packed 4:2:2 16-bit YUV, Y0-U0-Y1-V1 order
2517    #[doc(alias = "GST_VIDEO_FORMAT_v216")]
2518    V216,
2519    /// planar 4:2:0 YUV with interleaved UV plane
2520    #[doc(alias = "GST_VIDEO_FORMAT_NV12")]
2521    Nv12,
2522    /// planar 4:2:0 YUV with interleaved VU plane
2523    #[doc(alias = "GST_VIDEO_FORMAT_NV21")]
2524    Nv21,
2525    /// 8-bit grayscale
2526    #[doc(alias = "GST_VIDEO_FORMAT_GRAY8")]
2527    Gray8,
2528    /// 16-bit grayscale, most significant byte first
2529    #[doc(alias = "GST_VIDEO_FORMAT_GRAY16_BE")]
2530    Gray16Be,
2531    /// 16-bit grayscale, least significant byte first
2532    #[doc(alias = "GST_VIDEO_FORMAT_GRAY16_LE")]
2533    Gray16Le,
2534    /// packed 4:4:4 YUV (Y-U-V ...)
2535    #[doc(alias = "GST_VIDEO_FORMAT_v308")]
2536    V308,
2537    /// rgb 5-6-5 bits per component
2538    #[doc(alias = "GST_VIDEO_FORMAT_RGB16")]
2539    Rgb16,
2540    /// reverse rgb 5-6-5 bits per component
2541    #[doc(alias = "GST_VIDEO_FORMAT_BGR16")]
2542    Bgr16,
2543    /// rgb 5-5-5 bits per component
2544    #[doc(alias = "GST_VIDEO_FORMAT_RGB15")]
2545    Rgb15,
2546    /// reverse rgb 5-5-5 bits per component
2547    #[doc(alias = "GST_VIDEO_FORMAT_BGR15")]
2548    Bgr15,
2549    /// packed 10-bit 4:2:2 YUV (U0-Y0-V0-Y1 U2-Y2-V2-Y3 U4 ...)
2550    #[doc(alias = "GST_VIDEO_FORMAT_UYVP")]
2551    Uyvp,
2552    /// planar 4:4:2:0 AYUV
2553    #[doc(alias = "GST_VIDEO_FORMAT_A420")]
2554    A420,
2555    /// 8-bit paletted RGB
2556    #[doc(alias = "GST_VIDEO_FORMAT_RGB8P")]
2557    Rgb8p,
2558    /// planar 4:1:0 YUV
2559    #[doc(alias = "GST_VIDEO_FORMAT_YUV9")]
2560    Yuv9,
2561    /// planar 4:1:0 YUV (like YUV9 but UV planes swapped)
2562    #[doc(alias = "GST_VIDEO_FORMAT_YVU9")]
2563    Yvu9,
2564    /// packed 4:1:1 YUV (Cb-Y0-Y1-Cr-Y2-Y3 ...)
2565    #[doc(alias = "GST_VIDEO_FORMAT_IYU1")]
2566    Iyu1,
2567    /// rgb with alpha channel first, 16 bits (native endianness) per channel
2568    #[doc(alias = "GST_VIDEO_FORMAT_ARGB64")]
2569    Argb64,
2570    /// packed 4:4:4 YUV with alpha channel, 16 bits (native endianness) per channel (A0-Y0-U0-V0 ...)
2571    #[doc(alias = "GST_VIDEO_FORMAT_AYUV64")]
2572    Ayuv64,
2573    /// packed 4:4:4 RGB, 10 bits per channel
2574    #[doc(alias = "GST_VIDEO_FORMAT_r210")]
2575    R210,
2576    /// planar 4:2:0 YUV, 10 bits per channel
2577    #[doc(alias = "GST_VIDEO_FORMAT_I420_10BE")]
2578    I42010be,
2579    /// planar 4:2:0 YUV, 10 bits per channel
2580    #[doc(alias = "GST_VIDEO_FORMAT_I420_10LE")]
2581    I42010le,
2582    /// planar 4:2:2 YUV, 10 bits per channel
2583    #[doc(alias = "GST_VIDEO_FORMAT_I422_10BE")]
2584    I42210be,
2585    /// planar 4:2:2 YUV, 10 bits per channel
2586    #[doc(alias = "GST_VIDEO_FORMAT_I422_10LE")]
2587    I42210le,
2588    /// planar 4:4:4 YUV, 10 bits per channel (Since: 1.2)
2589    #[doc(alias = "GST_VIDEO_FORMAT_Y444_10BE")]
2590    Y44410be,
2591    /// planar 4:4:4 YUV, 10 bits per channel (Since: 1.2)
2592    #[doc(alias = "GST_VIDEO_FORMAT_Y444_10LE")]
2593    Y44410le,
2594    /// planar 4:4:4 RGB, 8 bits per channel (Since: 1.2)
2595    #[doc(alias = "GST_VIDEO_FORMAT_GBR")]
2596    Gbr,
2597    /// planar 4:4:4 RGB, 10 bits per channel (Since: 1.2)
2598    #[doc(alias = "GST_VIDEO_FORMAT_GBR_10BE")]
2599    Gbr10be,
2600    /// planar 4:4:4 RGB, 10 bits per channel (Since: 1.2)
2601    #[doc(alias = "GST_VIDEO_FORMAT_GBR_10LE")]
2602    Gbr10le,
2603    /// planar 4:2:2 YUV with interleaved UV plane (Since: 1.2)
2604    #[doc(alias = "GST_VIDEO_FORMAT_NV16")]
2605    Nv16,
2606    /// planar 4:4:4 YUV with interleaved UV plane (Since: 1.2)
2607    #[doc(alias = "GST_VIDEO_FORMAT_NV24")]
2608    Nv24,
2609    /// NV12 with 64x32 tiling in zigzag pattern (Since: 1.4)
2610    #[doc(alias = "GST_VIDEO_FORMAT_NV12_64Z32")]
2611    Nv1264z32,
2612    /// planar 4:4:2:0 YUV, 10 bits per channel (Since: 1.6)
2613    #[doc(alias = "GST_VIDEO_FORMAT_A420_10BE")]
2614    A42010be,
2615    /// planar 4:4:2:0 YUV, 10 bits per channel (Since: 1.6)
2616    #[doc(alias = "GST_VIDEO_FORMAT_A420_10LE")]
2617    A42010le,
2618    /// planar 4:4:2:2 YUV, 10 bits per channel (Since: 1.6)
2619    #[doc(alias = "GST_VIDEO_FORMAT_A422_10BE")]
2620    A42210be,
2621    /// planar 4:4:2:2 YUV, 10 bits per channel (Since: 1.6)
2622    #[doc(alias = "GST_VIDEO_FORMAT_A422_10LE")]
2623    A42210le,
2624    /// planar 4:4:4:4 YUV, 10 bits per channel (Since: 1.6)
2625    #[doc(alias = "GST_VIDEO_FORMAT_A444_10BE")]
2626    A44410be,
2627    /// planar 4:4:4:4 YUV, 10 bits per channel (Since: 1.6)
2628    #[doc(alias = "GST_VIDEO_FORMAT_A444_10LE")]
2629    A44410le,
2630    /// planar 4:2:2 YUV with interleaved VU plane (Since: 1.6)
2631    #[doc(alias = "GST_VIDEO_FORMAT_NV61")]
2632    Nv61,
2633    /// planar 4:2:0 YUV with interleaved UV plane, 10 bits per channel (Since: 1.10)
2634    #[doc(alias = "GST_VIDEO_FORMAT_P010_10BE")]
2635    P01010be,
2636    /// planar 4:2:0 YUV with interleaved UV plane, 10 bits per channel (Since: 1.10)
2637    #[doc(alias = "GST_VIDEO_FORMAT_P010_10LE")]
2638    P01010le,
2639    /// packed 4:4:4 YUV (U-Y-V ...) (Since: 1.10)
2640    #[doc(alias = "GST_VIDEO_FORMAT_IYU2")]
2641    Iyu2,
2642    /// packed 4:2:2 YUV (V0-Y0-U0-Y1 V2-Y2-U2-Y3 V4 ...)
2643    #[doc(alias = "GST_VIDEO_FORMAT_VYUY")]
2644    Vyuy,
2645    /// planar 4:4:4:4 ARGB, 8 bits per channel (Since: 1.12)
2646    #[doc(alias = "GST_VIDEO_FORMAT_GBRA")]
2647    Gbra,
2648    /// planar 4:4:4:4 ARGB, 10 bits per channel (Since: 1.12)
2649    #[doc(alias = "GST_VIDEO_FORMAT_GBRA_10BE")]
2650    Gbra10be,
2651    /// planar 4:4:4:4 ARGB, 10 bits per channel (Since: 1.12)
2652    #[doc(alias = "GST_VIDEO_FORMAT_GBRA_10LE")]
2653    Gbra10le,
2654    /// planar 4:4:4 RGB, 12 bits per channel (Since: 1.12)
2655    #[doc(alias = "GST_VIDEO_FORMAT_GBR_12BE")]
2656    Gbr12be,
2657    /// planar 4:4:4 RGB, 12 bits per channel (Since: 1.12)
2658    #[doc(alias = "GST_VIDEO_FORMAT_GBR_12LE")]
2659    Gbr12le,
2660    /// planar 4:4:4:4 ARGB, 12 bits per channel (Since: 1.12)
2661    #[doc(alias = "GST_VIDEO_FORMAT_GBRA_12BE")]
2662    Gbra12be,
2663    /// planar 4:4:4:4 ARGB, 12 bits per channel (Since: 1.12)
2664    #[doc(alias = "GST_VIDEO_FORMAT_GBRA_12LE")]
2665    Gbra12le,
2666    /// planar 4:2:0 YUV, 12 bits per channel (Since: 1.12)
2667    #[doc(alias = "GST_VIDEO_FORMAT_I420_12BE")]
2668    I42012be,
2669    /// planar 4:2:0 YUV, 12 bits per channel (Since: 1.12)
2670    #[doc(alias = "GST_VIDEO_FORMAT_I420_12LE")]
2671    I42012le,
2672    /// planar 4:2:2 YUV, 12 bits per channel (Since: 1.12)
2673    #[doc(alias = "GST_VIDEO_FORMAT_I422_12BE")]
2674    I42212be,
2675    /// planar 4:2:2 YUV, 12 bits per channel (Since: 1.12)
2676    #[doc(alias = "GST_VIDEO_FORMAT_I422_12LE")]
2677    I42212le,
2678    /// planar 4:4:4 YUV, 12 bits per channel (Since: 1.12)
2679    #[doc(alias = "GST_VIDEO_FORMAT_Y444_12BE")]
2680    Y44412be,
2681    /// planar 4:4:4 YUV, 12 bits per channel (Since: 1.12)
2682    #[doc(alias = "GST_VIDEO_FORMAT_Y444_12LE")]
2683    Y44412le,
2684    /// 10-bit grayscale, packed into 32bit words (2 bits padding) (Since: 1.14)
2685    #[doc(alias = "GST_VIDEO_FORMAT_GRAY10_LE32")]
2686    Gray10Le32,
2687    /// 10-bit variant of [`Nv12`][Self::Nv12], packed into 32bit words (MSB 2 bits padding) (Since: 1.14)
2688    #[doc(alias = "GST_VIDEO_FORMAT_NV12_10LE32")]
2689    Nv1210le32,
2690    /// 10-bit variant of [`Nv16`][Self::Nv16], packed into 32bit words (MSB 2 bits padding) (Since: 1.14)
2691    #[doc(alias = "GST_VIDEO_FORMAT_NV16_10LE32")]
2692    Nv1610le32,
2693    /// Fully packed variant of NV12_10LE32 (Since: 1.16)
2694    #[cfg(feature = "v1_16")]
2695    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
2696    #[doc(alias = "GST_VIDEO_FORMAT_NV12_10LE40")]
2697    Nv1210le40,
2698    /// packed 4:2:2 YUV, 10 bits per channel (Since: 1.16)
2699    #[cfg(feature = "v1_16")]
2700    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
2701    #[doc(alias = "GST_VIDEO_FORMAT_Y210")]
2702    Y210,
2703    /// packed 4:4:4 YUV, 10 bits per channel(A-V-Y-U...) (Since: 1.16)
2704    #[cfg(feature = "v1_16")]
2705    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
2706    #[doc(alias = "GST_VIDEO_FORMAT_Y410")]
2707    Y410,
2708    /// packed 4:4:4 YUV with alpha channel (V0-U0-Y0-A0...) (Since: 1.16)
2709    #[cfg(feature = "v1_16")]
2710    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
2711    #[doc(alias = "GST_VIDEO_FORMAT_VUYA")]
2712    Vuya,
2713    /// packed 4:4:4 RGB with alpha channel(B-G-R-A), 10 bits for R/G/B channel and MSB 2 bits for alpha channel (Since: 1.16)
2714    #[cfg(feature = "v1_16")]
2715    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
2716    #[doc(alias = "GST_VIDEO_FORMAT_BGR10A2_LE")]
2717    Bgr10a2Le,
2718    /// packed 4:4:4 RGB with alpha channel(R-G-B-A), 10 bits for R/G/B channel and MSB 2 bits for alpha channel (Since: 1.18)
2719    #[cfg(feature = "v1_18")]
2720    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
2721    #[doc(alias = "GST_VIDEO_FORMAT_RGB10A2_LE")]
2722    Rgb10a2Le,
2723    /// planar 4:4:4 YUV, 16 bits per channel (Since: 1.18)
2724    #[cfg(feature = "v1_18")]
2725    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
2726    #[doc(alias = "GST_VIDEO_FORMAT_Y444_16BE")]
2727    Y44416be,
2728    /// planar 4:4:4 YUV, 16 bits per channel (Since: 1.18)
2729    #[cfg(feature = "v1_18")]
2730    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
2731    #[doc(alias = "GST_VIDEO_FORMAT_Y444_16LE")]
2732    Y44416le,
2733    /// planar 4:2:0 YUV with interleaved UV plane, 16 bits per channel (Since: 1.18)
2734    #[cfg(feature = "v1_18")]
2735    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
2736    #[doc(alias = "GST_VIDEO_FORMAT_P016_BE")]
2737    P016Be,
2738    /// planar 4:2:0 YUV with interleaved UV plane, 16 bits per channel (Since: 1.18)
2739    #[cfg(feature = "v1_18")]
2740    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
2741    #[doc(alias = "GST_VIDEO_FORMAT_P016_LE")]
2742    P016Le,
2743    /// planar 4:2:0 YUV with interleaved UV plane, 12 bits per channel (Since: 1.18)
2744    #[cfg(feature = "v1_18")]
2745    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
2746    #[doc(alias = "GST_VIDEO_FORMAT_P012_BE")]
2747    P012Be,
2748    /// planar 4:2:0 YUV with interleaved UV plane, 12 bits per channel (Since: 1.18)
2749    #[cfg(feature = "v1_18")]
2750    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
2751    #[doc(alias = "GST_VIDEO_FORMAT_P012_LE")]
2752    P012Le,
2753    /// packed 4:2:2 YUV, 12 bits per channel (Y-U-Y-V) (Since: 1.18)
2754    #[cfg(feature = "v1_18")]
2755    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
2756    #[doc(alias = "GST_VIDEO_FORMAT_Y212_BE")]
2757    Y212Be,
2758    /// packed 4:2:2 YUV, 12 bits per channel (Y-U-Y-V) (Since: 1.18)
2759    #[cfg(feature = "v1_18")]
2760    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
2761    #[doc(alias = "GST_VIDEO_FORMAT_Y212_LE")]
2762    Y212Le,
2763    /// packed 4:4:4:4 YUV, 12 bits per channel(U-Y-V-A...) (Since: 1.18)
2764    #[cfg(feature = "v1_18")]
2765    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
2766    #[doc(alias = "GST_VIDEO_FORMAT_Y412_BE")]
2767    Y412Be,
2768    /// packed 4:4:4:4 YUV, 12 bits per channel(U-Y-V-A...) (Since: 1.18)
2769    #[cfg(feature = "v1_18")]
2770    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
2771    #[doc(alias = "GST_VIDEO_FORMAT_Y412_LE")]
2772    Y412Le,
2773    /// NV12 with 4x4 tiles in linear order.
2774    #[cfg(feature = "v1_18")]
2775    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
2776    #[doc(alias = "GST_VIDEO_FORMAT_NV12_4L4")]
2777    Nv124l4,
2778    /// NV12 with 32x32 tiles in linear order.
2779    #[cfg(feature = "v1_18")]
2780    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
2781    #[doc(alias = "GST_VIDEO_FORMAT_NV12_32L32")]
2782    Nv1232l32,
2783    /// Planar 4:4:4 RGB, R-G-B order
2784    #[cfg(feature = "v1_20")]
2785    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
2786    #[doc(alias = "GST_VIDEO_FORMAT_RGBP")]
2787    Rgbp,
2788    /// Planar 4:4:4 RGB, B-G-R order
2789    #[cfg(feature = "v1_20")]
2790    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
2791    #[doc(alias = "GST_VIDEO_FORMAT_BGRP")]
2792    Bgrp,
2793    /// Planar 4:2:0 YUV with interleaved UV plane with alpha as
2794    /// 3rd plane.
2795    #[cfg(feature = "v1_20")]
2796    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
2797    #[doc(alias = "GST_VIDEO_FORMAT_AV12")]
2798    Av12,
2799    /// RGB with alpha channel first, 16 bits (little endian)
2800    /// per channel.
2801    #[cfg(feature = "v1_20")]
2802    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
2803    #[doc(alias = "GST_VIDEO_FORMAT_ARGB64_LE")]
2804    Argb64Le,
2805    /// RGB with alpha channel first, 16 bits (big endian)
2806    /// per channel.
2807    #[cfg(feature = "v1_20")]
2808    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
2809    #[doc(alias = "GST_VIDEO_FORMAT_ARGB64_BE")]
2810    Argb64Be,
2811    /// RGB with alpha channel last, 16 bits (little endian)
2812    /// per channel.
2813    #[cfg(feature = "v1_20")]
2814    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
2815    #[doc(alias = "GST_VIDEO_FORMAT_RGBA64_LE")]
2816    Rgba64Le,
2817    /// RGB with alpha channel last, 16 bits (big endian)
2818    /// per channel.
2819    #[cfg(feature = "v1_20")]
2820    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
2821    #[doc(alias = "GST_VIDEO_FORMAT_RGBA64_BE")]
2822    Rgba64Be,
2823    /// Reverse RGB with alpha channel last, 16 bits (little endian)
2824    /// per channel.
2825    #[cfg(feature = "v1_20")]
2826    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
2827    #[doc(alias = "GST_VIDEO_FORMAT_BGRA64_LE")]
2828    Bgra64Le,
2829    /// Reverse RGB with alpha channel last, 16 bits (big endian)
2830    /// per channel.
2831    #[cfg(feature = "v1_20")]
2832    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
2833    #[doc(alias = "GST_VIDEO_FORMAT_BGRA64_BE")]
2834    Bgra64Be,
2835    /// Reverse RGB with alpha channel first, 16 bits (little endian)
2836    /// per channel.
2837    #[cfg(feature = "v1_20")]
2838    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
2839    #[doc(alias = "GST_VIDEO_FORMAT_ABGR64_LE")]
2840    Abgr64Le,
2841    /// Reverse RGB with alpha channel first, 16 bits (big endian)
2842    /// per channel.
2843    #[cfg(feature = "v1_20")]
2844    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
2845    #[doc(alias = "GST_VIDEO_FORMAT_ABGR64_BE")]
2846    Abgr64Be,
2847    /// NV12 with 16x32 Y tiles and 16x16 UV tiles.
2848    #[cfg(feature = "v1_22")]
2849    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
2850    #[doc(alias = "GST_VIDEO_FORMAT_NV12_16L32S")]
2851    Nv1216l32s,
2852    /// NV12 with 8x128 tiles in linear order.
2853    #[cfg(feature = "v1_22")]
2854    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
2855    #[doc(alias = "GST_VIDEO_FORMAT_NV12_8L128")]
2856    Nv128l128,
2857    /// NV12 10bit big endian with 8x128 tiles in linear order.
2858    #[cfg(feature = "v1_22")]
2859    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
2860    #[doc(alias = "GST_VIDEO_FORMAT_NV12_10BE_8L128")]
2861    Nv1210be8l128,
2862    /// [`Nv1210le40`][Self::Nv1210le40] with 4x4 pixels tiles (5 bytes
2863    ///  per tile row). This format is produced by Verisilicon/Hantro decoders.
2864    #[cfg(feature = "v1_24")]
2865    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2866    #[doc(alias = "GST_VIDEO_FORMAT_NV12_10LE40_4L4")]
2867    Nv1210le404l4,
2868    /// [`DmaDrm`][Self::DmaDrm] represent the DMA DRM special format. It's
2869    /// only used with memory:DMABuf `GstCapsFeatures`, where an extra
2870    /// parameter (drm-format) is required to define the image format and
2871    /// its memory layout.
2872    #[cfg(feature = "v1_24")]
2873    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2874    #[doc(alias = "GST_VIDEO_FORMAT_DMA_DRM")]
2875    DmaDrm,
2876    /// Mediatek 10bit NV12 little endian with 16x32 tiles in linear order, tile 2
2877    /// bits.
2878    #[cfg(feature = "v1_24")]
2879    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2880    #[doc(alias = "GST_VIDEO_FORMAT_MT2110T")]
2881    Mt2110t,
2882    /// Mediatek 10bit NV12 little endian with 16x32 tiles in linear order, raster
2883    /// 2 bits.
2884    #[cfg(feature = "v1_24")]
2885    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2886    #[doc(alias = "GST_VIDEO_FORMAT_MT2110R")]
2887    Mt2110r,
2888    /// planar 4:4:2:2 YUV, 8 bits per channel
2889    #[cfg(feature = "v1_24")]
2890    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2891    #[doc(alias = "GST_VIDEO_FORMAT_A422")]
2892    A422,
2893    /// planar 4:4:4:4 YUV, 8 bits per channel
2894    #[cfg(feature = "v1_24")]
2895    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2896    #[doc(alias = "GST_VIDEO_FORMAT_A444")]
2897    A444,
2898    /// planar 4:4:4:4 YUV, 12 bits per channel
2899    #[cfg(feature = "v1_24")]
2900    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2901    #[doc(alias = "GST_VIDEO_FORMAT_A444_12LE")]
2902    A44412le,
2903    /// planar 4:4:4:4 YUV, 12 bits per channel
2904    #[cfg(feature = "v1_24")]
2905    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2906    #[doc(alias = "GST_VIDEO_FORMAT_A444_12BE")]
2907    A44412be,
2908    /// planar 4:4:2:2 YUV, 12 bits per channel
2909    #[cfg(feature = "v1_24")]
2910    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2911    #[doc(alias = "GST_VIDEO_FORMAT_A422_12LE")]
2912    A42212le,
2913    /// planar 4:4:2:2 YUV, 12 bits per channel
2914    #[cfg(feature = "v1_24")]
2915    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2916    #[doc(alias = "GST_VIDEO_FORMAT_A422_12BE")]
2917    A42212be,
2918    /// planar 4:4:2:0 YUV, 12 bits per channel
2919    #[cfg(feature = "v1_24")]
2920    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2921    #[doc(alias = "GST_VIDEO_FORMAT_A420_12LE")]
2922    A42012le,
2923    /// planar 4:4:2:0 YUV, 12 bits per channel
2924    #[cfg(feature = "v1_24")]
2925    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2926    #[doc(alias = "GST_VIDEO_FORMAT_A420_12BE")]
2927    A42012be,
2928    /// planar 4:4:4:4 YUV, 16 bits per channel
2929    #[cfg(feature = "v1_24")]
2930    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2931    #[doc(alias = "GST_VIDEO_FORMAT_A444_16LE")]
2932    A44416le,
2933    /// planar 4:4:4:4 YUV, 16 bits per channel
2934    #[cfg(feature = "v1_24")]
2935    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2936    #[doc(alias = "GST_VIDEO_FORMAT_A444_16BE")]
2937    A44416be,
2938    /// planar 4:4:2:2 YUV, 16 bits per channel
2939    #[cfg(feature = "v1_24")]
2940    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2941    #[doc(alias = "GST_VIDEO_FORMAT_A422_16LE")]
2942    A42216le,
2943    /// planar 4:4:2:2 YUV, 16 bits per channel
2944    #[cfg(feature = "v1_24")]
2945    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2946    #[doc(alias = "GST_VIDEO_FORMAT_A422_16BE")]
2947    A42216be,
2948    /// planar 4:4:2:0 YUV, 16 bits per channel
2949    #[cfg(feature = "v1_24")]
2950    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2951    #[doc(alias = "GST_VIDEO_FORMAT_A420_16LE")]
2952    A42016le,
2953    /// planar 4:4:2:0 YUV, 16 bits per channel
2954    #[cfg(feature = "v1_24")]
2955    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2956    #[doc(alias = "GST_VIDEO_FORMAT_A420_16BE")]
2957    A42016be,
2958    /// planar 4:4:4 RGB, 16 bits per channel
2959    #[cfg(feature = "v1_24")]
2960    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2961    #[doc(alias = "GST_VIDEO_FORMAT_GBR_16LE")]
2962    Gbr16le,
2963    /// planar 4:4:4 RGB, 16 bits per channel
2964    #[cfg(feature = "v1_24")]
2965    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2966    #[doc(alias = "GST_VIDEO_FORMAT_GBR_16BE")]
2967    Gbr16be,
2968    /// packed RGB with alpha, 8 bits per channel
2969    #[cfg(feature = "v1_24")]
2970    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2971    #[doc(alias = "GST_VIDEO_FORMAT_RBGA")]
2972    Rbga,
2973    /// packed 4:2:2 YUV, 16 bits per channel (Y-U-Y-V)
2974    #[cfg(feature = "v1_26")]
2975    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
2976    #[doc(alias = "GST_VIDEO_FORMAT_Y216_LE")]
2977    Y216Le,
2978    /// packed 4:2:2 YUV, 16 bits per channel (Y-U-Y-V)
2979    #[cfg(feature = "v1_26")]
2980    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
2981    #[doc(alias = "GST_VIDEO_FORMAT_Y216_BE")]
2982    Y216Be,
2983    /// packed 4:4:4:4 YUV, 16 bits per channel(U-Y-V-A)
2984    #[cfg(feature = "v1_26")]
2985    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
2986    #[doc(alias = "GST_VIDEO_FORMAT_Y416_LE")]
2987    Y416Le,
2988    /// packed 4:4:4:4 YUV, 16 bits per channel(U-Y-V-A)
2989    #[cfg(feature = "v1_26")]
2990    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
2991    #[doc(alias = "GST_VIDEO_FORMAT_Y416_BE")]
2992    Y416Be,
2993    /// 10-bit grayscale, packed into 16bit words (6 bits left padding)
2994    #[cfg(feature = "v1_26")]
2995    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
2996    #[doc(alias = "GST_VIDEO_FORMAT_GRAY10_LE16")]
2997    Gray10Le16,
2998    /// Fully packed variant of NV16_10LE32
2999    #[cfg(feature = "v1_28")]
3000    #[cfg_attr(docsrs, doc(cfg(feature = "v1_28")))]
3001    #[doc(alias = "GST_VIDEO_FORMAT_NV16_10LE40")]
3002    Nv1610le40,
3003    /// packed 4:4:4 RGB (B-G-R-x), 10 bits for R/G/B channel and MSB 2 bits for padding.
3004    #[cfg(feature = "v1_28")]
3005    #[cfg_attr(docsrs, doc(cfg(feature = "v1_28")))]
3006    #[doc(alias = "GST_VIDEO_FORMAT_BGR10x2_LE")]
3007    Bgr10x2Le,
3008    /// packed 4:4:4 RGB (R-G-B-x), 10 bits for R/G/B channel and MSB 2 bits for padding.
3009    #[cfg(feature = "v1_28")]
3010    #[cfg_attr(docsrs, doc(cfg(feature = "v1_28")))]
3011    #[doc(alias = "GST_VIDEO_FORMAT_RGB10x2_LE")]
3012    Rgb10x2Le,
3013    /// Android Hardware Buffer special format. It's only used with
3014    /// memory:AHardwareBuffer `GstCapsFeatures`, where an extra parameter
3015    /// (ahb-format) describes the AHardwareBuffer format.
3016    #[cfg(feature = "v1_30")]
3017    #[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
3018    #[doc(alias = "GST_VIDEO_FORMAT_AHARDWARE_BUFFER")]
3019    AhardwareBuffer,
3020    #[doc(hidden)]
3021    __Unknown(i32),
3022}
3023
3024impl VideoFormat {
3025    #[doc(alias = "gst_video_format_from_fourcc")]
3026    pub fn from_fourcc(fourcc: u32) -> VideoFormat {
3027        assert_initialized_main_thread!();
3028        unsafe { from_glib(ffi::gst_video_format_from_fourcc(fourcc)) }
3029    }
3030
3031    #[doc(alias = "gst_video_format_from_string")]
3032    pub fn from_string(format: &str) -> VideoFormat {
3033        assert_initialized_main_thread!();
3034        unsafe { from_glib(ffi::gst_video_format_from_string(format.to_glib_none().0)) }
3035    }
3036
3037    //#[doc(alias = "gst_video_format_get_palette")]
3038    //#[doc(alias = "get_palette")]
3039    //pub fn palette(self) -> (/*Unimplemented*/Option<Basic: Pointer>, usize) {
3040    //    unsafe { TODO: call ffi:gst_video_format_get_palette() }
3041    //}
3042
3043    #[doc(alias = "gst_video_format_to_fourcc")]
3044    pub fn to_fourcc(self) -> u32 {
3045        assert_initialized_main_thread!();
3046        unsafe { ffi::gst_video_format_to_fourcc(self.into_glib()) }
3047    }
3048}
3049
3050impl std::fmt::Display for VideoFormat {
3051    #[inline]
3052    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
3053        f.write_str(&self.to_str())
3054    }
3055}
3056
3057#[doc(hidden)]
3058impl IntoGlib for VideoFormat {
3059    type GlibType = ffi::GstVideoFormat;
3060
3061    fn into_glib(self) -> ffi::GstVideoFormat {
3062        match self {
3063            Self::Unknown => ffi::GST_VIDEO_FORMAT_UNKNOWN,
3064            Self::Encoded => ffi::GST_VIDEO_FORMAT_ENCODED,
3065            Self::I420 => ffi::GST_VIDEO_FORMAT_I420,
3066            Self::Yv12 => ffi::GST_VIDEO_FORMAT_YV12,
3067            Self::Yuy2 => ffi::GST_VIDEO_FORMAT_YUY2,
3068            Self::Uyvy => ffi::GST_VIDEO_FORMAT_UYVY,
3069            Self::Ayuv => ffi::GST_VIDEO_FORMAT_AYUV,
3070            Self::Rgbx => ffi::GST_VIDEO_FORMAT_RGBx,
3071            Self::Bgrx => ffi::GST_VIDEO_FORMAT_BGRx,
3072            Self::Xrgb => ffi::GST_VIDEO_FORMAT_xRGB,
3073            Self::Xbgr => ffi::GST_VIDEO_FORMAT_xBGR,
3074            Self::Rgba => ffi::GST_VIDEO_FORMAT_RGBA,
3075            Self::Bgra => ffi::GST_VIDEO_FORMAT_BGRA,
3076            Self::Argb => ffi::GST_VIDEO_FORMAT_ARGB,
3077            Self::Abgr => ffi::GST_VIDEO_FORMAT_ABGR,
3078            Self::Rgb => ffi::GST_VIDEO_FORMAT_RGB,
3079            Self::Bgr => ffi::GST_VIDEO_FORMAT_BGR,
3080            Self::Y41b => ffi::GST_VIDEO_FORMAT_Y41B,
3081            Self::Y42b => ffi::GST_VIDEO_FORMAT_Y42B,
3082            Self::Yvyu => ffi::GST_VIDEO_FORMAT_YVYU,
3083            Self::Y444 => ffi::GST_VIDEO_FORMAT_Y444,
3084            Self::V210 => ffi::GST_VIDEO_FORMAT_v210,
3085            Self::V216 => ffi::GST_VIDEO_FORMAT_v216,
3086            Self::Nv12 => ffi::GST_VIDEO_FORMAT_NV12,
3087            Self::Nv21 => ffi::GST_VIDEO_FORMAT_NV21,
3088            Self::Gray8 => ffi::GST_VIDEO_FORMAT_GRAY8,
3089            Self::Gray16Be => ffi::GST_VIDEO_FORMAT_GRAY16_BE,
3090            Self::Gray16Le => ffi::GST_VIDEO_FORMAT_GRAY16_LE,
3091            Self::V308 => ffi::GST_VIDEO_FORMAT_v308,
3092            Self::Rgb16 => ffi::GST_VIDEO_FORMAT_RGB16,
3093            Self::Bgr16 => ffi::GST_VIDEO_FORMAT_BGR16,
3094            Self::Rgb15 => ffi::GST_VIDEO_FORMAT_RGB15,
3095            Self::Bgr15 => ffi::GST_VIDEO_FORMAT_BGR15,
3096            Self::Uyvp => ffi::GST_VIDEO_FORMAT_UYVP,
3097            Self::A420 => ffi::GST_VIDEO_FORMAT_A420,
3098            Self::Rgb8p => ffi::GST_VIDEO_FORMAT_RGB8P,
3099            Self::Yuv9 => ffi::GST_VIDEO_FORMAT_YUV9,
3100            Self::Yvu9 => ffi::GST_VIDEO_FORMAT_YVU9,
3101            Self::Iyu1 => ffi::GST_VIDEO_FORMAT_IYU1,
3102            Self::Argb64 => ffi::GST_VIDEO_FORMAT_ARGB64,
3103            Self::Ayuv64 => ffi::GST_VIDEO_FORMAT_AYUV64,
3104            Self::R210 => ffi::GST_VIDEO_FORMAT_r210,
3105            Self::I42010be => ffi::GST_VIDEO_FORMAT_I420_10BE,
3106            Self::I42010le => ffi::GST_VIDEO_FORMAT_I420_10LE,
3107            Self::I42210be => ffi::GST_VIDEO_FORMAT_I422_10BE,
3108            Self::I42210le => ffi::GST_VIDEO_FORMAT_I422_10LE,
3109            Self::Y44410be => ffi::GST_VIDEO_FORMAT_Y444_10BE,
3110            Self::Y44410le => ffi::GST_VIDEO_FORMAT_Y444_10LE,
3111            Self::Gbr => ffi::GST_VIDEO_FORMAT_GBR,
3112            Self::Gbr10be => ffi::GST_VIDEO_FORMAT_GBR_10BE,
3113            Self::Gbr10le => ffi::GST_VIDEO_FORMAT_GBR_10LE,
3114            Self::Nv16 => ffi::GST_VIDEO_FORMAT_NV16,
3115            Self::Nv24 => ffi::GST_VIDEO_FORMAT_NV24,
3116            Self::Nv1264z32 => ffi::GST_VIDEO_FORMAT_NV12_64Z32,
3117            Self::A42010be => ffi::GST_VIDEO_FORMAT_A420_10BE,
3118            Self::A42010le => ffi::GST_VIDEO_FORMAT_A420_10LE,
3119            Self::A42210be => ffi::GST_VIDEO_FORMAT_A422_10BE,
3120            Self::A42210le => ffi::GST_VIDEO_FORMAT_A422_10LE,
3121            Self::A44410be => ffi::GST_VIDEO_FORMAT_A444_10BE,
3122            Self::A44410le => ffi::GST_VIDEO_FORMAT_A444_10LE,
3123            Self::Nv61 => ffi::GST_VIDEO_FORMAT_NV61,
3124            Self::P01010be => ffi::GST_VIDEO_FORMAT_P010_10BE,
3125            Self::P01010le => ffi::GST_VIDEO_FORMAT_P010_10LE,
3126            Self::Iyu2 => ffi::GST_VIDEO_FORMAT_IYU2,
3127            Self::Vyuy => ffi::GST_VIDEO_FORMAT_VYUY,
3128            Self::Gbra => ffi::GST_VIDEO_FORMAT_GBRA,
3129            Self::Gbra10be => ffi::GST_VIDEO_FORMAT_GBRA_10BE,
3130            Self::Gbra10le => ffi::GST_VIDEO_FORMAT_GBRA_10LE,
3131            Self::Gbr12be => ffi::GST_VIDEO_FORMAT_GBR_12BE,
3132            Self::Gbr12le => ffi::GST_VIDEO_FORMAT_GBR_12LE,
3133            Self::Gbra12be => ffi::GST_VIDEO_FORMAT_GBRA_12BE,
3134            Self::Gbra12le => ffi::GST_VIDEO_FORMAT_GBRA_12LE,
3135            Self::I42012be => ffi::GST_VIDEO_FORMAT_I420_12BE,
3136            Self::I42012le => ffi::GST_VIDEO_FORMAT_I420_12LE,
3137            Self::I42212be => ffi::GST_VIDEO_FORMAT_I422_12BE,
3138            Self::I42212le => ffi::GST_VIDEO_FORMAT_I422_12LE,
3139            Self::Y44412be => ffi::GST_VIDEO_FORMAT_Y444_12BE,
3140            Self::Y44412le => ffi::GST_VIDEO_FORMAT_Y444_12LE,
3141            Self::Gray10Le32 => ffi::GST_VIDEO_FORMAT_GRAY10_LE32,
3142            Self::Nv1210le32 => ffi::GST_VIDEO_FORMAT_NV12_10LE32,
3143            Self::Nv1610le32 => ffi::GST_VIDEO_FORMAT_NV16_10LE32,
3144            #[cfg(feature = "v1_16")]
3145            Self::Nv1210le40 => ffi::GST_VIDEO_FORMAT_NV12_10LE40,
3146            #[cfg(feature = "v1_16")]
3147            Self::Y210 => ffi::GST_VIDEO_FORMAT_Y210,
3148            #[cfg(feature = "v1_16")]
3149            Self::Y410 => ffi::GST_VIDEO_FORMAT_Y410,
3150            #[cfg(feature = "v1_16")]
3151            Self::Vuya => ffi::GST_VIDEO_FORMAT_VUYA,
3152            #[cfg(feature = "v1_16")]
3153            Self::Bgr10a2Le => ffi::GST_VIDEO_FORMAT_BGR10A2_LE,
3154            #[cfg(feature = "v1_18")]
3155            Self::Rgb10a2Le => ffi::GST_VIDEO_FORMAT_RGB10A2_LE,
3156            #[cfg(feature = "v1_18")]
3157            Self::Y44416be => ffi::GST_VIDEO_FORMAT_Y444_16BE,
3158            #[cfg(feature = "v1_18")]
3159            Self::Y44416le => ffi::GST_VIDEO_FORMAT_Y444_16LE,
3160            #[cfg(feature = "v1_18")]
3161            Self::P016Be => ffi::GST_VIDEO_FORMAT_P016_BE,
3162            #[cfg(feature = "v1_18")]
3163            Self::P016Le => ffi::GST_VIDEO_FORMAT_P016_LE,
3164            #[cfg(feature = "v1_18")]
3165            Self::P012Be => ffi::GST_VIDEO_FORMAT_P012_BE,
3166            #[cfg(feature = "v1_18")]
3167            Self::P012Le => ffi::GST_VIDEO_FORMAT_P012_LE,
3168            #[cfg(feature = "v1_18")]
3169            Self::Y212Be => ffi::GST_VIDEO_FORMAT_Y212_BE,
3170            #[cfg(feature = "v1_18")]
3171            Self::Y212Le => ffi::GST_VIDEO_FORMAT_Y212_LE,
3172            #[cfg(feature = "v1_18")]
3173            Self::Y412Be => ffi::GST_VIDEO_FORMAT_Y412_BE,
3174            #[cfg(feature = "v1_18")]
3175            Self::Y412Le => ffi::GST_VIDEO_FORMAT_Y412_LE,
3176            #[cfg(feature = "v1_18")]
3177            Self::Nv124l4 => ffi::GST_VIDEO_FORMAT_NV12_4L4,
3178            #[cfg(feature = "v1_18")]
3179            Self::Nv1232l32 => ffi::GST_VIDEO_FORMAT_NV12_32L32,
3180            #[cfg(feature = "v1_20")]
3181            Self::Rgbp => ffi::GST_VIDEO_FORMAT_RGBP,
3182            #[cfg(feature = "v1_20")]
3183            Self::Bgrp => ffi::GST_VIDEO_FORMAT_BGRP,
3184            #[cfg(feature = "v1_20")]
3185            Self::Av12 => ffi::GST_VIDEO_FORMAT_AV12,
3186            #[cfg(feature = "v1_20")]
3187            Self::Argb64Le => ffi::GST_VIDEO_FORMAT_ARGB64_LE,
3188            #[cfg(feature = "v1_20")]
3189            Self::Argb64Be => ffi::GST_VIDEO_FORMAT_ARGB64_BE,
3190            #[cfg(feature = "v1_20")]
3191            Self::Rgba64Le => ffi::GST_VIDEO_FORMAT_RGBA64_LE,
3192            #[cfg(feature = "v1_20")]
3193            Self::Rgba64Be => ffi::GST_VIDEO_FORMAT_RGBA64_BE,
3194            #[cfg(feature = "v1_20")]
3195            Self::Bgra64Le => ffi::GST_VIDEO_FORMAT_BGRA64_LE,
3196            #[cfg(feature = "v1_20")]
3197            Self::Bgra64Be => ffi::GST_VIDEO_FORMAT_BGRA64_BE,
3198            #[cfg(feature = "v1_20")]
3199            Self::Abgr64Le => ffi::GST_VIDEO_FORMAT_ABGR64_LE,
3200            #[cfg(feature = "v1_20")]
3201            Self::Abgr64Be => ffi::GST_VIDEO_FORMAT_ABGR64_BE,
3202            #[cfg(feature = "v1_22")]
3203            Self::Nv1216l32s => ffi::GST_VIDEO_FORMAT_NV12_16L32S,
3204            #[cfg(feature = "v1_22")]
3205            Self::Nv128l128 => ffi::GST_VIDEO_FORMAT_NV12_8L128,
3206            #[cfg(feature = "v1_22")]
3207            Self::Nv1210be8l128 => ffi::GST_VIDEO_FORMAT_NV12_10BE_8L128,
3208            #[cfg(feature = "v1_24")]
3209            Self::Nv1210le404l4 => ffi::GST_VIDEO_FORMAT_NV12_10LE40_4L4,
3210            #[cfg(feature = "v1_24")]
3211            Self::DmaDrm => ffi::GST_VIDEO_FORMAT_DMA_DRM,
3212            #[cfg(feature = "v1_24")]
3213            Self::Mt2110t => ffi::GST_VIDEO_FORMAT_MT2110T,
3214            #[cfg(feature = "v1_24")]
3215            Self::Mt2110r => ffi::GST_VIDEO_FORMAT_MT2110R,
3216            #[cfg(feature = "v1_24")]
3217            Self::A422 => ffi::GST_VIDEO_FORMAT_A422,
3218            #[cfg(feature = "v1_24")]
3219            Self::A444 => ffi::GST_VIDEO_FORMAT_A444,
3220            #[cfg(feature = "v1_24")]
3221            Self::A44412le => ffi::GST_VIDEO_FORMAT_A444_12LE,
3222            #[cfg(feature = "v1_24")]
3223            Self::A44412be => ffi::GST_VIDEO_FORMAT_A444_12BE,
3224            #[cfg(feature = "v1_24")]
3225            Self::A42212le => ffi::GST_VIDEO_FORMAT_A422_12LE,
3226            #[cfg(feature = "v1_24")]
3227            Self::A42212be => ffi::GST_VIDEO_FORMAT_A422_12BE,
3228            #[cfg(feature = "v1_24")]
3229            Self::A42012le => ffi::GST_VIDEO_FORMAT_A420_12LE,
3230            #[cfg(feature = "v1_24")]
3231            Self::A42012be => ffi::GST_VIDEO_FORMAT_A420_12BE,
3232            #[cfg(feature = "v1_24")]
3233            Self::A44416le => ffi::GST_VIDEO_FORMAT_A444_16LE,
3234            #[cfg(feature = "v1_24")]
3235            Self::A44416be => ffi::GST_VIDEO_FORMAT_A444_16BE,
3236            #[cfg(feature = "v1_24")]
3237            Self::A42216le => ffi::GST_VIDEO_FORMAT_A422_16LE,
3238            #[cfg(feature = "v1_24")]
3239            Self::A42216be => ffi::GST_VIDEO_FORMAT_A422_16BE,
3240            #[cfg(feature = "v1_24")]
3241            Self::A42016le => ffi::GST_VIDEO_FORMAT_A420_16LE,
3242            #[cfg(feature = "v1_24")]
3243            Self::A42016be => ffi::GST_VIDEO_FORMAT_A420_16BE,
3244            #[cfg(feature = "v1_24")]
3245            Self::Gbr16le => ffi::GST_VIDEO_FORMAT_GBR_16LE,
3246            #[cfg(feature = "v1_24")]
3247            Self::Gbr16be => ffi::GST_VIDEO_FORMAT_GBR_16BE,
3248            #[cfg(feature = "v1_24")]
3249            Self::Rbga => ffi::GST_VIDEO_FORMAT_RBGA,
3250            #[cfg(feature = "v1_26")]
3251            Self::Y216Le => ffi::GST_VIDEO_FORMAT_Y216_LE,
3252            #[cfg(feature = "v1_26")]
3253            Self::Y216Be => ffi::GST_VIDEO_FORMAT_Y216_BE,
3254            #[cfg(feature = "v1_26")]
3255            Self::Y416Le => ffi::GST_VIDEO_FORMAT_Y416_LE,
3256            #[cfg(feature = "v1_26")]
3257            Self::Y416Be => ffi::GST_VIDEO_FORMAT_Y416_BE,
3258            #[cfg(feature = "v1_26")]
3259            Self::Gray10Le16 => ffi::GST_VIDEO_FORMAT_GRAY10_LE16,
3260            #[cfg(feature = "v1_28")]
3261            Self::Nv1610le40 => ffi::GST_VIDEO_FORMAT_NV16_10LE40,
3262            #[cfg(feature = "v1_28")]
3263            Self::Bgr10x2Le => ffi::GST_VIDEO_FORMAT_BGR10x2_LE,
3264            #[cfg(feature = "v1_28")]
3265            Self::Rgb10x2Le => ffi::GST_VIDEO_FORMAT_RGB10x2_LE,
3266            #[cfg(feature = "v1_30")]
3267            Self::AhardwareBuffer => ffi::GST_VIDEO_FORMAT_AHARDWARE_BUFFER,
3268            Self::__Unknown(value) => value,
3269        }
3270    }
3271}
3272
3273#[doc(hidden)]
3274impl FromGlib<ffi::GstVideoFormat> for VideoFormat {
3275    unsafe fn from_glib(value: ffi::GstVideoFormat) -> Self {
3276        skip_assert_initialized!();
3277
3278        match value {
3279            ffi::GST_VIDEO_FORMAT_UNKNOWN => Self::Unknown,
3280            ffi::GST_VIDEO_FORMAT_ENCODED => Self::Encoded,
3281            ffi::GST_VIDEO_FORMAT_I420 => Self::I420,
3282            ffi::GST_VIDEO_FORMAT_YV12 => Self::Yv12,
3283            ffi::GST_VIDEO_FORMAT_YUY2 => Self::Yuy2,
3284            ffi::GST_VIDEO_FORMAT_UYVY => Self::Uyvy,
3285            ffi::GST_VIDEO_FORMAT_AYUV => Self::Ayuv,
3286            ffi::GST_VIDEO_FORMAT_RGBx => Self::Rgbx,
3287            ffi::GST_VIDEO_FORMAT_BGRx => Self::Bgrx,
3288            ffi::GST_VIDEO_FORMAT_xRGB => Self::Xrgb,
3289            ffi::GST_VIDEO_FORMAT_xBGR => Self::Xbgr,
3290            ffi::GST_VIDEO_FORMAT_RGBA => Self::Rgba,
3291            ffi::GST_VIDEO_FORMAT_BGRA => Self::Bgra,
3292            ffi::GST_VIDEO_FORMAT_ARGB => Self::Argb,
3293            ffi::GST_VIDEO_FORMAT_ABGR => Self::Abgr,
3294            ffi::GST_VIDEO_FORMAT_RGB => Self::Rgb,
3295            ffi::GST_VIDEO_FORMAT_BGR => Self::Bgr,
3296            ffi::GST_VIDEO_FORMAT_Y41B => Self::Y41b,
3297            ffi::GST_VIDEO_FORMAT_Y42B => Self::Y42b,
3298            ffi::GST_VIDEO_FORMAT_YVYU => Self::Yvyu,
3299            ffi::GST_VIDEO_FORMAT_Y444 => Self::Y444,
3300            ffi::GST_VIDEO_FORMAT_v210 => Self::V210,
3301            ffi::GST_VIDEO_FORMAT_v216 => Self::V216,
3302            ffi::GST_VIDEO_FORMAT_NV12 => Self::Nv12,
3303            ffi::GST_VIDEO_FORMAT_NV21 => Self::Nv21,
3304            ffi::GST_VIDEO_FORMAT_GRAY8 => Self::Gray8,
3305            ffi::GST_VIDEO_FORMAT_GRAY16_BE => Self::Gray16Be,
3306            ffi::GST_VIDEO_FORMAT_GRAY16_LE => Self::Gray16Le,
3307            ffi::GST_VIDEO_FORMAT_v308 => Self::V308,
3308            ffi::GST_VIDEO_FORMAT_RGB16 => Self::Rgb16,
3309            ffi::GST_VIDEO_FORMAT_BGR16 => Self::Bgr16,
3310            ffi::GST_VIDEO_FORMAT_RGB15 => Self::Rgb15,
3311            ffi::GST_VIDEO_FORMAT_BGR15 => Self::Bgr15,
3312            ffi::GST_VIDEO_FORMAT_UYVP => Self::Uyvp,
3313            ffi::GST_VIDEO_FORMAT_A420 => Self::A420,
3314            ffi::GST_VIDEO_FORMAT_RGB8P => Self::Rgb8p,
3315            ffi::GST_VIDEO_FORMAT_YUV9 => Self::Yuv9,
3316            ffi::GST_VIDEO_FORMAT_YVU9 => Self::Yvu9,
3317            ffi::GST_VIDEO_FORMAT_IYU1 => Self::Iyu1,
3318            ffi::GST_VIDEO_FORMAT_ARGB64 => Self::Argb64,
3319            ffi::GST_VIDEO_FORMAT_AYUV64 => Self::Ayuv64,
3320            ffi::GST_VIDEO_FORMAT_r210 => Self::R210,
3321            ffi::GST_VIDEO_FORMAT_I420_10BE => Self::I42010be,
3322            ffi::GST_VIDEO_FORMAT_I420_10LE => Self::I42010le,
3323            ffi::GST_VIDEO_FORMAT_I422_10BE => Self::I42210be,
3324            ffi::GST_VIDEO_FORMAT_I422_10LE => Self::I42210le,
3325            ffi::GST_VIDEO_FORMAT_Y444_10BE => Self::Y44410be,
3326            ffi::GST_VIDEO_FORMAT_Y444_10LE => Self::Y44410le,
3327            ffi::GST_VIDEO_FORMAT_GBR => Self::Gbr,
3328            ffi::GST_VIDEO_FORMAT_GBR_10BE => Self::Gbr10be,
3329            ffi::GST_VIDEO_FORMAT_GBR_10LE => Self::Gbr10le,
3330            ffi::GST_VIDEO_FORMAT_NV16 => Self::Nv16,
3331            ffi::GST_VIDEO_FORMAT_NV24 => Self::Nv24,
3332            ffi::GST_VIDEO_FORMAT_NV12_64Z32 => Self::Nv1264z32,
3333            ffi::GST_VIDEO_FORMAT_A420_10BE => Self::A42010be,
3334            ffi::GST_VIDEO_FORMAT_A420_10LE => Self::A42010le,
3335            ffi::GST_VIDEO_FORMAT_A422_10BE => Self::A42210be,
3336            ffi::GST_VIDEO_FORMAT_A422_10LE => Self::A42210le,
3337            ffi::GST_VIDEO_FORMAT_A444_10BE => Self::A44410be,
3338            ffi::GST_VIDEO_FORMAT_A444_10LE => Self::A44410le,
3339            ffi::GST_VIDEO_FORMAT_NV61 => Self::Nv61,
3340            ffi::GST_VIDEO_FORMAT_P010_10BE => Self::P01010be,
3341            ffi::GST_VIDEO_FORMAT_P010_10LE => Self::P01010le,
3342            ffi::GST_VIDEO_FORMAT_IYU2 => Self::Iyu2,
3343            ffi::GST_VIDEO_FORMAT_VYUY => Self::Vyuy,
3344            ffi::GST_VIDEO_FORMAT_GBRA => Self::Gbra,
3345            ffi::GST_VIDEO_FORMAT_GBRA_10BE => Self::Gbra10be,
3346            ffi::GST_VIDEO_FORMAT_GBRA_10LE => Self::Gbra10le,
3347            ffi::GST_VIDEO_FORMAT_GBR_12BE => Self::Gbr12be,
3348            ffi::GST_VIDEO_FORMAT_GBR_12LE => Self::Gbr12le,
3349            ffi::GST_VIDEO_FORMAT_GBRA_12BE => Self::Gbra12be,
3350            ffi::GST_VIDEO_FORMAT_GBRA_12LE => Self::Gbra12le,
3351            ffi::GST_VIDEO_FORMAT_I420_12BE => Self::I42012be,
3352            ffi::GST_VIDEO_FORMAT_I420_12LE => Self::I42012le,
3353            ffi::GST_VIDEO_FORMAT_I422_12BE => Self::I42212be,
3354            ffi::GST_VIDEO_FORMAT_I422_12LE => Self::I42212le,
3355            ffi::GST_VIDEO_FORMAT_Y444_12BE => Self::Y44412be,
3356            ffi::GST_VIDEO_FORMAT_Y444_12LE => Self::Y44412le,
3357            ffi::GST_VIDEO_FORMAT_GRAY10_LE32 => Self::Gray10Le32,
3358            ffi::GST_VIDEO_FORMAT_NV12_10LE32 => Self::Nv1210le32,
3359            ffi::GST_VIDEO_FORMAT_NV16_10LE32 => Self::Nv1610le32,
3360            #[cfg(feature = "v1_16")]
3361            ffi::GST_VIDEO_FORMAT_NV12_10LE40 => Self::Nv1210le40,
3362            #[cfg(feature = "v1_16")]
3363            ffi::GST_VIDEO_FORMAT_Y210 => Self::Y210,
3364            #[cfg(feature = "v1_16")]
3365            ffi::GST_VIDEO_FORMAT_Y410 => Self::Y410,
3366            #[cfg(feature = "v1_16")]
3367            ffi::GST_VIDEO_FORMAT_VUYA => Self::Vuya,
3368            #[cfg(feature = "v1_16")]
3369            ffi::GST_VIDEO_FORMAT_BGR10A2_LE => Self::Bgr10a2Le,
3370            #[cfg(feature = "v1_18")]
3371            ffi::GST_VIDEO_FORMAT_RGB10A2_LE => Self::Rgb10a2Le,
3372            #[cfg(feature = "v1_18")]
3373            ffi::GST_VIDEO_FORMAT_Y444_16BE => Self::Y44416be,
3374            #[cfg(feature = "v1_18")]
3375            ffi::GST_VIDEO_FORMAT_Y444_16LE => Self::Y44416le,
3376            #[cfg(feature = "v1_18")]
3377            ffi::GST_VIDEO_FORMAT_P016_BE => Self::P016Be,
3378            #[cfg(feature = "v1_18")]
3379            ffi::GST_VIDEO_FORMAT_P016_LE => Self::P016Le,
3380            #[cfg(feature = "v1_18")]
3381            ffi::GST_VIDEO_FORMAT_P012_BE => Self::P012Be,
3382            #[cfg(feature = "v1_18")]
3383            ffi::GST_VIDEO_FORMAT_P012_LE => Self::P012Le,
3384            #[cfg(feature = "v1_18")]
3385            ffi::GST_VIDEO_FORMAT_Y212_BE => Self::Y212Be,
3386            #[cfg(feature = "v1_18")]
3387            ffi::GST_VIDEO_FORMAT_Y212_LE => Self::Y212Le,
3388            #[cfg(feature = "v1_18")]
3389            ffi::GST_VIDEO_FORMAT_Y412_BE => Self::Y412Be,
3390            #[cfg(feature = "v1_18")]
3391            ffi::GST_VIDEO_FORMAT_Y412_LE => Self::Y412Le,
3392            #[cfg(feature = "v1_18")]
3393            ffi::GST_VIDEO_FORMAT_NV12_4L4 => Self::Nv124l4,
3394            #[cfg(feature = "v1_18")]
3395            ffi::GST_VIDEO_FORMAT_NV12_32L32 => Self::Nv1232l32,
3396            #[cfg(feature = "v1_20")]
3397            ffi::GST_VIDEO_FORMAT_RGBP => Self::Rgbp,
3398            #[cfg(feature = "v1_20")]
3399            ffi::GST_VIDEO_FORMAT_BGRP => Self::Bgrp,
3400            #[cfg(feature = "v1_20")]
3401            ffi::GST_VIDEO_FORMAT_AV12 => Self::Av12,
3402            #[cfg(feature = "v1_20")]
3403            ffi::GST_VIDEO_FORMAT_ARGB64_LE => Self::Argb64Le,
3404            #[cfg(feature = "v1_20")]
3405            ffi::GST_VIDEO_FORMAT_ARGB64_BE => Self::Argb64Be,
3406            #[cfg(feature = "v1_20")]
3407            ffi::GST_VIDEO_FORMAT_RGBA64_LE => Self::Rgba64Le,
3408            #[cfg(feature = "v1_20")]
3409            ffi::GST_VIDEO_FORMAT_RGBA64_BE => Self::Rgba64Be,
3410            #[cfg(feature = "v1_20")]
3411            ffi::GST_VIDEO_FORMAT_BGRA64_LE => Self::Bgra64Le,
3412            #[cfg(feature = "v1_20")]
3413            ffi::GST_VIDEO_FORMAT_BGRA64_BE => Self::Bgra64Be,
3414            #[cfg(feature = "v1_20")]
3415            ffi::GST_VIDEO_FORMAT_ABGR64_LE => Self::Abgr64Le,
3416            #[cfg(feature = "v1_20")]
3417            ffi::GST_VIDEO_FORMAT_ABGR64_BE => Self::Abgr64Be,
3418            #[cfg(feature = "v1_22")]
3419            ffi::GST_VIDEO_FORMAT_NV12_16L32S => Self::Nv1216l32s,
3420            #[cfg(feature = "v1_22")]
3421            ffi::GST_VIDEO_FORMAT_NV12_8L128 => Self::Nv128l128,
3422            #[cfg(feature = "v1_22")]
3423            ffi::GST_VIDEO_FORMAT_NV12_10BE_8L128 => Self::Nv1210be8l128,
3424            #[cfg(feature = "v1_24")]
3425            ffi::GST_VIDEO_FORMAT_NV12_10LE40_4L4 => Self::Nv1210le404l4,
3426            #[cfg(feature = "v1_24")]
3427            ffi::GST_VIDEO_FORMAT_DMA_DRM => Self::DmaDrm,
3428            #[cfg(feature = "v1_24")]
3429            ffi::GST_VIDEO_FORMAT_MT2110T => Self::Mt2110t,
3430            #[cfg(feature = "v1_24")]
3431            ffi::GST_VIDEO_FORMAT_MT2110R => Self::Mt2110r,
3432            #[cfg(feature = "v1_24")]
3433            ffi::GST_VIDEO_FORMAT_A422 => Self::A422,
3434            #[cfg(feature = "v1_24")]
3435            ffi::GST_VIDEO_FORMAT_A444 => Self::A444,
3436            #[cfg(feature = "v1_24")]
3437            ffi::GST_VIDEO_FORMAT_A444_12LE => Self::A44412le,
3438            #[cfg(feature = "v1_24")]
3439            ffi::GST_VIDEO_FORMAT_A444_12BE => Self::A44412be,
3440            #[cfg(feature = "v1_24")]
3441            ffi::GST_VIDEO_FORMAT_A422_12LE => Self::A42212le,
3442            #[cfg(feature = "v1_24")]
3443            ffi::GST_VIDEO_FORMAT_A422_12BE => Self::A42212be,
3444            #[cfg(feature = "v1_24")]
3445            ffi::GST_VIDEO_FORMAT_A420_12LE => Self::A42012le,
3446            #[cfg(feature = "v1_24")]
3447            ffi::GST_VIDEO_FORMAT_A420_12BE => Self::A42012be,
3448            #[cfg(feature = "v1_24")]
3449            ffi::GST_VIDEO_FORMAT_A444_16LE => Self::A44416le,
3450            #[cfg(feature = "v1_24")]
3451            ffi::GST_VIDEO_FORMAT_A444_16BE => Self::A44416be,
3452            #[cfg(feature = "v1_24")]
3453            ffi::GST_VIDEO_FORMAT_A422_16LE => Self::A42216le,
3454            #[cfg(feature = "v1_24")]
3455            ffi::GST_VIDEO_FORMAT_A422_16BE => Self::A42216be,
3456            #[cfg(feature = "v1_24")]
3457            ffi::GST_VIDEO_FORMAT_A420_16LE => Self::A42016le,
3458            #[cfg(feature = "v1_24")]
3459            ffi::GST_VIDEO_FORMAT_A420_16BE => Self::A42016be,
3460            #[cfg(feature = "v1_24")]
3461            ffi::GST_VIDEO_FORMAT_GBR_16LE => Self::Gbr16le,
3462            #[cfg(feature = "v1_24")]
3463            ffi::GST_VIDEO_FORMAT_GBR_16BE => Self::Gbr16be,
3464            #[cfg(feature = "v1_24")]
3465            ffi::GST_VIDEO_FORMAT_RBGA => Self::Rbga,
3466            #[cfg(feature = "v1_26")]
3467            ffi::GST_VIDEO_FORMAT_Y216_LE => Self::Y216Le,
3468            #[cfg(feature = "v1_26")]
3469            ffi::GST_VIDEO_FORMAT_Y216_BE => Self::Y216Be,
3470            #[cfg(feature = "v1_26")]
3471            ffi::GST_VIDEO_FORMAT_Y416_LE => Self::Y416Le,
3472            #[cfg(feature = "v1_26")]
3473            ffi::GST_VIDEO_FORMAT_Y416_BE => Self::Y416Be,
3474            #[cfg(feature = "v1_26")]
3475            ffi::GST_VIDEO_FORMAT_GRAY10_LE16 => Self::Gray10Le16,
3476            #[cfg(feature = "v1_28")]
3477            ffi::GST_VIDEO_FORMAT_NV16_10LE40 => Self::Nv1610le40,
3478            #[cfg(feature = "v1_28")]
3479            ffi::GST_VIDEO_FORMAT_BGR10x2_LE => Self::Bgr10x2Le,
3480            #[cfg(feature = "v1_28")]
3481            ffi::GST_VIDEO_FORMAT_RGB10x2_LE => Self::Rgb10x2Le,
3482            #[cfg(feature = "v1_30")]
3483            ffi::GST_VIDEO_FORMAT_AHARDWARE_BUFFER => Self::AhardwareBuffer,
3484            value => Self::__Unknown(value),
3485        }
3486    }
3487}
3488
3489impl StaticType for VideoFormat {
3490    #[inline]
3491    #[doc(alias = "gst_video_format_get_type")]
3492    fn static_type() -> glib::Type {
3493        unsafe { from_glib(ffi::gst_video_format_get_type()) }
3494    }
3495}
3496
3497impl glib::HasParamSpec for VideoFormat {
3498    type ParamSpec = glib::ParamSpecEnum;
3499    type SetValue = Self;
3500    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3501
3502    fn param_spec_builder() -> Self::BuilderFn {
3503        Self::ParamSpec::builder_with_default
3504    }
3505}
3506
3507impl glib::value::ValueType for VideoFormat {
3508    type Type = Self;
3509}
3510
3511unsafe impl<'a> glib::value::FromValue<'a> for VideoFormat {
3512    type Checker = glib::value::GenericValueTypeChecker<Self>;
3513
3514    #[inline]
3515    unsafe fn from_value(value: &'a glib::Value) -> Self {
3516        skip_assert_initialized!();
3517        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3518    }
3519}
3520
3521impl ToValue for VideoFormat {
3522    #[inline]
3523    fn to_value(&self) -> glib::Value {
3524        let mut value = glib::Value::for_value_type::<Self>();
3525        unsafe {
3526            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3527        }
3528        value
3529    }
3530
3531    #[inline]
3532    fn value_type(&self) -> glib::Type {
3533        Self::static_type()
3534    }
3535}
3536
3537impl From<VideoFormat> for glib::Value {
3538    #[inline]
3539    fn from(v: VideoFormat) -> Self {
3540        skip_assert_initialized!();
3541        ToValue::to_value(&v)
3542    }
3543}
3544
3545#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3546#[non_exhaustive]
3547#[doc(alias = "GstVideoGammaMode")]
3548pub enum VideoGammaMode {
3549    /// disable gamma handling
3550    #[doc(alias = "GST_VIDEO_GAMMA_MODE_NONE")]
3551    None,
3552    /// convert between input and output gamma
3553    /// Different gamma conversion modes
3554    #[doc(alias = "GST_VIDEO_GAMMA_MODE_REMAP")]
3555    Remap,
3556    #[doc(hidden)]
3557    __Unknown(i32),
3558}
3559
3560#[doc(hidden)]
3561impl IntoGlib for VideoGammaMode {
3562    type GlibType = ffi::GstVideoGammaMode;
3563
3564    #[inline]
3565    fn into_glib(self) -> ffi::GstVideoGammaMode {
3566        match self {
3567            Self::None => ffi::GST_VIDEO_GAMMA_MODE_NONE,
3568            Self::Remap => ffi::GST_VIDEO_GAMMA_MODE_REMAP,
3569            Self::__Unknown(value) => value,
3570        }
3571    }
3572}
3573
3574#[doc(hidden)]
3575impl FromGlib<ffi::GstVideoGammaMode> for VideoGammaMode {
3576    #[inline]
3577    unsafe fn from_glib(value: ffi::GstVideoGammaMode) -> Self {
3578        skip_assert_initialized!();
3579
3580        match value {
3581            ffi::GST_VIDEO_GAMMA_MODE_NONE => Self::None,
3582            ffi::GST_VIDEO_GAMMA_MODE_REMAP => Self::Remap,
3583            value => Self::__Unknown(value),
3584        }
3585    }
3586}
3587
3588impl StaticType for VideoGammaMode {
3589    #[inline]
3590    #[doc(alias = "gst_video_gamma_mode_get_type")]
3591    fn static_type() -> glib::Type {
3592        unsafe { from_glib(ffi::gst_video_gamma_mode_get_type()) }
3593    }
3594}
3595
3596impl glib::HasParamSpec for VideoGammaMode {
3597    type ParamSpec = glib::ParamSpecEnum;
3598    type SetValue = Self;
3599    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3600
3601    fn param_spec_builder() -> Self::BuilderFn {
3602        Self::ParamSpec::builder_with_default
3603    }
3604}
3605
3606impl glib::value::ValueType for VideoGammaMode {
3607    type Type = Self;
3608}
3609
3610unsafe impl<'a> glib::value::FromValue<'a> for VideoGammaMode {
3611    type Checker = glib::value::GenericValueTypeChecker<Self>;
3612
3613    #[inline]
3614    unsafe fn from_value(value: &'a glib::Value) -> Self {
3615        skip_assert_initialized!();
3616        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3617    }
3618}
3619
3620impl ToValue for VideoGammaMode {
3621    #[inline]
3622    fn to_value(&self) -> glib::Value {
3623        let mut value = glib::Value::for_value_type::<Self>();
3624        unsafe {
3625            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3626        }
3627        value
3628    }
3629
3630    #[inline]
3631    fn value_type(&self) -> glib::Type {
3632        Self::static_type()
3633    }
3634}
3635
3636impl From<VideoGammaMode> for glib::Value {
3637    #[inline]
3638    fn from(v: VideoGammaMode) -> Self {
3639        skip_assert_initialized!();
3640        ToValue::to_value(&v)
3641    }
3642}
3643
3644/// Enum value describing the most common video for High Dynamic Range (HDR) formats.
3645#[cfg(feature = "v1_30")]
3646#[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
3647#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3648#[non_exhaustive]
3649#[doc(alias = "GstVideoHDRFormat")]
3650pub enum VideoHDRFormat {
3651    /// No HDR format detected.
3652    #[doc(alias = "GST_VIDEO_HDR_FORMAT_NONE")]
3653    None,
3654    /// HDR10 format
3655    #[doc(alias = "GST_VIDEO_HDR_FORMAT_HDR10")]
3656    Hdr10,
3657    /// HDR10+ format
3658    #[doc(alias = "GST_VIDEO_HDR_FORMAT_HDR10_PLUS")]
3659    Hdr10Plus,
3660    #[doc(hidden)]
3661    __Unknown(i32),
3662}
3663
3664#[cfg(feature = "v1_30")]
3665#[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
3666#[doc(hidden)]
3667impl IntoGlib for VideoHDRFormat {
3668    type GlibType = ffi::GstVideoHDRFormat;
3669
3670    #[inline]
3671    fn into_glib(self) -> ffi::GstVideoHDRFormat {
3672        match self {
3673            Self::None => ffi::GST_VIDEO_HDR_FORMAT_NONE,
3674            Self::Hdr10 => ffi::GST_VIDEO_HDR_FORMAT_HDR10,
3675            Self::Hdr10Plus => ffi::GST_VIDEO_HDR_FORMAT_HDR10_PLUS,
3676            Self::__Unknown(value) => value,
3677        }
3678    }
3679}
3680
3681#[cfg(feature = "v1_30")]
3682#[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
3683#[doc(hidden)]
3684impl FromGlib<ffi::GstVideoHDRFormat> for VideoHDRFormat {
3685    #[inline]
3686    unsafe fn from_glib(value: ffi::GstVideoHDRFormat) -> Self {
3687        skip_assert_initialized!();
3688
3689        match value {
3690            ffi::GST_VIDEO_HDR_FORMAT_NONE => Self::None,
3691            ffi::GST_VIDEO_HDR_FORMAT_HDR10 => Self::Hdr10,
3692            ffi::GST_VIDEO_HDR_FORMAT_HDR10_PLUS => Self::Hdr10Plus,
3693            value => Self::__Unknown(value),
3694        }
3695    }
3696}
3697
3698/// The possible values of the [`VideoInterlaceMode`][crate::VideoInterlaceMode] describing the interlace
3699/// mode of the stream.
3700#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3701#[non_exhaustive]
3702#[doc(alias = "GstVideoInterlaceMode")]
3703pub enum VideoInterlaceMode {
3704    /// all frames are progressive
3705    #[doc(alias = "GST_VIDEO_INTERLACE_MODE_PROGRESSIVE")]
3706    Progressive,
3707    /// 2 fields are interleaved in one video
3708    ///  frame. Extra buffer flags describe the field order.
3709    #[doc(alias = "GST_VIDEO_INTERLACE_MODE_INTERLEAVED")]
3710    Interleaved,
3711    /// frames contains both interlaced and
3712    ///  progressive video, the buffer flags describe the frame and fields.
3713    #[doc(alias = "GST_VIDEO_INTERLACE_MODE_MIXED")]
3714    Mixed,
3715    ///  1) the fields of view N can be found at frame ID
3716    ///  (N * 2) and (N * 2) + 1.
3717    ///  Each field has only half the amount of lines as noted in the
3718    ///  height property. This mode requires multiple GstVideoMeta metadata
3719    ///  to describe the fields.
3720    #[doc(alias = "GST_VIDEO_INTERLACE_MODE_FIELDS")]
3721    Fields,
3722    /// 1 field is stored in one buffer,
3723    ///  `GST_VIDEO_BUFFER_FLAG_TF` or `GST_VIDEO_BUFFER_FLAG_BF` indicates if
3724    ///  the buffer is carrying the top or bottom field, respectively. The top and
3725    ///  bottom buffers must alternate in the pipeline, with this mode
3726    ///  (Since: 1.16).
3727    #[cfg(feature = "v1_16")]
3728    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
3729    #[doc(alias = "GST_VIDEO_INTERLACE_MODE_ALTERNATE")]
3730    Alternate,
3731    #[doc(hidden)]
3732    __Unknown(i32),
3733}
3734
3735impl VideoInterlaceMode {
3736    #[doc(alias = "gst_video_interlace_mode_from_string")]
3737    pub fn from_string(mode: &str) -> VideoInterlaceMode {
3738        assert_initialized_main_thread!();
3739        unsafe {
3740            from_glib(ffi::gst_video_interlace_mode_from_string(
3741                mode.to_glib_none().0,
3742            ))
3743        }
3744    }
3745
3746    pub fn to_str<'a>(self) -> &'a GStr {
3747        unsafe {
3748            GStr::from_ptr(
3749                ffi::gst_video_interlace_mode_to_string(self.into_glib())
3750                    .as_ref()
3751                    .expect("gst_video_interlace_mode_to_string returned NULL"),
3752            )
3753        }
3754    }
3755}
3756
3757impl std::fmt::Display for VideoInterlaceMode {
3758    #[inline]
3759    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
3760        f.write_str(&self.to_str())
3761    }
3762}
3763
3764#[doc(hidden)]
3765impl IntoGlib for VideoInterlaceMode {
3766    type GlibType = ffi::GstVideoInterlaceMode;
3767
3768    #[inline]
3769    fn into_glib(self) -> ffi::GstVideoInterlaceMode {
3770        match self {
3771            Self::Progressive => ffi::GST_VIDEO_INTERLACE_MODE_PROGRESSIVE,
3772            Self::Interleaved => ffi::GST_VIDEO_INTERLACE_MODE_INTERLEAVED,
3773            Self::Mixed => ffi::GST_VIDEO_INTERLACE_MODE_MIXED,
3774            Self::Fields => ffi::GST_VIDEO_INTERLACE_MODE_FIELDS,
3775            #[cfg(feature = "v1_16")]
3776            Self::Alternate => ffi::GST_VIDEO_INTERLACE_MODE_ALTERNATE,
3777            Self::__Unknown(value) => value,
3778        }
3779    }
3780}
3781
3782#[doc(hidden)]
3783impl FromGlib<ffi::GstVideoInterlaceMode> for VideoInterlaceMode {
3784    #[inline]
3785    unsafe fn from_glib(value: ffi::GstVideoInterlaceMode) -> Self {
3786        skip_assert_initialized!();
3787
3788        match value {
3789            ffi::GST_VIDEO_INTERLACE_MODE_PROGRESSIVE => Self::Progressive,
3790            ffi::GST_VIDEO_INTERLACE_MODE_INTERLEAVED => Self::Interleaved,
3791            ffi::GST_VIDEO_INTERLACE_MODE_MIXED => Self::Mixed,
3792            ffi::GST_VIDEO_INTERLACE_MODE_FIELDS => Self::Fields,
3793            #[cfg(feature = "v1_16")]
3794            ffi::GST_VIDEO_INTERLACE_MODE_ALTERNATE => Self::Alternate,
3795            value => Self::__Unknown(value),
3796        }
3797    }
3798}
3799
3800impl StaticType for VideoInterlaceMode {
3801    #[inline]
3802    #[doc(alias = "gst_video_interlace_mode_get_type")]
3803    fn static_type() -> glib::Type {
3804        unsafe { from_glib(ffi::gst_video_interlace_mode_get_type()) }
3805    }
3806}
3807
3808impl glib::HasParamSpec for VideoInterlaceMode {
3809    type ParamSpec = glib::ParamSpecEnum;
3810    type SetValue = Self;
3811    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3812
3813    fn param_spec_builder() -> Self::BuilderFn {
3814        Self::ParamSpec::builder_with_default
3815    }
3816}
3817
3818impl glib::value::ValueType for VideoInterlaceMode {
3819    type Type = Self;
3820}
3821
3822unsafe impl<'a> glib::value::FromValue<'a> for VideoInterlaceMode {
3823    type Checker = glib::value::GenericValueTypeChecker<Self>;
3824
3825    #[inline]
3826    unsafe fn from_value(value: &'a glib::Value) -> Self {
3827        skip_assert_initialized!();
3828        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3829    }
3830}
3831
3832impl ToValue for VideoInterlaceMode {
3833    #[inline]
3834    fn to_value(&self) -> glib::Value {
3835        let mut value = glib::Value::for_value_type::<Self>();
3836        unsafe {
3837            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3838        }
3839        value
3840    }
3841
3842    #[inline]
3843    fn value_type(&self) -> glib::Type {
3844        Self::static_type()
3845    }
3846}
3847
3848impl From<VideoInterlaceMode> for glib::Value {
3849    #[inline]
3850    fn from(v: VideoInterlaceMode) -> Self {
3851        skip_assert_initialized!();
3852        ToValue::to_value(&v)
3853    }
3854}
3855
3856/// Different color matrix conversion modes
3857#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3858#[non_exhaustive]
3859#[doc(alias = "GstVideoMatrixMode")]
3860pub enum VideoMatrixMode {
3861    /// do conversion between color matrices
3862    #[doc(alias = "GST_VIDEO_MATRIX_MODE_FULL")]
3863    Full,
3864    /// use the input color matrix to convert
3865    ///  to and from R'G'B
3866    #[doc(alias = "GST_VIDEO_MATRIX_MODE_INPUT_ONLY")]
3867    InputOnly,
3868    /// use the output color matrix to convert
3869    ///  to and from R'G'B
3870    #[doc(alias = "GST_VIDEO_MATRIX_MODE_OUTPUT_ONLY")]
3871    OutputOnly,
3872    /// disable color matrix conversion.
3873    #[doc(alias = "GST_VIDEO_MATRIX_MODE_NONE")]
3874    None,
3875    #[doc(hidden)]
3876    __Unknown(i32),
3877}
3878
3879#[doc(hidden)]
3880impl IntoGlib for VideoMatrixMode {
3881    type GlibType = ffi::GstVideoMatrixMode;
3882
3883    #[inline]
3884    fn into_glib(self) -> ffi::GstVideoMatrixMode {
3885        match self {
3886            Self::Full => ffi::GST_VIDEO_MATRIX_MODE_FULL,
3887            Self::InputOnly => ffi::GST_VIDEO_MATRIX_MODE_INPUT_ONLY,
3888            Self::OutputOnly => ffi::GST_VIDEO_MATRIX_MODE_OUTPUT_ONLY,
3889            Self::None => ffi::GST_VIDEO_MATRIX_MODE_NONE,
3890            Self::__Unknown(value) => value,
3891        }
3892    }
3893}
3894
3895#[doc(hidden)]
3896impl FromGlib<ffi::GstVideoMatrixMode> for VideoMatrixMode {
3897    #[inline]
3898    unsafe fn from_glib(value: ffi::GstVideoMatrixMode) -> Self {
3899        skip_assert_initialized!();
3900
3901        match value {
3902            ffi::GST_VIDEO_MATRIX_MODE_FULL => Self::Full,
3903            ffi::GST_VIDEO_MATRIX_MODE_INPUT_ONLY => Self::InputOnly,
3904            ffi::GST_VIDEO_MATRIX_MODE_OUTPUT_ONLY => Self::OutputOnly,
3905            ffi::GST_VIDEO_MATRIX_MODE_NONE => Self::None,
3906            value => Self::__Unknown(value),
3907        }
3908    }
3909}
3910
3911impl StaticType for VideoMatrixMode {
3912    #[inline]
3913    #[doc(alias = "gst_video_matrix_mode_get_type")]
3914    fn static_type() -> glib::Type {
3915        unsafe { from_glib(ffi::gst_video_matrix_mode_get_type()) }
3916    }
3917}
3918
3919impl glib::HasParamSpec for VideoMatrixMode {
3920    type ParamSpec = glib::ParamSpecEnum;
3921    type SetValue = Self;
3922    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3923
3924    fn param_spec_builder() -> Self::BuilderFn {
3925        Self::ParamSpec::builder_with_default
3926    }
3927}
3928
3929impl glib::value::ValueType for VideoMatrixMode {
3930    type Type = Self;
3931}
3932
3933unsafe impl<'a> glib::value::FromValue<'a> for VideoMatrixMode {
3934    type Checker = glib::value::GenericValueTypeChecker<Self>;
3935
3936    #[inline]
3937    unsafe fn from_value(value: &'a glib::Value) -> Self {
3938        skip_assert_initialized!();
3939        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3940    }
3941}
3942
3943impl ToValue for VideoMatrixMode {
3944    #[inline]
3945    fn to_value(&self) -> glib::Value {
3946        let mut value = glib::Value::for_value_type::<Self>();
3947        unsafe {
3948            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3949        }
3950        value
3951    }
3952
3953    #[inline]
3954    fn value_type(&self) -> glib::Type {
3955        Self::static_type()
3956    }
3957}
3958
3959impl From<VideoMatrixMode> for glib::Value {
3960    #[inline]
3961    fn from(v: VideoMatrixMode) -> Self {
3962        skip_assert_initialized!();
3963        ToValue::to_value(&v)
3964    }
3965}
3966
3967/// [`VideoMultiviewFramePacking`][crate::VideoMultiviewFramePacking] represents the subset of [`VideoMultiviewMode`][crate::VideoMultiviewMode]
3968/// values that can be applied to any video frame without needing extra metadata.
3969/// It can be used by elements that provide a property to override the
3970/// multiview interpretation of a video stream when the video doesn't contain
3971/// any markers.
3972///
3973/// This enum is used (for example) on playbin, to re-interpret a played
3974/// video stream as a stereoscopic video. The individual enum values are
3975/// equivalent to and have the same value as the matching [`VideoMultiviewMode`][crate::VideoMultiviewMode].
3976#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3977#[non_exhaustive]
3978#[doc(alias = "GstVideoMultiviewFramePacking")]
3979pub enum VideoMultiviewFramePacking {
3980    /// A special value indicating
3981    /// no frame packing info.
3982    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE")]
3983    None,
3984    /// All frames are monoscopic.
3985    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_MONO")]
3986    Mono,
3987    /// All frames represent a left-eye view.
3988    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_LEFT")]
3989    Left,
3990    /// All frames represent a right-eye view.
3991    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_RIGHT")]
3992    Right,
3993    /// Left and right eye views are
3994    /// provided in the left and right half of the frame respectively.
3995    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE")]
3996    SideBySide,
3997    /// Left and right eye
3998    /// views are provided in the left and right half of the frame, but
3999    /// have been sampled using quincunx method, with half-pixel offset
4000    /// between the 2 views.
4001    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE_QUINCUNX")]
4002    SideBySideQuincunx,
4003    /// Alternating vertical
4004    /// columns of pixels represent the left and right eye view respectively.
4005    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_COLUMN_INTERLEAVED")]
4006    ColumnInterleaved,
4007    /// Alternating horizontal
4008    /// rows of pixels represent the left and right eye view respectively.
4009    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_ROW_INTERLEAVED")]
4010    RowInterleaved,
4011    /// The top half of the frame
4012    /// contains the left eye, and the bottom half the right eye.
4013    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_TOP_BOTTOM")]
4014    TopBottom,
4015    /// Pixels are arranged with
4016    /// alternating pixels representing left and right eye views in a
4017    /// checkerboard fashion.
4018    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_CHECKERBOARD")]
4019    Checkerboard,
4020    #[doc(hidden)]
4021    __Unknown(i32),
4022}
4023
4024#[doc(hidden)]
4025impl IntoGlib for VideoMultiviewFramePacking {
4026    type GlibType = ffi::GstVideoMultiviewFramePacking;
4027
4028    #[inline]
4029    fn into_glib(self) -> ffi::GstVideoMultiviewFramePacking {
4030        match self {
4031            Self::None => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE,
4032            Self::Mono => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_MONO,
4033            Self::Left => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_LEFT,
4034            Self::Right => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_RIGHT,
4035            Self::SideBySide => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE,
4036            Self::SideBySideQuincunx => {
4037                ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE_QUINCUNX
4038            }
4039            Self::ColumnInterleaved => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_COLUMN_INTERLEAVED,
4040            Self::RowInterleaved => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_ROW_INTERLEAVED,
4041            Self::TopBottom => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_TOP_BOTTOM,
4042            Self::Checkerboard => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_CHECKERBOARD,
4043            Self::__Unknown(value) => value,
4044        }
4045    }
4046}
4047
4048#[doc(hidden)]
4049impl FromGlib<ffi::GstVideoMultiviewFramePacking> for VideoMultiviewFramePacking {
4050    #[inline]
4051    unsafe fn from_glib(value: ffi::GstVideoMultiviewFramePacking) -> Self {
4052        skip_assert_initialized!();
4053
4054        match value {
4055            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE => Self::None,
4056            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_MONO => Self::Mono,
4057            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_LEFT => Self::Left,
4058            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_RIGHT => Self::Right,
4059            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE => Self::SideBySide,
4060            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE_QUINCUNX => {
4061                Self::SideBySideQuincunx
4062            }
4063            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_COLUMN_INTERLEAVED => Self::ColumnInterleaved,
4064            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_ROW_INTERLEAVED => Self::RowInterleaved,
4065            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_TOP_BOTTOM => Self::TopBottom,
4066            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_CHECKERBOARD => Self::Checkerboard,
4067            value => Self::__Unknown(value),
4068        }
4069    }
4070}
4071
4072impl StaticType for VideoMultiviewFramePacking {
4073    #[inline]
4074    #[doc(alias = "gst_video_multiview_frame_packing_get_type")]
4075    fn static_type() -> glib::Type {
4076        unsafe { from_glib(ffi::gst_video_multiview_frame_packing_get_type()) }
4077    }
4078}
4079
4080impl glib::HasParamSpec for VideoMultiviewFramePacking {
4081    type ParamSpec = glib::ParamSpecEnum;
4082    type SetValue = Self;
4083    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4084
4085    fn param_spec_builder() -> Self::BuilderFn {
4086        Self::ParamSpec::builder_with_default
4087    }
4088}
4089
4090impl glib::value::ValueType for VideoMultiviewFramePacking {
4091    type Type = Self;
4092}
4093
4094unsafe impl<'a> glib::value::FromValue<'a> for VideoMultiviewFramePacking {
4095    type Checker = glib::value::GenericValueTypeChecker<Self>;
4096
4097    #[inline]
4098    unsafe fn from_value(value: &'a glib::Value) -> Self {
4099        skip_assert_initialized!();
4100        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
4101    }
4102}
4103
4104impl ToValue for VideoMultiviewFramePacking {
4105    #[inline]
4106    fn to_value(&self) -> glib::Value {
4107        let mut value = glib::Value::for_value_type::<Self>();
4108        unsafe {
4109            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4110        }
4111        value
4112    }
4113
4114    #[inline]
4115    fn value_type(&self) -> glib::Type {
4116        Self::static_type()
4117    }
4118}
4119
4120impl From<VideoMultiviewFramePacking> for glib::Value {
4121    #[inline]
4122    fn from(v: VideoMultiviewFramePacking) -> Self {
4123        skip_assert_initialized!();
4124        ToValue::to_value(&v)
4125    }
4126}
4127
4128/// All possible stereoscopic 3D and multiview representations.
4129/// In conjunction with [`VideoMultiviewFlags`][crate::VideoMultiviewFlags], describes how
4130/// multiview content is being transported in the stream.
4131#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4132#[non_exhaustive]
4133#[doc(alias = "GstVideoMultiviewMode")]
4134pub enum VideoMultiviewMode {
4135    /// A special value indicating
4136    /// no multiview information. Used in GstVideoInfo and other places to
4137    /// indicate that no specific multiview handling has been requested or
4138    /// provided. This value is never carried on caps.
4139    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_NONE")]
4140    None,
4141    /// All frames are monoscopic.
4142    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_MONO")]
4143    Mono,
4144    /// All frames represent a left-eye view.
4145    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_LEFT")]
4146    Left,
4147    /// All frames represent a right-eye view.
4148    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_RIGHT")]
4149    Right,
4150    /// Left and right eye views are
4151    /// provided in the left and right half of the frame respectively.
4152    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE")]
4153    SideBySide,
4154    /// Left and right eye
4155    /// views are provided in the left and right half of the frame, but
4156    /// have been sampled using quincunx method, with half-pixel offset
4157    /// between the 2 views.
4158    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX")]
4159    SideBySideQuincunx,
4160    /// Alternating vertical
4161    /// columns of pixels represent the left and right eye view respectively.
4162    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED")]
4163    ColumnInterleaved,
4164    /// Alternating horizontal
4165    /// rows of pixels represent the left and right eye view respectively.
4166    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED")]
4167    RowInterleaved,
4168    /// The top half of the frame
4169    /// contains the left eye, and the bottom half the right eye.
4170    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM")]
4171    TopBottom,
4172    /// Pixels are arranged with
4173    /// alternating pixels representing left and right eye views in a
4174    /// checkerboard fashion.
4175    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD")]
4176    Checkerboard,
4177    /// Left and right eye views
4178    /// are provided in separate frames alternately.
4179    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME")]
4180    FrameByFrame,
4181    /// Multiple
4182    /// independent views are provided in separate frames in sequence.
4183    /// This method only applies to raw video buffers at the moment.
4184    /// Specific view identification is via the `GstVideoMultiviewMeta`
4185    /// and [`VideoMeta`][crate::VideoMeta](s) on raw video buffers.
4186    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_MULTIVIEW_FRAME_BY_FRAME")]
4187    MultiviewFrameByFrame,
4188    /// Multiple views are
4189    /// provided as separate [`gst::Memory`][crate::gst::Memory] framebuffers attached to each
4190    /// [`gst::Buffer`][crate::gst::Buffer], described by the `GstVideoMultiviewMeta`
4191    /// and [`VideoMeta`][crate::VideoMeta](s)
4192    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_SEPARATED")]
4193    Separated,
4194    #[doc(hidden)]
4195    __Unknown(i32),
4196}
4197
4198impl VideoMultiviewMode {
4199    #[doc(alias = "gst_video_multiview_mode_from_caps_string")]
4200    pub fn from_caps_string(caps_mview_mode: &str) -> VideoMultiviewMode {
4201        assert_initialized_main_thread!();
4202        unsafe {
4203            from_glib(ffi::gst_video_multiview_mode_from_caps_string(
4204                caps_mview_mode.to_glib_none().0,
4205            ))
4206        }
4207    }
4208
4209    #[doc(alias = "gst_video_multiview_mode_to_caps_string")]
4210    pub fn to_caps_string(self) -> Option<glib::GString> {
4211        assert_initialized_main_thread!();
4212        unsafe {
4213            from_glib_none(ffi::gst_video_multiview_mode_to_caps_string(
4214                self.into_glib(),
4215            ))
4216        }
4217    }
4218}
4219
4220#[doc(hidden)]
4221impl IntoGlib for VideoMultiviewMode {
4222    type GlibType = ffi::GstVideoMultiviewMode;
4223
4224    fn into_glib(self) -> ffi::GstVideoMultiviewMode {
4225        match self {
4226            Self::None => ffi::GST_VIDEO_MULTIVIEW_MODE_NONE,
4227            Self::Mono => ffi::GST_VIDEO_MULTIVIEW_MODE_MONO,
4228            Self::Left => ffi::GST_VIDEO_MULTIVIEW_MODE_LEFT,
4229            Self::Right => ffi::GST_VIDEO_MULTIVIEW_MODE_RIGHT,
4230            Self::SideBySide => ffi::GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE,
4231            Self::SideBySideQuincunx => ffi::GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX,
4232            Self::ColumnInterleaved => ffi::GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED,
4233            Self::RowInterleaved => ffi::GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED,
4234            Self::TopBottom => ffi::GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM,
4235            Self::Checkerboard => ffi::GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD,
4236            Self::FrameByFrame => ffi::GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME,
4237            Self::MultiviewFrameByFrame => ffi::GST_VIDEO_MULTIVIEW_MODE_MULTIVIEW_FRAME_BY_FRAME,
4238            Self::Separated => ffi::GST_VIDEO_MULTIVIEW_MODE_SEPARATED,
4239            Self::__Unknown(value) => value,
4240        }
4241    }
4242}
4243
4244#[doc(hidden)]
4245impl FromGlib<ffi::GstVideoMultiviewMode> for VideoMultiviewMode {
4246    unsafe fn from_glib(value: ffi::GstVideoMultiviewMode) -> Self {
4247        skip_assert_initialized!();
4248
4249        match value {
4250            ffi::GST_VIDEO_MULTIVIEW_MODE_NONE => Self::None,
4251            ffi::GST_VIDEO_MULTIVIEW_MODE_MONO => Self::Mono,
4252            ffi::GST_VIDEO_MULTIVIEW_MODE_LEFT => Self::Left,
4253            ffi::GST_VIDEO_MULTIVIEW_MODE_RIGHT => Self::Right,
4254            ffi::GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE => Self::SideBySide,
4255            ffi::GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX => Self::SideBySideQuincunx,
4256            ffi::GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED => Self::ColumnInterleaved,
4257            ffi::GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED => Self::RowInterleaved,
4258            ffi::GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM => Self::TopBottom,
4259            ffi::GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD => Self::Checkerboard,
4260            ffi::GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME => Self::FrameByFrame,
4261            ffi::GST_VIDEO_MULTIVIEW_MODE_MULTIVIEW_FRAME_BY_FRAME => Self::MultiviewFrameByFrame,
4262            ffi::GST_VIDEO_MULTIVIEW_MODE_SEPARATED => Self::Separated,
4263            value => Self::__Unknown(value),
4264        }
4265    }
4266}
4267
4268impl StaticType for VideoMultiviewMode {
4269    #[inline]
4270    #[doc(alias = "gst_video_multiview_mode_get_type")]
4271    fn static_type() -> glib::Type {
4272        unsafe { from_glib(ffi::gst_video_multiview_mode_get_type()) }
4273    }
4274}
4275
4276impl glib::HasParamSpec for VideoMultiviewMode {
4277    type ParamSpec = glib::ParamSpecEnum;
4278    type SetValue = Self;
4279    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4280
4281    fn param_spec_builder() -> Self::BuilderFn {
4282        Self::ParamSpec::builder_with_default
4283    }
4284}
4285
4286impl glib::value::ValueType for VideoMultiviewMode {
4287    type Type = Self;
4288}
4289
4290unsafe impl<'a> glib::value::FromValue<'a> for VideoMultiviewMode {
4291    type Checker = glib::value::GenericValueTypeChecker<Self>;
4292
4293    #[inline]
4294    unsafe fn from_value(value: &'a glib::Value) -> Self {
4295        skip_assert_initialized!();
4296        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
4297    }
4298}
4299
4300impl ToValue for VideoMultiviewMode {
4301    #[inline]
4302    fn to_value(&self) -> glib::Value {
4303        let mut value = glib::Value::for_value_type::<Self>();
4304        unsafe {
4305            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4306        }
4307        value
4308    }
4309
4310    #[inline]
4311    fn value_type(&self) -> glib::Type {
4312        Self::static_type()
4313    }
4314}
4315
4316impl From<VideoMultiviewMode> for glib::Value {
4317    #[inline]
4318    fn from(v: VideoMultiviewMode) -> Self {
4319        skip_assert_initialized!();
4320        ToValue::to_value(&v)
4321    }
4322}
4323
4324/// The different video orientation methods.
4325#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4326#[non_exhaustive]
4327#[doc(alias = "GstVideoOrientationMethod")]
4328pub enum VideoOrientationMethod {
4329    /// Identity (no rotation)
4330    #[doc(alias = "GST_VIDEO_ORIENTATION_IDENTITY")]
4331    Identity,
4332    /// Rotate clockwise 90 degrees
4333    #[doc(alias = "GST_VIDEO_ORIENTATION_90R")]
4334    _90r,
4335    /// Rotate 180 degrees
4336    #[doc(alias = "GST_VIDEO_ORIENTATION_180")]
4337    _180,
4338    /// Rotate counter-clockwise 90 degrees
4339    #[doc(alias = "GST_VIDEO_ORIENTATION_90L")]
4340    _90l,
4341    /// Flip horizontally
4342    #[doc(alias = "GST_VIDEO_ORIENTATION_HORIZ")]
4343    Horiz,
4344    /// Flip vertically
4345    #[doc(alias = "GST_VIDEO_ORIENTATION_VERT")]
4346    Vert,
4347    /// Rotate counter-clockwise 90 degrees and flip vertically
4348    #[doc(alias = "GST_VIDEO_ORIENTATION_UL_LR")]
4349    UlLr,
4350    /// Rotate clockwise 90 degrees and flip vertically
4351    #[doc(alias = "GST_VIDEO_ORIENTATION_UR_LL")]
4352    UrLl,
4353    /// Select flip method based on image-orientation tag
4354    #[doc(alias = "GST_VIDEO_ORIENTATION_AUTO")]
4355    Auto,
4356    /// Current status depends on plugin internal setup
4357    #[doc(alias = "GST_VIDEO_ORIENTATION_CUSTOM")]
4358    Custom,
4359    #[doc(hidden)]
4360    __Unknown(i32),
4361}
4362
4363#[doc(hidden)]
4364impl IntoGlib for VideoOrientationMethod {
4365    type GlibType = ffi::GstVideoOrientationMethod;
4366
4367    #[inline]
4368    fn into_glib(self) -> ffi::GstVideoOrientationMethod {
4369        match self {
4370            Self::Identity => ffi::GST_VIDEO_ORIENTATION_IDENTITY,
4371            Self::_90r => ffi::GST_VIDEO_ORIENTATION_90R,
4372            Self::_180 => ffi::GST_VIDEO_ORIENTATION_180,
4373            Self::_90l => ffi::GST_VIDEO_ORIENTATION_90L,
4374            Self::Horiz => ffi::GST_VIDEO_ORIENTATION_HORIZ,
4375            Self::Vert => ffi::GST_VIDEO_ORIENTATION_VERT,
4376            Self::UlLr => ffi::GST_VIDEO_ORIENTATION_UL_LR,
4377            Self::UrLl => ffi::GST_VIDEO_ORIENTATION_UR_LL,
4378            Self::Auto => ffi::GST_VIDEO_ORIENTATION_AUTO,
4379            Self::Custom => ffi::GST_VIDEO_ORIENTATION_CUSTOM,
4380            Self::__Unknown(value) => value,
4381        }
4382    }
4383}
4384
4385#[doc(hidden)]
4386impl FromGlib<ffi::GstVideoOrientationMethod> for VideoOrientationMethod {
4387    #[inline]
4388    unsafe fn from_glib(value: ffi::GstVideoOrientationMethod) -> Self {
4389        skip_assert_initialized!();
4390
4391        match value {
4392            ffi::GST_VIDEO_ORIENTATION_IDENTITY => Self::Identity,
4393            ffi::GST_VIDEO_ORIENTATION_90R => Self::_90r,
4394            ffi::GST_VIDEO_ORIENTATION_180 => Self::_180,
4395            ffi::GST_VIDEO_ORIENTATION_90L => Self::_90l,
4396            ffi::GST_VIDEO_ORIENTATION_HORIZ => Self::Horiz,
4397            ffi::GST_VIDEO_ORIENTATION_VERT => Self::Vert,
4398            ffi::GST_VIDEO_ORIENTATION_UL_LR => Self::UlLr,
4399            ffi::GST_VIDEO_ORIENTATION_UR_LL => Self::UrLl,
4400            ffi::GST_VIDEO_ORIENTATION_AUTO => Self::Auto,
4401            ffi::GST_VIDEO_ORIENTATION_CUSTOM => Self::Custom,
4402            value => Self::__Unknown(value),
4403        }
4404    }
4405}
4406
4407impl StaticType for VideoOrientationMethod {
4408    #[inline]
4409    #[doc(alias = "gst_video_orientation_method_get_type")]
4410    fn static_type() -> glib::Type {
4411        unsafe { from_glib(ffi::gst_video_orientation_method_get_type()) }
4412    }
4413}
4414
4415impl glib::HasParamSpec for VideoOrientationMethod {
4416    type ParamSpec = glib::ParamSpecEnum;
4417    type SetValue = Self;
4418    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4419
4420    fn param_spec_builder() -> Self::BuilderFn {
4421        Self::ParamSpec::builder_with_default
4422    }
4423}
4424
4425impl glib::value::ValueType for VideoOrientationMethod {
4426    type Type = Self;
4427}
4428
4429unsafe impl<'a> glib::value::FromValue<'a> for VideoOrientationMethod {
4430    type Checker = glib::value::GenericValueTypeChecker<Self>;
4431
4432    #[inline]
4433    unsafe fn from_value(value: &'a glib::Value) -> Self {
4434        skip_assert_initialized!();
4435        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
4436    }
4437}
4438
4439impl ToValue for VideoOrientationMethod {
4440    #[inline]
4441    fn to_value(&self) -> glib::Value {
4442        let mut value = glib::Value::for_value_type::<Self>();
4443        unsafe {
4444            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4445        }
4446        value
4447    }
4448
4449    #[inline]
4450    fn value_type(&self) -> glib::Type {
4451        Self::static_type()
4452    }
4453}
4454
4455impl From<VideoOrientationMethod> for glib::Value {
4456    #[inline]
4457    fn from(v: VideoOrientationMethod) -> Self {
4458        skip_assert_initialized!();
4459        ToValue::to_value(&v)
4460    }
4461}
4462
4463/// Different primaries conversion modes
4464#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4465#[non_exhaustive]
4466#[doc(alias = "GstVideoPrimariesMode")]
4467pub enum VideoPrimariesMode {
4468    /// disable conversion between primaries
4469    #[doc(alias = "GST_VIDEO_PRIMARIES_MODE_NONE")]
4470    None,
4471    /// do conversion between primaries only
4472    ///  when it can be merged with color matrix conversion.
4473    #[doc(alias = "GST_VIDEO_PRIMARIES_MODE_MERGE_ONLY")]
4474    MergeOnly,
4475    /// fast conversion between primaries
4476    #[doc(alias = "GST_VIDEO_PRIMARIES_MODE_FAST")]
4477    Fast,
4478    #[doc(hidden)]
4479    __Unknown(i32),
4480}
4481
4482#[doc(hidden)]
4483impl IntoGlib for VideoPrimariesMode {
4484    type GlibType = ffi::GstVideoPrimariesMode;
4485
4486    #[inline]
4487    fn into_glib(self) -> ffi::GstVideoPrimariesMode {
4488        match self {
4489            Self::None => ffi::GST_VIDEO_PRIMARIES_MODE_NONE,
4490            Self::MergeOnly => ffi::GST_VIDEO_PRIMARIES_MODE_MERGE_ONLY,
4491            Self::Fast => ffi::GST_VIDEO_PRIMARIES_MODE_FAST,
4492            Self::__Unknown(value) => value,
4493        }
4494    }
4495}
4496
4497#[doc(hidden)]
4498impl FromGlib<ffi::GstVideoPrimariesMode> for VideoPrimariesMode {
4499    #[inline]
4500    unsafe fn from_glib(value: ffi::GstVideoPrimariesMode) -> Self {
4501        skip_assert_initialized!();
4502
4503        match value {
4504            ffi::GST_VIDEO_PRIMARIES_MODE_NONE => Self::None,
4505            ffi::GST_VIDEO_PRIMARIES_MODE_MERGE_ONLY => Self::MergeOnly,
4506            ffi::GST_VIDEO_PRIMARIES_MODE_FAST => Self::Fast,
4507            value => Self::__Unknown(value),
4508        }
4509    }
4510}
4511
4512impl StaticType for VideoPrimariesMode {
4513    #[inline]
4514    #[doc(alias = "gst_video_primaries_mode_get_type")]
4515    fn static_type() -> glib::Type {
4516        unsafe { from_glib(ffi::gst_video_primaries_mode_get_type()) }
4517    }
4518}
4519
4520impl glib::HasParamSpec for VideoPrimariesMode {
4521    type ParamSpec = glib::ParamSpecEnum;
4522    type SetValue = Self;
4523    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4524
4525    fn param_spec_builder() -> Self::BuilderFn {
4526        Self::ParamSpec::builder_with_default
4527    }
4528}
4529
4530impl glib::value::ValueType for VideoPrimariesMode {
4531    type Type = Self;
4532}
4533
4534unsafe impl<'a> glib::value::FromValue<'a> for VideoPrimariesMode {
4535    type Checker = glib::value::GenericValueTypeChecker<Self>;
4536
4537    #[inline]
4538    unsafe fn from_value(value: &'a glib::Value) -> Self {
4539        skip_assert_initialized!();
4540        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
4541    }
4542}
4543
4544impl ToValue for VideoPrimariesMode {
4545    #[inline]
4546    fn to_value(&self) -> glib::Value {
4547        let mut value = glib::Value::for_value_type::<Self>();
4548        unsafe {
4549            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4550        }
4551        value
4552    }
4553
4554    #[inline]
4555    fn value_type(&self) -> glib::Type {
4556        Self::static_type()
4557    }
4558}
4559
4560impl From<VideoPrimariesMode> for glib::Value {
4561    #[inline]
4562    fn from(v: VideoPrimariesMode) -> Self {
4563        skip_assert_initialized!();
4564        ToValue::to_value(&v)
4565    }
4566}
4567
4568/// Different subsampling and upsampling methods
4569#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4570#[non_exhaustive]
4571#[doc(alias = "GstVideoResamplerMethod")]
4572pub enum VideoResamplerMethod {
4573    /// Duplicates the samples when
4574    ///  upsampling and drops when downsampling
4575    #[doc(alias = "GST_VIDEO_RESAMPLER_METHOD_NEAREST")]
4576    Nearest,
4577    /// Uses linear interpolation to reconstruct
4578    ///  missing samples and averaging to downsample
4579    #[doc(alias = "GST_VIDEO_RESAMPLER_METHOD_LINEAR")]
4580    Linear,
4581    /// Uses cubic interpolation
4582    #[doc(alias = "GST_VIDEO_RESAMPLER_METHOD_CUBIC")]
4583    Cubic,
4584    /// Uses sinc interpolation
4585    #[doc(alias = "GST_VIDEO_RESAMPLER_METHOD_SINC")]
4586    Sinc,
4587    /// Uses lanczos interpolation
4588    #[doc(alias = "GST_VIDEO_RESAMPLER_METHOD_LANCZOS")]
4589    Lanczos,
4590    #[doc(hidden)]
4591    __Unknown(i32),
4592}
4593
4594#[doc(hidden)]
4595impl IntoGlib for VideoResamplerMethod {
4596    type GlibType = ffi::GstVideoResamplerMethod;
4597
4598    #[inline]
4599    fn into_glib(self) -> ffi::GstVideoResamplerMethod {
4600        match self {
4601            Self::Nearest => ffi::GST_VIDEO_RESAMPLER_METHOD_NEAREST,
4602            Self::Linear => ffi::GST_VIDEO_RESAMPLER_METHOD_LINEAR,
4603            Self::Cubic => ffi::GST_VIDEO_RESAMPLER_METHOD_CUBIC,
4604            Self::Sinc => ffi::GST_VIDEO_RESAMPLER_METHOD_SINC,
4605            Self::Lanczos => ffi::GST_VIDEO_RESAMPLER_METHOD_LANCZOS,
4606            Self::__Unknown(value) => value,
4607        }
4608    }
4609}
4610
4611#[doc(hidden)]
4612impl FromGlib<ffi::GstVideoResamplerMethod> for VideoResamplerMethod {
4613    #[inline]
4614    unsafe fn from_glib(value: ffi::GstVideoResamplerMethod) -> Self {
4615        skip_assert_initialized!();
4616
4617        match value {
4618            ffi::GST_VIDEO_RESAMPLER_METHOD_NEAREST => Self::Nearest,
4619            ffi::GST_VIDEO_RESAMPLER_METHOD_LINEAR => Self::Linear,
4620            ffi::GST_VIDEO_RESAMPLER_METHOD_CUBIC => Self::Cubic,
4621            ffi::GST_VIDEO_RESAMPLER_METHOD_SINC => Self::Sinc,
4622            ffi::GST_VIDEO_RESAMPLER_METHOD_LANCZOS => Self::Lanczos,
4623            value => Self::__Unknown(value),
4624        }
4625    }
4626}
4627
4628impl StaticType for VideoResamplerMethod {
4629    #[inline]
4630    #[doc(alias = "gst_video_resampler_method_get_type")]
4631    fn static_type() -> glib::Type {
4632        unsafe { from_glib(ffi::gst_video_resampler_method_get_type()) }
4633    }
4634}
4635
4636impl glib::HasParamSpec for VideoResamplerMethod {
4637    type ParamSpec = glib::ParamSpecEnum;
4638    type SetValue = Self;
4639    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4640
4641    fn param_spec_builder() -> Self::BuilderFn {
4642        Self::ParamSpec::builder_with_default
4643    }
4644}
4645
4646impl glib::value::ValueType for VideoResamplerMethod {
4647    type Type = Self;
4648}
4649
4650unsafe impl<'a> glib::value::FromValue<'a> for VideoResamplerMethod {
4651    type Checker = glib::value::GenericValueTypeChecker<Self>;
4652
4653    #[inline]
4654    unsafe fn from_value(value: &'a glib::Value) -> Self {
4655        skip_assert_initialized!();
4656        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
4657    }
4658}
4659
4660impl ToValue for VideoResamplerMethod {
4661    #[inline]
4662    fn to_value(&self) -> glib::Value {
4663        let mut value = glib::Value::for_value_type::<Self>();
4664        unsafe {
4665            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4666        }
4667        value
4668    }
4669
4670    #[inline]
4671    fn value_type(&self) -> glib::Type {
4672        Self::static_type()
4673    }
4674}
4675
4676impl From<VideoResamplerMethod> for glib::Value {
4677    #[inline]
4678    fn from(v: VideoResamplerMethod) -> Self {
4679        skip_assert_initialized!();
4680        ToValue::to_value(&v)
4681    }
4682}
4683
4684/// Enum value describing the available tiling modes.
4685#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4686#[non_exhaustive]
4687#[doc(alias = "GstVideoTileMode")]
4688pub enum VideoTileMode {
4689    /// Unknown or unset tile mode
4690    #[doc(alias = "GST_VIDEO_TILE_MODE_UNKNOWN")]
4691    Unknown,
4692    /// Every four adjacent blocks - two
4693    ///  horizontally and two vertically are grouped together and are located
4694    ///  in memory in Z or flipped Z order. In case of odd rows, the last row
4695    ///  of blocks is arranged in linear order.
4696    #[doc(alias = "GST_VIDEO_TILE_MODE_ZFLIPZ_2X2")]
4697    Zflipz2x2,
4698    /// Tiles are in row order.
4699    #[cfg(feature = "v1_18")]
4700    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4701    #[doc(alias = "GST_VIDEO_TILE_MODE_LINEAR")]
4702    Linear,
4703    #[doc(hidden)]
4704    __Unknown(i32),
4705}
4706
4707#[doc(hidden)]
4708impl IntoGlib for VideoTileMode {
4709    type GlibType = ffi::GstVideoTileMode;
4710
4711    #[inline]
4712    fn into_glib(self) -> ffi::GstVideoTileMode {
4713        match self {
4714            Self::Unknown => ffi::GST_VIDEO_TILE_MODE_UNKNOWN,
4715            Self::Zflipz2x2 => ffi::GST_VIDEO_TILE_MODE_ZFLIPZ_2X2,
4716            #[cfg(feature = "v1_18")]
4717            Self::Linear => ffi::GST_VIDEO_TILE_MODE_LINEAR,
4718            Self::__Unknown(value) => value,
4719        }
4720    }
4721}
4722
4723#[doc(hidden)]
4724impl FromGlib<ffi::GstVideoTileMode> for VideoTileMode {
4725    #[inline]
4726    unsafe fn from_glib(value: ffi::GstVideoTileMode) -> Self {
4727        skip_assert_initialized!();
4728
4729        match value {
4730            ffi::GST_VIDEO_TILE_MODE_UNKNOWN => Self::Unknown,
4731            ffi::GST_VIDEO_TILE_MODE_ZFLIPZ_2X2 => Self::Zflipz2x2,
4732            #[cfg(feature = "v1_18")]
4733            ffi::GST_VIDEO_TILE_MODE_LINEAR => Self::Linear,
4734            value => Self::__Unknown(value),
4735        }
4736    }
4737}
4738
4739impl StaticType for VideoTileMode {
4740    #[inline]
4741    #[doc(alias = "gst_video_tile_mode_get_type")]
4742    fn static_type() -> glib::Type {
4743        unsafe { from_glib(ffi::gst_video_tile_mode_get_type()) }
4744    }
4745}
4746
4747impl glib::HasParamSpec for VideoTileMode {
4748    type ParamSpec = glib::ParamSpecEnum;
4749    type SetValue = Self;
4750    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4751
4752    fn param_spec_builder() -> Self::BuilderFn {
4753        Self::ParamSpec::builder_with_default
4754    }
4755}
4756
4757impl glib::value::ValueType for VideoTileMode {
4758    type Type = Self;
4759}
4760
4761unsafe impl<'a> glib::value::FromValue<'a> for VideoTileMode {
4762    type Checker = glib::value::GenericValueTypeChecker<Self>;
4763
4764    #[inline]
4765    unsafe fn from_value(value: &'a glib::Value) -> Self {
4766        skip_assert_initialized!();
4767        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
4768    }
4769}
4770
4771impl ToValue for VideoTileMode {
4772    #[inline]
4773    fn to_value(&self) -> glib::Value {
4774        let mut value = glib::Value::for_value_type::<Self>();
4775        unsafe {
4776            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4777        }
4778        value
4779    }
4780
4781    #[inline]
4782    fn value_type(&self) -> glib::Type {
4783        Self::static_type()
4784    }
4785}
4786
4787impl From<VideoTileMode> for glib::Value {
4788    #[inline]
4789    fn from(v: VideoTileMode) -> Self {
4790        skip_assert_initialized!();
4791        ToValue::to_value(&v)
4792    }
4793}
4794
4795/// The video transfer function defines the formula for converting between
4796/// non-linear RGB (R'G'B') and linear RGB
4797#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4798#[non_exhaustive]
4799#[doc(alias = "GstVideoTransferFunction")]
4800pub enum VideoTransferFunction {
4801    /// unknown transfer function
4802    #[doc(alias = "GST_VIDEO_TRANSFER_UNKNOWN")]
4803    Unknown,
4804    /// linear RGB, gamma 1.0 curve
4805    #[doc(alias = "GST_VIDEO_TRANSFER_GAMMA10")]
4806    Gamma10,
4807    /// Gamma 1.8 curve
4808    #[doc(alias = "GST_VIDEO_TRANSFER_GAMMA18")]
4809    Gamma18,
4810    /// Gamma 2.0 curve
4811    #[doc(alias = "GST_VIDEO_TRANSFER_GAMMA20")]
4812    Gamma20,
4813    /// Gamma 2.2 curve
4814    #[doc(alias = "GST_VIDEO_TRANSFER_GAMMA22")]
4815    Gamma22,
4816    ///
4817    ///  SECAM / ITU-R BT1361
4818    #[doc(alias = "GST_VIDEO_TRANSFER_BT709")]
4819    Bt709,
4820    /// Gamma 2.2 curve with a linear segment in the
4821    ///  lower range
4822    #[doc(alias = "GST_VIDEO_TRANSFER_SMPTE240M")]
4823    Smpte240m,
4824    /// Gamma 2.4 curve with a linear segment in the lower
4825    ///  range. IEC 61966-2-1 (sRGB or sYCC)
4826    #[doc(alias = "GST_VIDEO_TRANSFER_SRGB")]
4827    Srgb,
4828    /// Gamma 2.8 curve, also ITU-R BT470BG
4829    #[doc(alias = "GST_VIDEO_TRANSFER_GAMMA28")]
4830    Gamma28,
4831    /// Logarithmic transfer characteristic
4832    ///  100:1 range
4833    #[doc(alias = "GST_VIDEO_TRANSFER_LOG100")]
4834    Log100,
4835    /// Logarithmic transfer characteristic
4836    ///  316.22777:1 range (100 * sqrt(10) : 1)
4837    #[doc(alias = "GST_VIDEO_TRANSFER_LOG316")]
4838    Log316,
4839    /// Gamma 2.2 curve with a linear segment in the lower
4840    ///  range. Used for BT.2020 with 12 bits per
4841    ///  component. Since: 1.6
4842    #[doc(alias = "GST_VIDEO_TRANSFER_BT2020_12")]
4843    Bt202012,
4844    /// Gamma 2.19921875. Since: 1.8
4845    #[doc(alias = "GST_VIDEO_TRANSFER_ADOBERGB")]
4846    Adobergb,
4847    /// Rec. ITU-R BT.2020-2 with 10 bits per component.
4848    ///  (functionally the same as the values
4849    ///  GST_VIDEO_TRANSFER_BT709 and GST_VIDEO_TRANSFER_BT601).
4850    ///  Since: 1.18
4851    #[cfg(feature = "v1_18")]
4852    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4853    #[doc(alias = "GST_VIDEO_TRANSFER_BT2020_10")]
4854    Bt202010,
4855    /// SMPTE ST 2084 for 10, 12, 14, and 16-bit systems.
4856    ///  Known as perceptual quantization (PQ)
4857    ///  Since: 1.18
4858    #[cfg(feature = "v1_18")]
4859    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4860    #[doc(alias = "GST_VIDEO_TRANSFER_SMPTE2084")]
4861    Smpte2084,
4862    /// Association of Radio Industries and Businesses (ARIB)
4863    ///  STD-B67 and Rec. ITU-R BT.2100-1 hybrid loggamma (HLG) system
4864    ///  Since: 1.18
4865    #[cfg(feature = "v1_18")]
4866    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4867    #[doc(alias = "GST_VIDEO_TRANSFER_ARIB_STD_B67")]
4868    AribStdB67,
4869    /// also known as SMPTE170M / ITU-R BT1358 525 or 625 / ITU-R BT1700 NTSC
4870    #[cfg(feature = "v1_18")]
4871    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4872    #[doc(alias = "GST_VIDEO_TRANSFER_BT601")]
4873    Bt601,
4874    #[doc(hidden)]
4875    __Unknown(i32),
4876}
4877
4878impl VideoTransferFunction {
4879    #[cfg(feature = "v1_20")]
4880    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
4881    #[doc(alias = "gst_video_transfer_function_decode")]
4882    pub fn decode(self, val: f64) -> f64 {
4883        assert_initialized_main_thread!();
4884        unsafe { ffi::gst_video_transfer_function_decode(self.into_glib(), val) }
4885    }
4886
4887    #[cfg(feature = "v1_20")]
4888    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
4889    #[doc(alias = "gst_video_transfer_function_encode")]
4890    pub fn encode(self, val: f64) -> f64 {
4891        assert_initialized_main_thread!();
4892        unsafe { ffi::gst_video_transfer_function_encode(self.into_glib(), val) }
4893    }
4894
4895    #[cfg(feature = "v1_18")]
4896    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4897    #[doc(alias = "gst_video_transfer_function_from_iso")]
4898    pub fn from_iso(value: u32) -> VideoTransferFunction {
4899        assert_initialized_main_thread!();
4900        unsafe { from_glib(ffi::gst_video_transfer_function_from_iso(value)) }
4901    }
4902
4903    #[cfg(feature = "v1_18")]
4904    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4905    #[doc(alias = "gst_video_transfer_function_is_equivalent")]
4906    pub fn is_equivalent(self, from_bpp: u32, to_func: VideoTransferFunction, to_bpp: u32) -> bool {
4907        assert_initialized_main_thread!();
4908        unsafe {
4909            from_glib(ffi::gst_video_transfer_function_is_equivalent(
4910                self.into_glib(),
4911                from_bpp,
4912                to_func.into_glib(),
4913                to_bpp,
4914            ))
4915        }
4916    }
4917
4918    #[cfg(feature = "v1_18")]
4919    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4920    #[doc(alias = "gst_video_transfer_function_to_iso")]
4921    pub fn to_iso(self) -> u32 {
4922        assert_initialized_main_thread!();
4923        unsafe { ffi::gst_video_transfer_function_to_iso(self.into_glib()) }
4924    }
4925}
4926
4927#[doc(hidden)]
4928impl IntoGlib for VideoTransferFunction {
4929    type GlibType = ffi::GstVideoTransferFunction;
4930
4931    fn into_glib(self) -> ffi::GstVideoTransferFunction {
4932        match self {
4933            Self::Unknown => ffi::GST_VIDEO_TRANSFER_UNKNOWN,
4934            Self::Gamma10 => ffi::GST_VIDEO_TRANSFER_GAMMA10,
4935            Self::Gamma18 => ffi::GST_VIDEO_TRANSFER_GAMMA18,
4936            Self::Gamma20 => ffi::GST_VIDEO_TRANSFER_GAMMA20,
4937            Self::Gamma22 => ffi::GST_VIDEO_TRANSFER_GAMMA22,
4938            Self::Bt709 => ffi::GST_VIDEO_TRANSFER_BT709,
4939            Self::Smpte240m => ffi::GST_VIDEO_TRANSFER_SMPTE240M,
4940            Self::Srgb => ffi::GST_VIDEO_TRANSFER_SRGB,
4941            Self::Gamma28 => ffi::GST_VIDEO_TRANSFER_GAMMA28,
4942            Self::Log100 => ffi::GST_VIDEO_TRANSFER_LOG100,
4943            Self::Log316 => ffi::GST_VIDEO_TRANSFER_LOG316,
4944            Self::Bt202012 => ffi::GST_VIDEO_TRANSFER_BT2020_12,
4945            Self::Adobergb => ffi::GST_VIDEO_TRANSFER_ADOBERGB,
4946            #[cfg(feature = "v1_18")]
4947            Self::Bt202010 => ffi::GST_VIDEO_TRANSFER_BT2020_10,
4948            #[cfg(feature = "v1_18")]
4949            Self::Smpte2084 => ffi::GST_VIDEO_TRANSFER_SMPTE2084,
4950            #[cfg(feature = "v1_18")]
4951            Self::AribStdB67 => ffi::GST_VIDEO_TRANSFER_ARIB_STD_B67,
4952            #[cfg(feature = "v1_18")]
4953            Self::Bt601 => ffi::GST_VIDEO_TRANSFER_BT601,
4954            Self::__Unknown(value) => value,
4955        }
4956    }
4957}
4958
4959#[doc(hidden)]
4960impl FromGlib<ffi::GstVideoTransferFunction> for VideoTransferFunction {
4961    unsafe fn from_glib(value: ffi::GstVideoTransferFunction) -> Self {
4962        skip_assert_initialized!();
4963
4964        match value {
4965            ffi::GST_VIDEO_TRANSFER_UNKNOWN => Self::Unknown,
4966            ffi::GST_VIDEO_TRANSFER_GAMMA10 => Self::Gamma10,
4967            ffi::GST_VIDEO_TRANSFER_GAMMA18 => Self::Gamma18,
4968            ffi::GST_VIDEO_TRANSFER_GAMMA20 => Self::Gamma20,
4969            ffi::GST_VIDEO_TRANSFER_GAMMA22 => Self::Gamma22,
4970            ffi::GST_VIDEO_TRANSFER_BT709 => Self::Bt709,
4971            ffi::GST_VIDEO_TRANSFER_SMPTE240M => Self::Smpte240m,
4972            ffi::GST_VIDEO_TRANSFER_SRGB => Self::Srgb,
4973            ffi::GST_VIDEO_TRANSFER_GAMMA28 => Self::Gamma28,
4974            ffi::GST_VIDEO_TRANSFER_LOG100 => Self::Log100,
4975            ffi::GST_VIDEO_TRANSFER_LOG316 => Self::Log316,
4976            ffi::GST_VIDEO_TRANSFER_BT2020_12 => Self::Bt202012,
4977            ffi::GST_VIDEO_TRANSFER_ADOBERGB => Self::Adobergb,
4978            #[cfg(feature = "v1_18")]
4979            ffi::GST_VIDEO_TRANSFER_BT2020_10 => Self::Bt202010,
4980            #[cfg(feature = "v1_18")]
4981            ffi::GST_VIDEO_TRANSFER_SMPTE2084 => Self::Smpte2084,
4982            #[cfg(feature = "v1_18")]
4983            ffi::GST_VIDEO_TRANSFER_ARIB_STD_B67 => Self::AribStdB67,
4984            #[cfg(feature = "v1_18")]
4985            ffi::GST_VIDEO_TRANSFER_BT601 => Self::Bt601,
4986            value => Self::__Unknown(value),
4987        }
4988    }
4989}
4990
4991impl StaticType for VideoTransferFunction {
4992    #[inline]
4993    #[doc(alias = "gst_video_transfer_function_get_type")]
4994    fn static_type() -> glib::Type {
4995        unsafe { from_glib(ffi::gst_video_transfer_function_get_type()) }
4996    }
4997}
4998
4999impl glib::HasParamSpec for VideoTransferFunction {
5000    type ParamSpec = glib::ParamSpecEnum;
5001    type SetValue = Self;
5002    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
5003
5004    fn param_spec_builder() -> Self::BuilderFn {
5005        Self::ParamSpec::builder_with_default
5006    }
5007}
5008
5009impl glib::value::ValueType for VideoTransferFunction {
5010    type Type = Self;
5011}
5012
5013unsafe impl<'a> glib::value::FromValue<'a> for VideoTransferFunction {
5014    type Checker = glib::value::GenericValueTypeChecker<Self>;
5015
5016    #[inline]
5017    unsafe fn from_value(value: &'a glib::Value) -> Self {
5018        skip_assert_initialized!();
5019        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
5020    }
5021}
5022
5023impl ToValue for VideoTransferFunction {
5024    #[inline]
5025    fn to_value(&self) -> glib::Value {
5026        let mut value = glib::Value::for_value_type::<Self>();
5027        unsafe {
5028            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
5029        }
5030        value
5031    }
5032
5033    #[inline]
5034    fn value_type(&self) -> glib::Type {
5035        Self::static_type()
5036    }
5037}
5038
5039impl From<VideoTransferFunction> for glib::Value {
5040    #[inline]
5041    fn from(v: VideoTransferFunction) -> Self {
5042        skip_assert_initialized!();
5043        ToValue::to_value(&v)
5044    }
5045}