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::{prelude::*, translate::*, GStr};
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        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        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        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        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        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        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        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/// Enumeration of the various values for Active Format Description (AFD)
987///
988/// AFD should be included in video user data whenever the rectangular
989/// picture area containing useful information does not extend to the full height or width of the coded
990/// frame. AFD data may also be included in user data when the rectangular picture area containing
991/// useful information extends to the full height and width of the coded frame.
992///
993/// For details, see Table 6.14 Active Format in:
994///
995/// ATSC Digital Television Standard:
996/// Part 4 – MPEG-2 Video System Characteristics
997///
998/// https://www.atsc.org/wp-content/uploads/2015/03/a_53-Part-4-2009.pdf
999///
1000/// and Active Format Description in Complete list of AFD codes
1001///
1002/// https://en.wikipedia.org/wiki/Active_Format_Description`Complete_list_of_AFD_codes`
1003///
1004/// and SMPTE ST2016-1
1005///
1006/// Notes:
1007///
1008/// 1) AFD 0 is undefined for ATSC and SMPTE ST2016-1, indicating that AFD data is not available:
1009/// If Bar Data is not present, AFD '0000' indicates that exact information
1010/// is not available and the active image should be assumed to be the same as the coded frame. AFD '0000'.
1011/// AFD '0000' accompanied by Bar Data signals that the active image’s aspect ratio is narrower than 16:9,
1012/// but is not 4:3 or 14:9. As the exact aspect ratio cannot be conveyed by AFD alone, wherever possible,
1013/// AFD ‘0000’ should be accompanied by Bar Data to define the exact vertical or horizontal extent
1014/// of the active image.
1015/// 2) AFD 0 is reserved for DVB/ETSI
1016/// 3) values 1, 5, 6, 7, and 12 are reserved for both ATSC and DVB/ETSI
1017/// 4) values 2 and 3 are not recommended for ATSC, but are valid for DVB/ETSI
1018#[cfg(feature = "v1_18")]
1019#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
1020#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1021#[non_exhaustive]
1022#[doc(alias = "GstVideoAFDValue")]
1023pub enum VideoAFDValue {
1024    /// Unavailable (see note 0 below).
1025    #[doc(alias = "GST_VIDEO_AFD_UNAVAILABLE")]
1026    Unavailable,
1027    /// For 4:3 coded frame, letterbox 16:9 image,
1028    ///  at top of the coded frame. For 16:9 coded frame, full frame 16:9 image,
1029    ///  the same as the coded frame.
1030    #[doc(alias = "GST_VIDEO_AFD_16_9_TOP_ALIGNED")]
1031    _169TopAligned,
1032    /// For 4:3 coded frame, letterbox 14:9 image,
1033    ///  at top of the coded frame. For 16:9 coded frame, pillarbox 14:9 image,
1034    ///  horizontally centered in the coded frame.
1035    #[doc(alias = "GST_VIDEO_AFD_14_9_TOP_ALIGNED")]
1036    _149TopAligned,
1037    /// For 4:3 coded frame, letterbox image with an aspect ratio
1038    ///  greater than 16:9, vertically centered in the coded frame. For 16:9 coded frame,
1039    ///  letterbox image with an aspect ratio greater than 16:9.
1040    #[doc(alias = "GST_VIDEO_AFD_GREATER_THAN_16_9")]
1041    GreaterThan169,
1042    /// For 4:3 coded frame, full frame 4:3 image,
1043    ///  the same as the coded frame. For 16:9 coded frame, full frame 16:9 image, the same as
1044    ///  the coded frame.
1045    #[doc(alias = "GST_VIDEO_AFD_4_3_FULL_16_9_FULL")]
1046    _43Full169Full,
1047    /// For 4:3 coded frame, full frame 4:3 image, the same as
1048    ///  the coded frame. For 16:9 coded frame, pillarbox 4:3 image, horizontally centered in the
1049    ///  coded frame.
1050    #[doc(alias = "GST_VIDEO_AFD_4_3_FULL_4_3_PILLAR")]
1051    _43Full43Pillar,
1052    /// For 4:3 coded frame, letterbox 16:9 image, vertically centered in
1053    ///  the coded frame with all image areas protected. For 16:9 coded frame, full frame 16:9 image,
1054    ///  with all image areas protected.
1055    #[doc(alias = "GST_VIDEO_AFD_16_9_LETTER_16_9_FULL")]
1056    _169Letter169Full,
1057    /// For 4:3 coded frame, letterbox 14:9 image, vertically centered in
1058    ///  the coded frame. For 16:9 coded frame, pillarbox 14:9 image, horizontally centered in the
1059    ///  coded frame.
1060    #[doc(alias = "GST_VIDEO_AFD_14_9_LETTER_14_9_PILLAR")]
1061    _149Letter149Pillar,
1062    /// For 4:3 coded frame, full frame 4:3 image, with alternative 14:9
1063    ///  center. For 16:9 coded frame, pillarbox 4:3 image, with alternative 14:9 center.
1064    #[doc(alias = "GST_VIDEO_AFD_4_3_FULL_14_9_CENTER")]
1065    _43Full149Center,
1066    /// For 4:3 coded frame, letterbox 16:9 image, with alternative 14:9
1067    ///  center. For 16:9 coded frame, full frame 16:9 image, with alternative 14:9 center.
1068    #[doc(alias = "GST_VIDEO_AFD_16_9_LETTER_14_9_CENTER")]
1069    _169Letter149Center,
1070    /// For 4:3 coded frame, letterbox 16:9 image, with alternative 4:3
1071    ///  center. For 16:9 coded frame, full frame 16:9 image, with alternative 4:3 center.
1072    #[doc(alias = "GST_VIDEO_AFD_16_9_LETTER_4_3_CENTER")]
1073    _169Letter43Center,
1074    #[doc(hidden)]
1075    __Unknown(i32),
1076}
1077
1078#[cfg(feature = "v1_18")]
1079#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
1080#[doc(hidden)]
1081impl IntoGlib for VideoAFDValue {
1082    type GlibType = ffi::GstVideoAFDValue;
1083
1084    #[inline]
1085    fn into_glib(self) -> ffi::GstVideoAFDValue {
1086        match self {
1087            Self::Unavailable => ffi::GST_VIDEO_AFD_UNAVAILABLE,
1088            Self::_169TopAligned => ffi::GST_VIDEO_AFD_16_9_TOP_ALIGNED,
1089            Self::_149TopAligned => ffi::GST_VIDEO_AFD_14_9_TOP_ALIGNED,
1090            Self::GreaterThan169 => ffi::GST_VIDEO_AFD_GREATER_THAN_16_9,
1091            Self::_43Full169Full => ffi::GST_VIDEO_AFD_4_3_FULL_16_9_FULL,
1092            Self::_43Full43Pillar => ffi::GST_VIDEO_AFD_4_3_FULL_4_3_PILLAR,
1093            Self::_169Letter169Full => ffi::GST_VIDEO_AFD_16_9_LETTER_16_9_FULL,
1094            Self::_149Letter149Pillar => ffi::GST_VIDEO_AFD_14_9_LETTER_14_9_PILLAR,
1095            Self::_43Full149Center => ffi::GST_VIDEO_AFD_4_3_FULL_14_9_CENTER,
1096            Self::_169Letter149Center => ffi::GST_VIDEO_AFD_16_9_LETTER_14_9_CENTER,
1097            Self::_169Letter43Center => ffi::GST_VIDEO_AFD_16_9_LETTER_4_3_CENTER,
1098            Self::__Unknown(value) => value,
1099        }
1100    }
1101}
1102
1103#[cfg(feature = "v1_18")]
1104#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
1105#[doc(hidden)]
1106impl FromGlib<ffi::GstVideoAFDValue> for VideoAFDValue {
1107    #[inline]
1108    unsafe fn from_glib(value: ffi::GstVideoAFDValue) -> Self {
1109        skip_assert_initialized!();
1110
1111        match value {
1112            ffi::GST_VIDEO_AFD_UNAVAILABLE => Self::Unavailable,
1113            ffi::GST_VIDEO_AFD_16_9_TOP_ALIGNED => Self::_169TopAligned,
1114            ffi::GST_VIDEO_AFD_14_9_TOP_ALIGNED => Self::_149TopAligned,
1115            ffi::GST_VIDEO_AFD_GREATER_THAN_16_9 => Self::GreaterThan169,
1116            ffi::GST_VIDEO_AFD_4_3_FULL_16_9_FULL => Self::_43Full169Full,
1117            ffi::GST_VIDEO_AFD_4_3_FULL_4_3_PILLAR => Self::_43Full43Pillar,
1118            ffi::GST_VIDEO_AFD_16_9_LETTER_16_9_FULL => Self::_169Letter169Full,
1119            ffi::GST_VIDEO_AFD_14_9_LETTER_14_9_PILLAR => Self::_149Letter149Pillar,
1120            ffi::GST_VIDEO_AFD_4_3_FULL_14_9_CENTER => Self::_43Full149Center,
1121            ffi::GST_VIDEO_AFD_16_9_LETTER_14_9_CENTER => Self::_169Letter149Center,
1122            ffi::GST_VIDEO_AFD_16_9_LETTER_4_3_CENTER => Self::_169Letter43Center,
1123            value => Self::__Unknown(value),
1124        }
1125    }
1126}
1127
1128#[cfg(feature = "v1_18")]
1129#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
1130impl StaticType for VideoAFDValue {
1131    #[inline]
1132    #[doc(alias = "gst_video_afd_value_get_type")]
1133    fn static_type() -> glib::Type {
1134        unsafe { from_glib(ffi::gst_video_afd_value_get_type()) }
1135    }
1136}
1137
1138#[cfg(feature = "v1_18")]
1139#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
1140impl glib::HasParamSpec for VideoAFDValue {
1141    type ParamSpec = glib::ParamSpecEnum;
1142    type SetValue = Self;
1143    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1144
1145    fn param_spec_builder() -> Self::BuilderFn {
1146        Self::ParamSpec::builder_with_default
1147    }
1148}
1149
1150#[cfg(feature = "v1_18")]
1151#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
1152impl glib::value::ValueType for VideoAFDValue {
1153    type Type = Self;
1154}
1155
1156#[cfg(feature = "v1_18")]
1157#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
1158unsafe impl<'a> glib::value::FromValue<'a> for VideoAFDValue {
1159    type Checker = glib::value::GenericValueTypeChecker<Self>;
1160
1161    #[inline]
1162    unsafe fn from_value(value: &'a glib::Value) -> Self {
1163        skip_assert_initialized!();
1164        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
1165    }
1166}
1167
1168#[cfg(feature = "v1_18")]
1169#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
1170impl ToValue for VideoAFDValue {
1171    #[inline]
1172    fn to_value(&self) -> glib::Value {
1173        let mut value = glib::Value::for_value_type::<Self>();
1174        unsafe {
1175            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1176        }
1177        value
1178    }
1179
1180    #[inline]
1181    fn value_type(&self) -> glib::Type {
1182        Self::static_type()
1183    }
1184}
1185
1186#[cfg(feature = "v1_18")]
1187#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
1188impl From<VideoAFDValue> for glib::Value {
1189    #[inline]
1190    fn from(v: VideoAFDValue) -> Self {
1191        skip_assert_initialized!();
1192        ToValue::to_value(&v)
1193    }
1194}
1195
1196/// Different alpha modes.
1197#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1198#[non_exhaustive]
1199#[doc(alias = "GstVideoAlphaMode")]
1200pub enum VideoAlphaMode {
1201    /// When input and output have alpha, it will be copied.
1202    ///  When the input has no alpha, alpha will be set to
1203    ///  `GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE`
1204    #[doc(alias = "GST_VIDEO_ALPHA_MODE_COPY")]
1205    Copy,
1206    /// set all alpha to
1207    ///  `GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE`
1208    #[doc(alias = "GST_VIDEO_ALPHA_MODE_SET")]
1209    Set,
1210    /// multiply all alpha with
1211    ///  `GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE`.
1212    ///  When the input format has no alpha but the output format has, the
1213    ///  alpha value will be set to `GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE`
1214    #[doc(alias = "GST_VIDEO_ALPHA_MODE_MULT")]
1215    Mult,
1216    #[doc(hidden)]
1217    __Unknown(i32),
1218}
1219
1220#[doc(hidden)]
1221impl IntoGlib for VideoAlphaMode {
1222    type GlibType = ffi::GstVideoAlphaMode;
1223
1224    #[inline]
1225    fn into_glib(self) -> ffi::GstVideoAlphaMode {
1226        match self {
1227            Self::Copy => ffi::GST_VIDEO_ALPHA_MODE_COPY,
1228            Self::Set => ffi::GST_VIDEO_ALPHA_MODE_SET,
1229            Self::Mult => ffi::GST_VIDEO_ALPHA_MODE_MULT,
1230            Self::__Unknown(value) => value,
1231        }
1232    }
1233}
1234
1235#[doc(hidden)]
1236impl FromGlib<ffi::GstVideoAlphaMode> for VideoAlphaMode {
1237    #[inline]
1238    unsafe fn from_glib(value: ffi::GstVideoAlphaMode) -> Self {
1239        skip_assert_initialized!();
1240
1241        match value {
1242            ffi::GST_VIDEO_ALPHA_MODE_COPY => Self::Copy,
1243            ffi::GST_VIDEO_ALPHA_MODE_SET => Self::Set,
1244            ffi::GST_VIDEO_ALPHA_MODE_MULT => Self::Mult,
1245            value => Self::__Unknown(value),
1246        }
1247    }
1248}
1249
1250impl StaticType for VideoAlphaMode {
1251    #[inline]
1252    #[doc(alias = "gst_video_alpha_mode_get_type")]
1253    fn static_type() -> glib::Type {
1254        unsafe { from_glib(ffi::gst_video_alpha_mode_get_type()) }
1255    }
1256}
1257
1258impl glib::HasParamSpec for VideoAlphaMode {
1259    type ParamSpec = glib::ParamSpecEnum;
1260    type SetValue = Self;
1261    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1262
1263    fn param_spec_builder() -> Self::BuilderFn {
1264        Self::ParamSpec::builder_with_default
1265    }
1266}
1267
1268impl glib::value::ValueType for VideoAlphaMode {
1269    type Type = Self;
1270}
1271
1272unsafe impl<'a> glib::value::FromValue<'a> for VideoAlphaMode {
1273    type Checker = glib::value::GenericValueTypeChecker<Self>;
1274
1275    #[inline]
1276    unsafe fn from_value(value: &'a glib::Value) -> Self {
1277        skip_assert_initialized!();
1278        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
1279    }
1280}
1281
1282impl ToValue for VideoAlphaMode {
1283    #[inline]
1284    fn to_value(&self) -> glib::Value {
1285        let mut value = glib::Value::for_value_type::<Self>();
1286        unsafe {
1287            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1288        }
1289        value
1290    }
1291
1292    #[inline]
1293    fn value_type(&self) -> glib::Type {
1294        Self::static_type()
1295    }
1296}
1297
1298impl From<VideoAlphaMode> for glib::Value {
1299    #[inline]
1300    fn from(v: VideoAlphaMode) -> Self {
1301        skip_assert_initialized!();
1302        ToValue::to_value(&v)
1303    }
1304}
1305
1306#[cfg(feature = "v1_16")]
1307#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1308#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1309#[non_exhaustive]
1310#[doc(alias = "GstVideoAncillaryDID")]
1311pub enum VideoAncillaryDID {
1312    #[doc(alias = "GST_VIDEO_ANCILLARY_DID_UNDEFINED")]
1313    Undefined,
1314    #[doc(alias = "GST_VIDEO_ANCILLARY_DID_DELETION")]
1315    Deletion,
1316    #[doc(alias = "GST_VIDEO_ANCILLARY_DID_HANC_3G_AUDIO_DATA_FIRST")]
1317    Hanc3gAudioDataFirst,
1318    #[doc(alias = "GST_VIDEO_ANCILLARY_DID_HANC_3G_AUDIO_DATA_LAST")]
1319    Hanc3gAudioDataLast,
1320    #[doc(alias = "GST_VIDEO_ANCILLARY_DID_HANC_HDTV_AUDIO_DATA_FIRST")]
1321    HancHdtvAudioDataFirst,
1322    #[doc(alias = "GST_VIDEO_ANCILLARY_DID_HANC_HDTV_AUDIO_DATA_LAST")]
1323    HancHdtvAudioDataLast,
1324    #[doc(alias = "GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_1_FIRST")]
1325    HancSdtvAudioData1First,
1326    #[doc(alias = "GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_1_LAST")]
1327    HancSdtvAudioData1Last,
1328    #[doc(alias = "GST_VIDEO_ANCILLARY_DID_CAMERA_POSITION")]
1329    CameraPosition,
1330    #[doc(alias = "GST_VIDEO_ANCILLARY_DID_HANC_ERROR_DETECTION")]
1331    HancErrorDetection,
1332    #[doc(alias = "GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_2_FIRST")]
1333    HancSdtvAudioData2First,
1334    #[doc(alias = "GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_2_LAST")]
1335    HancSdtvAudioData2Last,
1336    #[doc(hidden)]
1337    __Unknown(i32),
1338}
1339
1340#[cfg(feature = "v1_16")]
1341#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1342#[doc(hidden)]
1343impl IntoGlib for VideoAncillaryDID {
1344    type GlibType = ffi::GstVideoAncillaryDID;
1345
1346    #[inline]
1347    fn into_glib(self) -> ffi::GstVideoAncillaryDID {
1348        match self {
1349            Self::Undefined => ffi::GST_VIDEO_ANCILLARY_DID_UNDEFINED,
1350            Self::Deletion => ffi::GST_VIDEO_ANCILLARY_DID_DELETION,
1351            Self::Hanc3gAudioDataFirst => ffi::GST_VIDEO_ANCILLARY_DID_HANC_3G_AUDIO_DATA_FIRST,
1352            Self::Hanc3gAudioDataLast => ffi::GST_VIDEO_ANCILLARY_DID_HANC_3G_AUDIO_DATA_LAST,
1353            Self::HancHdtvAudioDataFirst => ffi::GST_VIDEO_ANCILLARY_DID_HANC_HDTV_AUDIO_DATA_FIRST,
1354            Self::HancHdtvAudioDataLast => ffi::GST_VIDEO_ANCILLARY_DID_HANC_HDTV_AUDIO_DATA_LAST,
1355            Self::HancSdtvAudioData1First => {
1356                ffi::GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_1_FIRST
1357            }
1358            Self::HancSdtvAudioData1Last => {
1359                ffi::GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_1_LAST
1360            }
1361            Self::CameraPosition => ffi::GST_VIDEO_ANCILLARY_DID_CAMERA_POSITION,
1362            Self::HancErrorDetection => ffi::GST_VIDEO_ANCILLARY_DID_HANC_ERROR_DETECTION,
1363            Self::HancSdtvAudioData2First => {
1364                ffi::GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_2_FIRST
1365            }
1366            Self::HancSdtvAudioData2Last => {
1367                ffi::GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_2_LAST
1368            }
1369            Self::__Unknown(value) => value,
1370        }
1371    }
1372}
1373
1374#[cfg(feature = "v1_16")]
1375#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1376#[doc(hidden)]
1377impl FromGlib<ffi::GstVideoAncillaryDID> for VideoAncillaryDID {
1378    #[inline]
1379    unsafe fn from_glib(value: ffi::GstVideoAncillaryDID) -> Self {
1380        skip_assert_initialized!();
1381
1382        match value {
1383            ffi::GST_VIDEO_ANCILLARY_DID_UNDEFINED => Self::Undefined,
1384            ffi::GST_VIDEO_ANCILLARY_DID_DELETION => Self::Deletion,
1385            ffi::GST_VIDEO_ANCILLARY_DID_HANC_3G_AUDIO_DATA_FIRST => Self::Hanc3gAudioDataFirst,
1386            ffi::GST_VIDEO_ANCILLARY_DID_HANC_3G_AUDIO_DATA_LAST => Self::Hanc3gAudioDataLast,
1387            ffi::GST_VIDEO_ANCILLARY_DID_HANC_HDTV_AUDIO_DATA_FIRST => Self::HancHdtvAudioDataFirst,
1388            ffi::GST_VIDEO_ANCILLARY_DID_HANC_HDTV_AUDIO_DATA_LAST => Self::HancHdtvAudioDataLast,
1389            ffi::GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_1_FIRST => {
1390                Self::HancSdtvAudioData1First
1391            }
1392            ffi::GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_1_LAST => {
1393                Self::HancSdtvAudioData1Last
1394            }
1395            ffi::GST_VIDEO_ANCILLARY_DID_CAMERA_POSITION => Self::CameraPosition,
1396            ffi::GST_VIDEO_ANCILLARY_DID_HANC_ERROR_DETECTION => Self::HancErrorDetection,
1397            ffi::GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_2_FIRST => {
1398                Self::HancSdtvAudioData2First
1399            }
1400            ffi::GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_2_LAST => {
1401                Self::HancSdtvAudioData2Last
1402            }
1403            value => Self::__Unknown(value),
1404        }
1405    }
1406}
1407
1408#[cfg(feature = "v1_16")]
1409#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1410impl StaticType for VideoAncillaryDID {
1411    #[inline]
1412    #[doc(alias = "gst_video_ancillary_did_get_type")]
1413    fn static_type() -> glib::Type {
1414        unsafe { from_glib(ffi::gst_video_ancillary_did_get_type()) }
1415    }
1416}
1417
1418#[cfg(feature = "v1_16")]
1419#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1420impl glib::HasParamSpec for VideoAncillaryDID {
1421    type ParamSpec = glib::ParamSpecEnum;
1422    type SetValue = Self;
1423    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1424
1425    fn param_spec_builder() -> Self::BuilderFn {
1426        Self::ParamSpec::builder_with_default
1427    }
1428}
1429
1430#[cfg(feature = "v1_16")]
1431#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1432impl glib::value::ValueType for VideoAncillaryDID {
1433    type Type = Self;
1434}
1435
1436#[cfg(feature = "v1_16")]
1437#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1438unsafe impl<'a> glib::value::FromValue<'a> for VideoAncillaryDID {
1439    type Checker = glib::value::GenericValueTypeChecker<Self>;
1440
1441    #[inline]
1442    unsafe fn from_value(value: &'a glib::Value) -> Self {
1443        skip_assert_initialized!();
1444        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
1445    }
1446}
1447
1448#[cfg(feature = "v1_16")]
1449#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1450impl ToValue for VideoAncillaryDID {
1451    #[inline]
1452    fn to_value(&self) -> glib::Value {
1453        let mut value = glib::Value::for_value_type::<Self>();
1454        unsafe {
1455            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1456        }
1457        value
1458    }
1459
1460    #[inline]
1461    fn value_type(&self) -> glib::Type {
1462        Self::static_type()
1463    }
1464}
1465
1466#[cfg(feature = "v1_16")]
1467#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1468impl From<VideoAncillaryDID> for glib::Value {
1469    #[inline]
1470    fn from(v: VideoAncillaryDID) -> Self {
1471        skip_assert_initialized!();
1472        ToValue::to_value(&v)
1473    }
1474}
1475
1476/// Some know types of Ancillary Data identifiers.
1477#[cfg(feature = "v1_16")]
1478#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1479#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1480#[non_exhaustive]
1481#[doc(alias = "GstVideoAncillaryDID16")]
1482pub enum VideoAncillaryDID16 {
1483    /// CEA 708 Ancillary data according to SMPTE 334
1484    #[doc(alias = "GST_VIDEO_ANCILLARY_DID16_S334_EIA_708")]
1485    S334Eia708,
1486    /// CEA 608 Ancillary data according to SMPTE 334
1487    #[doc(alias = "GST_VIDEO_ANCILLARY_DID16_S334_EIA_608")]
1488    S334Eia608,
1489    /// AFD/Bar Ancillary data according to SMPTE 2016-3 (Since: 1.18)
1490    #[doc(alias = "GST_VIDEO_ANCILLARY_DID16_S2016_3_AFD_BAR")]
1491    S20163AfdBar,
1492    #[doc(hidden)]
1493    __Unknown(i32),
1494}
1495
1496#[cfg(feature = "v1_16")]
1497#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1498#[doc(hidden)]
1499impl IntoGlib for VideoAncillaryDID16 {
1500    type GlibType = ffi::GstVideoAncillaryDID16;
1501
1502    #[inline]
1503    fn into_glib(self) -> ffi::GstVideoAncillaryDID16 {
1504        match self {
1505            Self::S334Eia708 => ffi::GST_VIDEO_ANCILLARY_DID16_S334_EIA_708,
1506            Self::S334Eia608 => ffi::GST_VIDEO_ANCILLARY_DID16_S334_EIA_608,
1507            Self::S20163AfdBar => ffi::GST_VIDEO_ANCILLARY_DID16_S2016_3_AFD_BAR,
1508            Self::__Unknown(value) => value,
1509        }
1510    }
1511}
1512
1513#[cfg(feature = "v1_16")]
1514#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1515#[doc(hidden)]
1516impl FromGlib<ffi::GstVideoAncillaryDID16> for VideoAncillaryDID16 {
1517    #[inline]
1518    unsafe fn from_glib(value: ffi::GstVideoAncillaryDID16) -> Self {
1519        skip_assert_initialized!();
1520
1521        match value {
1522            ffi::GST_VIDEO_ANCILLARY_DID16_S334_EIA_708 => Self::S334Eia708,
1523            ffi::GST_VIDEO_ANCILLARY_DID16_S334_EIA_608 => Self::S334Eia608,
1524            ffi::GST_VIDEO_ANCILLARY_DID16_S2016_3_AFD_BAR => Self::S20163AfdBar,
1525            value => Self::__Unknown(value),
1526        }
1527    }
1528}
1529
1530#[cfg(feature = "v1_16")]
1531#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1532impl StaticType for VideoAncillaryDID16 {
1533    #[inline]
1534    #[doc(alias = "gst_video_ancillary_di_d16_get_type")]
1535    fn static_type() -> glib::Type {
1536        unsafe { from_glib(ffi::gst_video_ancillary_di_d16_get_type()) }
1537    }
1538}
1539
1540#[cfg(feature = "v1_16")]
1541#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1542impl glib::HasParamSpec for VideoAncillaryDID16 {
1543    type ParamSpec = glib::ParamSpecEnum;
1544    type SetValue = Self;
1545    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1546
1547    fn param_spec_builder() -> Self::BuilderFn {
1548        Self::ParamSpec::builder_with_default
1549    }
1550}
1551
1552#[cfg(feature = "v1_16")]
1553#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1554impl glib::value::ValueType for VideoAncillaryDID16 {
1555    type Type = Self;
1556}
1557
1558#[cfg(feature = "v1_16")]
1559#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1560unsafe impl<'a> glib::value::FromValue<'a> for VideoAncillaryDID16 {
1561    type Checker = glib::value::GenericValueTypeChecker<Self>;
1562
1563    #[inline]
1564    unsafe fn from_value(value: &'a glib::Value) -> Self {
1565        skip_assert_initialized!();
1566        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
1567    }
1568}
1569
1570#[cfg(feature = "v1_16")]
1571#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1572impl ToValue for VideoAncillaryDID16 {
1573    #[inline]
1574    fn to_value(&self) -> glib::Value {
1575        let mut value = glib::Value::for_value_type::<Self>();
1576        unsafe {
1577            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1578        }
1579        value
1580    }
1581
1582    #[inline]
1583    fn value_type(&self) -> glib::Type {
1584        Self::static_type()
1585    }
1586}
1587
1588#[cfg(feature = "v1_16")]
1589#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1590impl From<VideoAncillaryDID16> for glib::Value {
1591    #[inline]
1592    fn from(v: VideoAncillaryDID16) -> Self {
1593        skip_assert_initialized!();
1594        ToValue::to_value(&v)
1595    }
1596}
1597
1598/// The various known types of Closed Caption (CC).
1599#[cfg(feature = "v1_16")]
1600#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1601#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1602#[non_exhaustive]
1603#[doc(alias = "GstVideoCaptionType")]
1604pub enum VideoCaptionType {
1605    /// Unknown type of CC
1606    #[doc(alias = "GST_VIDEO_CAPTION_TYPE_UNKNOWN")]
1607    Unknown,
1608    /// CEA-608 as byte pairs. Note that
1609    ///  this format is not recommended since is does not specify to
1610    ///  which field the caption comes from and therefore assumes
1611    ///  it comes from the first field (and that there is no information
1612    ///  on the second field). Use [`Cea708Raw`][Self::Cea708Raw]
1613    ///  if you wish to store CEA-608 from two fields and prefix each byte pair
1614    ///  with 0xFC for the first field and 0xFD for the second field.
1615    #[doc(alias = "GST_VIDEO_CAPTION_TYPE_CEA608_RAW")]
1616    Cea608Raw,
1617    /// CEA-608 as byte triplets as defined
1618    ///  in SMPTE S334-1 Annex A. The second and third byte of the byte triplet
1619    ///  is the raw CEA608 data, the first byte is a bitfield: The top/7th bit is
1620    ///  0 for the second field, 1 for the first field, bit 6 and 5 are 0 and
1621    ///  bits 4 to 0 are a 5 bit unsigned integer that represents the line
1622    ///  offset relative to the base-line of the original image format (line 9
1623    ///  for 525-line field 1, line 272 for 525-line field 2, line 5 for
1624    ///  625-line field 1 and line 318 for 625-line field 2).
1625    #[doc(alias = "GST_VIDEO_CAPTION_TYPE_CEA608_S334_1A")]
1626    Cea608S3341a,
1627    /// CEA-708 as cc_data byte triplets. They
1628    ///  can also contain 608-in-708 and the first byte of each triplet has to
1629    ///  be inspected for detecting the type.
1630    #[doc(alias = "GST_VIDEO_CAPTION_TYPE_CEA708_RAW")]
1631    Cea708Raw,
1632    /// CEA-708 (and optionally CEA-608) in
1633    ///  a CDP (Caption Distribution Packet) defined by SMPTE S-334-2.
1634    ///  Contains the whole CDP (starting with 0x9669).
1635    #[doc(alias = "GST_VIDEO_CAPTION_TYPE_CEA708_CDP")]
1636    Cea708Cdp,
1637    #[doc(hidden)]
1638    __Unknown(i32),
1639}
1640
1641#[cfg(feature = "v1_16")]
1642#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1643impl VideoCaptionType {
1644    #[doc(alias = "gst_video_caption_type_to_caps")]
1645    pub fn to_caps(self) -> gst::Caps {
1646        assert_initialized_main_thread!();
1647        unsafe { from_glib_full(ffi::gst_video_caption_type_to_caps(self.into_glib())) }
1648    }
1649}
1650
1651#[cfg(feature = "v1_16")]
1652#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1653#[doc(hidden)]
1654impl IntoGlib for VideoCaptionType {
1655    type GlibType = ffi::GstVideoCaptionType;
1656
1657    #[inline]
1658    fn into_glib(self) -> ffi::GstVideoCaptionType {
1659        match self {
1660            Self::Unknown => ffi::GST_VIDEO_CAPTION_TYPE_UNKNOWN,
1661            Self::Cea608Raw => ffi::GST_VIDEO_CAPTION_TYPE_CEA608_RAW,
1662            Self::Cea608S3341a => ffi::GST_VIDEO_CAPTION_TYPE_CEA608_S334_1A,
1663            Self::Cea708Raw => ffi::GST_VIDEO_CAPTION_TYPE_CEA708_RAW,
1664            Self::Cea708Cdp => ffi::GST_VIDEO_CAPTION_TYPE_CEA708_CDP,
1665            Self::__Unknown(value) => value,
1666        }
1667    }
1668}
1669
1670#[cfg(feature = "v1_16")]
1671#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1672#[doc(hidden)]
1673impl FromGlib<ffi::GstVideoCaptionType> for VideoCaptionType {
1674    #[inline]
1675    unsafe fn from_glib(value: ffi::GstVideoCaptionType) -> Self {
1676        skip_assert_initialized!();
1677
1678        match value {
1679            ffi::GST_VIDEO_CAPTION_TYPE_UNKNOWN => Self::Unknown,
1680            ffi::GST_VIDEO_CAPTION_TYPE_CEA608_RAW => Self::Cea608Raw,
1681            ffi::GST_VIDEO_CAPTION_TYPE_CEA608_S334_1A => Self::Cea608S3341a,
1682            ffi::GST_VIDEO_CAPTION_TYPE_CEA708_RAW => Self::Cea708Raw,
1683            ffi::GST_VIDEO_CAPTION_TYPE_CEA708_CDP => Self::Cea708Cdp,
1684            value => Self::__Unknown(value),
1685        }
1686    }
1687}
1688
1689#[cfg(feature = "v1_16")]
1690#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1691impl StaticType for VideoCaptionType {
1692    #[inline]
1693    #[doc(alias = "gst_video_caption_type_get_type")]
1694    fn static_type() -> glib::Type {
1695        unsafe { from_glib(ffi::gst_video_caption_type_get_type()) }
1696    }
1697}
1698
1699#[cfg(feature = "v1_16")]
1700#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1701impl glib::HasParamSpec for VideoCaptionType {
1702    type ParamSpec = glib::ParamSpecEnum;
1703    type SetValue = Self;
1704    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1705
1706    fn param_spec_builder() -> Self::BuilderFn {
1707        Self::ParamSpec::builder_with_default
1708    }
1709}
1710
1711#[cfg(feature = "v1_16")]
1712#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1713impl glib::value::ValueType for VideoCaptionType {
1714    type Type = Self;
1715}
1716
1717#[cfg(feature = "v1_16")]
1718#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1719unsafe impl<'a> glib::value::FromValue<'a> for VideoCaptionType {
1720    type Checker = glib::value::GenericValueTypeChecker<Self>;
1721
1722    #[inline]
1723    unsafe fn from_value(value: &'a glib::Value) -> Self {
1724        skip_assert_initialized!();
1725        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
1726    }
1727}
1728
1729#[cfg(feature = "v1_16")]
1730#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1731impl ToValue for VideoCaptionType {
1732    #[inline]
1733    fn to_value(&self) -> glib::Value {
1734        let mut value = glib::Value::for_value_type::<Self>();
1735        unsafe {
1736            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1737        }
1738        value
1739    }
1740
1741    #[inline]
1742    fn value_type(&self) -> glib::Type {
1743        Self::static_type()
1744    }
1745}
1746
1747#[cfg(feature = "v1_16")]
1748#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
1749impl From<VideoCaptionType> for glib::Value {
1750    #[inline]
1751    fn from(v: VideoCaptionType) -> Self {
1752        skip_assert_initialized!();
1753        ToValue::to_value(&v)
1754    }
1755}
1756
1757/// Different chroma downsampling and upsampling modes
1758#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1759#[non_exhaustive]
1760#[doc(alias = "GstVideoChromaMode")]
1761pub enum VideoChromaMode {
1762    /// do full chroma up and down sampling
1763    #[doc(alias = "GST_VIDEO_CHROMA_MODE_FULL")]
1764    Full,
1765    /// only perform chroma upsampling
1766    #[doc(alias = "GST_VIDEO_CHROMA_MODE_UPSAMPLE_ONLY")]
1767    UpsampleOnly,
1768    /// only perform chroma downsampling
1769    #[doc(alias = "GST_VIDEO_CHROMA_MODE_DOWNSAMPLE_ONLY")]
1770    DownsampleOnly,
1771    /// disable chroma resampling
1772    #[doc(alias = "GST_VIDEO_CHROMA_MODE_NONE")]
1773    None,
1774    #[doc(hidden)]
1775    __Unknown(i32),
1776}
1777
1778#[doc(hidden)]
1779impl IntoGlib for VideoChromaMode {
1780    type GlibType = ffi::GstVideoChromaMode;
1781
1782    #[inline]
1783    fn into_glib(self) -> ffi::GstVideoChromaMode {
1784        match self {
1785            Self::Full => ffi::GST_VIDEO_CHROMA_MODE_FULL,
1786            Self::UpsampleOnly => ffi::GST_VIDEO_CHROMA_MODE_UPSAMPLE_ONLY,
1787            Self::DownsampleOnly => ffi::GST_VIDEO_CHROMA_MODE_DOWNSAMPLE_ONLY,
1788            Self::None => ffi::GST_VIDEO_CHROMA_MODE_NONE,
1789            Self::__Unknown(value) => value,
1790        }
1791    }
1792}
1793
1794#[doc(hidden)]
1795impl FromGlib<ffi::GstVideoChromaMode> for VideoChromaMode {
1796    #[inline]
1797    unsafe fn from_glib(value: ffi::GstVideoChromaMode) -> Self {
1798        skip_assert_initialized!();
1799
1800        match value {
1801            ffi::GST_VIDEO_CHROMA_MODE_FULL => Self::Full,
1802            ffi::GST_VIDEO_CHROMA_MODE_UPSAMPLE_ONLY => Self::UpsampleOnly,
1803            ffi::GST_VIDEO_CHROMA_MODE_DOWNSAMPLE_ONLY => Self::DownsampleOnly,
1804            ffi::GST_VIDEO_CHROMA_MODE_NONE => Self::None,
1805            value => Self::__Unknown(value),
1806        }
1807    }
1808}
1809
1810impl StaticType for VideoChromaMode {
1811    #[inline]
1812    #[doc(alias = "gst_video_chroma_mode_get_type")]
1813    fn static_type() -> glib::Type {
1814        unsafe { from_glib(ffi::gst_video_chroma_mode_get_type()) }
1815    }
1816}
1817
1818impl glib::HasParamSpec for VideoChromaMode {
1819    type ParamSpec = glib::ParamSpecEnum;
1820    type SetValue = Self;
1821    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1822
1823    fn param_spec_builder() -> Self::BuilderFn {
1824        Self::ParamSpec::builder_with_default
1825    }
1826}
1827
1828impl glib::value::ValueType for VideoChromaMode {
1829    type Type = Self;
1830}
1831
1832unsafe impl<'a> glib::value::FromValue<'a> for VideoChromaMode {
1833    type Checker = glib::value::GenericValueTypeChecker<Self>;
1834
1835    #[inline]
1836    unsafe fn from_value(value: &'a glib::Value) -> Self {
1837        skip_assert_initialized!();
1838        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
1839    }
1840}
1841
1842impl ToValue for VideoChromaMode {
1843    #[inline]
1844    fn to_value(&self) -> glib::Value {
1845        let mut value = glib::Value::for_value_type::<Self>();
1846        unsafe {
1847            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1848        }
1849        value
1850    }
1851
1852    #[inline]
1853    fn value_type(&self) -> glib::Type {
1854        Self::static_type()
1855    }
1856}
1857
1858impl From<VideoChromaMode> for glib::Value {
1859    #[inline]
1860    fn from(v: VideoChromaMode) -> Self {
1861        skip_assert_initialized!();
1862        ToValue::to_value(&v)
1863    }
1864}
1865
1866/// The color matrix is used to convert between Y'PbPr and
1867/// non-linear RGB (R'G'B')
1868#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1869#[non_exhaustive]
1870#[doc(alias = "GstVideoColorMatrix")]
1871pub enum VideoColorMatrix {
1872    /// unknown matrix
1873    #[doc(alias = "GST_VIDEO_COLOR_MATRIX_UNKNOWN")]
1874    Unknown,
1875    /// identity matrix. Order of coefficients is
1876    /// actually GBR, also IEC 61966-2-1 (sRGB)
1877    #[doc(alias = "GST_VIDEO_COLOR_MATRIX_RGB")]
1878    Rgb,
1879    /// FCC Title 47 Code of Federal Regulations 73.682 (a)(20)
1880    #[doc(alias = "GST_VIDEO_COLOR_MATRIX_FCC")]
1881    Fcc,
1882    /// ITU-R BT.709 color matrix, also ITU-R BT1361
1883    /// / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B
1884    #[doc(alias = "GST_VIDEO_COLOR_MATRIX_BT709")]
1885    Bt709,
1886    /// ITU-R BT.601 color matrix, also SMPTE170M / ITU-R BT1358 525 / ITU-R BT1700 NTSC
1887    #[doc(alias = "GST_VIDEO_COLOR_MATRIX_BT601")]
1888    Bt601,
1889    /// SMPTE 240M color matrix
1890    #[doc(alias = "GST_VIDEO_COLOR_MATRIX_SMPTE240M")]
1891    Smpte240m,
1892    /// ITU-R BT.2020 color matrix. Since: 1.6
1893    #[doc(alias = "GST_VIDEO_COLOR_MATRIX_BT2020")]
1894    Bt2020,
1895    #[doc(hidden)]
1896    __Unknown(i32),
1897}
1898
1899impl VideoColorMatrix {
1900    #[cfg(feature = "v1_18")]
1901    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
1902    #[doc(alias = "gst_video_color_matrix_from_iso")]
1903    pub fn from_iso(value: u32) -> VideoColorMatrix {
1904        assert_initialized_main_thread!();
1905        unsafe { from_glib(ffi::gst_video_color_matrix_from_iso(value)) }
1906    }
1907
1908    #[cfg(feature = "v1_18")]
1909    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
1910    #[doc(alias = "gst_video_color_matrix_to_iso")]
1911    pub fn to_iso(self) -> u32 {
1912        assert_initialized_main_thread!();
1913        unsafe { ffi::gst_video_color_matrix_to_iso(self.into_glib()) }
1914    }
1915}
1916
1917#[doc(hidden)]
1918impl IntoGlib for VideoColorMatrix {
1919    type GlibType = ffi::GstVideoColorMatrix;
1920
1921    #[inline]
1922    fn into_glib(self) -> ffi::GstVideoColorMatrix {
1923        match self {
1924            Self::Unknown => ffi::GST_VIDEO_COLOR_MATRIX_UNKNOWN,
1925            Self::Rgb => ffi::GST_VIDEO_COLOR_MATRIX_RGB,
1926            Self::Fcc => ffi::GST_VIDEO_COLOR_MATRIX_FCC,
1927            Self::Bt709 => ffi::GST_VIDEO_COLOR_MATRIX_BT709,
1928            Self::Bt601 => ffi::GST_VIDEO_COLOR_MATRIX_BT601,
1929            Self::Smpte240m => ffi::GST_VIDEO_COLOR_MATRIX_SMPTE240M,
1930            Self::Bt2020 => ffi::GST_VIDEO_COLOR_MATRIX_BT2020,
1931            Self::__Unknown(value) => value,
1932        }
1933    }
1934}
1935
1936#[doc(hidden)]
1937impl FromGlib<ffi::GstVideoColorMatrix> for VideoColorMatrix {
1938    #[inline]
1939    unsafe fn from_glib(value: ffi::GstVideoColorMatrix) -> Self {
1940        skip_assert_initialized!();
1941
1942        match value {
1943            ffi::GST_VIDEO_COLOR_MATRIX_UNKNOWN => Self::Unknown,
1944            ffi::GST_VIDEO_COLOR_MATRIX_RGB => Self::Rgb,
1945            ffi::GST_VIDEO_COLOR_MATRIX_FCC => Self::Fcc,
1946            ffi::GST_VIDEO_COLOR_MATRIX_BT709 => Self::Bt709,
1947            ffi::GST_VIDEO_COLOR_MATRIX_BT601 => Self::Bt601,
1948            ffi::GST_VIDEO_COLOR_MATRIX_SMPTE240M => Self::Smpte240m,
1949            ffi::GST_VIDEO_COLOR_MATRIX_BT2020 => Self::Bt2020,
1950            value => Self::__Unknown(value),
1951        }
1952    }
1953}
1954
1955impl StaticType for VideoColorMatrix {
1956    #[inline]
1957    #[doc(alias = "gst_video_color_matrix_get_type")]
1958    fn static_type() -> glib::Type {
1959        unsafe { from_glib(ffi::gst_video_color_matrix_get_type()) }
1960    }
1961}
1962
1963impl glib::HasParamSpec for VideoColorMatrix {
1964    type ParamSpec = glib::ParamSpecEnum;
1965    type SetValue = Self;
1966    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1967
1968    fn param_spec_builder() -> Self::BuilderFn {
1969        Self::ParamSpec::builder_with_default
1970    }
1971}
1972
1973impl glib::value::ValueType for VideoColorMatrix {
1974    type Type = Self;
1975}
1976
1977unsafe impl<'a> glib::value::FromValue<'a> for VideoColorMatrix {
1978    type Checker = glib::value::GenericValueTypeChecker<Self>;
1979
1980    #[inline]
1981    unsafe fn from_value(value: &'a glib::Value) -> Self {
1982        skip_assert_initialized!();
1983        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
1984    }
1985}
1986
1987impl ToValue for VideoColorMatrix {
1988    #[inline]
1989    fn to_value(&self) -> glib::Value {
1990        let mut value = glib::Value::for_value_type::<Self>();
1991        unsafe {
1992            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1993        }
1994        value
1995    }
1996
1997    #[inline]
1998    fn value_type(&self) -> glib::Type {
1999        Self::static_type()
2000    }
2001}
2002
2003impl From<VideoColorMatrix> for glib::Value {
2004    #[inline]
2005    fn from(v: VideoColorMatrix) -> Self {
2006        skip_assert_initialized!();
2007        ToValue::to_value(&v)
2008    }
2009}
2010
2011/// The color primaries define the how to transform linear RGB values to and from
2012/// the CIE XYZ colorspace.
2013#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
2014#[non_exhaustive]
2015#[doc(alias = "GstVideoColorPrimaries")]
2016pub enum VideoColorPrimaries {
2017    /// unknown color primaries
2018    #[doc(alias = "GST_VIDEO_COLOR_PRIMARIES_UNKNOWN")]
2019    Unknown,
2020    /// BT709 primaries, also ITU-R BT1361 / IEC
2021    /// 61966-2-4 / SMPTE RP177 Annex B
2022    #[doc(alias = "GST_VIDEO_COLOR_PRIMARIES_BT709")]
2023    Bt709,
2024    /// BT470M primaries, also FCC Title 47 Code
2025    /// of Federal Regulations 73.682 (a)(20)
2026    #[doc(alias = "GST_VIDEO_COLOR_PRIMARIES_BT470M")]
2027    Bt470m,
2028    /// BT470BG primaries, also ITU-R BT601-6
2029    /// 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM
2030    #[doc(alias = "GST_VIDEO_COLOR_PRIMARIES_BT470BG")]
2031    Bt470bg,
2032    /// SMPTE170M primaries, also ITU-R
2033    /// BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC
2034    #[doc(alias = "GST_VIDEO_COLOR_PRIMARIES_SMPTE170M")]
2035    Smpte170m,
2036    /// SMPTE240M primaries
2037    #[doc(alias = "GST_VIDEO_COLOR_PRIMARIES_SMPTE240M")]
2038    Smpte240m,
2039    /// Generic film (colour filters using
2040    /// Illuminant C)
2041    #[doc(alias = "GST_VIDEO_COLOR_PRIMARIES_FILM")]
2042    Film,
2043    /// ITU-R BT2020 primaries. Since: 1.6
2044    #[doc(alias = "GST_VIDEO_COLOR_PRIMARIES_BT2020")]
2045    Bt2020,
2046    /// Adobe RGB primaries. Since: 1.8
2047    #[doc(alias = "GST_VIDEO_COLOR_PRIMARIES_ADOBERGB")]
2048    Adobergb,
2049    /// SMPTE ST 428 primaries (CIE 1931
2050    /// XYZ). Since: 1.16
2051    #[cfg(feature = "v1_16")]
2052    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
2053    #[doc(alias = "GST_VIDEO_COLOR_PRIMARIES_SMPTEST428")]
2054    Smptest428,
2055    /// SMPTE RP 431 primaries (ST 431-2
2056    /// (2011) / DCI P3). Since: 1.16
2057    #[cfg(feature = "v1_16")]
2058    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
2059    #[doc(alias = "GST_VIDEO_COLOR_PRIMARIES_SMPTERP431")]
2060    Smpterp431,
2061    /// SMPTE EG 432 primaries (ST 432-1
2062    /// (2010) / P3 D65). Since: 1.16
2063    #[cfg(feature = "v1_16")]
2064    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
2065    #[doc(alias = "GST_VIDEO_COLOR_PRIMARIES_SMPTEEG432")]
2066    Smpteeg432,
2067    /// EBU 3213 primaries (JEDEC P22
2068    /// phosphors). Since: 1.16
2069    #[cfg(feature = "v1_16")]
2070    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
2071    #[doc(alias = "GST_VIDEO_COLOR_PRIMARIES_EBU3213")]
2072    Ebu3213,
2073    #[doc(hidden)]
2074    __Unknown(i32),
2075}
2076
2077impl VideoColorPrimaries {
2078    #[cfg(feature = "v1_18")]
2079    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
2080    #[doc(alias = "gst_video_color_primaries_from_iso")]
2081    pub fn from_iso(value: u32) -> VideoColorPrimaries {
2082        assert_initialized_main_thread!();
2083        unsafe { from_glib(ffi::gst_video_color_primaries_from_iso(value)) }
2084    }
2085
2086    //#[doc(alias = "gst_video_color_primaries_get_info")]
2087    //#[doc(alias = "get_info")]
2088    //pub fn info(self) -> /*Ignored*/VideoColorPrimariesInfo {
2089    //    unsafe { TODO: call ffi:gst_video_color_primaries_get_info() }
2090    //}
2091
2092    #[cfg(feature = "v1_22")]
2093    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
2094    #[doc(alias = "gst_video_color_primaries_is_equivalent")]
2095    pub fn is_equivalent(self, other: VideoColorPrimaries) -> bool {
2096        assert_initialized_main_thread!();
2097        unsafe {
2098            from_glib(ffi::gst_video_color_primaries_is_equivalent(
2099                self.into_glib(),
2100                other.into_glib(),
2101            ))
2102        }
2103    }
2104
2105    #[cfg(feature = "v1_18")]
2106    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
2107    #[doc(alias = "gst_video_color_primaries_to_iso")]
2108    pub fn to_iso(self) -> u32 {
2109        assert_initialized_main_thread!();
2110        unsafe { ffi::gst_video_color_primaries_to_iso(self.into_glib()) }
2111    }
2112}
2113
2114#[doc(hidden)]
2115impl IntoGlib for VideoColorPrimaries {
2116    type GlibType = ffi::GstVideoColorPrimaries;
2117
2118    fn into_glib(self) -> ffi::GstVideoColorPrimaries {
2119        match self {
2120            Self::Unknown => ffi::GST_VIDEO_COLOR_PRIMARIES_UNKNOWN,
2121            Self::Bt709 => ffi::GST_VIDEO_COLOR_PRIMARIES_BT709,
2122            Self::Bt470m => ffi::GST_VIDEO_COLOR_PRIMARIES_BT470M,
2123            Self::Bt470bg => ffi::GST_VIDEO_COLOR_PRIMARIES_BT470BG,
2124            Self::Smpte170m => ffi::GST_VIDEO_COLOR_PRIMARIES_SMPTE170M,
2125            Self::Smpte240m => ffi::GST_VIDEO_COLOR_PRIMARIES_SMPTE240M,
2126            Self::Film => ffi::GST_VIDEO_COLOR_PRIMARIES_FILM,
2127            Self::Bt2020 => ffi::GST_VIDEO_COLOR_PRIMARIES_BT2020,
2128            Self::Adobergb => ffi::GST_VIDEO_COLOR_PRIMARIES_ADOBERGB,
2129            #[cfg(feature = "v1_16")]
2130            Self::Smptest428 => ffi::GST_VIDEO_COLOR_PRIMARIES_SMPTEST428,
2131            #[cfg(feature = "v1_16")]
2132            Self::Smpterp431 => ffi::GST_VIDEO_COLOR_PRIMARIES_SMPTERP431,
2133            #[cfg(feature = "v1_16")]
2134            Self::Smpteeg432 => ffi::GST_VIDEO_COLOR_PRIMARIES_SMPTEEG432,
2135            #[cfg(feature = "v1_16")]
2136            Self::Ebu3213 => ffi::GST_VIDEO_COLOR_PRIMARIES_EBU3213,
2137            Self::__Unknown(value) => value,
2138        }
2139    }
2140}
2141
2142#[doc(hidden)]
2143impl FromGlib<ffi::GstVideoColorPrimaries> for VideoColorPrimaries {
2144    unsafe fn from_glib(value: ffi::GstVideoColorPrimaries) -> Self {
2145        skip_assert_initialized!();
2146
2147        match value {
2148            ffi::GST_VIDEO_COLOR_PRIMARIES_UNKNOWN => Self::Unknown,
2149            ffi::GST_VIDEO_COLOR_PRIMARIES_BT709 => Self::Bt709,
2150            ffi::GST_VIDEO_COLOR_PRIMARIES_BT470M => Self::Bt470m,
2151            ffi::GST_VIDEO_COLOR_PRIMARIES_BT470BG => Self::Bt470bg,
2152            ffi::GST_VIDEO_COLOR_PRIMARIES_SMPTE170M => Self::Smpte170m,
2153            ffi::GST_VIDEO_COLOR_PRIMARIES_SMPTE240M => Self::Smpte240m,
2154            ffi::GST_VIDEO_COLOR_PRIMARIES_FILM => Self::Film,
2155            ffi::GST_VIDEO_COLOR_PRIMARIES_BT2020 => Self::Bt2020,
2156            ffi::GST_VIDEO_COLOR_PRIMARIES_ADOBERGB => Self::Adobergb,
2157            #[cfg(feature = "v1_16")]
2158            ffi::GST_VIDEO_COLOR_PRIMARIES_SMPTEST428 => Self::Smptest428,
2159            #[cfg(feature = "v1_16")]
2160            ffi::GST_VIDEO_COLOR_PRIMARIES_SMPTERP431 => Self::Smpterp431,
2161            #[cfg(feature = "v1_16")]
2162            ffi::GST_VIDEO_COLOR_PRIMARIES_SMPTEEG432 => Self::Smpteeg432,
2163            #[cfg(feature = "v1_16")]
2164            ffi::GST_VIDEO_COLOR_PRIMARIES_EBU3213 => Self::Ebu3213,
2165            value => Self::__Unknown(value),
2166        }
2167    }
2168}
2169
2170impl StaticType for VideoColorPrimaries {
2171    #[inline]
2172    #[doc(alias = "gst_video_color_primaries_get_type")]
2173    fn static_type() -> glib::Type {
2174        unsafe { from_glib(ffi::gst_video_color_primaries_get_type()) }
2175    }
2176}
2177
2178impl glib::HasParamSpec for VideoColorPrimaries {
2179    type ParamSpec = glib::ParamSpecEnum;
2180    type SetValue = Self;
2181    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
2182
2183    fn param_spec_builder() -> Self::BuilderFn {
2184        Self::ParamSpec::builder_with_default
2185    }
2186}
2187
2188impl glib::value::ValueType for VideoColorPrimaries {
2189    type Type = Self;
2190}
2191
2192unsafe impl<'a> glib::value::FromValue<'a> for VideoColorPrimaries {
2193    type Checker = glib::value::GenericValueTypeChecker<Self>;
2194
2195    #[inline]
2196    unsafe fn from_value(value: &'a glib::Value) -> Self {
2197        skip_assert_initialized!();
2198        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
2199    }
2200}
2201
2202impl ToValue for VideoColorPrimaries {
2203    #[inline]
2204    fn to_value(&self) -> glib::Value {
2205        let mut value = glib::Value::for_value_type::<Self>();
2206        unsafe {
2207            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
2208        }
2209        value
2210    }
2211
2212    #[inline]
2213    fn value_type(&self) -> glib::Type {
2214        Self::static_type()
2215    }
2216}
2217
2218impl From<VideoColorPrimaries> for glib::Value {
2219    #[inline]
2220    fn from(v: VideoColorPrimaries) -> Self {
2221        skip_assert_initialized!();
2222        ToValue::to_value(&v)
2223    }
2224}
2225
2226/// Different dithering methods to use.
2227#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
2228#[non_exhaustive]
2229#[doc(alias = "GstVideoDitherMethod")]
2230pub enum VideoDitherMethod {
2231    /// no dithering
2232    #[doc(alias = "GST_VIDEO_DITHER_NONE")]
2233    None,
2234    /// propagate rounding errors downwards
2235    #[doc(alias = "GST_VIDEO_DITHER_VERTERR")]
2236    Verterr,
2237    /// Dither with floyd-steinberg error diffusion
2238    #[doc(alias = "GST_VIDEO_DITHER_FLOYD_STEINBERG")]
2239    FloydSteinberg,
2240    /// Dither with Sierra Lite error diffusion
2241    #[doc(alias = "GST_VIDEO_DITHER_SIERRA_LITE")]
2242    SierraLite,
2243    /// ordered dither using a bayer pattern
2244    #[doc(alias = "GST_VIDEO_DITHER_BAYER")]
2245    Bayer,
2246    #[doc(hidden)]
2247    __Unknown(i32),
2248}
2249
2250#[doc(hidden)]
2251impl IntoGlib for VideoDitherMethod {
2252    type GlibType = ffi::GstVideoDitherMethod;
2253
2254    #[inline]
2255    fn into_glib(self) -> ffi::GstVideoDitherMethod {
2256        match self {
2257            Self::None => ffi::GST_VIDEO_DITHER_NONE,
2258            Self::Verterr => ffi::GST_VIDEO_DITHER_VERTERR,
2259            Self::FloydSteinberg => ffi::GST_VIDEO_DITHER_FLOYD_STEINBERG,
2260            Self::SierraLite => ffi::GST_VIDEO_DITHER_SIERRA_LITE,
2261            Self::Bayer => ffi::GST_VIDEO_DITHER_BAYER,
2262            Self::__Unknown(value) => value,
2263        }
2264    }
2265}
2266
2267#[doc(hidden)]
2268impl FromGlib<ffi::GstVideoDitherMethod> for VideoDitherMethod {
2269    #[inline]
2270    unsafe fn from_glib(value: ffi::GstVideoDitherMethod) -> Self {
2271        skip_assert_initialized!();
2272
2273        match value {
2274            ffi::GST_VIDEO_DITHER_NONE => Self::None,
2275            ffi::GST_VIDEO_DITHER_VERTERR => Self::Verterr,
2276            ffi::GST_VIDEO_DITHER_FLOYD_STEINBERG => Self::FloydSteinberg,
2277            ffi::GST_VIDEO_DITHER_SIERRA_LITE => Self::SierraLite,
2278            ffi::GST_VIDEO_DITHER_BAYER => Self::Bayer,
2279            value => Self::__Unknown(value),
2280        }
2281    }
2282}
2283
2284impl StaticType for VideoDitherMethod {
2285    #[inline]
2286    #[doc(alias = "gst_video_dither_method_get_type")]
2287    fn static_type() -> glib::Type {
2288        unsafe { from_glib(ffi::gst_video_dither_method_get_type()) }
2289    }
2290}
2291
2292impl glib::HasParamSpec for VideoDitherMethod {
2293    type ParamSpec = glib::ParamSpecEnum;
2294    type SetValue = Self;
2295    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
2296
2297    fn param_spec_builder() -> Self::BuilderFn {
2298        Self::ParamSpec::builder_with_default
2299    }
2300}
2301
2302impl glib::value::ValueType for VideoDitherMethod {
2303    type Type = Self;
2304}
2305
2306unsafe impl<'a> glib::value::FromValue<'a> for VideoDitherMethod {
2307    type Checker = glib::value::GenericValueTypeChecker<Self>;
2308
2309    #[inline]
2310    unsafe fn from_value(value: &'a glib::Value) -> Self {
2311        skip_assert_initialized!();
2312        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
2313    }
2314}
2315
2316impl ToValue for VideoDitherMethod {
2317    #[inline]
2318    fn to_value(&self) -> glib::Value {
2319        let mut value = glib::Value::for_value_type::<Self>();
2320        unsafe {
2321            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
2322        }
2323        value
2324    }
2325
2326    #[inline]
2327    fn value_type(&self) -> glib::Type {
2328        Self::static_type()
2329    }
2330}
2331
2332impl From<VideoDitherMethod> for glib::Value {
2333    #[inline]
2334    fn from(v: VideoDitherMethod) -> Self {
2335        skip_assert_initialized!();
2336        ToValue::to_value(&v)
2337    }
2338}
2339
2340/// Field order of interlaced content. This is only valid for
2341/// interlace-mode=interleaved and not interlace-mode=mixed. In the case of
2342/// mixed or GST_VIDEO_FIELD_ORDER_UNKOWN, the field order is signalled via
2343/// buffer flags.
2344#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
2345#[non_exhaustive]
2346#[doc(alias = "GstVideoFieldOrder")]
2347pub enum VideoFieldOrder {
2348    /// unknown field order for interlaced content.
2349    ///  The actual field order is signalled via buffer flags.
2350    #[doc(alias = "GST_VIDEO_FIELD_ORDER_UNKNOWN")]
2351    Unknown,
2352    /// top field is first
2353    #[doc(alias = "GST_VIDEO_FIELD_ORDER_TOP_FIELD_FIRST")]
2354    TopFieldFirst,
2355    /// bottom field is first
2356    #[doc(alias = "GST_VIDEO_FIELD_ORDER_BOTTOM_FIELD_FIRST")]
2357    BottomFieldFirst,
2358    #[doc(hidden)]
2359    __Unknown(i32),
2360}
2361
2362impl VideoFieldOrder {
2363    #[doc(alias = "gst_video_field_order_from_string")]
2364    pub fn from_string(order: &str) -> VideoFieldOrder {
2365        assert_initialized_main_thread!();
2366        unsafe {
2367            from_glib(ffi::gst_video_field_order_from_string(
2368                order.to_glib_none().0,
2369            ))
2370        }
2371    }
2372}
2373
2374impl std::fmt::Display for VideoFieldOrder {
2375    #[inline]
2376    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
2377        f.write_str(&self.to_str())
2378    }
2379}
2380
2381#[doc(hidden)]
2382impl IntoGlib for VideoFieldOrder {
2383    type GlibType = ffi::GstVideoFieldOrder;
2384
2385    #[inline]
2386    fn into_glib(self) -> ffi::GstVideoFieldOrder {
2387        match self {
2388            Self::Unknown => ffi::GST_VIDEO_FIELD_ORDER_UNKNOWN,
2389            Self::TopFieldFirst => ffi::GST_VIDEO_FIELD_ORDER_TOP_FIELD_FIRST,
2390            Self::BottomFieldFirst => ffi::GST_VIDEO_FIELD_ORDER_BOTTOM_FIELD_FIRST,
2391            Self::__Unknown(value) => value,
2392        }
2393    }
2394}
2395
2396#[doc(hidden)]
2397impl FromGlib<ffi::GstVideoFieldOrder> for VideoFieldOrder {
2398    #[inline]
2399    unsafe fn from_glib(value: ffi::GstVideoFieldOrder) -> Self {
2400        skip_assert_initialized!();
2401
2402        match value {
2403            ffi::GST_VIDEO_FIELD_ORDER_UNKNOWN => Self::Unknown,
2404            ffi::GST_VIDEO_FIELD_ORDER_TOP_FIELD_FIRST => Self::TopFieldFirst,
2405            ffi::GST_VIDEO_FIELD_ORDER_BOTTOM_FIELD_FIRST => Self::BottomFieldFirst,
2406            value => Self::__Unknown(value),
2407        }
2408    }
2409}
2410
2411impl StaticType for VideoFieldOrder {
2412    #[inline]
2413    #[doc(alias = "gst_video_field_order_get_type")]
2414    fn static_type() -> glib::Type {
2415        unsafe { from_glib(ffi::gst_video_field_order_get_type()) }
2416    }
2417}
2418
2419impl glib::HasParamSpec for VideoFieldOrder {
2420    type ParamSpec = glib::ParamSpecEnum;
2421    type SetValue = Self;
2422    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
2423
2424    fn param_spec_builder() -> Self::BuilderFn {
2425        Self::ParamSpec::builder_with_default
2426    }
2427}
2428
2429impl glib::value::ValueType for VideoFieldOrder {
2430    type Type = Self;
2431}
2432
2433unsafe impl<'a> glib::value::FromValue<'a> for VideoFieldOrder {
2434    type Checker = glib::value::GenericValueTypeChecker<Self>;
2435
2436    #[inline]
2437    unsafe fn from_value(value: &'a glib::Value) -> Self {
2438        skip_assert_initialized!();
2439        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
2440    }
2441}
2442
2443impl ToValue for VideoFieldOrder {
2444    #[inline]
2445    fn to_value(&self) -> glib::Value {
2446        let mut value = glib::Value::for_value_type::<Self>();
2447        unsafe {
2448            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
2449        }
2450        value
2451    }
2452
2453    #[inline]
2454    fn value_type(&self) -> glib::Type {
2455        Self::static_type()
2456    }
2457}
2458
2459impl From<VideoFieldOrder> for glib::Value {
2460    #[inline]
2461    fn from(v: VideoFieldOrder) -> Self {
2462        skip_assert_initialized!();
2463        ToValue::to_value(&v)
2464    }
2465}
2466
2467/// Enum value describing the most common video formats.
2468///
2469/// See the [GStreamer raw video format design document](https://gstreamer.freedesktop.org/documentation/additional/design/mediatype-video-raw.html`formats`)
2470/// for details about the layout and packing of these formats in memory.
2471#[derive(Debug, Eq, PartialEq, Hash, Clone, Copy)]
2472#[non_exhaustive]
2473#[doc(alias = "GstVideoFormat")]
2474pub enum VideoFormat {
2475    /// Unknown or unset video format id
2476    #[doc(alias = "GST_VIDEO_FORMAT_UNKNOWN")]
2477    Unknown,
2478    /// Encoded video format. Only ever use that in caps for
2479    ///  special video formats in combination with non-system
2480    ///  memory GstCapsFeatures where it does not make sense
2481    ///  to specify a real video format.
2482    #[doc(alias = "GST_VIDEO_FORMAT_ENCODED")]
2483    Encoded,
2484    /// planar 4:2:0 YUV
2485    #[doc(alias = "GST_VIDEO_FORMAT_I420")]
2486    I420,
2487    /// planar 4:2:0 YVU (like I420 but UV planes swapped)
2488    #[doc(alias = "GST_VIDEO_FORMAT_YV12")]
2489    Yv12,
2490    /// packed 4:2:2 YUV (Y0-U0-Y1-V0 Y2-U2-Y3-V2 Y4 ...)
2491    #[doc(alias = "GST_VIDEO_FORMAT_YUY2")]
2492    Yuy2,
2493    /// packed 4:2:2 YUV (U0-Y0-V0-Y1 U2-Y2-V2-Y3 U4 ...)
2494    #[doc(alias = "GST_VIDEO_FORMAT_UYVY")]
2495    Uyvy,
2496    /// packed 4:4:4 YUV with alpha channel (A0-Y0-U0-V0 ...)
2497    #[doc(alias = "GST_VIDEO_FORMAT_AYUV")]
2498    Ayuv,
2499    /// sparse rgb packed into 32 bit, space last
2500    #[doc(alias = "GST_VIDEO_FORMAT_RGBx")]
2501    Rgbx,
2502    /// sparse reverse rgb packed into 32 bit, space last
2503    #[doc(alias = "GST_VIDEO_FORMAT_BGRx")]
2504    Bgrx,
2505    /// sparse rgb packed into 32 bit, space first
2506    #[doc(alias = "GST_VIDEO_FORMAT_xRGB")]
2507    Xrgb,
2508    /// sparse reverse rgb packed into 32 bit, space first
2509    #[doc(alias = "GST_VIDEO_FORMAT_xBGR")]
2510    Xbgr,
2511    /// rgb with alpha channel last
2512    #[doc(alias = "GST_VIDEO_FORMAT_RGBA")]
2513    Rgba,
2514    /// reverse rgb with alpha channel last
2515    #[doc(alias = "GST_VIDEO_FORMAT_BGRA")]
2516    Bgra,
2517    /// rgb with alpha channel first
2518    #[doc(alias = "GST_VIDEO_FORMAT_ARGB")]
2519    Argb,
2520    /// reverse rgb with alpha channel first
2521    #[doc(alias = "GST_VIDEO_FORMAT_ABGR")]
2522    Abgr,
2523    /// RGB packed into 24 bits without padding (`R-G-B-R-G-B`)
2524    #[doc(alias = "GST_VIDEO_FORMAT_RGB")]
2525    Rgb,
2526    /// reverse RGB packed into 24 bits without padding (`B-G-R-B-G-R`)
2527    #[doc(alias = "GST_VIDEO_FORMAT_BGR")]
2528    Bgr,
2529    /// planar 4:1:1 YUV
2530    #[doc(alias = "GST_VIDEO_FORMAT_Y41B")]
2531    Y41b,
2532    /// planar 4:2:2 YUV
2533    #[doc(alias = "GST_VIDEO_FORMAT_Y42B")]
2534    Y42b,
2535    /// packed 4:2:2 YUV (Y0-V0-Y1-U0 Y2-V2-Y3-U2 Y4 ...)
2536    #[doc(alias = "GST_VIDEO_FORMAT_YVYU")]
2537    Yvyu,
2538    /// planar 4:4:4 YUV
2539    #[doc(alias = "GST_VIDEO_FORMAT_Y444")]
2540    Y444,
2541    /// packed 4:2:2 10-bit YUV, complex format
2542    #[doc(alias = "GST_VIDEO_FORMAT_v210")]
2543    V210,
2544    /// packed 4:2:2 16-bit YUV, Y0-U0-Y1-V1 order
2545    #[doc(alias = "GST_VIDEO_FORMAT_v216")]
2546    V216,
2547    /// planar 4:2:0 YUV with interleaved UV plane
2548    #[doc(alias = "GST_VIDEO_FORMAT_NV12")]
2549    Nv12,
2550    /// planar 4:2:0 YUV with interleaved VU plane
2551    #[doc(alias = "GST_VIDEO_FORMAT_NV21")]
2552    Nv21,
2553    /// 8-bit grayscale
2554    #[doc(alias = "GST_VIDEO_FORMAT_GRAY8")]
2555    Gray8,
2556    /// 16-bit grayscale, most significant byte first
2557    #[doc(alias = "GST_VIDEO_FORMAT_GRAY16_BE")]
2558    Gray16Be,
2559    /// 16-bit grayscale, least significant byte first
2560    #[doc(alias = "GST_VIDEO_FORMAT_GRAY16_LE")]
2561    Gray16Le,
2562    /// packed 4:4:4 YUV (Y-U-V ...)
2563    #[doc(alias = "GST_VIDEO_FORMAT_v308")]
2564    V308,
2565    /// rgb 5-6-5 bits per component
2566    #[doc(alias = "GST_VIDEO_FORMAT_RGB16")]
2567    Rgb16,
2568    /// reverse rgb 5-6-5 bits per component
2569    #[doc(alias = "GST_VIDEO_FORMAT_BGR16")]
2570    Bgr16,
2571    /// rgb 5-5-5 bits per component
2572    #[doc(alias = "GST_VIDEO_FORMAT_RGB15")]
2573    Rgb15,
2574    /// reverse rgb 5-5-5 bits per component
2575    #[doc(alias = "GST_VIDEO_FORMAT_BGR15")]
2576    Bgr15,
2577    /// packed 10-bit 4:2:2 YUV (U0-Y0-V0-Y1 U2-Y2-V2-Y3 U4 ...)
2578    #[doc(alias = "GST_VIDEO_FORMAT_UYVP")]
2579    Uyvp,
2580    /// planar 4:4:2:0 AYUV
2581    #[doc(alias = "GST_VIDEO_FORMAT_A420")]
2582    A420,
2583    /// 8-bit paletted RGB
2584    #[doc(alias = "GST_VIDEO_FORMAT_RGB8P")]
2585    Rgb8p,
2586    /// planar 4:1:0 YUV
2587    #[doc(alias = "GST_VIDEO_FORMAT_YUV9")]
2588    Yuv9,
2589    /// planar 4:1:0 YUV (like YUV9 but UV planes swapped)
2590    #[doc(alias = "GST_VIDEO_FORMAT_YVU9")]
2591    Yvu9,
2592    /// packed 4:1:1 YUV (Cb-Y0-Y1-Cr-Y2-Y3 ...)
2593    #[doc(alias = "GST_VIDEO_FORMAT_IYU1")]
2594    Iyu1,
2595    /// rgb with alpha channel first, 16 bits (native endianness) per channel
2596    #[doc(alias = "GST_VIDEO_FORMAT_ARGB64")]
2597    Argb64,
2598    /// packed 4:4:4 YUV with alpha channel, 16 bits (native endianness) per channel (A0-Y0-U0-V0 ...)
2599    #[doc(alias = "GST_VIDEO_FORMAT_AYUV64")]
2600    Ayuv64,
2601    /// packed 4:4:4 RGB, 10 bits per channel
2602    #[doc(alias = "GST_VIDEO_FORMAT_r210")]
2603    R210,
2604    /// planar 4:2:0 YUV, 10 bits per channel
2605    #[doc(alias = "GST_VIDEO_FORMAT_I420_10BE")]
2606    I42010be,
2607    /// planar 4:2:0 YUV, 10 bits per channel
2608    #[doc(alias = "GST_VIDEO_FORMAT_I420_10LE")]
2609    I42010le,
2610    /// planar 4:2:2 YUV, 10 bits per channel
2611    #[doc(alias = "GST_VIDEO_FORMAT_I422_10BE")]
2612    I42210be,
2613    /// planar 4:2:2 YUV, 10 bits per channel
2614    #[doc(alias = "GST_VIDEO_FORMAT_I422_10LE")]
2615    I42210le,
2616    /// planar 4:4:4 YUV, 10 bits per channel (Since: 1.2)
2617    #[doc(alias = "GST_VIDEO_FORMAT_Y444_10BE")]
2618    Y44410be,
2619    /// planar 4:4:4 YUV, 10 bits per channel (Since: 1.2)
2620    #[doc(alias = "GST_VIDEO_FORMAT_Y444_10LE")]
2621    Y44410le,
2622    /// planar 4:4:4 RGB, 8 bits per channel (Since: 1.2)
2623    #[doc(alias = "GST_VIDEO_FORMAT_GBR")]
2624    Gbr,
2625    /// planar 4:4:4 RGB, 10 bits per channel (Since: 1.2)
2626    #[doc(alias = "GST_VIDEO_FORMAT_GBR_10BE")]
2627    Gbr10be,
2628    /// planar 4:4:4 RGB, 10 bits per channel (Since: 1.2)
2629    #[doc(alias = "GST_VIDEO_FORMAT_GBR_10LE")]
2630    Gbr10le,
2631    /// planar 4:2:2 YUV with interleaved UV plane (Since: 1.2)
2632    #[doc(alias = "GST_VIDEO_FORMAT_NV16")]
2633    Nv16,
2634    /// planar 4:4:4 YUV with interleaved UV plane (Since: 1.2)
2635    #[doc(alias = "GST_VIDEO_FORMAT_NV24")]
2636    Nv24,
2637    /// NV12 with 64x32 tiling in zigzag pattern (Since: 1.4)
2638    #[doc(alias = "GST_VIDEO_FORMAT_NV12_64Z32")]
2639    Nv1264z32,
2640    /// planar 4:4:2:0 YUV, 10 bits per channel (Since: 1.6)
2641    #[doc(alias = "GST_VIDEO_FORMAT_A420_10BE")]
2642    A42010be,
2643    /// planar 4:4:2:0 YUV, 10 bits per channel (Since: 1.6)
2644    #[doc(alias = "GST_VIDEO_FORMAT_A420_10LE")]
2645    A42010le,
2646    /// planar 4:4:2:2 YUV, 10 bits per channel (Since: 1.6)
2647    #[doc(alias = "GST_VIDEO_FORMAT_A422_10BE")]
2648    A42210be,
2649    /// planar 4:4:2:2 YUV, 10 bits per channel (Since: 1.6)
2650    #[doc(alias = "GST_VIDEO_FORMAT_A422_10LE")]
2651    A42210le,
2652    /// planar 4:4:4:4 YUV, 10 bits per channel (Since: 1.6)
2653    #[doc(alias = "GST_VIDEO_FORMAT_A444_10BE")]
2654    A44410be,
2655    /// planar 4:4:4:4 YUV, 10 bits per channel (Since: 1.6)
2656    #[doc(alias = "GST_VIDEO_FORMAT_A444_10LE")]
2657    A44410le,
2658    /// planar 4:2:2 YUV with interleaved VU plane (Since: 1.6)
2659    #[doc(alias = "GST_VIDEO_FORMAT_NV61")]
2660    Nv61,
2661    /// planar 4:2:0 YUV with interleaved UV plane, 10 bits per channel (Since: 1.10)
2662    #[doc(alias = "GST_VIDEO_FORMAT_P010_10BE")]
2663    P01010be,
2664    /// planar 4:2:0 YUV with interleaved UV plane, 10 bits per channel (Since: 1.10)
2665    #[doc(alias = "GST_VIDEO_FORMAT_P010_10LE")]
2666    P01010le,
2667    /// packed 4:4:4 YUV (U-Y-V ...) (Since: 1.10)
2668    #[doc(alias = "GST_VIDEO_FORMAT_IYU2")]
2669    Iyu2,
2670    /// packed 4:2:2 YUV (V0-Y0-U0-Y1 V2-Y2-U2-Y3 V4 ...)
2671    #[doc(alias = "GST_VIDEO_FORMAT_VYUY")]
2672    Vyuy,
2673    /// planar 4:4:4:4 ARGB, 8 bits per channel (Since: 1.12)
2674    #[doc(alias = "GST_VIDEO_FORMAT_GBRA")]
2675    Gbra,
2676    /// planar 4:4:4:4 ARGB, 10 bits per channel (Since: 1.12)
2677    #[doc(alias = "GST_VIDEO_FORMAT_GBRA_10BE")]
2678    Gbra10be,
2679    /// planar 4:4:4:4 ARGB, 10 bits per channel (Since: 1.12)
2680    #[doc(alias = "GST_VIDEO_FORMAT_GBRA_10LE")]
2681    Gbra10le,
2682    /// planar 4:4:4 RGB, 12 bits per channel (Since: 1.12)
2683    #[doc(alias = "GST_VIDEO_FORMAT_GBR_12BE")]
2684    Gbr12be,
2685    /// planar 4:4:4 RGB, 12 bits per channel (Since: 1.12)
2686    #[doc(alias = "GST_VIDEO_FORMAT_GBR_12LE")]
2687    Gbr12le,
2688    /// planar 4:4:4:4 ARGB, 12 bits per channel (Since: 1.12)
2689    #[doc(alias = "GST_VIDEO_FORMAT_GBRA_12BE")]
2690    Gbra12be,
2691    /// planar 4:4:4:4 ARGB, 12 bits per channel (Since: 1.12)
2692    #[doc(alias = "GST_VIDEO_FORMAT_GBRA_12LE")]
2693    Gbra12le,
2694    /// planar 4:2:0 YUV, 12 bits per channel (Since: 1.12)
2695    #[doc(alias = "GST_VIDEO_FORMAT_I420_12BE")]
2696    I42012be,
2697    /// planar 4:2:0 YUV, 12 bits per channel (Since: 1.12)
2698    #[doc(alias = "GST_VIDEO_FORMAT_I420_12LE")]
2699    I42012le,
2700    /// planar 4:2:2 YUV, 12 bits per channel (Since: 1.12)
2701    #[doc(alias = "GST_VIDEO_FORMAT_I422_12BE")]
2702    I42212be,
2703    /// planar 4:2:2 YUV, 12 bits per channel (Since: 1.12)
2704    #[doc(alias = "GST_VIDEO_FORMAT_I422_12LE")]
2705    I42212le,
2706    /// planar 4:4:4 YUV, 12 bits per channel (Since: 1.12)
2707    #[doc(alias = "GST_VIDEO_FORMAT_Y444_12BE")]
2708    Y44412be,
2709    /// planar 4:4:4 YUV, 12 bits per channel (Since: 1.12)
2710    #[doc(alias = "GST_VIDEO_FORMAT_Y444_12LE")]
2711    Y44412le,
2712    /// 10-bit grayscale, packed into 32bit words (2 bits padding) (Since: 1.14)
2713    #[doc(alias = "GST_VIDEO_FORMAT_GRAY10_LE32")]
2714    Gray10Le32,
2715    /// 10-bit variant of [`Nv12`][Self::Nv12], packed into 32bit words (MSB 2 bits padding) (Since: 1.14)
2716    #[doc(alias = "GST_VIDEO_FORMAT_NV12_10LE32")]
2717    Nv1210le32,
2718    /// 10-bit variant of [`Nv16`][Self::Nv16], packed into 32bit words (MSB 2 bits padding) (Since: 1.14)
2719    #[doc(alias = "GST_VIDEO_FORMAT_NV16_10LE32")]
2720    Nv1610le32,
2721    /// Fully packed variant of NV12_10LE32 (Since: 1.16)
2722    #[cfg(feature = "v1_16")]
2723    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
2724    #[doc(alias = "GST_VIDEO_FORMAT_NV12_10LE40")]
2725    Nv1210le40,
2726    /// packed 4:2:2 YUV, 10 bits per channel (Since: 1.16)
2727    #[cfg(feature = "v1_16")]
2728    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
2729    #[doc(alias = "GST_VIDEO_FORMAT_Y210")]
2730    Y210,
2731    /// packed 4:4:4 YUV, 10 bits per channel(A-V-Y-U...) (Since: 1.16)
2732    #[cfg(feature = "v1_16")]
2733    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
2734    #[doc(alias = "GST_VIDEO_FORMAT_Y410")]
2735    Y410,
2736    /// packed 4:4:4 YUV with alpha channel (V0-U0-Y0-A0...) (Since: 1.16)
2737    #[cfg(feature = "v1_16")]
2738    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
2739    #[doc(alias = "GST_VIDEO_FORMAT_VUYA")]
2740    Vuya,
2741    /// 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)
2742    #[cfg(feature = "v1_16")]
2743    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
2744    #[doc(alias = "GST_VIDEO_FORMAT_BGR10A2_LE")]
2745    Bgr10a2Le,
2746    /// 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)
2747    #[cfg(feature = "v1_18")]
2748    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
2749    #[doc(alias = "GST_VIDEO_FORMAT_RGB10A2_LE")]
2750    Rgb10a2Le,
2751    /// planar 4:4:4 YUV, 16 bits per channel (Since: 1.18)
2752    #[cfg(feature = "v1_18")]
2753    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
2754    #[doc(alias = "GST_VIDEO_FORMAT_Y444_16BE")]
2755    Y44416be,
2756    /// planar 4:4:4 YUV, 16 bits per channel (Since: 1.18)
2757    #[cfg(feature = "v1_18")]
2758    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
2759    #[doc(alias = "GST_VIDEO_FORMAT_Y444_16LE")]
2760    Y44416le,
2761    /// planar 4:2:0 YUV with interleaved UV plane, 16 bits per channel (Since: 1.18)
2762    #[cfg(feature = "v1_18")]
2763    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
2764    #[doc(alias = "GST_VIDEO_FORMAT_P016_BE")]
2765    P016Be,
2766    /// planar 4:2:0 YUV with interleaved UV plane, 16 bits per channel (Since: 1.18)
2767    #[cfg(feature = "v1_18")]
2768    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
2769    #[doc(alias = "GST_VIDEO_FORMAT_P016_LE")]
2770    P016Le,
2771    /// planar 4:2:0 YUV with interleaved UV plane, 12 bits per channel (Since: 1.18)
2772    #[cfg(feature = "v1_18")]
2773    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
2774    #[doc(alias = "GST_VIDEO_FORMAT_P012_BE")]
2775    P012Be,
2776    /// planar 4:2:0 YUV with interleaved UV plane, 12 bits per channel (Since: 1.18)
2777    #[cfg(feature = "v1_18")]
2778    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
2779    #[doc(alias = "GST_VIDEO_FORMAT_P012_LE")]
2780    P012Le,
2781    /// packed 4:2:2 YUV, 12 bits per channel (Y-U-Y-V) (Since: 1.18)
2782    #[cfg(feature = "v1_18")]
2783    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
2784    #[doc(alias = "GST_VIDEO_FORMAT_Y212_BE")]
2785    Y212Be,
2786    /// packed 4:2:2 YUV, 12 bits per channel (Y-U-Y-V) (Since: 1.18)
2787    #[cfg(feature = "v1_18")]
2788    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
2789    #[doc(alias = "GST_VIDEO_FORMAT_Y212_LE")]
2790    Y212Le,
2791    /// packed 4:4:4:4 YUV, 12 bits per channel(U-Y-V-A...) (Since: 1.18)
2792    #[cfg(feature = "v1_18")]
2793    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
2794    #[doc(alias = "GST_VIDEO_FORMAT_Y412_BE")]
2795    Y412Be,
2796    /// packed 4:4:4:4 YUV, 12 bits per channel(U-Y-V-A...) (Since: 1.18)
2797    #[cfg(feature = "v1_18")]
2798    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
2799    #[doc(alias = "GST_VIDEO_FORMAT_Y412_LE")]
2800    Y412Le,
2801    /// NV12 with 4x4 tiles in linear order.
2802    #[cfg(feature = "v1_18")]
2803    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
2804    #[doc(alias = "GST_VIDEO_FORMAT_NV12_4L4")]
2805    Nv124l4,
2806    /// NV12 with 32x32 tiles in linear order.
2807    #[cfg(feature = "v1_18")]
2808    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
2809    #[doc(alias = "GST_VIDEO_FORMAT_NV12_32L32")]
2810    Nv1232l32,
2811    /// Planar 4:4:4 RGB, R-G-B order
2812    #[cfg(feature = "v1_20")]
2813    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
2814    #[doc(alias = "GST_VIDEO_FORMAT_RGBP")]
2815    Rgbp,
2816    /// Planar 4:4:4 RGB, B-G-R order
2817    #[cfg(feature = "v1_20")]
2818    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
2819    #[doc(alias = "GST_VIDEO_FORMAT_BGRP")]
2820    Bgrp,
2821    /// Planar 4:2:0 YUV with interleaved UV plane with alpha as
2822    /// 3rd plane.
2823    #[cfg(feature = "v1_20")]
2824    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
2825    #[doc(alias = "GST_VIDEO_FORMAT_AV12")]
2826    Av12,
2827    /// RGB with alpha channel first, 16 bits (little endian)
2828    /// per channel.
2829    #[cfg(feature = "v1_20")]
2830    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
2831    #[doc(alias = "GST_VIDEO_FORMAT_ARGB64_LE")]
2832    Argb64Le,
2833    /// RGB with alpha channel first, 16 bits (big endian)
2834    /// per channel.
2835    #[cfg(feature = "v1_20")]
2836    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
2837    #[doc(alias = "GST_VIDEO_FORMAT_ARGB64_BE")]
2838    Argb64Be,
2839    /// RGB with alpha channel last, 16 bits (little endian)
2840    /// per channel.
2841    #[cfg(feature = "v1_20")]
2842    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
2843    #[doc(alias = "GST_VIDEO_FORMAT_RGBA64_LE")]
2844    Rgba64Le,
2845    /// RGB with alpha channel last, 16 bits (big endian)
2846    /// per channel.
2847    #[cfg(feature = "v1_20")]
2848    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
2849    #[doc(alias = "GST_VIDEO_FORMAT_RGBA64_BE")]
2850    Rgba64Be,
2851    /// Reverse RGB with alpha channel last, 16 bits (little endian)
2852    /// per channel.
2853    #[cfg(feature = "v1_20")]
2854    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
2855    #[doc(alias = "GST_VIDEO_FORMAT_BGRA64_LE")]
2856    Bgra64Le,
2857    /// Reverse RGB with alpha channel last, 16 bits (big endian)
2858    /// per channel.
2859    #[cfg(feature = "v1_20")]
2860    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
2861    #[doc(alias = "GST_VIDEO_FORMAT_BGRA64_BE")]
2862    Bgra64Be,
2863    /// Reverse RGB with alpha channel first, 16 bits (little endian)
2864    /// per channel.
2865    #[cfg(feature = "v1_20")]
2866    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
2867    #[doc(alias = "GST_VIDEO_FORMAT_ABGR64_LE")]
2868    Abgr64Le,
2869    /// Reverse RGB with alpha channel first, 16 bits (big endian)
2870    /// per channel.
2871    #[cfg(feature = "v1_20")]
2872    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
2873    #[doc(alias = "GST_VIDEO_FORMAT_ABGR64_BE")]
2874    Abgr64Be,
2875    /// NV12 with 16x32 Y tiles and 16x16 UV tiles.
2876    #[cfg(feature = "v1_22")]
2877    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
2878    #[doc(alias = "GST_VIDEO_FORMAT_NV12_16L32S")]
2879    Nv1216l32s,
2880    /// NV12 with 8x128 tiles in linear order.
2881    #[cfg(feature = "v1_22")]
2882    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
2883    #[doc(alias = "GST_VIDEO_FORMAT_NV12_8L128")]
2884    Nv128l128,
2885    /// NV12 10bit big endian with 8x128 tiles in linear order.
2886    #[cfg(feature = "v1_22")]
2887    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
2888    #[doc(alias = "GST_VIDEO_FORMAT_NV12_10BE_8L128")]
2889    Nv1210be8l128,
2890    /// [`Nv1210le40`][Self::Nv1210le40] with 4x4 pixels tiles (5 bytes
2891    ///  per tile row). This format is produced by Verisilicon/Hantro decoders.
2892    #[cfg(feature = "v1_24")]
2893    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2894    #[doc(alias = "GST_VIDEO_FORMAT_NV12_10LE40_4L4")]
2895    Nv1210le404l4,
2896    /// [`DmaDrm`][Self::DmaDrm] represent the DMA DRM special format. It's
2897    /// only used with memory:DMABuf `GstCapsFeatures`, where an extra
2898    /// parameter (drm-format) is required to define the image format and
2899    /// its memory layout.
2900    #[cfg(feature = "v1_24")]
2901    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2902    #[doc(alias = "GST_VIDEO_FORMAT_DMA_DRM")]
2903    DmaDrm,
2904    /// Mediatek 10bit NV12 little endian with 16x32 tiles in linear order, tile 2
2905    /// bits.
2906    #[cfg(feature = "v1_24")]
2907    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2908    #[doc(alias = "GST_VIDEO_FORMAT_MT2110T")]
2909    Mt2110t,
2910    /// Mediatek 10bit NV12 little endian with 16x32 tiles in linear order, raster
2911    /// 2 bits.
2912    #[cfg(feature = "v1_24")]
2913    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2914    #[doc(alias = "GST_VIDEO_FORMAT_MT2110R")]
2915    Mt2110r,
2916    /// planar 4:4:2:2 YUV, 8 bits per channel
2917    #[cfg(feature = "v1_24")]
2918    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2919    #[doc(alias = "GST_VIDEO_FORMAT_A422")]
2920    A422,
2921    /// planar 4:4:4:4 YUV, 8 bits per channel
2922    #[cfg(feature = "v1_24")]
2923    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2924    #[doc(alias = "GST_VIDEO_FORMAT_A444")]
2925    A444,
2926    /// planar 4:4:4:4 YUV, 12 bits per channel
2927    #[cfg(feature = "v1_24")]
2928    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2929    #[doc(alias = "GST_VIDEO_FORMAT_A444_12LE")]
2930    A44412le,
2931    /// planar 4:4:4:4 YUV, 12 bits per channel
2932    #[cfg(feature = "v1_24")]
2933    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2934    #[doc(alias = "GST_VIDEO_FORMAT_A444_12BE")]
2935    A44412be,
2936    /// planar 4:4:2:2 YUV, 12 bits per channel
2937    #[cfg(feature = "v1_24")]
2938    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2939    #[doc(alias = "GST_VIDEO_FORMAT_A422_12LE")]
2940    A42212le,
2941    /// planar 4:4:2:2 YUV, 12 bits per channel
2942    #[cfg(feature = "v1_24")]
2943    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2944    #[doc(alias = "GST_VIDEO_FORMAT_A422_12BE")]
2945    A42212be,
2946    /// planar 4:4:2:0 YUV, 12 bits per channel
2947    #[cfg(feature = "v1_24")]
2948    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2949    #[doc(alias = "GST_VIDEO_FORMAT_A420_12LE")]
2950    A42012le,
2951    /// planar 4:4:2:0 YUV, 12 bits per channel
2952    #[cfg(feature = "v1_24")]
2953    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2954    #[doc(alias = "GST_VIDEO_FORMAT_A420_12BE")]
2955    A42012be,
2956    /// planar 4:4:4:4 YUV, 16 bits per channel
2957    #[cfg(feature = "v1_24")]
2958    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2959    #[doc(alias = "GST_VIDEO_FORMAT_A444_16LE")]
2960    A44416le,
2961    /// planar 4:4:4:4 YUV, 16 bits per channel
2962    #[cfg(feature = "v1_24")]
2963    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2964    #[doc(alias = "GST_VIDEO_FORMAT_A444_16BE")]
2965    A44416be,
2966    /// planar 4:4:2:2 YUV, 16 bits per channel
2967    #[cfg(feature = "v1_24")]
2968    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2969    #[doc(alias = "GST_VIDEO_FORMAT_A422_16LE")]
2970    A42216le,
2971    /// planar 4:4:2:2 YUV, 16 bits per channel
2972    #[cfg(feature = "v1_24")]
2973    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2974    #[doc(alias = "GST_VIDEO_FORMAT_A422_16BE")]
2975    A42216be,
2976    /// planar 4:4:2:0 YUV, 16 bits per channel
2977    #[cfg(feature = "v1_24")]
2978    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2979    #[doc(alias = "GST_VIDEO_FORMAT_A420_16LE")]
2980    A42016le,
2981    /// planar 4:4:2:0 YUV, 16 bits per channel
2982    #[cfg(feature = "v1_24")]
2983    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2984    #[doc(alias = "GST_VIDEO_FORMAT_A420_16BE")]
2985    A42016be,
2986    /// planar 4:4:4 RGB, 16 bits per channel
2987    #[cfg(feature = "v1_24")]
2988    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2989    #[doc(alias = "GST_VIDEO_FORMAT_GBR_16LE")]
2990    Gbr16le,
2991    /// planar 4:4:4 RGB, 16 bits per channel
2992    #[cfg(feature = "v1_24")]
2993    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2994    #[doc(alias = "GST_VIDEO_FORMAT_GBR_16BE")]
2995    Gbr16be,
2996    /// packed RGB with alpha, 8 bits per channel
2997    #[cfg(feature = "v1_24")]
2998    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
2999    #[doc(alias = "GST_VIDEO_FORMAT_RBGA")]
3000    Rbga,
3001    /// packed 4:2:2 YUV, 16 bits per channel (Y-U-Y-V)
3002    #[cfg(feature = "v1_26")]
3003    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
3004    #[doc(alias = "GST_VIDEO_FORMAT_Y216_LE")]
3005    Y216Le,
3006    /// packed 4:2:2 YUV, 16 bits per channel (Y-U-Y-V)
3007    #[cfg(feature = "v1_26")]
3008    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
3009    #[doc(alias = "GST_VIDEO_FORMAT_Y216_BE")]
3010    Y216Be,
3011    /// packed 4:4:4:4 YUV, 16 bits per channel(U-Y-V-A)
3012    #[cfg(feature = "v1_26")]
3013    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
3014    #[doc(alias = "GST_VIDEO_FORMAT_Y416_LE")]
3015    Y416Le,
3016    /// packed 4:4:4:4 YUV, 16 bits per channel(U-Y-V-A)
3017    #[cfg(feature = "v1_26")]
3018    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
3019    #[doc(alias = "GST_VIDEO_FORMAT_Y416_BE")]
3020    Y416Be,
3021    /// 10-bit grayscale, packed into 16bit words (6 bits left padding)
3022    #[cfg(feature = "v1_26")]
3023    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
3024    #[doc(alias = "GST_VIDEO_FORMAT_GRAY10_LE16")]
3025    Gray10Le16,
3026    /// Fully packed variant of NV16_10LE32
3027    #[cfg(feature = "v1_28")]
3028    #[cfg_attr(docsrs, doc(cfg(feature = "v1_28")))]
3029    #[doc(alias = "GST_VIDEO_FORMAT_NV16_10LE40")]
3030    Nv1610le40,
3031    #[doc(hidden)]
3032    __Unknown(i32),
3033}
3034
3035impl VideoFormat {
3036    #[doc(alias = "gst_video_format_from_fourcc")]
3037    pub fn from_fourcc(fourcc: u32) -> VideoFormat {
3038        assert_initialized_main_thread!();
3039        unsafe { from_glib(ffi::gst_video_format_from_fourcc(fourcc)) }
3040    }
3041
3042    #[doc(alias = "gst_video_format_from_string")]
3043    pub fn from_string(format: &str) -> VideoFormat {
3044        assert_initialized_main_thread!();
3045        unsafe { from_glib(ffi::gst_video_format_from_string(format.to_glib_none().0)) }
3046    }
3047
3048    //#[doc(alias = "gst_video_format_get_palette")]
3049    //#[doc(alias = "get_palette")]
3050    //pub fn palette(self) -> (/*Unimplemented*/Option<Basic: Pointer>, usize) {
3051    //    unsafe { TODO: call ffi:gst_video_format_get_palette() }
3052    //}
3053
3054    #[doc(alias = "gst_video_format_to_fourcc")]
3055    pub fn to_fourcc(self) -> u32 {
3056        assert_initialized_main_thread!();
3057        unsafe { ffi::gst_video_format_to_fourcc(self.into_glib()) }
3058    }
3059}
3060
3061impl std::fmt::Display for VideoFormat {
3062    #[inline]
3063    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
3064        f.write_str(&self.to_str())
3065    }
3066}
3067
3068#[doc(hidden)]
3069impl IntoGlib for VideoFormat {
3070    type GlibType = ffi::GstVideoFormat;
3071
3072    fn into_glib(self) -> ffi::GstVideoFormat {
3073        match self {
3074            Self::Unknown => ffi::GST_VIDEO_FORMAT_UNKNOWN,
3075            Self::Encoded => ffi::GST_VIDEO_FORMAT_ENCODED,
3076            Self::I420 => ffi::GST_VIDEO_FORMAT_I420,
3077            Self::Yv12 => ffi::GST_VIDEO_FORMAT_YV12,
3078            Self::Yuy2 => ffi::GST_VIDEO_FORMAT_YUY2,
3079            Self::Uyvy => ffi::GST_VIDEO_FORMAT_UYVY,
3080            Self::Ayuv => ffi::GST_VIDEO_FORMAT_AYUV,
3081            Self::Rgbx => ffi::GST_VIDEO_FORMAT_RGBx,
3082            Self::Bgrx => ffi::GST_VIDEO_FORMAT_BGRx,
3083            Self::Xrgb => ffi::GST_VIDEO_FORMAT_xRGB,
3084            Self::Xbgr => ffi::GST_VIDEO_FORMAT_xBGR,
3085            Self::Rgba => ffi::GST_VIDEO_FORMAT_RGBA,
3086            Self::Bgra => ffi::GST_VIDEO_FORMAT_BGRA,
3087            Self::Argb => ffi::GST_VIDEO_FORMAT_ARGB,
3088            Self::Abgr => ffi::GST_VIDEO_FORMAT_ABGR,
3089            Self::Rgb => ffi::GST_VIDEO_FORMAT_RGB,
3090            Self::Bgr => ffi::GST_VIDEO_FORMAT_BGR,
3091            Self::Y41b => ffi::GST_VIDEO_FORMAT_Y41B,
3092            Self::Y42b => ffi::GST_VIDEO_FORMAT_Y42B,
3093            Self::Yvyu => ffi::GST_VIDEO_FORMAT_YVYU,
3094            Self::Y444 => ffi::GST_VIDEO_FORMAT_Y444,
3095            Self::V210 => ffi::GST_VIDEO_FORMAT_v210,
3096            Self::V216 => ffi::GST_VIDEO_FORMAT_v216,
3097            Self::Nv12 => ffi::GST_VIDEO_FORMAT_NV12,
3098            Self::Nv21 => ffi::GST_VIDEO_FORMAT_NV21,
3099            Self::Gray8 => ffi::GST_VIDEO_FORMAT_GRAY8,
3100            Self::Gray16Be => ffi::GST_VIDEO_FORMAT_GRAY16_BE,
3101            Self::Gray16Le => ffi::GST_VIDEO_FORMAT_GRAY16_LE,
3102            Self::V308 => ffi::GST_VIDEO_FORMAT_v308,
3103            Self::Rgb16 => ffi::GST_VIDEO_FORMAT_RGB16,
3104            Self::Bgr16 => ffi::GST_VIDEO_FORMAT_BGR16,
3105            Self::Rgb15 => ffi::GST_VIDEO_FORMAT_RGB15,
3106            Self::Bgr15 => ffi::GST_VIDEO_FORMAT_BGR15,
3107            Self::Uyvp => ffi::GST_VIDEO_FORMAT_UYVP,
3108            Self::A420 => ffi::GST_VIDEO_FORMAT_A420,
3109            Self::Rgb8p => ffi::GST_VIDEO_FORMAT_RGB8P,
3110            Self::Yuv9 => ffi::GST_VIDEO_FORMAT_YUV9,
3111            Self::Yvu9 => ffi::GST_VIDEO_FORMAT_YVU9,
3112            Self::Iyu1 => ffi::GST_VIDEO_FORMAT_IYU1,
3113            Self::Argb64 => ffi::GST_VIDEO_FORMAT_ARGB64,
3114            Self::Ayuv64 => ffi::GST_VIDEO_FORMAT_AYUV64,
3115            Self::R210 => ffi::GST_VIDEO_FORMAT_r210,
3116            Self::I42010be => ffi::GST_VIDEO_FORMAT_I420_10BE,
3117            Self::I42010le => ffi::GST_VIDEO_FORMAT_I420_10LE,
3118            Self::I42210be => ffi::GST_VIDEO_FORMAT_I422_10BE,
3119            Self::I42210le => ffi::GST_VIDEO_FORMAT_I422_10LE,
3120            Self::Y44410be => ffi::GST_VIDEO_FORMAT_Y444_10BE,
3121            Self::Y44410le => ffi::GST_VIDEO_FORMAT_Y444_10LE,
3122            Self::Gbr => ffi::GST_VIDEO_FORMAT_GBR,
3123            Self::Gbr10be => ffi::GST_VIDEO_FORMAT_GBR_10BE,
3124            Self::Gbr10le => ffi::GST_VIDEO_FORMAT_GBR_10LE,
3125            Self::Nv16 => ffi::GST_VIDEO_FORMAT_NV16,
3126            Self::Nv24 => ffi::GST_VIDEO_FORMAT_NV24,
3127            Self::Nv1264z32 => ffi::GST_VIDEO_FORMAT_NV12_64Z32,
3128            Self::A42010be => ffi::GST_VIDEO_FORMAT_A420_10BE,
3129            Self::A42010le => ffi::GST_VIDEO_FORMAT_A420_10LE,
3130            Self::A42210be => ffi::GST_VIDEO_FORMAT_A422_10BE,
3131            Self::A42210le => ffi::GST_VIDEO_FORMAT_A422_10LE,
3132            Self::A44410be => ffi::GST_VIDEO_FORMAT_A444_10BE,
3133            Self::A44410le => ffi::GST_VIDEO_FORMAT_A444_10LE,
3134            Self::Nv61 => ffi::GST_VIDEO_FORMAT_NV61,
3135            Self::P01010be => ffi::GST_VIDEO_FORMAT_P010_10BE,
3136            Self::P01010le => ffi::GST_VIDEO_FORMAT_P010_10LE,
3137            Self::Iyu2 => ffi::GST_VIDEO_FORMAT_IYU2,
3138            Self::Vyuy => ffi::GST_VIDEO_FORMAT_VYUY,
3139            Self::Gbra => ffi::GST_VIDEO_FORMAT_GBRA,
3140            Self::Gbra10be => ffi::GST_VIDEO_FORMAT_GBRA_10BE,
3141            Self::Gbra10le => ffi::GST_VIDEO_FORMAT_GBRA_10LE,
3142            Self::Gbr12be => ffi::GST_VIDEO_FORMAT_GBR_12BE,
3143            Self::Gbr12le => ffi::GST_VIDEO_FORMAT_GBR_12LE,
3144            Self::Gbra12be => ffi::GST_VIDEO_FORMAT_GBRA_12BE,
3145            Self::Gbra12le => ffi::GST_VIDEO_FORMAT_GBRA_12LE,
3146            Self::I42012be => ffi::GST_VIDEO_FORMAT_I420_12BE,
3147            Self::I42012le => ffi::GST_VIDEO_FORMAT_I420_12LE,
3148            Self::I42212be => ffi::GST_VIDEO_FORMAT_I422_12BE,
3149            Self::I42212le => ffi::GST_VIDEO_FORMAT_I422_12LE,
3150            Self::Y44412be => ffi::GST_VIDEO_FORMAT_Y444_12BE,
3151            Self::Y44412le => ffi::GST_VIDEO_FORMAT_Y444_12LE,
3152            Self::Gray10Le32 => ffi::GST_VIDEO_FORMAT_GRAY10_LE32,
3153            Self::Nv1210le32 => ffi::GST_VIDEO_FORMAT_NV12_10LE32,
3154            Self::Nv1610le32 => ffi::GST_VIDEO_FORMAT_NV16_10LE32,
3155            #[cfg(feature = "v1_16")]
3156            Self::Nv1210le40 => ffi::GST_VIDEO_FORMAT_NV12_10LE40,
3157            #[cfg(feature = "v1_16")]
3158            Self::Y210 => ffi::GST_VIDEO_FORMAT_Y210,
3159            #[cfg(feature = "v1_16")]
3160            Self::Y410 => ffi::GST_VIDEO_FORMAT_Y410,
3161            #[cfg(feature = "v1_16")]
3162            Self::Vuya => ffi::GST_VIDEO_FORMAT_VUYA,
3163            #[cfg(feature = "v1_16")]
3164            Self::Bgr10a2Le => ffi::GST_VIDEO_FORMAT_BGR10A2_LE,
3165            #[cfg(feature = "v1_18")]
3166            Self::Rgb10a2Le => ffi::GST_VIDEO_FORMAT_RGB10A2_LE,
3167            #[cfg(feature = "v1_18")]
3168            Self::Y44416be => ffi::GST_VIDEO_FORMAT_Y444_16BE,
3169            #[cfg(feature = "v1_18")]
3170            Self::Y44416le => ffi::GST_VIDEO_FORMAT_Y444_16LE,
3171            #[cfg(feature = "v1_18")]
3172            Self::P016Be => ffi::GST_VIDEO_FORMAT_P016_BE,
3173            #[cfg(feature = "v1_18")]
3174            Self::P016Le => ffi::GST_VIDEO_FORMAT_P016_LE,
3175            #[cfg(feature = "v1_18")]
3176            Self::P012Be => ffi::GST_VIDEO_FORMAT_P012_BE,
3177            #[cfg(feature = "v1_18")]
3178            Self::P012Le => ffi::GST_VIDEO_FORMAT_P012_LE,
3179            #[cfg(feature = "v1_18")]
3180            Self::Y212Be => ffi::GST_VIDEO_FORMAT_Y212_BE,
3181            #[cfg(feature = "v1_18")]
3182            Self::Y212Le => ffi::GST_VIDEO_FORMAT_Y212_LE,
3183            #[cfg(feature = "v1_18")]
3184            Self::Y412Be => ffi::GST_VIDEO_FORMAT_Y412_BE,
3185            #[cfg(feature = "v1_18")]
3186            Self::Y412Le => ffi::GST_VIDEO_FORMAT_Y412_LE,
3187            #[cfg(feature = "v1_18")]
3188            Self::Nv124l4 => ffi::GST_VIDEO_FORMAT_NV12_4L4,
3189            #[cfg(feature = "v1_18")]
3190            Self::Nv1232l32 => ffi::GST_VIDEO_FORMAT_NV12_32L32,
3191            #[cfg(feature = "v1_20")]
3192            Self::Rgbp => ffi::GST_VIDEO_FORMAT_RGBP,
3193            #[cfg(feature = "v1_20")]
3194            Self::Bgrp => ffi::GST_VIDEO_FORMAT_BGRP,
3195            #[cfg(feature = "v1_20")]
3196            Self::Av12 => ffi::GST_VIDEO_FORMAT_AV12,
3197            #[cfg(feature = "v1_20")]
3198            Self::Argb64Le => ffi::GST_VIDEO_FORMAT_ARGB64_LE,
3199            #[cfg(feature = "v1_20")]
3200            Self::Argb64Be => ffi::GST_VIDEO_FORMAT_ARGB64_BE,
3201            #[cfg(feature = "v1_20")]
3202            Self::Rgba64Le => ffi::GST_VIDEO_FORMAT_RGBA64_LE,
3203            #[cfg(feature = "v1_20")]
3204            Self::Rgba64Be => ffi::GST_VIDEO_FORMAT_RGBA64_BE,
3205            #[cfg(feature = "v1_20")]
3206            Self::Bgra64Le => ffi::GST_VIDEO_FORMAT_BGRA64_LE,
3207            #[cfg(feature = "v1_20")]
3208            Self::Bgra64Be => ffi::GST_VIDEO_FORMAT_BGRA64_BE,
3209            #[cfg(feature = "v1_20")]
3210            Self::Abgr64Le => ffi::GST_VIDEO_FORMAT_ABGR64_LE,
3211            #[cfg(feature = "v1_20")]
3212            Self::Abgr64Be => ffi::GST_VIDEO_FORMAT_ABGR64_BE,
3213            #[cfg(feature = "v1_22")]
3214            Self::Nv1216l32s => ffi::GST_VIDEO_FORMAT_NV12_16L32S,
3215            #[cfg(feature = "v1_22")]
3216            Self::Nv128l128 => ffi::GST_VIDEO_FORMAT_NV12_8L128,
3217            #[cfg(feature = "v1_22")]
3218            Self::Nv1210be8l128 => ffi::GST_VIDEO_FORMAT_NV12_10BE_8L128,
3219            #[cfg(feature = "v1_24")]
3220            Self::Nv1210le404l4 => ffi::GST_VIDEO_FORMAT_NV12_10LE40_4L4,
3221            #[cfg(feature = "v1_24")]
3222            Self::DmaDrm => ffi::GST_VIDEO_FORMAT_DMA_DRM,
3223            #[cfg(feature = "v1_24")]
3224            Self::Mt2110t => ffi::GST_VIDEO_FORMAT_MT2110T,
3225            #[cfg(feature = "v1_24")]
3226            Self::Mt2110r => ffi::GST_VIDEO_FORMAT_MT2110R,
3227            #[cfg(feature = "v1_24")]
3228            Self::A422 => ffi::GST_VIDEO_FORMAT_A422,
3229            #[cfg(feature = "v1_24")]
3230            Self::A444 => ffi::GST_VIDEO_FORMAT_A444,
3231            #[cfg(feature = "v1_24")]
3232            Self::A44412le => ffi::GST_VIDEO_FORMAT_A444_12LE,
3233            #[cfg(feature = "v1_24")]
3234            Self::A44412be => ffi::GST_VIDEO_FORMAT_A444_12BE,
3235            #[cfg(feature = "v1_24")]
3236            Self::A42212le => ffi::GST_VIDEO_FORMAT_A422_12LE,
3237            #[cfg(feature = "v1_24")]
3238            Self::A42212be => ffi::GST_VIDEO_FORMAT_A422_12BE,
3239            #[cfg(feature = "v1_24")]
3240            Self::A42012le => ffi::GST_VIDEO_FORMAT_A420_12LE,
3241            #[cfg(feature = "v1_24")]
3242            Self::A42012be => ffi::GST_VIDEO_FORMAT_A420_12BE,
3243            #[cfg(feature = "v1_24")]
3244            Self::A44416le => ffi::GST_VIDEO_FORMAT_A444_16LE,
3245            #[cfg(feature = "v1_24")]
3246            Self::A44416be => ffi::GST_VIDEO_FORMAT_A444_16BE,
3247            #[cfg(feature = "v1_24")]
3248            Self::A42216le => ffi::GST_VIDEO_FORMAT_A422_16LE,
3249            #[cfg(feature = "v1_24")]
3250            Self::A42216be => ffi::GST_VIDEO_FORMAT_A422_16BE,
3251            #[cfg(feature = "v1_24")]
3252            Self::A42016le => ffi::GST_VIDEO_FORMAT_A420_16LE,
3253            #[cfg(feature = "v1_24")]
3254            Self::A42016be => ffi::GST_VIDEO_FORMAT_A420_16BE,
3255            #[cfg(feature = "v1_24")]
3256            Self::Gbr16le => ffi::GST_VIDEO_FORMAT_GBR_16LE,
3257            #[cfg(feature = "v1_24")]
3258            Self::Gbr16be => ffi::GST_VIDEO_FORMAT_GBR_16BE,
3259            #[cfg(feature = "v1_24")]
3260            Self::Rbga => ffi::GST_VIDEO_FORMAT_RBGA,
3261            #[cfg(feature = "v1_26")]
3262            Self::Y216Le => ffi::GST_VIDEO_FORMAT_Y216_LE,
3263            #[cfg(feature = "v1_26")]
3264            Self::Y216Be => ffi::GST_VIDEO_FORMAT_Y216_BE,
3265            #[cfg(feature = "v1_26")]
3266            Self::Y416Le => ffi::GST_VIDEO_FORMAT_Y416_LE,
3267            #[cfg(feature = "v1_26")]
3268            Self::Y416Be => ffi::GST_VIDEO_FORMAT_Y416_BE,
3269            #[cfg(feature = "v1_26")]
3270            Self::Gray10Le16 => ffi::GST_VIDEO_FORMAT_GRAY10_LE16,
3271            #[cfg(feature = "v1_28")]
3272            Self::Nv1610le40 => ffi::GST_VIDEO_FORMAT_NV16_10LE40,
3273            Self::__Unknown(value) => value,
3274        }
3275    }
3276}
3277
3278#[doc(hidden)]
3279impl FromGlib<ffi::GstVideoFormat> for VideoFormat {
3280    unsafe fn from_glib(value: ffi::GstVideoFormat) -> Self {
3281        skip_assert_initialized!();
3282
3283        match value {
3284            ffi::GST_VIDEO_FORMAT_UNKNOWN => Self::Unknown,
3285            ffi::GST_VIDEO_FORMAT_ENCODED => Self::Encoded,
3286            ffi::GST_VIDEO_FORMAT_I420 => Self::I420,
3287            ffi::GST_VIDEO_FORMAT_YV12 => Self::Yv12,
3288            ffi::GST_VIDEO_FORMAT_YUY2 => Self::Yuy2,
3289            ffi::GST_VIDEO_FORMAT_UYVY => Self::Uyvy,
3290            ffi::GST_VIDEO_FORMAT_AYUV => Self::Ayuv,
3291            ffi::GST_VIDEO_FORMAT_RGBx => Self::Rgbx,
3292            ffi::GST_VIDEO_FORMAT_BGRx => Self::Bgrx,
3293            ffi::GST_VIDEO_FORMAT_xRGB => Self::Xrgb,
3294            ffi::GST_VIDEO_FORMAT_xBGR => Self::Xbgr,
3295            ffi::GST_VIDEO_FORMAT_RGBA => Self::Rgba,
3296            ffi::GST_VIDEO_FORMAT_BGRA => Self::Bgra,
3297            ffi::GST_VIDEO_FORMAT_ARGB => Self::Argb,
3298            ffi::GST_VIDEO_FORMAT_ABGR => Self::Abgr,
3299            ffi::GST_VIDEO_FORMAT_RGB => Self::Rgb,
3300            ffi::GST_VIDEO_FORMAT_BGR => Self::Bgr,
3301            ffi::GST_VIDEO_FORMAT_Y41B => Self::Y41b,
3302            ffi::GST_VIDEO_FORMAT_Y42B => Self::Y42b,
3303            ffi::GST_VIDEO_FORMAT_YVYU => Self::Yvyu,
3304            ffi::GST_VIDEO_FORMAT_Y444 => Self::Y444,
3305            ffi::GST_VIDEO_FORMAT_v210 => Self::V210,
3306            ffi::GST_VIDEO_FORMAT_v216 => Self::V216,
3307            ffi::GST_VIDEO_FORMAT_NV12 => Self::Nv12,
3308            ffi::GST_VIDEO_FORMAT_NV21 => Self::Nv21,
3309            ffi::GST_VIDEO_FORMAT_GRAY8 => Self::Gray8,
3310            ffi::GST_VIDEO_FORMAT_GRAY16_BE => Self::Gray16Be,
3311            ffi::GST_VIDEO_FORMAT_GRAY16_LE => Self::Gray16Le,
3312            ffi::GST_VIDEO_FORMAT_v308 => Self::V308,
3313            ffi::GST_VIDEO_FORMAT_RGB16 => Self::Rgb16,
3314            ffi::GST_VIDEO_FORMAT_BGR16 => Self::Bgr16,
3315            ffi::GST_VIDEO_FORMAT_RGB15 => Self::Rgb15,
3316            ffi::GST_VIDEO_FORMAT_BGR15 => Self::Bgr15,
3317            ffi::GST_VIDEO_FORMAT_UYVP => Self::Uyvp,
3318            ffi::GST_VIDEO_FORMAT_A420 => Self::A420,
3319            ffi::GST_VIDEO_FORMAT_RGB8P => Self::Rgb8p,
3320            ffi::GST_VIDEO_FORMAT_YUV9 => Self::Yuv9,
3321            ffi::GST_VIDEO_FORMAT_YVU9 => Self::Yvu9,
3322            ffi::GST_VIDEO_FORMAT_IYU1 => Self::Iyu1,
3323            ffi::GST_VIDEO_FORMAT_ARGB64 => Self::Argb64,
3324            ffi::GST_VIDEO_FORMAT_AYUV64 => Self::Ayuv64,
3325            ffi::GST_VIDEO_FORMAT_r210 => Self::R210,
3326            ffi::GST_VIDEO_FORMAT_I420_10BE => Self::I42010be,
3327            ffi::GST_VIDEO_FORMAT_I420_10LE => Self::I42010le,
3328            ffi::GST_VIDEO_FORMAT_I422_10BE => Self::I42210be,
3329            ffi::GST_VIDEO_FORMAT_I422_10LE => Self::I42210le,
3330            ffi::GST_VIDEO_FORMAT_Y444_10BE => Self::Y44410be,
3331            ffi::GST_VIDEO_FORMAT_Y444_10LE => Self::Y44410le,
3332            ffi::GST_VIDEO_FORMAT_GBR => Self::Gbr,
3333            ffi::GST_VIDEO_FORMAT_GBR_10BE => Self::Gbr10be,
3334            ffi::GST_VIDEO_FORMAT_GBR_10LE => Self::Gbr10le,
3335            ffi::GST_VIDEO_FORMAT_NV16 => Self::Nv16,
3336            ffi::GST_VIDEO_FORMAT_NV24 => Self::Nv24,
3337            ffi::GST_VIDEO_FORMAT_NV12_64Z32 => Self::Nv1264z32,
3338            ffi::GST_VIDEO_FORMAT_A420_10BE => Self::A42010be,
3339            ffi::GST_VIDEO_FORMAT_A420_10LE => Self::A42010le,
3340            ffi::GST_VIDEO_FORMAT_A422_10BE => Self::A42210be,
3341            ffi::GST_VIDEO_FORMAT_A422_10LE => Self::A42210le,
3342            ffi::GST_VIDEO_FORMAT_A444_10BE => Self::A44410be,
3343            ffi::GST_VIDEO_FORMAT_A444_10LE => Self::A44410le,
3344            ffi::GST_VIDEO_FORMAT_NV61 => Self::Nv61,
3345            ffi::GST_VIDEO_FORMAT_P010_10BE => Self::P01010be,
3346            ffi::GST_VIDEO_FORMAT_P010_10LE => Self::P01010le,
3347            ffi::GST_VIDEO_FORMAT_IYU2 => Self::Iyu2,
3348            ffi::GST_VIDEO_FORMAT_VYUY => Self::Vyuy,
3349            ffi::GST_VIDEO_FORMAT_GBRA => Self::Gbra,
3350            ffi::GST_VIDEO_FORMAT_GBRA_10BE => Self::Gbra10be,
3351            ffi::GST_VIDEO_FORMAT_GBRA_10LE => Self::Gbra10le,
3352            ffi::GST_VIDEO_FORMAT_GBR_12BE => Self::Gbr12be,
3353            ffi::GST_VIDEO_FORMAT_GBR_12LE => Self::Gbr12le,
3354            ffi::GST_VIDEO_FORMAT_GBRA_12BE => Self::Gbra12be,
3355            ffi::GST_VIDEO_FORMAT_GBRA_12LE => Self::Gbra12le,
3356            ffi::GST_VIDEO_FORMAT_I420_12BE => Self::I42012be,
3357            ffi::GST_VIDEO_FORMAT_I420_12LE => Self::I42012le,
3358            ffi::GST_VIDEO_FORMAT_I422_12BE => Self::I42212be,
3359            ffi::GST_VIDEO_FORMAT_I422_12LE => Self::I42212le,
3360            ffi::GST_VIDEO_FORMAT_Y444_12BE => Self::Y44412be,
3361            ffi::GST_VIDEO_FORMAT_Y444_12LE => Self::Y44412le,
3362            ffi::GST_VIDEO_FORMAT_GRAY10_LE32 => Self::Gray10Le32,
3363            ffi::GST_VIDEO_FORMAT_NV12_10LE32 => Self::Nv1210le32,
3364            ffi::GST_VIDEO_FORMAT_NV16_10LE32 => Self::Nv1610le32,
3365            #[cfg(feature = "v1_16")]
3366            ffi::GST_VIDEO_FORMAT_NV12_10LE40 => Self::Nv1210le40,
3367            #[cfg(feature = "v1_16")]
3368            ffi::GST_VIDEO_FORMAT_Y210 => Self::Y210,
3369            #[cfg(feature = "v1_16")]
3370            ffi::GST_VIDEO_FORMAT_Y410 => Self::Y410,
3371            #[cfg(feature = "v1_16")]
3372            ffi::GST_VIDEO_FORMAT_VUYA => Self::Vuya,
3373            #[cfg(feature = "v1_16")]
3374            ffi::GST_VIDEO_FORMAT_BGR10A2_LE => Self::Bgr10a2Le,
3375            #[cfg(feature = "v1_18")]
3376            ffi::GST_VIDEO_FORMAT_RGB10A2_LE => Self::Rgb10a2Le,
3377            #[cfg(feature = "v1_18")]
3378            ffi::GST_VIDEO_FORMAT_Y444_16BE => Self::Y44416be,
3379            #[cfg(feature = "v1_18")]
3380            ffi::GST_VIDEO_FORMAT_Y444_16LE => Self::Y44416le,
3381            #[cfg(feature = "v1_18")]
3382            ffi::GST_VIDEO_FORMAT_P016_BE => Self::P016Be,
3383            #[cfg(feature = "v1_18")]
3384            ffi::GST_VIDEO_FORMAT_P016_LE => Self::P016Le,
3385            #[cfg(feature = "v1_18")]
3386            ffi::GST_VIDEO_FORMAT_P012_BE => Self::P012Be,
3387            #[cfg(feature = "v1_18")]
3388            ffi::GST_VIDEO_FORMAT_P012_LE => Self::P012Le,
3389            #[cfg(feature = "v1_18")]
3390            ffi::GST_VIDEO_FORMAT_Y212_BE => Self::Y212Be,
3391            #[cfg(feature = "v1_18")]
3392            ffi::GST_VIDEO_FORMAT_Y212_LE => Self::Y212Le,
3393            #[cfg(feature = "v1_18")]
3394            ffi::GST_VIDEO_FORMAT_Y412_BE => Self::Y412Be,
3395            #[cfg(feature = "v1_18")]
3396            ffi::GST_VIDEO_FORMAT_Y412_LE => Self::Y412Le,
3397            #[cfg(feature = "v1_18")]
3398            ffi::GST_VIDEO_FORMAT_NV12_4L4 => Self::Nv124l4,
3399            #[cfg(feature = "v1_18")]
3400            ffi::GST_VIDEO_FORMAT_NV12_32L32 => Self::Nv1232l32,
3401            #[cfg(feature = "v1_20")]
3402            ffi::GST_VIDEO_FORMAT_RGBP => Self::Rgbp,
3403            #[cfg(feature = "v1_20")]
3404            ffi::GST_VIDEO_FORMAT_BGRP => Self::Bgrp,
3405            #[cfg(feature = "v1_20")]
3406            ffi::GST_VIDEO_FORMAT_AV12 => Self::Av12,
3407            #[cfg(feature = "v1_20")]
3408            ffi::GST_VIDEO_FORMAT_ARGB64_LE => Self::Argb64Le,
3409            #[cfg(feature = "v1_20")]
3410            ffi::GST_VIDEO_FORMAT_ARGB64_BE => Self::Argb64Be,
3411            #[cfg(feature = "v1_20")]
3412            ffi::GST_VIDEO_FORMAT_RGBA64_LE => Self::Rgba64Le,
3413            #[cfg(feature = "v1_20")]
3414            ffi::GST_VIDEO_FORMAT_RGBA64_BE => Self::Rgba64Be,
3415            #[cfg(feature = "v1_20")]
3416            ffi::GST_VIDEO_FORMAT_BGRA64_LE => Self::Bgra64Le,
3417            #[cfg(feature = "v1_20")]
3418            ffi::GST_VIDEO_FORMAT_BGRA64_BE => Self::Bgra64Be,
3419            #[cfg(feature = "v1_20")]
3420            ffi::GST_VIDEO_FORMAT_ABGR64_LE => Self::Abgr64Le,
3421            #[cfg(feature = "v1_20")]
3422            ffi::GST_VIDEO_FORMAT_ABGR64_BE => Self::Abgr64Be,
3423            #[cfg(feature = "v1_22")]
3424            ffi::GST_VIDEO_FORMAT_NV12_16L32S => Self::Nv1216l32s,
3425            #[cfg(feature = "v1_22")]
3426            ffi::GST_VIDEO_FORMAT_NV12_8L128 => Self::Nv128l128,
3427            #[cfg(feature = "v1_22")]
3428            ffi::GST_VIDEO_FORMAT_NV12_10BE_8L128 => Self::Nv1210be8l128,
3429            #[cfg(feature = "v1_24")]
3430            ffi::GST_VIDEO_FORMAT_NV12_10LE40_4L4 => Self::Nv1210le404l4,
3431            #[cfg(feature = "v1_24")]
3432            ffi::GST_VIDEO_FORMAT_DMA_DRM => Self::DmaDrm,
3433            #[cfg(feature = "v1_24")]
3434            ffi::GST_VIDEO_FORMAT_MT2110T => Self::Mt2110t,
3435            #[cfg(feature = "v1_24")]
3436            ffi::GST_VIDEO_FORMAT_MT2110R => Self::Mt2110r,
3437            #[cfg(feature = "v1_24")]
3438            ffi::GST_VIDEO_FORMAT_A422 => Self::A422,
3439            #[cfg(feature = "v1_24")]
3440            ffi::GST_VIDEO_FORMAT_A444 => Self::A444,
3441            #[cfg(feature = "v1_24")]
3442            ffi::GST_VIDEO_FORMAT_A444_12LE => Self::A44412le,
3443            #[cfg(feature = "v1_24")]
3444            ffi::GST_VIDEO_FORMAT_A444_12BE => Self::A44412be,
3445            #[cfg(feature = "v1_24")]
3446            ffi::GST_VIDEO_FORMAT_A422_12LE => Self::A42212le,
3447            #[cfg(feature = "v1_24")]
3448            ffi::GST_VIDEO_FORMAT_A422_12BE => Self::A42212be,
3449            #[cfg(feature = "v1_24")]
3450            ffi::GST_VIDEO_FORMAT_A420_12LE => Self::A42012le,
3451            #[cfg(feature = "v1_24")]
3452            ffi::GST_VIDEO_FORMAT_A420_12BE => Self::A42012be,
3453            #[cfg(feature = "v1_24")]
3454            ffi::GST_VIDEO_FORMAT_A444_16LE => Self::A44416le,
3455            #[cfg(feature = "v1_24")]
3456            ffi::GST_VIDEO_FORMAT_A444_16BE => Self::A44416be,
3457            #[cfg(feature = "v1_24")]
3458            ffi::GST_VIDEO_FORMAT_A422_16LE => Self::A42216le,
3459            #[cfg(feature = "v1_24")]
3460            ffi::GST_VIDEO_FORMAT_A422_16BE => Self::A42216be,
3461            #[cfg(feature = "v1_24")]
3462            ffi::GST_VIDEO_FORMAT_A420_16LE => Self::A42016le,
3463            #[cfg(feature = "v1_24")]
3464            ffi::GST_VIDEO_FORMAT_A420_16BE => Self::A42016be,
3465            #[cfg(feature = "v1_24")]
3466            ffi::GST_VIDEO_FORMAT_GBR_16LE => Self::Gbr16le,
3467            #[cfg(feature = "v1_24")]
3468            ffi::GST_VIDEO_FORMAT_GBR_16BE => Self::Gbr16be,
3469            #[cfg(feature = "v1_24")]
3470            ffi::GST_VIDEO_FORMAT_RBGA => Self::Rbga,
3471            #[cfg(feature = "v1_26")]
3472            ffi::GST_VIDEO_FORMAT_Y216_LE => Self::Y216Le,
3473            #[cfg(feature = "v1_26")]
3474            ffi::GST_VIDEO_FORMAT_Y216_BE => Self::Y216Be,
3475            #[cfg(feature = "v1_26")]
3476            ffi::GST_VIDEO_FORMAT_Y416_LE => Self::Y416Le,
3477            #[cfg(feature = "v1_26")]
3478            ffi::GST_VIDEO_FORMAT_Y416_BE => Self::Y416Be,
3479            #[cfg(feature = "v1_26")]
3480            ffi::GST_VIDEO_FORMAT_GRAY10_LE16 => Self::Gray10Le16,
3481            #[cfg(feature = "v1_28")]
3482            ffi::GST_VIDEO_FORMAT_NV16_10LE40 => Self::Nv1610le40,
3483            value => Self::__Unknown(value),
3484        }
3485    }
3486}
3487
3488impl StaticType for VideoFormat {
3489    #[inline]
3490    #[doc(alias = "gst_video_format_get_type")]
3491    fn static_type() -> glib::Type {
3492        unsafe { from_glib(ffi::gst_video_format_get_type()) }
3493    }
3494}
3495
3496impl glib::HasParamSpec for VideoFormat {
3497    type ParamSpec = glib::ParamSpecEnum;
3498    type SetValue = Self;
3499    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3500
3501    fn param_spec_builder() -> Self::BuilderFn {
3502        Self::ParamSpec::builder_with_default
3503    }
3504}
3505
3506impl glib::value::ValueType for VideoFormat {
3507    type Type = Self;
3508}
3509
3510unsafe impl<'a> glib::value::FromValue<'a> for VideoFormat {
3511    type Checker = glib::value::GenericValueTypeChecker<Self>;
3512
3513    #[inline]
3514    unsafe fn from_value(value: &'a glib::Value) -> Self {
3515        skip_assert_initialized!();
3516        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
3517    }
3518}
3519
3520impl ToValue for VideoFormat {
3521    #[inline]
3522    fn to_value(&self) -> glib::Value {
3523        let mut value = glib::Value::for_value_type::<Self>();
3524        unsafe {
3525            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3526        }
3527        value
3528    }
3529
3530    #[inline]
3531    fn value_type(&self) -> glib::Type {
3532        Self::static_type()
3533    }
3534}
3535
3536impl From<VideoFormat> for glib::Value {
3537    #[inline]
3538    fn from(v: VideoFormat) -> Self {
3539        skip_assert_initialized!();
3540        ToValue::to_value(&v)
3541    }
3542}
3543
3544#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3545#[non_exhaustive]
3546#[doc(alias = "GstVideoGammaMode")]
3547pub enum VideoGammaMode {
3548    /// disable gamma handling
3549    #[doc(alias = "GST_VIDEO_GAMMA_MODE_NONE")]
3550    None,
3551    /// convert between input and output gamma
3552    /// Different gamma conversion modes
3553    #[doc(alias = "GST_VIDEO_GAMMA_MODE_REMAP")]
3554    Remap,
3555    #[doc(hidden)]
3556    __Unknown(i32),
3557}
3558
3559#[doc(hidden)]
3560impl IntoGlib for VideoGammaMode {
3561    type GlibType = ffi::GstVideoGammaMode;
3562
3563    #[inline]
3564    fn into_glib(self) -> ffi::GstVideoGammaMode {
3565        match self {
3566            Self::None => ffi::GST_VIDEO_GAMMA_MODE_NONE,
3567            Self::Remap => ffi::GST_VIDEO_GAMMA_MODE_REMAP,
3568            Self::__Unknown(value) => value,
3569        }
3570    }
3571}
3572
3573#[doc(hidden)]
3574impl FromGlib<ffi::GstVideoGammaMode> for VideoGammaMode {
3575    #[inline]
3576    unsafe fn from_glib(value: ffi::GstVideoGammaMode) -> Self {
3577        skip_assert_initialized!();
3578
3579        match value {
3580            ffi::GST_VIDEO_GAMMA_MODE_NONE => Self::None,
3581            ffi::GST_VIDEO_GAMMA_MODE_REMAP => Self::Remap,
3582            value => Self::__Unknown(value),
3583        }
3584    }
3585}
3586
3587impl StaticType for VideoGammaMode {
3588    #[inline]
3589    #[doc(alias = "gst_video_gamma_mode_get_type")]
3590    fn static_type() -> glib::Type {
3591        unsafe { from_glib(ffi::gst_video_gamma_mode_get_type()) }
3592    }
3593}
3594
3595impl glib::HasParamSpec for VideoGammaMode {
3596    type ParamSpec = glib::ParamSpecEnum;
3597    type SetValue = Self;
3598    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3599
3600    fn param_spec_builder() -> Self::BuilderFn {
3601        Self::ParamSpec::builder_with_default
3602    }
3603}
3604
3605impl glib::value::ValueType for VideoGammaMode {
3606    type Type = Self;
3607}
3608
3609unsafe impl<'a> glib::value::FromValue<'a> for VideoGammaMode {
3610    type Checker = glib::value::GenericValueTypeChecker<Self>;
3611
3612    #[inline]
3613    unsafe fn from_value(value: &'a glib::Value) -> Self {
3614        skip_assert_initialized!();
3615        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
3616    }
3617}
3618
3619impl ToValue for VideoGammaMode {
3620    #[inline]
3621    fn to_value(&self) -> glib::Value {
3622        let mut value = glib::Value::for_value_type::<Self>();
3623        unsafe {
3624            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3625        }
3626        value
3627    }
3628
3629    #[inline]
3630    fn value_type(&self) -> glib::Type {
3631        Self::static_type()
3632    }
3633}
3634
3635impl From<VideoGammaMode> for glib::Value {
3636    #[inline]
3637    fn from(v: VideoGammaMode) -> Self {
3638        skip_assert_initialized!();
3639        ToValue::to_value(&v)
3640    }
3641}
3642
3643/// The possible values of the [`VideoInterlaceMode`][crate::VideoInterlaceMode] describing the interlace
3644/// mode of the stream.
3645#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3646#[non_exhaustive]
3647#[doc(alias = "GstVideoInterlaceMode")]
3648pub enum VideoInterlaceMode {
3649    /// all frames are progressive
3650    #[doc(alias = "GST_VIDEO_INTERLACE_MODE_PROGRESSIVE")]
3651    Progressive,
3652    /// 2 fields are interleaved in one video
3653    ///  frame. Extra buffer flags describe the field order.
3654    #[doc(alias = "GST_VIDEO_INTERLACE_MODE_INTERLEAVED")]
3655    Interleaved,
3656    /// frames contains both interlaced and
3657    ///  progressive video, the buffer flags describe the frame and fields.
3658    #[doc(alias = "GST_VIDEO_INTERLACE_MODE_MIXED")]
3659    Mixed,
3660    /// 2 fields are stored in one buffer, use the
3661    ///  frame ID to get access to the required field. For multiview (the
3662    ///  'views' property > 1) the fields of view N can be found at frame ID
3663    ///  (N * 2) and (N * 2) + 1.
3664    ///  Each field has only half the amount of lines as noted in the
3665    ///  height property. This mode requires multiple GstVideoMeta metadata
3666    ///  to describe the fields.
3667    #[doc(alias = "GST_VIDEO_INTERLACE_MODE_FIELDS")]
3668    Fields,
3669    /// 1 field is stored in one buffer,
3670    ///  `GST_VIDEO_BUFFER_FLAG_TF` or `GST_VIDEO_BUFFER_FLAG_BF` indicates if
3671    ///  the buffer is carrying the top or bottom field, respectively. The top and
3672    ///  bottom buffers must alternate in the pipeline, with this mode
3673    ///  (Since: 1.16).
3674    #[cfg(feature = "v1_16")]
3675    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
3676    #[doc(alias = "GST_VIDEO_INTERLACE_MODE_ALTERNATE")]
3677    Alternate,
3678    #[doc(hidden)]
3679    __Unknown(i32),
3680}
3681
3682impl VideoInterlaceMode {
3683    #[doc(alias = "gst_video_interlace_mode_from_string")]
3684    pub fn from_string(mode: &str) -> VideoInterlaceMode {
3685        assert_initialized_main_thread!();
3686        unsafe {
3687            from_glib(ffi::gst_video_interlace_mode_from_string(
3688                mode.to_glib_none().0,
3689            ))
3690        }
3691    }
3692
3693    pub fn to_str<'a>(self) -> &'a GStr {
3694        unsafe {
3695            GStr::from_ptr(
3696                ffi::gst_video_interlace_mode_to_string(self.into_glib())
3697                    .as_ref()
3698                    .expect("gst_video_interlace_mode_to_string returned NULL"),
3699            )
3700        }
3701    }
3702}
3703
3704impl std::fmt::Display for VideoInterlaceMode {
3705    #[inline]
3706    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
3707        f.write_str(&self.to_str())
3708    }
3709}
3710
3711#[doc(hidden)]
3712impl IntoGlib for VideoInterlaceMode {
3713    type GlibType = ffi::GstVideoInterlaceMode;
3714
3715    #[inline]
3716    fn into_glib(self) -> ffi::GstVideoInterlaceMode {
3717        match self {
3718            Self::Progressive => ffi::GST_VIDEO_INTERLACE_MODE_PROGRESSIVE,
3719            Self::Interleaved => ffi::GST_VIDEO_INTERLACE_MODE_INTERLEAVED,
3720            Self::Mixed => ffi::GST_VIDEO_INTERLACE_MODE_MIXED,
3721            Self::Fields => ffi::GST_VIDEO_INTERLACE_MODE_FIELDS,
3722            #[cfg(feature = "v1_16")]
3723            Self::Alternate => ffi::GST_VIDEO_INTERLACE_MODE_ALTERNATE,
3724            Self::__Unknown(value) => value,
3725        }
3726    }
3727}
3728
3729#[doc(hidden)]
3730impl FromGlib<ffi::GstVideoInterlaceMode> for VideoInterlaceMode {
3731    #[inline]
3732    unsafe fn from_glib(value: ffi::GstVideoInterlaceMode) -> Self {
3733        skip_assert_initialized!();
3734
3735        match value {
3736            ffi::GST_VIDEO_INTERLACE_MODE_PROGRESSIVE => Self::Progressive,
3737            ffi::GST_VIDEO_INTERLACE_MODE_INTERLEAVED => Self::Interleaved,
3738            ffi::GST_VIDEO_INTERLACE_MODE_MIXED => Self::Mixed,
3739            ffi::GST_VIDEO_INTERLACE_MODE_FIELDS => Self::Fields,
3740            #[cfg(feature = "v1_16")]
3741            ffi::GST_VIDEO_INTERLACE_MODE_ALTERNATE => Self::Alternate,
3742            value => Self::__Unknown(value),
3743        }
3744    }
3745}
3746
3747impl StaticType for VideoInterlaceMode {
3748    #[inline]
3749    #[doc(alias = "gst_video_interlace_mode_get_type")]
3750    fn static_type() -> glib::Type {
3751        unsafe { from_glib(ffi::gst_video_interlace_mode_get_type()) }
3752    }
3753}
3754
3755impl glib::HasParamSpec for VideoInterlaceMode {
3756    type ParamSpec = glib::ParamSpecEnum;
3757    type SetValue = Self;
3758    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3759
3760    fn param_spec_builder() -> Self::BuilderFn {
3761        Self::ParamSpec::builder_with_default
3762    }
3763}
3764
3765impl glib::value::ValueType for VideoInterlaceMode {
3766    type Type = Self;
3767}
3768
3769unsafe impl<'a> glib::value::FromValue<'a> for VideoInterlaceMode {
3770    type Checker = glib::value::GenericValueTypeChecker<Self>;
3771
3772    #[inline]
3773    unsafe fn from_value(value: &'a glib::Value) -> Self {
3774        skip_assert_initialized!();
3775        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
3776    }
3777}
3778
3779impl ToValue for VideoInterlaceMode {
3780    #[inline]
3781    fn to_value(&self) -> glib::Value {
3782        let mut value = glib::Value::for_value_type::<Self>();
3783        unsafe {
3784            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3785        }
3786        value
3787    }
3788
3789    #[inline]
3790    fn value_type(&self) -> glib::Type {
3791        Self::static_type()
3792    }
3793}
3794
3795impl From<VideoInterlaceMode> for glib::Value {
3796    #[inline]
3797    fn from(v: VideoInterlaceMode) -> Self {
3798        skip_assert_initialized!();
3799        ToValue::to_value(&v)
3800    }
3801}
3802
3803/// Different color matrix conversion modes
3804#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3805#[non_exhaustive]
3806#[doc(alias = "GstVideoMatrixMode")]
3807pub enum VideoMatrixMode {
3808    /// do conversion between color matrices
3809    #[doc(alias = "GST_VIDEO_MATRIX_MODE_FULL")]
3810    Full,
3811    /// use the input color matrix to convert
3812    ///  to and from R'G'B
3813    #[doc(alias = "GST_VIDEO_MATRIX_MODE_INPUT_ONLY")]
3814    InputOnly,
3815    /// use the output color matrix to convert
3816    ///  to and from R'G'B
3817    #[doc(alias = "GST_VIDEO_MATRIX_MODE_OUTPUT_ONLY")]
3818    OutputOnly,
3819    /// disable color matrix conversion.
3820    #[doc(alias = "GST_VIDEO_MATRIX_MODE_NONE")]
3821    None,
3822    #[doc(hidden)]
3823    __Unknown(i32),
3824}
3825
3826#[doc(hidden)]
3827impl IntoGlib for VideoMatrixMode {
3828    type GlibType = ffi::GstVideoMatrixMode;
3829
3830    #[inline]
3831    fn into_glib(self) -> ffi::GstVideoMatrixMode {
3832        match self {
3833            Self::Full => ffi::GST_VIDEO_MATRIX_MODE_FULL,
3834            Self::InputOnly => ffi::GST_VIDEO_MATRIX_MODE_INPUT_ONLY,
3835            Self::OutputOnly => ffi::GST_VIDEO_MATRIX_MODE_OUTPUT_ONLY,
3836            Self::None => ffi::GST_VIDEO_MATRIX_MODE_NONE,
3837            Self::__Unknown(value) => value,
3838        }
3839    }
3840}
3841
3842#[doc(hidden)]
3843impl FromGlib<ffi::GstVideoMatrixMode> for VideoMatrixMode {
3844    #[inline]
3845    unsafe fn from_glib(value: ffi::GstVideoMatrixMode) -> Self {
3846        skip_assert_initialized!();
3847
3848        match value {
3849            ffi::GST_VIDEO_MATRIX_MODE_FULL => Self::Full,
3850            ffi::GST_VIDEO_MATRIX_MODE_INPUT_ONLY => Self::InputOnly,
3851            ffi::GST_VIDEO_MATRIX_MODE_OUTPUT_ONLY => Self::OutputOnly,
3852            ffi::GST_VIDEO_MATRIX_MODE_NONE => Self::None,
3853            value => Self::__Unknown(value),
3854        }
3855    }
3856}
3857
3858impl StaticType for VideoMatrixMode {
3859    #[inline]
3860    #[doc(alias = "gst_video_matrix_mode_get_type")]
3861    fn static_type() -> glib::Type {
3862        unsafe { from_glib(ffi::gst_video_matrix_mode_get_type()) }
3863    }
3864}
3865
3866impl glib::HasParamSpec for VideoMatrixMode {
3867    type ParamSpec = glib::ParamSpecEnum;
3868    type SetValue = Self;
3869    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3870
3871    fn param_spec_builder() -> Self::BuilderFn {
3872        Self::ParamSpec::builder_with_default
3873    }
3874}
3875
3876impl glib::value::ValueType for VideoMatrixMode {
3877    type Type = Self;
3878}
3879
3880unsafe impl<'a> glib::value::FromValue<'a> for VideoMatrixMode {
3881    type Checker = glib::value::GenericValueTypeChecker<Self>;
3882
3883    #[inline]
3884    unsafe fn from_value(value: &'a glib::Value) -> Self {
3885        skip_assert_initialized!();
3886        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
3887    }
3888}
3889
3890impl ToValue for VideoMatrixMode {
3891    #[inline]
3892    fn to_value(&self) -> glib::Value {
3893        let mut value = glib::Value::for_value_type::<Self>();
3894        unsafe {
3895            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3896        }
3897        value
3898    }
3899
3900    #[inline]
3901    fn value_type(&self) -> glib::Type {
3902        Self::static_type()
3903    }
3904}
3905
3906impl From<VideoMatrixMode> for glib::Value {
3907    #[inline]
3908    fn from(v: VideoMatrixMode) -> Self {
3909        skip_assert_initialized!();
3910        ToValue::to_value(&v)
3911    }
3912}
3913
3914/// [`VideoMultiviewFramePacking`][crate::VideoMultiviewFramePacking] represents the subset of [`VideoMultiviewMode`][crate::VideoMultiviewMode]
3915/// values that can be applied to any video frame without needing extra metadata.
3916/// It can be used by elements that provide a property to override the
3917/// multiview interpretation of a video stream when the video doesn't contain
3918/// any markers.
3919///
3920/// This enum is used (for example) on playbin, to re-interpret a played
3921/// video stream as a stereoscopic video. The individual enum values are
3922/// equivalent to and have the same value as the matching [`VideoMultiviewMode`][crate::VideoMultiviewMode].
3923#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3924#[non_exhaustive]
3925#[doc(alias = "GstVideoMultiviewFramePacking")]
3926pub enum VideoMultiviewFramePacking {
3927    /// A special value indicating
3928    /// no frame packing info.
3929    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE")]
3930    None,
3931    /// All frames are monoscopic.
3932    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_MONO")]
3933    Mono,
3934    /// All frames represent a left-eye view.
3935    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_LEFT")]
3936    Left,
3937    /// All frames represent a right-eye view.
3938    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_RIGHT")]
3939    Right,
3940    /// Left and right eye views are
3941    /// provided in the left and right half of the frame respectively.
3942    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE")]
3943    SideBySide,
3944    /// Left and right eye
3945    /// views are provided in the left and right half of the frame, but
3946    /// have been sampled using quincunx method, with half-pixel offset
3947    /// between the 2 views.
3948    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE_QUINCUNX")]
3949    SideBySideQuincunx,
3950    /// Alternating vertical
3951    /// columns of pixels represent the left and right eye view respectively.
3952    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_COLUMN_INTERLEAVED")]
3953    ColumnInterleaved,
3954    /// Alternating horizontal
3955    /// rows of pixels represent the left and right eye view respectively.
3956    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_ROW_INTERLEAVED")]
3957    RowInterleaved,
3958    /// The top half of the frame
3959    /// contains the left eye, and the bottom half the right eye.
3960    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_TOP_BOTTOM")]
3961    TopBottom,
3962    /// Pixels are arranged with
3963    /// alternating pixels representing left and right eye views in a
3964    /// checkerboard fashion.
3965    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_CHECKERBOARD")]
3966    Checkerboard,
3967    #[doc(hidden)]
3968    __Unknown(i32),
3969}
3970
3971#[doc(hidden)]
3972impl IntoGlib for VideoMultiviewFramePacking {
3973    type GlibType = ffi::GstVideoMultiviewFramePacking;
3974
3975    #[inline]
3976    fn into_glib(self) -> ffi::GstVideoMultiviewFramePacking {
3977        match self {
3978            Self::None => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE,
3979            Self::Mono => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_MONO,
3980            Self::Left => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_LEFT,
3981            Self::Right => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_RIGHT,
3982            Self::SideBySide => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE,
3983            Self::SideBySideQuincunx => {
3984                ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE_QUINCUNX
3985            }
3986            Self::ColumnInterleaved => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_COLUMN_INTERLEAVED,
3987            Self::RowInterleaved => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_ROW_INTERLEAVED,
3988            Self::TopBottom => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_TOP_BOTTOM,
3989            Self::Checkerboard => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_CHECKERBOARD,
3990            Self::__Unknown(value) => value,
3991        }
3992    }
3993}
3994
3995#[doc(hidden)]
3996impl FromGlib<ffi::GstVideoMultiviewFramePacking> for VideoMultiviewFramePacking {
3997    #[inline]
3998    unsafe fn from_glib(value: ffi::GstVideoMultiviewFramePacking) -> Self {
3999        skip_assert_initialized!();
4000
4001        match value {
4002            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE => Self::None,
4003            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_MONO => Self::Mono,
4004            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_LEFT => Self::Left,
4005            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_RIGHT => Self::Right,
4006            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE => Self::SideBySide,
4007            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE_QUINCUNX => {
4008                Self::SideBySideQuincunx
4009            }
4010            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_COLUMN_INTERLEAVED => Self::ColumnInterleaved,
4011            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_ROW_INTERLEAVED => Self::RowInterleaved,
4012            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_TOP_BOTTOM => Self::TopBottom,
4013            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_CHECKERBOARD => Self::Checkerboard,
4014            value => Self::__Unknown(value),
4015        }
4016    }
4017}
4018
4019impl StaticType for VideoMultiviewFramePacking {
4020    #[inline]
4021    #[doc(alias = "gst_video_multiview_frame_packing_get_type")]
4022    fn static_type() -> glib::Type {
4023        unsafe { from_glib(ffi::gst_video_multiview_frame_packing_get_type()) }
4024    }
4025}
4026
4027impl glib::HasParamSpec for VideoMultiviewFramePacking {
4028    type ParamSpec = glib::ParamSpecEnum;
4029    type SetValue = Self;
4030    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4031
4032    fn param_spec_builder() -> Self::BuilderFn {
4033        Self::ParamSpec::builder_with_default
4034    }
4035}
4036
4037impl glib::value::ValueType for VideoMultiviewFramePacking {
4038    type Type = Self;
4039}
4040
4041unsafe impl<'a> glib::value::FromValue<'a> for VideoMultiviewFramePacking {
4042    type Checker = glib::value::GenericValueTypeChecker<Self>;
4043
4044    #[inline]
4045    unsafe fn from_value(value: &'a glib::Value) -> Self {
4046        skip_assert_initialized!();
4047        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
4048    }
4049}
4050
4051impl ToValue for VideoMultiviewFramePacking {
4052    #[inline]
4053    fn to_value(&self) -> glib::Value {
4054        let mut value = glib::Value::for_value_type::<Self>();
4055        unsafe {
4056            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4057        }
4058        value
4059    }
4060
4061    #[inline]
4062    fn value_type(&self) -> glib::Type {
4063        Self::static_type()
4064    }
4065}
4066
4067impl From<VideoMultiviewFramePacking> for glib::Value {
4068    #[inline]
4069    fn from(v: VideoMultiviewFramePacking) -> Self {
4070        skip_assert_initialized!();
4071        ToValue::to_value(&v)
4072    }
4073}
4074
4075/// All possible stereoscopic 3D and multiview representations.
4076/// In conjunction with [`VideoMultiviewFlags`][crate::VideoMultiviewFlags], describes how
4077/// multiview content is being transported in the stream.
4078#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4079#[non_exhaustive]
4080#[doc(alias = "GstVideoMultiviewMode")]
4081pub enum VideoMultiviewMode {
4082    /// A special value indicating
4083    /// no multiview information. Used in GstVideoInfo and other places to
4084    /// indicate that no specific multiview handling has been requested or
4085    /// provided. This value is never carried on caps.
4086    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_NONE")]
4087    None,
4088    /// All frames are monoscopic.
4089    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_MONO")]
4090    Mono,
4091    /// All frames represent a left-eye view.
4092    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_LEFT")]
4093    Left,
4094    /// All frames represent a right-eye view.
4095    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_RIGHT")]
4096    Right,
4097    /// Left and right eye views are
4098    /// provided in the left and right half of the frame respectively.
4099    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE")]
4100    SideBySide,
4101    /// Left and right eye
4102    /// views are provided in the left and right half of the frame, but
4103    /// have been sampled using quincunx method, with half-pixel offset
4104    /// between the 2 views.
4105    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX")]
4106    SideBySideQuincunx,
4107    /// Alternating vertical
4108    /// columns of pixels represent the left and right eye view respectively.
4109    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED")]
4110    ColumnInterleaved,
4111    /// Alternating horizontal
4112    /// rows of pixels represent the left and right eye view respectively.
4113    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED")]
4114    RowInterleaved,
4115    /// The top half of the frame
4116    /// contains the left eye, and the bottom half the right eye.
4117    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM")]
4118    TopBottom,
4119    /// Pixels are arranged with
4120    /// alternating pixels representing left and right eye views in a
4121    /// checkerboard fashion.
4122    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD")]
4123    Checkerboard,
4124    /// Left and right eye views
4125    /// are provided in separate frames alternately.
4126    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME")]
4127    FrameByFrame,
4128    /// Multiple
4129    /// independent views are provided in separate frames in sequence.
4130    /// This method only applies to raw video buffers at the moment.
4131    /// Specific view identification is via the `GstVideoMultiviewMeta`
4132    /// and [`VideoMeta`][crate::VideoMeta](s) on raw video buffers.
4133    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_MULTIVIEW_FRAME_BY_FRAME")]
4134    MultiviewFrameByFrame,
4135    /// Multiple views are
4136    /// provided as separate [`gst::Memory`][crate::gst::Memory] framebuffers attached to each
4137    /// [`gst::Buffer`][crate::gst::Buffer], described by the `GstVideoMultiviewMeta`
4138    /// and [`VideoMeta`][crate::VideoMeta](s)
4139    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_SEPARATED")]
4140    Separated,
4141    #[doc(hidden)]
4142    __Unknown(i32),
4143}
4144
4145impl VideoMultiviewMode {
4146    #[doc(alias = "gst_video_multiview_mode_from_caps_string")]
4147    pub fn from_caps_string(caps_mview_mode: &str) -> VideoMultiviewMode {
4148        assert_initialized_main_thread!();
4149        unsafe {
4150            from_glib(ffi::gst_video_multiview_mode_from_caps_string(
4151                caps_mview_mode.to_glib_none().0,
4152            ))
4153        }
4154    }
4155
4156    #[doc(alias = "gst_video_multiview_mode_to_caps_string")]
4157    pub fn to_caps_string(self) -> Option<glib::GString> {
4158        assert_initialized_main_thread!();
4159        unsafe {
4160            from_glib_none(ffi::gst_video_multiview_mode_to_caps_string(
4161                self.into_glib(),
4162            ))
4163        }
4164    }
4165}
4166
4167#[doc(hidden)]
4168impl IntoGlib for VideoMultiviewMode {
4169    type GlibType = ffi::GstVideoMultiviewMode;
4170
4171    fn into_glib(self) -> ffi::GstVideoMultiviewMode {
4172        match self {
4173            Self::None => ffi::GST_VIDEO_MULTIVIEW_MODE_NONE,
4174            Self::Mono => ffi::GST_VIDEO_MULTIVIEW_MODE_MONO,
4175            Self::Left => ffi::GST_VIDEO_MULTIVIEW_MODE_LEFT,
4176            Self::Right => ffi::GST_VIDEO_MULTIVIEW_MODE_RIGHT,
4177            Self::SideBySide => ffi::GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE,
4178            Self::SideBySideQuincunx => ffi::GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX,
4179            Self::ColumnInterleaved => ffi::GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED,
4180            Self::RowInterleaved => ffi::GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED,
4181            Self::TopBottom => ffi::GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM,
4182            Self::Checkerboard => ffi::GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD,
4183            Self::FrameByFrame => ffi::GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME,
4184            Self::MultiviewFrameByFrame => ffi::GST_VIDEO_MULTIVIEW_MODE_MULTIVIEW_FRAME_BY_FRAME,
4185            Self::Separated => ffi::GST_VIDEO_MULTIVIEW_MODE_SEPARATED,
4186            Self::__Unknown(value) => value,
4187        }
4188    }
4189}
4190
4191#[doc(hidden)]
4192impl FromGlib<ffi::GstVideoMultiviewMode> for VideoMultiviewMode {
4193    unsafe fn from_glib(value: ffi::GstVideoMultiviewMode) -> Self {
4194        skip_assert_initialized!();
4195
4196        match value {
4197            ffi::GST_VIDEO_MULTIVIEW_MODE_NONE => Self::None,
4198            ffi::GST_VIDEO_MULTIVIEW_MODE_MONO => Self::Mono,
4199            ffi::GST_VIDEO_MULTIVIEW_MODE_LEFT => Self::Left,
4200            ffi::GST_VIDEO_MULTIVIEW_MODE_RIGHT => Self::Right,
4201            ffi::GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE => Self::SideBySide,
4202            ffi::GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX => Self::SideBySideQuincunx,
4203            ffi::GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED => Self::ColumnInterleaved,
4204            ffi::GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED => Self::RowInterleaved,
4205            ffi::GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM => Self::TopBottom,
4206            ffi::GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD => Self::Checkerboard,
4207            ffi::GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME => Self::FrameByFrame,
4208            ffi::GST_VIDEO_MULTIVIEW_MODE_MULTIVIEW_FRAME_BY_FRAME => Self::MultiviewFrameByFrame,
4209            ffi::GST_VIDEO_MULTIVIEW_MODE_SEPARATED => Self::Separated,
4210            value => Self::__Unknown(value),
4211        }
4212    }
4213}
4214
4215impl StaticType for VideoMultiviewMode {
4216    #[inline]
4217    #[doc(alias = "gst_video_multiview_mode_get_type")]
4218    fn static_type() -> glib::Type {
4219        unsafe { from_glib(ffi::gst_video_multiview_mode_get_type()) }
4220    }
4221}
4222
4223impl glib::HasParamSpec for VideoMultiviewMode {
4224    type ParamSpec = glib::ParamSpecEnum;
4225    type SetValue = Self;
4226    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4227
4228    fn param_spec_builder() -> Self::BuilderFn {
4229        Self::ParamSpec::builder_with_default
4230    }
4231}
4232
4233impl glib::value::ValueType for VideoMultiviewMode {
4234    type Type = Self;
4235}
4236
4237unsafe impl<'a> glib::value::FromValue<'a> for VideoMultiviewMode {
4238    type Checker = glib::value::GenericValueTypeChecker<Self>;
4239
4240    #[inline]
4241    unsafe fn from_value(value: &'a glib::Value) -> Self {
4242        skip_assert_initialized!();
4243        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
4244    }
4245}
4246
4247impl ToValue for VideoMultiviewMode {
4248    #[inline]
4249    fn to_value(&self) -> glib::Value {
4250        let mut value = glib::Value::for_value_type::<Self>();
4251        unsafe {
4252            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4253        }
4254        value
4255    }
4256
4257    #[inline]
4258    fn value_type(&self) -> glib::Type {
4259        Self::static_type()
4260    }
4261}
4262
4263impl From<VideoMultiviewMode> for glib::Value {
4264    #[inline]
4265    fn from(v: VideoMultiviewMode) -> Self {
4266        skip_assert_initialized!();
4267        ToValue::to_value(&v)
4268    }
4269}
4270
4271/// The different video orientation methods.
4272#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4273#[non_exhaustive]
4274#[doc(alias = "GstVideoOrientationMethod")]
4275pub enum VideoOrientationMethod {
4276    /// Identity (no rotation)
4277    #[doc(alias = "GST_VIDEO_ORIENTATION_IDENTITY")]
4278    Identity,
4279    /// Rotate clockwise 90 degrees
4280    #[doc(alias = "GST_VIDEO_ORIENTATION_90R")]
4281    _90r,
4282    /// Rotate 180 degrees
4283    #[doc(alias = "GST_VIDEO_ORIENTATION_180")]
4284    _180,
4285    /// Rotate counter-clockwise 90 degrees
4286    #[doc(alias = "GST_VIDEO_ORIENTATION_90L")]
4287    _90l,
4288    /// Flip horizontally
4289    #[doc(alias = "GST_VIDEO_ORIENTATION_HORIZ")]
4290    Horiz,
4291    /// Flip vertically
4292    #[doc(alias = "GST_VIDEO_ORIENTATION_VERT")]
4293    Vert,
4294    /// Rotate counter-clockwise 90 degrees and flip vertically
4295    #[doc(alias = "GST_VIDEO_ORIENTATION_UL_LR")]
4296    UlLr,
4297    /// Rotate clockwise 90 degrees and flip vertically
4298    #[doc(alias = "GST_VIDEO_ORIENTATION_UR_LL")]
4299    UrLl,
4300    /// Select flip method based on image-orientation tag
4301    #[doc(alias = "GST_VIDEO_ORIENTATION_AUTO")]
4302    Auto,
4303    /// Current status depends on plugin internal setup
4304    #[doc(alias = "GST_VIDEO_ORIENTATION_CUSTOM")]
4305    Custom,
4306    #[doc(hidden)]
4307    __Unknown(i32),
4308}
4309
4310#[doc(hidden)]
4311impl IntoGlib for VideoOrientationMethod {
4312    type GlibType = ffi::GstVideoOrientationMethod;
4313
4314    #[inline]
4315    fn into_glib(self) -> ffi::GstVideoOrientationMethod {
4316        match self {
4317            Self::Identity => ffi::GST_VIDEO_ORIENTATION_IDENTITY,
4318            Self::_90r => ffi::GST_VIDEO_ORIENTATION_90R,
4319            Self::_180 => ffi::GST_VIDEO_ORIENTATION_180,
4320            Self::_90l => ffi::GST_VIDEO_ORIENTATION_90L,
4321            Self::Horiz => ffi::GST_VIDEO_ORIENTATION_HORIZ,
4322            Self::Vert => ffi::GST_VIDEO_ORIENTATION_VERT,
4323            Self::UlLr => ffi::GST_VIDEO_ORIENTATION_UL_LR,
4324            Self::UrLl => ffi::GST_VIDEO_ORIENTATION_UR_LL,
4325            Self::Auto => ffi::GST_VIDEO_ORIENTATION_AUTO,
4326            Self::Custom => ffi::GST_VIDEO_ORIENTATION_CUSTOM,
4327            Self::__Unknown(value) => value,
4328        }
4329    }
4330}
4331
4332#[doc(hidden)]
4333impl FromGlib<ffi::GstVideoOrientationMethod> for VideoOrientationMethod {
4334    #[inline]
4335    unsafe fn from_glib(value: ffi::GstVideoOrientationMethod) -> Self {
4336        skip_assert_initialized!();
4337
4338        match value {
4339            ffi::GST_VIDEO_ORIENTATION_IDENTITY => Self::Identity,
4340            ffi::GST_VIDEO_ORIENTATION_90R => Self::_90r,
4341            ffi::GST_VIDEO_ORIENTATION_180 => Self::_180,
4342            ffi::GST_VIDEO_ORIENTATION_90L => Self::_90l,
4343            ffi::GST_VIDEO_ORIENTATION_HORIZ => Self::Horiz,
4344            ffi::GST_VIDEO_ORIENTATION_VERT => Self::Vert,
4345            ffi::GST_VIDEO_ORIENTATION_UL_LR => Self::UlLr,
4346            ffi::GST_VIDEO_ORIENTATION_UR_LL => Self::UrLl,
4347            ffi::GST_VIDEO_ORIENTATION_AUTO => Self::Auto,
4348            ffi::GST_VIDEO_ORIENTATION_CUSTOM => Self::Custom,
4349            value => Self::__Unknown(value),
4350        }
4351    }
4352}
4353
4354impl StaticType for VideoOrientationMethod {
4355    #[inline]
4356    #[doc(alias = "gst_video_orientation_method_get_type")]
4357    fn static_type() -> glib::Type {
4358        unsafe { from_glib(ffi::gst_video_orientation_method_get_type()) }
4359    }
4360}
4361
4362impl glib::HasParamSpec for VideoOrientationMethod {
4363    type ParamSpec = glib::ParamSpecEnum;
4364    type SetValue = Self;
4365    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4366
4367    fn param_spec_builder() -> Self::BuilderFn {
4368        Self::ParamSpec::builder_with_default
4369    }
4370}
4371
4372impl glib::value::ValueType for VideoOrientationMethod {
4373    type Type = Self;
4374}
4375
4376unsafe impl<'a> glib::value::FromValue<'a> for VideoOrientationMethod {
4377    type Checker = glib::value::GenericValueTypeChecker<Self>;
4378
4379    #[inline]
4380    unsafe fn from_value(value: &'a glib::Value) -> Self {
4381        skip_assert_initialized!();
4382        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
4383    }
4384}
4385
4386impl ToValue for VideoOrientationMethod {
4387    #[inline]
4388    fn to_value(&self) -> glib::Value {
4389        let mut value = glib::Value::for_value_type::<Self>();
4390        unsafe {
4391            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4392        }
4393        value
4394    }
4395
4396    #[inline]
4397    fn value_type(&self) -> glib::Type {
4398        Self::static_type()
4399    }
4400}
4401
4402impl From<VideoOrientationMethod> for glib::Value {
4403    #[inline]
4404    fn from(v: VideoOrientationMethod) -> Self {
4405        skip_assert_initialized!();
4406        ToValue::to_value(&v)
4407    }
4408}
4409
4410/// Different primaries conversion modes
4411#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4412#[non_exhaustive]
4413#[doc(alias = "GstVideoPrimariesMode")]
4414pub enum VideoPrimariesMode {
4415    /// disable conversion between primaries
4416    #[doc(alias = "GST_VIDEO_PRIMARIES_MODE_NONE")]
4417    None,
4418    /// do conversion between primaries only
4419    ///  when it can be merged with color matrix conversion.
4420    #[doc(alias = "GST_VIDEO_PRIMARIES_MODE_MERGE_ONLY")]
4421    MergeOnly,
4422    /// fast conversion between primaries
4423    #[doc(alias = "GST_VIDEO_PRIMARIES_MODE_FAST")]
4424    Fast,
4425    #[doc(hidden)]
4426    __Unknown(i32),
4427}
4428
4429#[doc(hidden)]
4430impl IntoGlib for VideoPrimariesMode {
4431    type GlibType = ffi::GstVideoPrimariesMode;
4432
4433    #[inline]
4434    fn into_glib(self) -> ffi::GstVideoPrimariesMode {
4435        match self {
4436            Self::None => ffi::GST_VIDEO_PRIMARIES_MODE_NONE,
4437            Self::MergeOnly => ffi::GST_VIDEO_PRIMARIES_MODE_MERGE_ONLY,
4438            Self::Fast => ffi::GST_VIDEO_PRIMARIES_MODE_FAST,
4439            Self::__Unknown(value) => value,
4440        }
4441    }
4442}
4443
4444#[doc(hidden)]
4445impl FromGlib<ffi::GstVideoPrimariesMode> for VideoPrimariesMode {
4446    #[inline]
4447    unsafe fn from_glib(value: ffi::GstVideoPrimariesMode) -> Self {
4448        skip_assert_initialized!();
4449
4450        match value {
4451            ffi::GST_VIDEO_PRIMARIES_MODE_NONE => Self::None,
4452            ffi::GST_VIDEO_PRIMARIES_MODE_MERGE_ONLY => Self::MergeOnly,
4453            ffi::GST_VIDEO_PRIMARIES_MODE_FAST => Self::Fast,
4454            value => Self::__Unknown(value),
4455        }
4456    }
4457}
4458
4459impl StaticType for VideoPrimariesMode {
4460    #[inline]
4461    #[doc(alias = "gst_video_primaries_mode_get_type")]
4462    fn static_type() -> glib::Type {
4463        unsafe { from_glib(ffi::gst_video_primaries_mode_get_type()) }
4464    }
4465}
4466
4467impl glib::HasParamSpec for VideoPrimariesMode {
4468    type ParamSpec = glib::ParamSpecEnum;
4469    type SetValue = Self;
4470    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4471
4472    fn param_spec_builder() -> Self::BuilderFn {
4473        Self::ParamSpec::builder_with_default
4474    }
4475}
4476
4477impl glib::value::ValueType for VideoPrimariesMode {
4478    type Type = Self;
4479}
4480
4481unsafe impl<'a> glib::value::FromValue<'a> for VideoPrimariesMode {
4482    type Checker = glib::value::GenericValueTypeChecker<Self>;
4483
4484    #[inline]
4485    unsafe fn from_value(value: &'a glib::Value) -> Self {
4486        skip_assert_initialized!();
4487        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
4488    }
4489}
4490
4491impl ToValue for VideoPrimariesMode {
4492    #[inline]
4493    fn to_value(&self) -> glib::Value {
4494        let mut value = glib::Value::for_value_type::<Self>();
4495        unsafe {
4496            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4497        }
4498        value
4499    }
4500
4501    #[inline]
4502    fn value_type(&self) -> glib::Type {
4503        Self::static_type()
4504    }
4505}
4506
4507impl From<VideoPrimariesMode> for glib::Value {
4508    #[inline]
4509    fn from(v: VideoPrimariesMode) -> Self {
4510        skip_assert_initialized!();
4511        ToValue::to_value(&v)
4512    }
4513}
4514
4515/// Different subsampling and upsampling methods
4516#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4517#[non_exhaustive]
4518#[doc(alias = "GstVideoResamplerMethod")]
4519pub enum VideoResamplerMethod {
4520    /// Duplicates the samples when
4521    ///  upsampling and drops when downsampling
4522    #[doc(alias = "GST_VIDEO_RESAMPLER_METHOD_NEAREST")]
4523    Nearest,
4524    /// Uses linear interpolation to reconstruct
4525    ///  missing samples and averaging to downsample
4526    #[doc(alias = "GST_VIDEO_RESAMPLER_METHOD_LINEAR")]
4527    Linear,
4528    /// Uses cubic interpolation
4529    #[doc(alias = "GST_VIDEO_RESAMPLER_METHOD_CUBIC")]
4530    Cubic,
4531    /// Uses sinc interpolation
4532    #[doc(alias = "GST_VIDEO_RESAMPLER_METHOD_SINC")]
4533    Sinc,
4534    /// Uses lanczos interpolation
4535    #[doc(alias = "GST_VIDEO_RESAMPLER_METHOD_LANCZOS")]
4536    Lanczos,
4537    #[doc(hidden)]
4538    __Unknown(i32),
4539}
4540
4541#[doc(hidden)]
4542impl IntoGlib for VideoResamplerMethod {
4543    type GlibType = ffi::GstVideoResamplerMethod;
4544
4545    #[inline]
4546    fn into_glib(self) -> ffi::GstVideoResamplerMethod {
4547        match self {
4548            Self::Nearest => ffi::GST_VIDEO_RESAMPLER_METHOD_NEAREST,
4549            Self::Linear => ffi::GST_VIDEO_RESAMPLER_METHOD_LINEAR,
4550            Self::Cubic => ffi::GST_VIDEO_RESAMPLER_METHOD_CUBIC,
4551            Self::Sinc => ffi::GST_VIDEO_RESAMPLER_METHOD_SINC,
4552            Self::Lanczos => ffi::GST_VIDEO_RESAMPLER_METHOD_LANCZOS,
4553            Self::__Unknown(value) => value,
4554        }
4555    }
4556}
4557
4558#[doc(hidden)]
4559impl FromGlib<ffi::GstVideoResamplerMethod> for VideoResamplerMethod {
4560    #[inline]
4561    unsafe fn from_glib(value: ffi::GstVideoResamplerMethod) -> Self {
4562        skip_assert_initialized!();
4563
4564        match value {
4565            ffi::GST_VIDEO_RESAMPLER_METHOD_NEAREST => Self::Nearest,
4566            ffi::GST_VIDEO_RESAMPLER_METHOD_LINEAR => Self::Linear,
4567            ffi::GST_VIDEO_RESAMPLER_METHOD_CUBIC => Self::Cubic,
4568            ffi::GST_VIDEO_RESAMPLER_METHOD_SINC => Self::Sinc,
4569            ffi::GST_VIDEO_RESAMPLER_METHOD_LANCZOS => Self::Lanczos,
4570            value => Self::__Unknown(value),
4571        }
4572    }
4573}
4574
4575impl StaticType for VideoResamplerMethod {
4576    #[inline]
4577    #[doc(alias = "gst_video_resampler_method_get_type")]
4578    fn static_type() -> glib::Type {
4579        unsafe { from_glib(ffi::gst_video_resampler_method_get_type()) }
4580    }
4581}
4582
4583impl glib::HasParamSpec for VideoResamplerMethod {
4584    type ParamSpec = glib::ParamSpecEnum;
4585    type SetValue = Self;
4586    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4587
4588    fn param_spec_builder() -> Self::BuilderFn {
4589        Self::ParamSpec::builder_with_default
4590    }
4591}
4592
4593impl glib::value::ValueType for VideoResamplerMethod {
4594    type Type = Self;
4595}
4596
4597unsafe impl<'a> glib::value::FromValue<'a> for VideoResamplerMethod {
4598    type Checker = glib::value::GenericValueTypeChecker<Self>;
4599
4600    #[inline]
4601    unsafe fn from_value(value: &'a glib::Value) -> Self {
4602        skip_assert_initialized!();
4603        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
4604    }
4605}
4606
4607impl ToValue for VideoResamplerMethod {
4608    #[inline]
4609    fn to_value(&self) -> glib::Value {
4610        let mut value = glib::Value::for_value_type::<Self>();
4611        unsafe {
4612            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4613        }
4614        value
4615    }
4616
4617    #[inline]
4618    fn value_type(&self) -> glib::Type {
4619        Self::static_type()
4620    }
4621}
4622
4623impl From<VideoResamplerMethod> for glib::Value {
4624    #[inline]
4625    fn from(v: VideoResamplerMethod) -> Self {
4626        skip_assert_initialized!();
4627        ToValue::to_value(&v)
4628    }
4629}
4630
4631/// Enum value describing the available tiling modes.
4632#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4633#[non_exhaustive]
4634#[doc(alias = "GstVideoTileMode")]
4635pub enum VideoTileMode {
4636    /// Unknown or unset tile mode
4637    #[doc(alias = "GST_VIDEO_TILE_MODE_UNKNOWN")]
4638    Unknown,
4639    /// Every four adjacent blocks - two
4640    ///  horizontally and two vertically are grouped together and are located
4641    ///  in memory in Z or flipped Z order. In case of odd rows, the last row
4642    ///  of blocks is arranged in linear order.
4643    #[doc(alias = "GST_VIDEO_TILE_MODE_ZFLIPZ_2X2")]
4644    Zflipz2x2,
4645    /// Tiles are in row order.
4646    #[cfg(feature = "v1_18")]
4647    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4648    #[doc(alias = "GST_VIDEO_TILE_MODE_LINEAR")]
4649    Linear,
4650    #[doc(hidden)]
4651    __Unknown(i32),
4652}
4653
4654#[doc(hidden)]
4655impl IntoGlib for VideoTileMode {
4656    type GlibType = ffi::GstVideoTileMode;
4657
4658    #[inline]
4659    fn into_glib(self) -> ffi::GstVideoTileMode {
4660        match self {
4661            Self::Unknown => ffi::GST_VIDEO_TILE_MODE_UNKNOWN,
4662            Self::Zflipz2x2 => ffi::GST_VIDEO_TILE_MODE_ZFLIPZ_2X2,
4663            #[cfg(feature = "v1_18")]
4664            Self::Linear => ffi::GST_VIDEO_TILE_MODE_LINEAR,
4665            Self::__Unknown(value) => value,
4666        }
4667    }
4668}
4669
4670#[doc(hidden)]
4671impl FromGlib<ffi::GstVideoTileMode> for VideoTileMode {
4672    #[inline]
4673    unsafe fn from_glib(value: ffi::GstVideoTileMode) -> Self {
4674        skip_assert_initialized!();
4675
4676        match value {
4677            ffi::GST_VIDEO_TILE_MODE_UNKNOWN => Self::Unknown,
4678            ffi::GST_VIDEO_TILE_MODE_ZFLIPZ_2X2 => Self::Zflipz2x2,
4679            #[cfg(feature = "v1_18")]
4680            ffi::GST_VIDEO_TILE_MODE_LINEAR => Self::Linear,
4681            value => Self::__Unknown(value),
4682        }
4683    }
4684}
4685
4686impl StaticType for VideoTileMode {
4687    #[inline]
4688    #[doc(alias = "gst_video_tile_mode_get_type")]
4689    fn static_type() -> glib::Type {
4690        unsafe { from_glib(ffi::gst_video_tile_mode_get_type()) }
4691    }
4692}
4693
4694impl glib::HasParamSpec for VideoTileMode {
4695    type ParamSpec = glib::ParamSpecEnum;
4696    type SetValue = Self;
4697    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4698
4699    fn param_spec_builder() -> Self::BuilderFn {
4700        Self::ParamSpec::builder_with_default
4701    }
4702}
4703
4704impl glib::value::ValueType for VideoTileMode {
4705    type Type = Self;
4706}
4707
4708unsafe impl<'a> glib::value::FromValue<'a> for VideoTileMode {
4709    type Checker = glib::value::GenericValueTypeChecker<Self>;
4710
4711    #[inline]
4712    unsafe fn from_value(value: &'a glib::Value) -> Self {
4713        skip_assert_initialized!();
4714        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
4715    }
4716}
4717
4718impl ToValue for VideoTileMode {
4719    #[inline]
4720    fn to_value(&self) -> glib::Value {
4721        let mut value = glib::Value::for_value_type::<Self>();
4722        unsafe {
4723            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4724        }
4725        value
4726    }
4727
4728    #[inline]
4729    fn value_type(&self) -> glib::Type {
4730        Self::static_type()
4731    }
4732}
4733
4734impl From<VideoTileMode> for glib::Value {
4735    #[inline]
4736    fn from(v: VideoTileMode) -> Self {
4737        skip_assert_initialized!();
4738        ToValue::to_value(&v)
4739    }
4740}
4741
4742/// The video transfer function defines the formula for converting between
4743/// non-linear RGB (R'G'B') and linear RGB
4744#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4745#[non_exhaustive]
4746#[doc(alias = "GstVideoTransferFunction")]
4747pub enum VideoTransferFunction {
4748    /// unknown transfer function
4749    #[doc(alias = "GST_VIDEO_TRANSFER_UNKNOWN")]
4750    Unknown,
4751    /// linear RGB, gamma 1.0 curve
4752    #[doc(alias = "GST_VIDEO_TRANSFER_GAMMA10")]
4753    Gamma10,
4754    /// Gamma 1.8 curve
4755    #[doc(alias = "GST_VIDEO_TRANSFER_GAMMA18")]
4756    Gamma18,
4757    /// Gamma 2.0 curve
4758    #[doc(alias = "GST_VIDEO_TRANSFER_GAMMA20")]
4759    Gamma20,
4760    /// Gamma 2.2 curve
4761    #[doc(alias = "GST_VIDEO_TRANSFER_GAMMA22")]
4762    Gamma22,
4763    /// Gamma 2.2 curve with a linear segment in the lower
4764    ///  range, also ITU-R BT470M / ITU-R BT1700 625 PAL &
4765    ///  SECAM / ITU-R BT1361
4766    #[doc(alias = "GST_VIDEO_TRANSFER_BT709")]
4767    Bt709,
4768    /// Gamma 2.2 curve with a linear segment in the
4769    ///  lower range
4770    #[doc(alias = "GST_VIDEO_TRANSFER_SMPTE240M")]
4771    Smpte240m,
4772    /// Gamma 2.4 curve with a linear segment in the lower
4773    ///  range. IEC 61966-2-1 (sRGB or sYCC)
4774    #[doc(alias = "GST_VIDEO_TRANSFER_SRGB")]
4775    Srgb,
4776    /// Gamma 2.8 curve, also ITU-R BT470BG
4777    #[doc(alias = "GST_VIDEO_TRANSFER_GAMMA28")]
4778    Gamma28,
4779    /// Logarithmic transfer characteristic
4780    ///  100:1 range
4781    #[doc(alias = "GST_VIDEO_TRANSFER_LOG100")]
4782    Log100,
4783    /// Logarithmic transfer characteristic
4784    ///  316.22777:1 range (100 * sqrt(10) : 1)
4785    #[doc(alias = "GST_VIDEO_TRANSFER_LOG316")]
4786    Log316,
4787    /// Gamma 2.2 curve with a linear segment in the lower
4788    ///  range. Used for BT.2020 with 12 bits per
4789    ///  component. Since: 1.6
4790    #[doc(alias = "GST_VIDEO_TRANSFER_BT2020_12")]
4791    Bt202012,
4792    /// Gamma 2.19921875. Since: 1.8
4793    #[doc(alias = "GST_VIDEO_TRANSFER_ADOBERGB")]
4794    Adobergb,
4795    /// Rec. ITU-R BT.2020-2 with 10 bits per component.
4796    ///  (functionally the same as the values
4797    ///  GST_VIDEO_TRANSFER_BT709 and GST_VIDEO_TRANSFER_BT601).
4798    ///  Since: 1.18
4799    #[cfg(feature = "v1_18")]
4800    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4801    #[doc(alias = "GST_VIDEO_TRANSFER_BT2020_10")]
4802    Bt202010,
4803    /// SMPTE ST 2084 for 10, 12, 14, and 16-bit systems.
4804    ///  Known as perceptual quantization (PQ)
4805    ///  Since: 1.18
4806    #[cfg(feature = "v1_18")]
4807    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4808    #[doc(alias = "GST_VIDEO_TRANSFER_SMPTE2084")]
4809    Smpte2084,
4810    /// Association of Radio Industries and Businesses (ARIB)
4811    ///  STD-B67 and Rec. ITU-R BT.2100-1 hybrid loggamma (HLG) system
4812    ///  Since: 1.18
4813    #[cfg(feature = "v1_18")]
4814    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4815    #[doc(alias = "GST_VIDEO_TRANSFER_ARIB_STD_B67")]
4816    AribStdB67,
4817    /// also known as SMPTE170M / ITU-R BT1358 525 or 625 / ITU-R BT1700 NTSC
4818    #[cfg(feature = "v1_18")]
4819    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4820    #[doc(alias = "GST_VIDEO_TRANSFER_BT601")]
4821    Bt601,
4822    #[doc(hidden)]
4823    __Unknown(i32),
4824}
4825
4826impl VideoTransferFunction {
4827    #[cfg(feature = "v1_20")]
4828    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
4829    #[doc(alias = "gst_video_transfer_function_decode")]
4830    pub fn decode(self, val: f64) -> f64 {
4831        assert_initialized_main_thread!();
4832        unsafe { ffi::gst_video_transfer_function_decode(self.into_glib(), val) }
4833    }
4834
4835    #[cfg(feature = "v1_20")]
4836    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
4837    #[doc(alias = "gst_video_transfer_function_encode")]
4838    pub fn encode(self, val: f64) -> f64 {
4839        assert_initialized_main_thread!();
4840        unsafe { ffi::gst_video_transfer_function_encode(self.into_glib(), val) }
4841    }
4842
4843    #[cfg(feature = "v1_18")]
4844    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4845    #[doc(alias = "gst_video_transfer_function_from_iso")]
4846    pub fn from_iso(value: u32) -> VideoTransferFunction {
4847        assert_initialized_main_thread!();
4848        unsafe { from_glib(ffi::gst_video_transfer_function_from_iso(value)) }
4849    }
4850
4851    #[cfg(feature = "v1_18")]
4852    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4853    #[doc(alias = "gst_video_transfer_function_is_equivalent")]
4854    pub fn is_equivalent(self, from_bpp: u32, to_func: VideoTransferFunction, to_bpp: u32) -> bool {
4855        assert_initialized_main_thread!();
4856        unsafe {
4857            from_glib(ffi::gst_video_transfer_function_is_equivalent(
4858                self.into_glib(),
4859                from_bpp,
4860                to_func.into_glib(),
4861                to_bpp,
4862            ))
4863        }
4864    }
4865
4866    #[cfg(feature = "v1_18")]
4867    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4868    #[doc(alias = "gst_video_transfer_function_to_iso")]
4869    pub fn to_iso(self) -> u32 {
4870        assert_initialized_main_thread!();
4871        unsafe { ffi::gst_video_transfer_function_to_iso(self.into_glib()) }
4872    }
4873}
4874
4875#[doc(hidden)]
4876impl IntoGlib for VideoTransferFunction {
4877    type GlibType = ffi::GstVideoTransferFunction;
4878
4879    fn into_glib(self) -> ffi::GstVideoTransferFunction {
4880        match self {
4881            Self::Unknown => ffi::GST_VIDEO_TRANSFER_UNKNOWN,
4882            Self::Gamma10 => ffi::GST_VIDEO_TRANSFER_GAMMA10,
4883            Self::Gamma18 => ffi::GST_VIDEO_TRANSFER_GAMMA18,
4884            Self::Gamma20 => ffi::GST_VIDEO_TRANSFER_GAMMA20,
4885            Self::Gamma22 => ffi::GST_VIDEO_TRANSFER_GAMMA22,
4886            Self::Bt709 => ffi::GST_VIDEO_TRANSFER_BT709,
4887            Self::Smpte240m => ffi::GST_VIDEO_TRANSFER_SMPTE240M,
4888            Self::Srgb => ffi::GST_VIDEO_TRANSFER_SRGB,
4889            Self::Gamma28 => ffi::GST_VIDEO_TRANSFER_GAMMA28,
4890            Self::Log100 => ffi::GST_VIDEO_TRANSFER_LOG100,
4891            Self::Log316 => ffi::GST_VIDEO_TRANSFER_LOG316,
4892            Self::Bt202012 => ffi::GST_VIDEO_TRANSFER_BT2020_12,
4893            Self::Adobergb => ffi::GST_VIDEO_TRANSFER_ADOBERGB,
4894            #[cfg(feature = "v1_18")]
4895            Self::Bt202010 => ffi::GST_VIDEO_TRANSFER_BT2020_10,
4896            #[cfg(feature = "v1_18")]
4897            Self::Smpte2084 => ffi::GST_VIDEO_TRANSFER_SMPTE2084,
4898            #[cfg(feature = "v1_18")]
4899            Self::AribStdB67 => ffi::GST_VIDEO_TRANSFER_ARIB_STD_B67,
4900            #[cfg(feature = "v1_18")]
4901            Self::Bt601 => ffi::GST_VIDEO_TRANSFER_BT601,
4902            Self::__Unknown(value) => value,
4903        }
4904    }
4905}
4906
4907#[doc(hidden)]
4908impl FromGlib<ffi::GstVideoTransferFunction> for VideoTransferFunction {
4909    unsafe fn from_glib(value: ffi::GstVideoTransferFunction) -> Self {
4910        skip_assert_initialized!();
4911
4912        match value {
4913            ffi::GST_VIDEO_TRANSFER_UNKNOWN => Self::Unknown,
4914            ffi::GST_VIDEO_TRANSFER_GAMMA10 => Self::Gamma10,
4915            ffi::GST_VIDEO_TRANSFER_GAMMA18 => Self::Gamma18,
4916            ffi::GST_VIDEO_TRANSFER_GAMMA20 => Self::Gamma20,
4917            ffi::GST_VIDEO_TRANSFER_GAMMA22 => Self::Gamma22,
4918            ffi::GST_VIDEO_TRANSFER_BT709 => Self::Bt709,
4919            ffi::GST_VIDEO_TRANSFER_SMPTE240M => Self::Smpte240m,
4920            ffi::GST_VIDEO_TRANSFER_SRGB => Self::Srgb,
4921            ffi::GST_VIDEO_TRANSFER_GAMMA28 => Self::Gamma28,
4922            ffi::GST_VIDEO_TRANSFER_LOG100 => Self::Log100,
4923            ffi::GST_VIDEO_TRANSFER_LOG316 => Self::Log316,
4924            ffi::GST_VIDEO_TRANSFER_BT2020_12 => Self::Bt202012,
4925            ffi::GST_VIDEO_TRANSFER_ADOBERGB => Self::Adobergb,
4926            #[cfg(feature = "v1_18")]
4927            ffi::GST_VIDEO_TRANSFER_BT2020_10 => Self::Bt202010,
4928            #[cfg(feature = "v1_18")]
4929            ffi::GST_VIDEO_TRANSFER_SMPTE2084 => Self::Smpte2084,
4930            #[cfg(feature = "v1_18")]
4931            ffi::GST_VIDEO_TRANSFER_ARIB_STD_B67 => Self::AribStdB67,
4932            #[cfg(feature = "v1_18")]
4933            ffi::GST_VIDEO_TRANSFER_BT601 => Self::Bt601,
4934            value => Self::__Unknown(value),
4935        }
4936    }
4937}
4938
4939impl StaticType for VideoTransferFunction {
4940    #[inline]
4941    #[doc(alias = "gst_video_transfer_function_get_type")]
4942    fn static_type() -> glib::Type {
4943        unsafe { from_glib(ffi::gst_video_transfer_function_get_type()) }
4944    }
4945}
4946
4947impl glib::HasParamSpec for VideoTransferFunction {
4948    type ParamSpec = glib::ParamSpecEnum;
4949    type SetValue = Self;
4950    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4951
4952    fn param_spec_builder() -> Self::BuilderFn {
4953        Self::ParamSpec::builder_with_default
4954    }
4955}
4956
4957impl glib::value::ValueType for VideoTransferFunction {
4958    type Type = Self;
4959}
4960
4961unsafe impl<'a> glib::value::FromValue<'a> for VideoTransferFunction {
4962    type Checker = glib::value::GenericValueTypeChecker<Self>;
4963
4964    #[inline]
4965    unsafe fn from_value(value: &'a glib::Value) -> Self {
4966        skip_assert_initialized!();
4967        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
4968    }
4969}
4970
4971impl ToValue for VideoTransferFunction {
4972    #[inline]
4973    fn to_value(&self) -> glib::Value {
4974        let mut value = glib::Value::for_value_type::<Self>();
4975        unsafe {
4976            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4977        }
4978        value
4979    }
4980
4981    #[inline]
4982    fn value_type(&self) -> glib::Type {
4983        Self::static_type()
4984    }
4985}
4986
4987impl From<VideoTransferFunction> for glib::Value {
4988    #[inline]
4989    fn from(v: VideoTransferFunction) -> Self {
4990        skip_assert_initialized!();
4991        ToValue::to_value(&v)
4992    }
4993}