Skip to main content

gstreamer_video/auto/
enums.rs

1// This file was generated by gir (https://github.com/gtk-rs/gir)
2// from gir-files (https://github.com/gtk-rs/gir-files)
3// from gst-gir-files (https://gitlab.freedesktop.org/gstreamer/gir-files-rs.git)
4// DO NOT EDIT
5
6use crate::ffi;
7use glib::{GStr, prelude::*, translate::*};
8
9/// Location of a `GstAncillaryMeta`.
10#[cfg(feature = "v1_24")]
11#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
12#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
13#[non_exhaustive]
14#[doc(alias = "GstAncillaryMetaField")]
15pub enum AncillaryMetaField {
16    /// Progressive or no field specified (default)
17    #[doc(alias = "GST_ANCILLARY_META_FIELD_PROGRESSIVE")]
18    Progressive,
19    /// Interlaced first field
20    #[doc(alias = "GST_ANCILLARY_META_FIELD_INTERLACED_FIRST")]
21    InterlacedFirst,
22    /// Interlaced second field
23    #[doc(alias = "GST_ANCILLARY_META_FIELD_INTERLACED_SECOND")]
24    InterlacedSecond,
25    #[doc(hidden)]
26    __Unknown(i32),
27}
28
29#[cfg(feature = "v1_24")]
30#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
31#[doc(hidden)]
32impl IntoGlib for AncillaryMetaField {
33    type GlibType = ffi::GstAncillaryMetaField;
34
35    #[inline]
36    fn into_glib(self) -> ffi::GstAncillaryMetaField {
37        match self {
38            Self::Progressive => ffi::GST_ANCILLARY_META_FIELD_PROGRESSIVE,
39            Self::InterlacedFirst => ffi::GST_ANCILLARY_META_FIELD_INTERLACED_FIRST,
40            Self::InterlacedSecond => ffi::GST_ANCILLARY_META_FIELD_INTERLACED_SECOND,
41            Self::__Unknown(value) => value,
42        }
43    }
44}
45
46#[cfg(feature = "v1_24")]
47#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
48#[doc(hidden)]
49impl FromGlib<ffi::GstAncillaryMetaField> for AncillaryMetaField {
50    #[inline]
51    unsafe fn from_glib(value: ffi::GstAncillaryMetaField) -> Self {
52        skip_assert_initialized!();
53
54        match value {
55            ffi::GST_ANCILLARY_META_FIELD_PROGRESSIVE => Self::Progressive,
56            ffi::GST_ANCILLARY_META_FIELD_INTERLACED_FIRST => Self::InterlacedFirst,
57            ffi::GST_ANCILLARY_META_FIELD_INTERLACED_SECOND => Self::InterlacedSecond,
58            value => Self::__Unknown(value),
59        }
60    }
61}
62
63#[cfg(feature = "v1_24")]
64#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
65impl StaticType for AncillaryMetaField {
66    #[inline]
67    #[doc(alias = "gst_ancillary_meta_field_get_type")]
68    fn static_type() -> glib::Type {
69        unsafe { from_glib(ffi::gst_ancillary_meta_field_get_type()) }
70    }
71}
72
73#[cfg(feature = "v1_24")]
74#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
75impl glib::HasParamSpec for AncillaryMetaField {
76    type ParamSpec = glib::ParamSpecEnum;
77    type SetValue = Self;
78    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
79
80    fn param_spec_builder() -> Self::BuilderFn {
81        Self::ParamSpec::builder_with_default
82    }
83}
84
85#[cfg(feature = "v1_24")]
86#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
87impl glib::value::ValueType for AncillaryMetaField {
88    type Type = Self;
89}
90
91#[cfg(feature = "v1_24")]
92#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
93unsafe impl<'a> glib::value::FromValue<'a> for AncillaryMetaField {
94    type Checker = glib::value::GenericValueTypeChecker<Self>;
95
96    #[inline]
97    unsafe fn from_value(value: &'a glib::Value) -> Self {
98        skip_assert_initialized!();
99        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
100    }
101}
102
103#[cfg(feature = "v1_24")]
104#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
105impl ToValue for AncillaryMetaField {
106    #[inline]
107    fn to_value(&self) -> glib::Value {
108        let mut value = glib::Value::for_value_type::<Self>();
109        unsafe {
110            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
111        }
112        value
113    }
114
115    #[inline]
116    fn value_type(&self) -> glib::Type {
117        Self::static_type()
118    }
119}
120
121#[cfg(feature = "v1_24")]
122#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
123impl From<AncillaryMetaField> for glib::Value {
124    #[inline]
125    fn from(v: AncillaryMetaField) -> Self {
126        skip_assert_initialized!();
127        ToValue::to_value(&v)
128    }
129}
130
131/// An enumeration indicating whether an element implements color balancing
132/// operations in software or in dedicated hardware. In general, dedicated
133/// hardware implementations (such as those provided by xvimagesink) are
134/// preferred.
135#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
136#[non_exhaustive]
137#[doc(alias = "GstColorBalanceType")]
138pub enum ColorBalanceType {
139    /// Color balance is implemented with dedicated
140    ///  hardware.
141    #[doc(alias = "GST_COLOR_BALANCE_HARDWARE")]
142    Hardware,
143    /// Color balance is implemented via software
144    ///  processing.
145    #[doc(alias = "GST_COLOR_BALANCE_SOFTWARE")]
146    Software,
147    #[doc(hidden)]
148    __Unknown(i32),
149}
150
151#[doc(hidden)]
152impl IntoGlib for ColorBalanceType {
153    type GlibType = ffi::GstColorBalanceType;
154
155    #[inline]
156    fn into_glib(self) -> ffi::GstColorBalanceType {
157        match self {
158            Self::Hardware => ffi::GST_COLOR_BALANCE_HARDWARE,
159            Self::Software => ffi::GST_COLOR_BALANCE_SOFTWARE,
160            Self::__Unknown(value) => value,
161        }
162    }
163}
164
165#[doc(hidden)]
166impl FromGlib<ffi::GstColorBalanceType> for ColorBalanceType {
167    #[inline]
168    unsafe fn from_glib(value: ffi::GstColorBalanceType) -> Self {
169        skip_assert_initialized!();
170
171        match value {
172            ffi::GST_COLOR_BALANCE_HARDWARE => Self::Hardware,
173            ffi::GST_COLOR_BALANCE_SOFTWARE => Self::Software,
174            value => Self::__Unknown(value),
175        }
176    }
177}
178
179impl StaticType for ColorBalanceType {
180    #[inline]
181    #[doc(alias = "gst_color_balance_type_get_type")]
182    fn static_type() -> glib::Type {
183        unsafe { from_glib(ffi::gst_color_balance_type_get_type()) }
184    }
185}
186
187impl glib::HasParamSpec for ColorBalanceType {
188    type ParamSpec = glib::ParamSpecEnum;
189    type SetValue = Self;
190    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
191
192    fn param_spec_builder() -> Self::BuilderFn {
193        Self::ParamSpec::builder_with_default
194    }
195}
196
197impl glib::value::ValueType for ColorBalanceType {
198    type Type = Self;
199}
200
201unsafe impl<'a> glib::value::FromValue<'a> for ColorBalanceType {
202    type Checker = glib::value::GenericValueTypeChecker<Self>;
203
204    #[inline]
205    unsafe fn from_value(value: &'a glib::Value) -> Self {
206        skip_assert_initialized!();
207        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
208    }
209}
210
211impl ToValue for ColorBalanceType {
212    #[inline]
213    fn to_value(&self) -> glib::Value {
214        let mut value = glib::Value::for_value_type::<Self>();
215        unsafe {
216            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
217        }
218        value
219    }
220
221    #[inline]
222    fn value_type(&self) -> glib::Type {
223        Self::static_type()
224    }
225}
226
227impl From<ColorBalanceType> for glib::Value {
228    #[inline]
229    fn from(v: ColorBalanceType) -> Self {
230        skip_assert_initialized!();
231        ToValue::to_value(&v)
232    }
233}
234
235/// A set of commands that may be issued to an element providing the
236/// [`Navigation`][crate::Navigation] interface. The available commands can be queried via
237/// the `gst_navigation_query_new_commands()` query.
238///
239/// For convenience in handling DVD navigation, the MENU commands are aliased as:
240///  GST_NAVIGATION_COMMAND_DVD_MENU = [`Menu1`][Self::Menu1]
241///  GST_NAVIGATION_COMMAND_DVD_TITLE_MENU = [`Menu2`][Self::Menu2]
242///  GST_NAVIGATION_COMMAND_DVD_ROOT_MENU = [`Menu3`][Self::Menu3]
243///  GST_NAVIGATION_COMMAND_DVD_SUBPICTURE_MENU = [`Menu4`][Self::Menu4]
244///  GST_NAVIGATION_COMMAND_DVD_AUDIO_MENU = [`Menu5`][Self::Menu5]
245///  GST_NAVIGATION_COMMAND_DVD_ANGLE_MENU = [`Menu6`][Self::Menu6]
246///  GST_NAVIGATION_COMMAND_DVD_CHAPTER_MENU = [`Menu7`][Self::Menu7]
247#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
248#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
249#[non_exhaustive]
250#[doc(alias = "GstNavigationCommand")]
251pub enum NavigationCommand {
252    /// An invalid command entry
253    #[doc(alias = "GST_NAVIGATION_COMMAND_INVALID")]
254    Invalid,
255    /// Execute navigation menu command 1. For DVD,
256    /// this enters the DVD root menu, or exits back to the title from the menu.
257    #[doc(alias = "GST_NAVIGATION_COMMAND_MENU1")]
258    Menu1,
259    /// Execute navigation menu command 2. For DVD,
260    /// this jumps to the DVD title menu.
261    #[doc(alias = "GST_NAVIGATION_COMMAND_MENU2")]
262    Menu2,
263    /// Execute navigation menu command 3. For DVD,
264    /// this jumps into the DVD root menu.
265    #[doc(alias = "GST_NAVIGATION_COMMAND_MENU3")]
266    Menu3,
267    /// Execute navigation menu command 4. For DVD,
268    /// this jumps to the Subpicture menu.
269    #[doc(alias = "GST_NAVIGATION_COMMAND_MENU4")]
270    Menu4,
271    /// Execute navigation menu command 5. For DVD,
272    /// the jumps to the audio menu.
273    #[doc(alias = "GST_NAVIGATION_COMMAND_MENU5")]
274    Menu5,
275    /// Execute navigation menu command 6. For DVD,
276    /// this jumps to the angles menu.
277    #[doc(alias = "GST_NAVIGATION_COMMAND_MENU6")]
278    Menu6,
279    /// Execute navigation menu command 7. For DVD,
280    /// this jumps to the chapter menu.
281    #[doc(alias = "GST_NAVIGATION_COMMAND_MENU7")]
282    Menu7,
283    /// Select the next button to the left in a menu,
284    /// if such a button exists.
285    #[doc(alias = "GST_NAVIGATION_COMMAND_LEFT")]
286    Left,
287    /// Select the next button to the right in a menu,
288    /// if such a button exists.
289    #[doc(alias = "GST_NAVIGATION_COMMAND_RIGHT")]
290    Right,
291    /// Select the button above the current one in a
292    /// menu, if such a button exists.
293    #[doc(alias = "GST_NAVIGATION_COMMAND_UP")]
294    Up,
295    /// Select the button below the current one in a
296    /// menu, if such a button exists.
297    #[doc(alias = "GST_NAVIGATION_COMMAND_DOWN")]
298    Down,
299    /// Activate (click) the currently selected
300    /// button in a menu, if such a button exists.
301    #[doc(alias = "GST_NAVIGATION_COMMAND_ACTIVATE")]
302    Activate,
303    /// Switch to the previous angle in a
304    /// multiangle feature.
305    #[doc(alias = "GST_NAVIGATION_COMMAND_PREV_ANGLE")]
306    PrevAngle,
307    /// Switch to the next angle in a multiangle
308    /// feature.
309    #[doc(alias = "GST_NAVIGATION_COMMAND_NEXT_ANGLE")]
310    NextAngle,
311    #[doc(hidden)]
312    __Unknown(i32),
313}
314
315#[doc(hidden)]
316impl IntoGlib for NavigationCommand {
317    type GlibType = ffi::GstNavigationCommand;
318
319    fn into_glib(self) -> ffi::GstNavigationCommand {
320        match self {
321            Self::Invalid => ffi::GST_NAVIGATION_COMMAND_INVALID,
322            Self::Menu1 => ffi::GST_NAVIGATION_COMMAND_MENU1,
323            Self::Menu2 => ffi::GST_NAVIGATION_COMMAND_MENU2,
324            Self::Menu3 => ffi::GST_NAVIGATION_COMMAND_MENU3,
325            Self::Menu4 => ffi::GST_NAVIGATION_COMMAND_MENU4,
326            Self::Menu5 => ffi::GST_NAVIGATION_COMMAND_MENU5,
327            Self::Menu6 => ffi::GST_NAVIGATION_COMMAND_MENU6,
328            Self::Menu7 => ffi::GST_NAVIGATION_COMMAND_MENU7,
329            Self::Left => ffi::GST_NAVIGATION_COMMAND_LEFT,
330            Self::Right => ffi::GST_NAVIGATION_COMMAND_RIGHT,
331            Self::Up => ffi::GST_NAVIGATION_COMMAND_UP,
332            Self::Down => ffi::GST_NAVIGATION_COMMAND_DOWN,
333            Self::Activate => ffi::GST_NAVIGATION_COMMAND_ACTIVATE,
334            Self::PrevAngle => ffi::GST_NAVIGATION_COMMAND_PREV_ANGLE,
335            Self::NextAngle => ffi::GST_NAVIGATION_COMMAND_NEXT_ANGLE,
336            Self::__Unknown(value) => value,
337        }
338    }
339}
340
341#[doc(hidden)]
342impl FromGlib<ffi::GstNavigationCommand> for NavigationCommand {
343    unsafe fn from_glib(value: ffi::GstNavigationCommand) -> Self {
344        skip_assert_initialized!();
345
346        match value {
347            ffi::GST_NAVIGATION_COMMAND_INVALID => Self::Invalid,
348            ffi::GST_NAVIGATION_COMMAND_MENU1 => Self::Menu1,
349            ffi::GST_NAVIGATION_COMMAND_MENU2 => Self::Menu2,
350            ffi::GST_NAVIGATION_COMMAND_MENU3 => Self::Menu3,
351            ffi::GST_NAVIGATION_COMMAND_MENU4 => Self::Menu4,
352            ffi::GST_NAVIGATION_COMMAND_MENU5 => Self::Menu5,
353            ffi::GST_NAVIGATION_COMMAND_MENU6 => Self::Menu6,
354            ffi::GST_NAVIGATION_COMMAND_MENU7 => Self::Menu7,
355            ffi::GST_NAVIGATION_COMMAND_LEFT => Self::Left,
356            ffi::GST_NAVIGATION_COMMAND_RIGHT => Self::Right,
357            ffi::GST_NAVIGATION_COMMAND_UP => Self::Up,
358            ffi::GST_NAVIGATION_COMMAND_DOWN => Self::Down,
359            ffi::GST_NAVIGATION_COMMAND_ACTIVATE => Self::Activate,
360            ffi::GST_NAVIGATION_COMMAND_PREV_ANGLE => Self::PrevAngle,
361            ffi::GST_NAVIGATION_COMMAND_NEXT_ANGLE => Self::NextAngle,
362            value => Self::__Unknown(value),
363        }
364    }
365}
366
367impl StaticType for NavigationCommand {
368    #[inline]
369    #[doc(alias = "gst_navigation_command_get_type")]
370    fn static_type() -> glib::Type {
371        unsafe { from_glib(ffi::gst_navigation_command_get_type()) }
372    }
373}
374
375impl glib::HasParamSpec for NavigationCommand {
376    type ParamSpec = glib::ParamSpecEnum;
377    type SetValue = Self;
378    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
379
380    fn param_spec_builder() -> Self::BuilderFn {
381        Self::ParamSpec::builder_with_default
382    }
383}
384
385impl glib::value::ValueType for NavigationCommand {
386    type Type = Self;
387}
388
389unsafe impl<'a> glib::value::FromValue<'a> for NavigationCommand {
390    type Checker = glib::value::GenericValueTypeChecker<Self>;
391
392    #[inline]
393    unsafe fn from_value(value: &'a glib::Value) -> Self {
394        skip_assert_initialized!();
395        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
396    }
397}
398
399impl ToValue for NavigationCommand {
400    #[inline]
401    fn to_value(&self) -> glib::Value {
402        let mut value = glib::Value::for_value_type::<Self>();
403        unsafe {
404            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
405        }
406        value
407    }
408
409    #[inline]
410    fn value_type(&self) -> glib::Type {
411        Self::static_type()
412    }
413}
414
415impl From<NavigationCommand> for glib::Value {
416    #[inline]
417    fn from(v: NavigationCommand) -> Self {
418        skip_assert_initialized!();
419        ToValue::to_value(&v)
420    }
421}
422
423/// Enum values for the various events that an element implementing the
424/// GstNavigation interface might send up the pipeline. Touch events have been
425/// inspired by the libinput API, and have the same meaning here.
426#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
427#[non_exhaustive]
428#[doc(alias = "GstNavigationEventType")]
429pub enum NavigationEventType {
430    /// Returned from
431    /// [`Navigation::event_get_type()`][crate::Navigation::event_get_type()] when the passed event is not a navigation event.
432    #[doc(alias = "GST_NAVIGATION_EVENT_INVALID")]
433    Invalid,
434    /// A key press event. Use
435    /// [`Navigation::event_parse_key_event()`][crate::Navigation::event_parse_key_event()] to extract the details from the event.
436    #[doc(alias = "GST_NAVIGATION_EVENT_KEY_PRESS")]
437    KeyPress,
438    /// A key release event. Use
439    /// [`Navigation::event_parse_key_event()`][crate::Navigation::event_parse_key_event()] to extract the details from the event.
440    #[doc(alias = "GST_NAVIGATION_EVENT_KEY_RELEASE")]
441    KeyRelease,
442    /// A mouse button press event. Use
443    /// [`Navigation::event_parse_mouse_button_event()`][crate::Navigation::event_parse_mouse_button_event()] to extract the details from the
444    /// event.
445    #[doc(alias = "GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS")]
446    MouseButtonPress,
447    /// A mouse button release event. Use
448    /// [`Navigation::event_parse_mouse_button_event()`][crate::Navigation::event_parse_mouse_button_event()] to extract the details from the
449    /// event.
450    #[doc(alias = "GST_NAVIGATION_EVENT_MOUSE_BUTTON_RELEASE")]
451    MouseButtonRelease,
452    /// A mouse movement event. Use
453    /// [`Navigation::event_parse_mouse_move_event()`][crate::Navigation::event_parse_mouse_move_event()] to extract the details from the
454    /// event.
455    #[doc(alias = "GST_NAVIGATION_EVENT_MOUSE_MOVE")]
456    MouseMove,
457    /// A navigation command event. Use
458    /// [`Navigation::event_parse_command()`][crate::Navigation::event_parse_command()] to extract the details from the event.
459    #[doc(alias = "GST_NAVIGATION_EVENT_COMMAND")]
460    Command,
461    /// A mouse scroll event. Use [`Navigation::event_parse_mouse_scroll_event()`][crate::Navigation::event_parse_mouse_scroll_event()]
462    /// to extract the details from the event.
463    #[cfg(feature = "v1_18")]
464    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
465    #[doc(alias = "GST_NAVIGATION_EVENT_MOUSE_SCROLL")]
466    MouseScroll,
467    /// An event describing a new touch point, which will be assigned an identifier
468    /// that is unique to it for the duration of its movement on the screen.
469    /// Use [`Navigation::event_parse_touch_event()`][crate::Navigation::event_parse_touch_event()] to extract the details
470    /// from the event.
471    #[cfg(feature = "v1_22")]
472    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
473    #[doc(alias = "GST_NAVIGATION_EVENT_TOUCH_DOWN")]
474    TouchDown,
475    /// An event describing the movement of an active touch point across
476    /// the screen. Use [`Navigation::event_parse_touch_event()`][crate::Navigation::event_parse_touch_event()] to extract
477    /// the details from the event.
478    #[cfg(feature = "v1_22")]
479    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
480    #[doc(alias = "GST_NAVIGATION_EVENT_TOUCH_MOTION")]
481    TouchMotion,
482    /// An event describing a removed touch point. After this event,
483    /// its identifier may be reused for any new touch points.
484    /// Use [`Navigation::event_parse_touch_up_event()`][crate::Navigation::event_parse_touch_up_event()] to extract the details
485    /// from the event.
486    #[cfg(feature = "v1_22")]
487    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
488    #[doc(alias = "GST_NAVIGATION_EVENT_TOUCH_UP")]
489    TouchUp,
490    /// An event signaling the end of a sequence of simultaneous touch events.
491    #[cfg(feature = "v1_22")]
492    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
493    #[doc(alias = "GST_NAVIGATION_EVENT_TOUCH_FRAME")]
494    TouchFrame,
495    /// An event cancelling all currently active touch points.
496    #[cfg(feature = "v1_22")]
497    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
498    #[doc(alias = "GST_NAVIGATION_EVENT_TOUCH_CANCEL")]
499    TouchCancel,
500    /// A mouse button double click event.
501    /// Use [`Navigation::event_parse_mouse_button_event()`][crate::Navigation::event_parse_mouse_button_event()] to extract the details
502    /// from the event.
503    #[cfg(feature = "v1_26")]
504    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
505    #[doc(alias = "GST_NAVIGATION_EVENT_MOUSE_DOUBLE_CLICK")]
506    MouseDoubleClick,
507    #[doc(hidden)]
508    __Unknown(i32),
509}
510
511#[doc(hidden)]
512impl IntoGlib for NavigationEventType {
513    type GlibType = ffi::GstNavigationEventType;
514
515    fn into_glib(self) -> ffi::GstNavigationEventType {
516        match self {
517            Self::Invalid => ffi::GST_NAVIGATION_EVENT_INVALID,
518            Self::KeyPress => ffi::GST_NAVIGATION_EVENT_KEY_PRESS,
519            Self::KeyRelease => ffi::GST_NAVIGATION_EVENT_KEY_RELEASE,
520            Self::MouseButtonPress => ffi::GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS,
521            Self::MouseButtonRelease => ffi::GST_NAVIGATION_EVENT_MOUSE_BUTTON_RELEASE,
522            Self::MouseMove => ffi::GST_NAVIGATION_EVENT_MOUSE_MOVE,
523            Self::Command => ffi::GST_NAVIGATION_EVENT_COMMAND,
524            #[cfg(feature = "v1_18")]
525            Self::MouseScroll => ffi::GST_NAVIGATION_EVENT_MOUSE_SCROLL,
526            #[cfg(feature = "v1_22")]
527            Self::TouchDown => ffi::GST_NAVIGATION_EVENT_TOUCH_DOWN,
528            #[cfg(feature = "v1_22")]
529            Self::TouchMotion => ffi::GST_NAVIGATION_EVENT_TOUCH_MOTION,
530            #[cfg(feature = "v1_22")]
531            Self::TouchUp => ffi::GST_NAVIGATION_EVENT_TOUCH_UP,
532            #[cfg(feature = "v1_22")]
533            Self::TouchFrame => ffi::GST_NAVIGATION_EVENT_TOUCH_FRAME,
534            #[cfg(feature = "v1_22")]
535            Self::TouchCancel => ffi::GST_NAVIGATION_EVENT_TOUCH_CANCEL,
536            #[cfg(feature = "v1_26")]
537            Self::MouseDoubleClick => ffi::GST_NAVIGATION_EVENT_MOUSE_DOUBLE_CLICK,
538            Self::__Unknown(value) => value,
539        }
540    }
541}
542
543#[doc(hidden)]
544impl FromGlib<ffi::GstNavigationEventType> for NavigationEventType {
545    unsafe fn from_glib(value: ffi::GstNavigationEventType) -> Self {
546        skip_assert_initialized!();
547
548        match value {
549            ffi::GST_NAVIGATION_EVENT_INVALID => Self::Invalid,
550            ffi::GST_NAVIGATION_EVENT_KEY_PRESS => Self::KeyPress,
551            ffi::GST_NAVIGATION_EVENT_KEY_RELEASE => Self::KeyRelease,
552            ffi::GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS => Self::MouseButtonPress,
553            ffi::GST_NAVIGATION_EVENT_MOUSE_BUTTON_RELEASE => Self::MouseButtonRelease,
554            ffi::GST_NAVIGATION_EVENT_MOUSE_MOVE => Self::MouseMove,
555            ffi::GST_NAVIGATION_EVENT_COMMAND => Self::Command,
556            #[cfg(feature = "v1_18")]
557            ffi::GST_NAVIGATION_EVENT_MOUSE_SCROLL => Self::MouseScroll,
558            #[cfg(feature = "v1_22")]
559            ffi::GST_NAVIGATION_EVENT_TOUCH_DOWN => Self::TouchDown,
560            #[cfg(feature = "v1_22")]
561            ffi::GST_NAVIGATION_EVENT_TOUCH_MOTION => Self::TouchMotion,
562            #[cfg(feature = "v1_22")]
563            ffi::GST_NAVIGATION_EVENT_TOUCH_UP => Self::TouchUp,
564            #[cfg(feature = "v1_22")]
565            ffi::GST_NAVIGATION_EVENT_TOUCH_FRAME => Self::TouchFrame,
566            #[cfg(feature = "v1_22")]
567            ffi::GST_NAVIGATION_EVENT_TOUCH_CANCEL => Self::TouchCancel,
568            #[cfg(feature = "v1_26")]
569            ffi::GST_NAVIGATION_EVENT_MOUSE_DOUBLE_CLICK => Self::MouseDoubleClick,
570            value => Self::__Unknown(value),
571        }
572    }
573}
574
575impl StaticType for NavigationEventType {
576    #[inline]
577    #[doc(alias = "gst_navigation_event_type_get_type")]
578    fn static_type() -> glib::Type {
579        unsafe { from_glib(ffi::gst_navigation_event_type_get_type()) }
580    }
581}
582
583impl glib::HasParamSpec for NavigationEventType {
584    type ParamSpec = glib::ParamSpecEnum;
585    type SetValue = Self;
586    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
587
588    fn param_spec_builder() -> Self::BuilderFn {
589        Self::ParamSpec::builder_with_default
590    }
591}
592
593impl glib::value::ValueType for NavigationEventType {
594    type Type = Self;
595}
596
597unsafe impl<'a> glib::value::FromValue<'a> for NavigationEventType {
598    type Checker = glib::value::GenericValueTypeChecker<Self>;
599
600    #[inline]
601    unsafe fn from_value(value: &'a glib::Value) -> Self {
602        skip_assert_initialized!();
603        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
604    }
605}
606
607impl ToValue for NavigationEventType {
608    #[inline]
609    fn to_value(&self) -> glib::Value {
610        let mut value = glib::Value::for_value_type::<Self>();
611        unsafe {
612            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
613        }
614        value
615    }
616
617    #[inline]
618    fn value_type(&self) -> glib::Type {
619        Self::static_type()
620    }
621}
622
623impl From<NavigationEventType> for glib::Value {
624    #[inline]
625    fn from(v: NavigationEventType) -> Self {
626        skip_assert_initialized!();
627        ToValue::to_value(&v)
628    }
629}
630
631/// A set of notifications that may be received on the bus when navigation
632/// related status changes.
633#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
634#[non_exhaustive]
635#[doc(alias = "GstNavigationMessageType")]
636pub enum NavigationMessageType {
637    /// Returned from
638    /// [`Navigation::message_get_type()`][crate::Navigation::message_get_type()] when the passed message is not a
639    /// navigation message.
640    #[doc(alias = "GST_NAVIGATION_MESSAGE_INVALID")]
641    Invalid,
642    /// Sent when the mouse moves over or leaves a
643    /// clickable region of the output, such as a DVD menu button.
644    #[doc(alias = "GST_NAVIGATION_MESSAGE_MOUSE_OVER")]
645    MouseOver,
646    /// Sent when the set of available commands
647    /// changes and should re-queried by interested applications.
648    #[doc(alias = "GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED")]
649    CommandsChanged,
650    /// Sent when display angles in a multi-angle
651    /// feature (such as a multiangle DVD) change - either angles have appeared or
652    /// disappeared.
653    #[doc(alias = "GST_NAVIGATION_MESSAGE_ANGLES_CHANGED")]
654    AnglesChanged,
655    /// Sent when a navigation event was not handled
656    /// by any element in the pipeline (Since: 1.6)
657    #[doc(alias = "GST_NAVIGATION_MESSAGE_EVENT")]
658    Event,
659    #[doc(hidden)]
660    __Unknown(i32),
661}
662
663#[doc(hidden)]
664impl IntoGlib for NavigationMessageType {
665    type GlibType = ffi::GstNavigationMessageType;
666
667    #[inline]
668    fn into_glib(self) -> ffi::GstNavigationMessageType {
669        match self {
670            Self::Invalid => ffi::GST_NAVIGATION_MESSAGE_INVALID,
671            Self::MouseOver => ffi::GST_NAVIGATION_MESSAGE_MOUSE_OVER,
672            Self::CommandsChanged => ffi::GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED,
673            Self::AnglesChanged => ffi::GST_NAVIGATION_MESSAGE_ANGLES_CHANGED,
674            Self::Event => ffi::GST_NAVIGATION_MESSAGE_EVENT,
675            Self::__Unknown(value) => value,
676        }
677    }
678}
679
680#[doc(hidden)]
681impl FromGlib<ffi::GstNavigationMessageType> for NavigationMessageType {
682    #[inline]
683    unsafe fn from_glib(value: ffi::GstNavigationMessageType) -> Self {
684        skip_assert_initialized!();
685
686        match value {
687            ffi::GST_NAVIGATION_MESSAGE_INVALID => Self::Invalid,
688            ffi::GST_NAVIGATION_MESSAGE_MOUSE_OVER => Self::MouseOver,
689            ffi::GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED => Self::CommandsChanged,
690            ffi::GST_NAVIGATION_MESSAGE_ANGLES_CHANGED => Self::AnglesChanged,
691            ffi::GST_NAVIGATION_MESSAGE_EVENT => Self::Event,
692            value => Self::__Unknown(value),
693        }
694    }
695}
696
697impl StaticType for NavigationMessageType {
698    #[inline]
699    #[doc(alias = "gst_navigation_message_type_get_type")]
700    fn static_type() -> glib::Type {
701        unsafe { from_glib(ffi::gst_navigation_message_type_get_type()) }
702    }
703}
704
705impl glib::HasParamSpec for NavigationMessageType {
706    type ParamSpec = glib::ParamSpecEnum;
707    type SetValue = Self;
708    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
709
710    fn param_spec_builder() -> Self::BuilderFn {
711        Self::ParamSpec::builder_with_default
712    }
713}
714
715impl glib::value::ValueType for NavigationMessageType {
716    type Type = Self;
717}
718
719unsafe impl<'a> glib::value::FromValue<'a> for NavigationMessageType {
720    type Checker = glib::value::GenericValueTypeChecker<Self>;
721
722    #[inline]
723    unsafe fn from_value(value: &'a glib::Value) -> Self {
724        skip_assert_initialized!();
725        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
726    }
727}
728
729impl ToValue for NavigationMessageType {
730    #[inline]
731    fn to_value(&self) -> glib::Value {
732        let mut value = glib::Value::for_value_type::<Self>();
733        unsafe {
734            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
735        }
736        value
737    }
738
739    #[inline]
740    fn value_type(&self) -> glib::Type {
741        Self::static_type()
742    }
743}
744
745impl From<NavigationMessageType> for glib::Value {
746    #[inline]
747    fn from(v: NavigationMessageType) -> Self {
748        skip_assert_initialized!();
749        ToValue::to_value(&v)
750    }
751}
752
753/// Types of navigation interface queries.
754#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
755#[non_exhaustive]
756#[doc(alias = "GstNavigationQueryType")]
757pub enum NavigationQueryType {
758    /// invalid query
759    #[doc(alias = "GST_NAVIGATION_QUERY_INVALID")]
760    Invalid,
761    /// command query
762    #[doc(alias = "GST_NAVIGATION_QUERY_COMMANDS")]
763    Commands,
764    /// viewing angle query
765    #[doc(alias = "GST_NAVIGATION_QUERY_ANGLES")]
766    Angles,
767    #[doc(hidden)]
768    __Unknown(i32),
769}
770
771#[doc(hidden)]
772impl IntoGlib for NavigationQueryType {
773    type GlibType = ffi::GstNavigationQueryType;
774
775    #[inline]
776    fn into_glib(self) -> ffi::GstNavigationQueryType {
777        match self {
778            Self::Invalid => ffi::GST_NAVIGATION_QUERY_INVALID,
779            Self::Commands => ffi::GST_NAVIGATION_QUERY_COMMANDS,
780            Self::Angles => ffi::GST_NAVIGATION_QUERY_ANGLES,
781            Self::__Unknown(value) => value,
782        }
783    }
784}
785
786#[doc(hidden)]
787impl FromGlib<ffi::GstNavigationQueryType> for NavigationQueryType {
788    #[inline]
789    unsafe fn from_glib(value: ffi::GstNavigationQueryType) -> Self {
790        skip_assert_initialized!();
791
792        match value {
793            ffi::GST_NAVIGATION_QUERY_INVALID => Self::Invalid,
794            ffi::GST_NAVIGATION_QUERY_COMMANDS => Self::Commands,
795            ffi::GST_NAVIGATION_QUERY_ANGLES => Self::Angles,
796            value => Self::__Unknown(value),
797        }
798    }
799}
800
801impl StaticType for NavigationQueryType {
802    #[inline]
803    #[doc(alias = "gst_navigation_query_type_get_type")]
804    fn static_type() -> glib::Type {
805        unsafe { from_glib(ffi::gst_navigation_query_type_get_type()) }
806    }
807}
808
809impl glib::HasParamSpec for NavigationQueryType {
810    type ParamSpec = glib::ParamSpecEnum;
811    type SetValue = Self;
812    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
813
814    fn param_spec_builder() -> Self::BuilderFn {
815        Self::ParamSpec::builder_with_default
816    }
817}
818
819impl glib::value::ValueType for NavigationQueryType {
820    type Type = Self;
821}
822
823unsafe impl<'a> glib::value::FromValue<'a> for NavigationQueryType {
824    type Checker = glib::value::GenericValueTypeChecker<Self>;
825
826    #[inline]
827    unsafe fn from_value(value: &'a glib::Value) -> Self {
828        skip_assert_initialized!();
829        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
830    }
831}
832
833impl ToValue for NavigationQueryType {
834    #[inline]
835    fn to_value(&self) -> glib::Value {
836        let mut value = glib::Value::for_value_type::<Self>();
837        unsafe {
838            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
839        }
840        value
841    }
842
843    #[inline]
844    fn value_type(&self) -> glib::Type {
845        Self::static_type()
846    }
847}
848
849impl From<NavigationQueryType> for glib::Value {
850    #[inline]
851    fn from(v: NavigationQueryType) -> Self {
852        skip_assert_initialized!();
853        ToValue::to_value(&v)
854    }
855}
856
857/// Enumeration of the different standards that may apply to AFD data:
858///
859/// 0) ETSI/DVB:
860/// https://www.etsi.org/deliver/etsi_ts/101100_101199/101154/02.01.01_60/ts_101154v020101p.pdf
861///
862/// 1) ATSC A/53:
863/// https://www.atsc.org/wp-content/uploads/2015/03/a_53-Part-4-2009.pdf
864///
865/// 2) SMPTE ST2016-1:
866#[cfg(feature = "v1_18")]
867#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
868#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
869#[non_exhaustive]
870#[doc(alias = "GstVideoAFDSpec")]
871pub enum VideoAFDSpec {
872    /// AFD value is from DVB/ETSI standard
873    #[doc(alias = "GST_VIDEO_AFD_SPEC_DVB_ETSI")]
874    DvbEtsi,
875    /// AFD value is from ATSC A/53 standard
876    #[doc(alias = "GST_VIDEO_AFD_SPEC_ATSC_A53")]
877    AtscA53,
878    #[doc(alias = "GST_VIDEO_AFD_SPEC_SMPTE_ST2016_1")]
879    SmpteSt20161,
880    #[doc(hidden)]
881    __Unknown(i32),
882}
883
884#[cfg(feature = "v1_18")]
885#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
886#[doc(hidden)]
887impl IntoGlib for VideoAFDSpec {
888    type GlibType = ffi::GstVideoAFDSpec;
889
890    #[inline]
891    fn into_glib(self) -> ffi::GstVideoAFDSpec {
892        match self {
893            Self::DvbEtsi => ffi::GST_VIDEO_AFD_SPEC_DVB_ETSI,
894            Self::AtscA53 => ffi::GST_VIDEO_AFD_SPEC_ATSC_A53,
895            Self::SmpteSt20161 => ffi::GST_VIDEO_AFD_SPEC_SMPTE_ST2016_1,
896            Self::__Unknown(value) => value,
897        }
898    }
899}
900
901#[cfg(feature = "v1_18")]
902#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
903#[doc(hidden)]
904impl FromGlib<ffi::GstVideoAFDSpec> for VideoAFDSpec {
905    #[inline]
906    unsafe fn from_glib(value: ffi::GstVideoAFDSpec) -> Self {
907        skip_assert_initialized!();
908
909        match value {
910            ffi::GST_VIDEO_AFD_SPEC_DVB_ETSI => Self::DvbEtsi,
911            ffi::GST_VIDEO_AFD_SPEC_ATSC_A53 => Self::AtscA53,
912            ffi::GST_VIDEO_AFD_SPEC_SMPTE_ST2016_1 => Self::SmpteSt20161,
913            value => Self::__Unknown(value),
914        }
915    }
916}
917
918#[cfg(feature = "v1_18")]
919#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
920impl StaticType for VideoAFDSpec {
921    #[inline]
922    #[doc(alias = "gst_video_afd_spec_get_type")]
923    fn static_type() -> glib::Type {
924        unsafe { from_glib(ffi::gst_video_afd_spec_get_type()) }
925    }
926}
927
928#[cfg(feature = "v1_18")]
929#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
930impl glib::HasParamSpec for VideoAFDSpec {
931    type ParamSpec = glib::ParamSpecEnum;
932    type SetValue = Self;
933    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
934
935    fn param_spec_builder() -> Self::BuilderFn {
936        Self::ParamSpec::builder_with_default
937    }
938}
939
940#[cfg(feature = "v1_18")]
941#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
942impl glib::value::ValueType for VideoAFDSpec {
943    type Type = Self;
944}
945
946#[cfg(feature = "v1_18")]
947#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
948unsafe impl<'a> glib::value::FromValue<'a> for VideoAFDSpec {
949    type Checker = glib::value::GenericValueTypeChecker<Self>;
950
951    #[inline]
952    unsafe fn from_value(value: &'a glib::Value) -> Self {
953        skip_assert_initialized!();
954        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
955    }
956}
957
958#[cfg(feature = "v1_18")]
959#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
960impl ToValue for VideoAFDSpec {
961    #[inline]
962    fn to_value(&self) -> glib::Value {
963        let mut value = glib::Value::for_value_type::<Self>();
964        unsafe {
965            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
966        }
967        value
968    }
969
970    #[inline]
971    fn value_type(&self) -> glib::Type {
972        Self::static_type()
973    }
974}
975
976#[cfg(feature = "v1_18")]
977#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
978impl From<VideoAFDSpec> for glib::Value {
979    #[inline]
980    fn from(v: VideoAFDSpec) -> Self {
981        skip_assert_initialized!();
982        ToValue::to_value(&v)
983    }
984}
985
986/// 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        unsafe { 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        unsafe { 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        unsafe { 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        unsafe { 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        unsafe { 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        unsafe { 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        unsafe { 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        unsafe { 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        unsafe { 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        unsafe { 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    /// packed 4:4:4 RGB (B-G-R-x), 10 bits for R/G/B channel and MSB 2 bits for padding.
3032    #[cfg(feature = "v1_28")]
3033    #[cfg_attr(docsrs, doc(cfg(feature = "v1_28")))]
3034    #[doc(alias = "GST_VIDEO_FORMAT_BGR10x2_LE")]
3035    Bgr10x2Le,
3036    /// packed 4:4:4 RGB (R-G-B-x), 10 bits for R/G/B channel and MSB 2 bits for padding.
3037    #[cfg(feature = "v1_28")]
3038    #[cfg_attr(docsrs, doc(cfg(feature = "v1_28")))]
3039    #[doc(alias = "GST_VIDEO_FORMAT_RGB10x2_LE")]
3040    Rgb10x2Le,
3041    #[doc(hidden)]
3042    __Unknown(i32),
3043}
3044
3045impl VideoFormat {
3046    #[doc(alias = "gst_video_format_from_fourcc")]
3047    pub fn from_fourcc(fourcc: u32) -> VideoFormat {
3048        assert_initialized_main_thread!();
3049        unsafe { from_glib(ffi::gst_video_format_from_fourcc(fourcc)) }
3050    }
3051
3052    #[doc(alias = "gst_video_format_from_string")]
3053    pub fn from_string(format: &str) -> VideoFormat {
3054        assert_initialized_main_thread!();
3055        unsafe { from_glib(ffi::gst_video_format_from_string(format.to_glib_none().0)) }
3056    }
3057
3058    //#[doc(alias = "gst_video_format_get_palette")]
3059    //#[doc(alias = "get_palette")]
3060    //pub fn palette(self) -> (/*Unimplemented*/Option<Basic: Pointer>, usize) {
3061    //    unsafe { TODO: call ffi:gst_video_format_get_palette() }
3062    //}
3063
3064    #[doc(alias = "gst_video_format_to_fourcc")]
3065    pub fn to_fourcc(self) -> u32 {
3066        assert_initialized_main_thread!();
3067        unsafe { ffi::gst_video_format_to_fourcc(self.into_glib()) }
3068    }
3069}
3070
3071impl std::fmt::Display for VideoFormat {
3072    #[inline]
3073    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
3074        f.write_str(&self.to_str())
3075    }
3076}
3077
3078#[doc(hidden)]
3079impl IntoGlib for VideoFormat {
3080    type GlibType = ffi::GstVideoFormat;
3081
3082    fn into_glib(self) -> ffi::GstVideoFormat {
3083        match self {
3084            Self::Unknown => ffi::GST_VIDEO_FORMAT_UNKNOWN,
3085            Self::Encoded => ffi::GST_VIDEO_FORMAT_ENCODED,
3086            Self::I420 => ffi::GST_VIDEO_FORMAT_I420,
3087            Self::Yv12 => ffi::GST_VIDEO_FORMAT_YV12,
3088            Self::Yuy2 => ffi::GST_VIDEO_FORMAT_YUY2,
3089            Self::Uyvy => ffi::GST_VIDEO_FORMAT_UYVY,
3090            Self::Ayuv => ffi::GST_VIDEO_FORMAT_AYUV,
3091            Self::Rgbx => ffi::GST_VIDEO_FORMAT_RGBx,
3092            Self::Bgrx => ffi::GST_VIDEO_FORMAT_BGRx,
3093            Self::Xrgb => ffi::GST_VIDEO_FORMAT_xRGB,
3094            Self::Xbgr => ffi::GST_VIDEO_FORMAT_xBGR,
3095            Self::Rgba => ffi::GST_VIDEO_FORMAT_RGBA,
3096            Self::Bgra => ffi::GST_VIDEO_FORMAT_BGRA,
3097            Self::Argb => ffi::GST_VIDEO_FORMAT_ARGB,
3098            Self::Abgr => ffi::GST_VIDEO_FORMAT_ABGR,
3099            Self::Rgb => ffi::GST_VIDEO_FORMAT_RGB,
3100            Self::Bgr => ffi::GST_VIDEO_FORMAT_BGR,
3101            Self::Y41b => ffi::GST_VIDEO_FORMAT_Y41B,
3102            Self::Y42b => ffi::GST_VIDEO_FORMAT_Y42B,
3103            Self::Yvyu => ffi::GST_VIDEO_FORMAT_YVYU,
3104            Self::Y444 => ffi::GST_VIDEO_FORMAT_Y444,
3105            Self::V210 => ffi::GST_VIDEO_FORMAT_v210,
3106            Self::V216 => ffi::GST_VIDEO_FORMAT_v216,
3107            Self::Nv12 => ffi::GST_VIDEO_FORMAT_NV12,
3108            Self::Nv21 => ffi::GST_VIDEO_FORMAT_NV21,
3109            Self::Gray8 => ffi::GST_VIDEO_FORMAT_GRAY8,
3110            Self::Gray16Be => ffi::GST_VIDEO_FORMAT_GRAY16_BE,
3111            Self::Gray16Le => ffi::GST_VIDEO_FORMAT_GRAY16_LE,
3112            Self::V308 => ffi::GST_VIDEO_FORMAT_v308,
3113            Self::Rgb16 => ffi::GST_VIDEO_FORMAT_RGB16,
3114            Self::Bgr16 => ffi::GST_VIDEO_FORMAT_BGR16,
3115            Self::Rgb15 => ffi::GST_VIDEO_FORMAT_RGB15,
3116            Self::Bgr15 => ffi::GST_VIDEO_FORMAT_BGR15,
3117            Self::Uyvp => ffi::GST_VIDEO_FORMAT_UYVP,
3118            Self::A420 => ffi::GST_VIDEO_FORMAT_A420,
3119            Self::Rgb8p => ffi::GST_VIDEO_FORMAT_RGB8P,
3120            Self::Yuv9 => ffi::GST_VIDEO_FORMAT_YUV9,
3121            Self::Yvu9 => ffi::GST_VIDEO_FORMAT_YVU9,
3122            Self::Iyu1 => ffi::GST_VIDEO_FORMAT_IYU1,
3123            Self::Argb64 => ffi::GST_VIDEO_FORMAT_ARGB64,
3124            Self::Ayuv64 => ffi::GST_VIDEO_FORMAT_AYUV64,
3125            Self::R210 => ffi::GST_VIDEO_FORMAT_r210,
3126            Self::I42010be => ffi::GST_VIDEO_FORMAT_I420_10BE,
3127            Self::I42010le => ffi::GST_VIDEO_FORMAT_I420_10LE,
3128            Self::I42210be => ffi::GST_VIDEO_FORMAT_I422_10BE,
3129            Self::I42210le => ffi::GST_VIDEO_FORMAT_I422_10LE,
3130            Self::Y44410be => ffi::GST_VIDEO_FORMAT_Y444_10BE,
3131            Self::Y44410le => ffi::GST_VIDEO_FORMAT_Y444_10LE,
3132            Self::Gbr => ffi::GST_VIDEO_FORMAT_GBR,
3133            Self::Gbr10be => ffi::GST_VIDEO_FORMAT_GBR_10BE,
3134            Self::Gbr10le => ffi::GST_VIDEO_FORMAT_GBR_10LE,
3135            Self::Nv16 => ffi::GST_VIDEO_FORMAT_NV16,
3136            Self::Nv24 => ffi::GST_VIDEO_FORMAT_NV24,
3137            Self::Nv1264z32 => ffi::GST_VIDEO_FORMAT_NV12_64Z32,
3138            Self::A42010be => ffi::GST_VIDEO_FORMAT_A420_10BE,
3139            Self::A42010le => ffi::GST_VIDEO_FORMAT_A420_10LE,
3140            Self::A42210be => ffi::GST_VIDEO_FORMAT_A422_10BE,
3141            Self::A42210le => ffi::GST_VIDEO_FORMAT_A422_10LE,
3142            Self::A44410be => ffi::GST_VIDEO_FORMAT_A444_10BE,
3143            Self::A44410le => ffi::GST_VIDEO_FORMAT_A444_10LE,
3144            Self::Nv61 => ffi::GST_VIDEO_FORMAT_NV61,
3145            Self::P01010be => ffi::GST_VIDEO_FORMAT_P010_10BE,
3146            Self::P01010le => ffi::GST_VIDEO_FORMAT_P010_10LE,
3147            Self::Iyu2 => ffi::GST_VIDEO_FORMAT_IYU2,
3148            Self::Vyuy => ffi::GST_VIDEO_FORMAT_VYUY,
3149            Self::Gbra => ffi::GST_VIDEO_FORMAT_GBRA,
3150            Self::Gbra10be => ffi::GST_VIDEO_FORMAT_GBRA_10BE,
3151            Self::Gbra10le => ffi::GST_VIDEO_FORMAT_GBRA_10LE,
3152            Self::Gbr12be => ffi::GST_VIDEO_FORMAT_GBR_12BE,
3153            Self::Gbr12le => ffi::GST_VIDEO_FORMAT_GBR_12LE,
3154            Self::Gbra12be => ffi::GST_VIDEO_FORMAT_GBRA_12BE,
3155            Self::Gbra12le => ffi::GST_VIDEO_FORMAT_GBRA_12LE,
3156            Self::I42012be => ffi::GST_VIDEO_FORMAT_I420_12BE,
3157            Self::I42012le => ffi::GST_VIDEO_FORMAT_I420_12LE,
3158            Self::I42212be => ffi::GST_VIDEO_FORMAT_I422_12BE,
3159            Self::I42212le => ffi::GST_VIDEO_FORMAT_I422_12LE,
3160            Self::Y44412be => ffi::GST_VIDEO_FORMAT_Y444_12BE,
3161            Self::Y44412le => ffi::GST_VIDEO_FORMAT_Y444_12LE,
3162            Self::Gray10Le32 => ffi::GST_VIDEO_FORMAT_GRAY10_LE32,
3163            Self::Nv1210le32 => ffi::GST_VIDEO_FORMAT_NV12_10LE32,
3164            Self::Nv1610le32 => ffi::GST_VIDEO_FORMAT_NV16_10LE32,
3165            #[cfg(feature = "v1_16")]
3166            Self::Nv1210le40 => ffi::GST_VIDEO_FORMAT_NV12_10LE40,
3167            #[cfg(feature = "v1_16")]
3168            Self::Y210 => ffi::GST_VIDEO_FORMAT_Y210,
3169            #[cfg(feature = "v1_16")]
3170            Self::Y410 => ffi::GST_VIDEO_FORMAT_Y410,
3171            #[cfg(feature = "v1_16")]
3172            Self::Vuya => ffi::GST_VIDEO_FORMAT_VUYA,
3173            #[cfg(feature = "v1_16")]
3174            Self::Bgr10a2Le => ffi::GST_VIDEO_FORMAT_BGR10A2_LE,
3175            #[cfg(feature = "v1_18")]
3176            Self::Rgb10a2Le => ffi::GST_VIDEO_FORMAT_RGB10A2_LE,
3177            #[cfg(feature = "v1_18")]
3178            Self::Y44416be => ffi::GST_VIDEO_FORMAT_Y444_16BE,
3179            #[cfg(feature = "v1_18")]
3180            Self::Y44416le => ffi::GST_VIDEO_FORMAT_Y444_16LE,
3181            #[cfg(feature = "v1_18")]
3182            Self::P016Be => ffi::GST_VIDEO_FORMAT_P016_BE,
3183            #[cfg(feature = "v1_18")]
3184            Self::P016Le => ffi::GST_VIDEO_FORMAT_P016_LE,
3185            #[cfg(feature = "v1_18")]
3186            Self::P012Be => ffi::GST_VIDEO_FORMAT_P012_BE,
3187            #[cfg(feature = "v1_18")]
3188            Self::P012Le => ffi::GST_VIDEO_FORMAT_P012_LE,
3189            #[cfg(feature = "v1_18")]
3190            Self::Y212Be => ffi::GST_VIDEO_FORMAT_Y212_BE,
3191            #[cfg(feature = "v1_18")]
3192            Self::Y212Le => ffi::GST_VIDEO_FORMAT_Y212_LE,
3193            #[cfg(feature = "v1_18")]
3194            Self::Y412Be => ffi::GST_VIDEO_FORMAT_Y412_BE,
3195            #[cfg(feature = "v1_18")]
3196            Self::Y412Le => ffi::GST_VIDEO_FORMAT_Y412_LE,
3197            #[cfg(feature = "v1_18")]
3198            Self::Nv124l4 => ffi::GST_VIDEO_FORMAT_NV12_4L4,
3199            #[cfg(feature = "v1_18")]
3200            Self::Nv1232l32 => ffi::GST_VIDEO_FORMAT_NV12_32L32,
3201            #[cfg(feature = "v1_20")]
3202            Self::Rgbp => ffi::GST_VIDEO_FORMAT_RGBP,
3203            #[cfg(feature = "v1_20")]
3204            Self::Bgrp => ffi::GST_VIDEO_FORMAT_BGRP,
3205            #[cfg(feature = "v1_20")]
3206            Self::Av12 => ffi::GST_VIDEO_FORMAT_AV12,
3207            #[cfg(feature = "v1_20")]
3208            Self::Argb64Le => ffi::GST_VIDEO_FORMAT_ARGB64_LE,
3209            #[cfg(feature = "v1_20")]
3210            Self::Argb64Be => ffi::GST_VIDEO_FORMAT_ARGB64_BE,
3211            #[cfg(feature = "v1_20")]
3212            Self::Rgba64Le => ffi::GST_VIDEO_FORMAT_RGBA64_LE,
3213            #[cfg(feature = "v1_20")]
3214            Self::Rgba64Be => ffi::GST_VIDEO_FORMAT_RGBA64_BE,
3215            #[cfg(feature = "v1_20")]
3216            Self::Bgra64Le => ffi::GST_VIDEO_FORMAT_BGRA64_LE,
3217            #[cfg(feature = "v1_20")]
3218            Self::Bgra64Be => ffi::GST_VIDEO_FORMAT_BGRA64_BE,
3219            #[cfg(feature = "v1_20")]
3220            Self::Abgr64Le => ffi::GST_VIDEO_FORMAT_ABGR64_LE,
3221            #[cfg(feature = "v1_20")]
3222            Self::Abgr64Be => ffi::GST_VIDEO_FORMAT_ABGR64_BE,
3223            #[cfg(feature = "v1_22")]
3224            Self::Nv1216l32s => ffi::GST_VIDEO_FORMAT_NV12_16L32S,
3225            #[cfg(feature = "v1_22")]
3226            Self::Nv128l128 => ffi::GST_VIDEO_FORMAT_NV12_8L128,
3227            #[cfg(feature = "v1_22")]
3228            Self::Nv1210be8l128 => ffi::GST_VIDEO_FORMAT_NV12_10BE_8L128,
3229            #[cfg(feature = "v1_24")]
3230            Self::Nv1210le404l4 => ffi::GST_VIDEO_FORMAT_NV12_10LE40_4L4,
3231            #[cfg(feature = "v1_24")]
3232            Self::DmaDrm => ffi::GST_VIDEO_FORMAT_DMA_DRM,
3233            #[cfg(feature = "v1_24")]
3234            Self::Mt2110t => ffi::GST_VIDEO_FORMAT_MT2110T,
3235            #[cfg(feature = "v1_24")]
3236            Self::Mt2110r => ffi::GST_VIDEO_FORMAT_MT2110R,
3237            #[cfg(feature = "v1_24")]
3238            Self::A422 => ffi::GST_VIDEO_FORMAT_A422,
3239            #[cfg(feature = "v1_24")]
3240            Self::A444 => ffi::GST_VIDEO_FORMAT_A444,
3241            #[cfg(feature = "v1_24")]
3242            Self::A44412le => ffi::GST_VIDEO_FORMAT_A444_12LE,
3243            #[cfg(feature = "v1_24")]
3244            Self::A44412be => ffi::GST_VIDEO_FORMAT_A444_12BE,
3245            #[cfg(feature = "v1_24")]
3246            Self::A42212le => ffi::GST_VIDEO_FORMAT_A422_12LE,
3247            #[cfg(feature = "v1_24")]
3248            Self::A42212be => ffi::GST_VIDEO_FORMAT_A422_12BE,
3249            #[cfg(feature = "v1_24")]
3250            Self::A42012le => ffi::GST_VIDEO_FORMAT_A420_12LE,
3251            #[cfg(feature = "v1_24")]
3252            Self::A42012be => ffi::GST_VIDEO_FORMAT_A420_12BE,
3253            #[cfg(feature = "v1_24")]
3254            Self::A44416le => ffi::GST_VIDEO_FORMAT_A444_16LE,
3255            #[cfg(feature = "v1_24")]
3256            Self::A44416be => ffi::GST_VIDEO_FORMAT_A444_16BE,
3257            #[cfg(feature = "v1_24")]
3258            Self::A42216le => ffi::GST_VIDEO_FORMAT_A422_16LE,
3259            #[cfg(feature = "v1_24")]
3260            Self::A42216be => ffi::GST_VIDEO_FORMAT_A422_16BE,
3261            #[cfg(feature = "v1_24")]
3262            Self::A42016le => ffi::GST_VIDEO_FORMAT_A420_16LE,
3263            #[cfg(feature = "v1_24")]
3264            Self::A42016be => ffi::GST_VIDEO_FORMAT_A420_16BE,
3265            #[cfg(feature = "v1_24")]
3266            Self::Gbr16le => ffi::GST_VIDEO_FORMAT_GBR_16LE,
3267            #[cfg(feature = "v1_24")]
3268            Self::Gbr16be => ffi::GST_VIDEO_FORMAT_GBR_16BE,
3269            #[cfg(feature = "v1_24")]
3270            Self::Rbga => ffi::GST_VIDEO_FORMAT_RBGA,
3271            #[cfg(feature = "v1_26")]
3272            Self::Y216Le => ffi::GST_VIDEO_FORMAT_Y216_LE,
3273            #[cfg(feature = "v1_26")]
3274            Self::Y216Be => ffi::GST_VIDEO_FORMAT_Y216_BE,
3275            #[cfg(feature = "v1_26")]
3276            Self::Y416Le => ffi::GST_VIDEO_FORMAT_Y416_LE,
3277            #[cfg(feature = "v1_26")]
3278            Self::Y416Be => ffi::GST_VIDEO_FORMAT_Y416_BE,
3279            #[cfg(feature = "v1_26")]
3280            Self::Gray10Le16 => ffi::GST_VIDEO_FORMAT_GRAY10_LE16,
3281            #[cfg(feature = "v1_28")]
3282            Self::Nv1610le40 => ffi::GST_VIDEO_FORMAT_NV16_10LE40,
3283            #[cfg(feature = "v1_28")]
3284            Self::Bgr10x2Le => ffi::GST_VIDEO_FORMAT_BGR10x2_LE,
3285            #[cfg(feature = "v1_28")]
3286            Self::Rgb10x2Le => ffi::GST_VIDEO_FORMAT_RGB10x2_LE,
3287            Self::__Unknown(value) => value,
3288        }
3289    }
3290}
3291
3292#[doc(hidden)]
3293impl FromGlib<ffi::GstVideoFormat> for VideoFormat {
3294    unsafe fn from_glib(value: ffi::GstVideoFormat) -> Self {
3295        skip_assert_initialized!();
3296
3297        match value {
3298            ffi::GST_VIDEO_FORMAT_UNKNOWN => Self::Unknown,
3299            ffi::GST_VIDEO_FORMAT_ENCODED => Self::Encoded,
3300            ffi::GST_VIDEO_FORMAT_I420 => Self::I420,
3301            ffi::GST_VIDEO_FORMAT_YV12 => Self::Yv12,
3302            ffi::GST_VIDEO_FORMAT_YUY2 => Self::Yuy2,
3303            ffi::GST_VIDEO_FORMAT_UYVY => Self::Uyvy,
3304            ffi::GST_VIDEO_FORMAT_AYUV => Self::Ayuv,
3305            ffi::GST_VIDEO_FORMAT_RGBx => Self::Rgbx,
3306            ffi::GST_VIDEO_FORMAT_BGRx => Self::Bgrx,
3307            ffi::GST_VIDEO_FORMAT_xRGB => Self::Xrgb,
3308            ffi::GST_VIDEO_FORMAT_xBGR => Self::Xbgr,
3309            ffi::GST_VIDEO_FORMAT_RGBA => Self::Rgba,
3310            ffi::GST_VIDEO_FORMAT_BGRA => Self::Bgra,
3311            ffi::GST_VIDEO_FORMAT_ARGB => Self::Argb,
3312            ffi::GST_VIDEO_FORMAT_ABGR => Self::Abgr,
3313            ffi::GST_VIDEO_FORMAT_RGB => Self::Rgb,
3314            ffi::GST_VIDEO_FORMAT_BGR => Self::Bgr,
3315            ffi::GST_VIDEO_FORMAT_Y41B => Self::Y41b,
3316            ffi::GST_VIDEO_FORMAT_Y42B => Self::Y42b,
3317            ffi::GST_VIDEO_FORMAT_YVYU => Self::Yvyu,
3318            ffi::GST_VIDEO_FORMAT_Y444 => Self::Y444,
3319            ffi::GST_VIDEO_FORMAT_v210 => Self::V210,
3320            ffi::GST_VIDEO_FORMAT_v216 => Self::V216,
3321            ffi::GST_VIDEO_FORMAT_NV12 => Self::Nv12,
3322            ffi::GST_VIDEO_FORMAT_NV21 => Self::Nv21,
3323            ffi::GST_VIDEO_FORMAT_GRAY8 => Self::Gray8,
3324            ffi::GST_VIDEO_FORMAT_GRAY16_BE => Self::Gray16Be,
3325            ffi::GST_VIDEO_FORMAT_GRAY16_LE => Self::Gray16Le,
3326            ffi::GST_VIDEO_FORMAT_v308 => Self::V308,
3327            ffi::GST_VIDEO_FORMAT_RGB16 => Self::Rgb16,
3328            ffi::GST_VIDEO_FORMAT_BGR16 => Self::Bgr16,
3329            ffi::GST_VIDEO_FORMAT_RGB15 => Self::Rgb15,
3330            ffi::GST_VIDEO_FORMAT_BGR15 => Self::Bgr15,
3331            ffi::GST_VIDEO_FORMAT_UYVP => Self::Uyvp,
3332            ffi::GST_VIDEO_FORMAT_A420 => Self::A420,
3333            ffi::GST_VIDEO_FORMAT_RGB8P => Self::Rgb8p,
3334            ffi::GST_VIDEO_FORMAT_YUV9 => Self::Yuv9,
3335            ffi::GST_VIDEO_FORMAT_YVU9 => Self::Yvu9,
3336            ffi::GST_VIDEO_FORMAT_IYU1 => Self::Iyu1,
3337            ffi::GST_VIDEO_FORMAT_ARGB64 => Self::Argb64,
3338            ffi::GST_VIDEO_FORMAT_AYUV64 => Self::Ayuv64,
3339            ffi::GST_VIDEO_FORMAT_r210 => Self::R210,
3340            ffi::GST_VIDEO_FORMAT_I420_10BE => Self::I42010be,
3341            ffi::GST_VIDEO_FORMAT_I420_10LE => Self::I42010le,
3342            ffi::GST_VIDEO_FORMAT_I422_10BE => Self::I42210be,
3343            ffi::GST_VIDEO_FORMAT_I422_10LE => Self::I42210le,
3344            ffi::GST_VIDEO_FORMAT_Y444_10BE => Self::Y44410be,
3345            ffi::GST_VIDEO_FORMAT_Y444_10LE => Self::Y44410le,
3346            ffi::GST_VIDEO_FORMAT_GBR => Self::Gbr,
3347            ffi::GST_VIDEO_FORMAT_GBR_10BE => Self::Gbr10be,
3348            ffi::GST_VIDEO_FORMAT_GBR_10LE => Self::Gbr10le,
3349            ffi::GST_VIDEO_FORMAT_NV16 => Self::Nv16,
3350            ffi::GST_VIDEO_FORMAT_NV24 => Self::Nv24,
3351            ffi::GST_VIDEO_FORMAT_NV12_64Z32 => Self::Nv1264z32,
3352            ffi::GST_VIDEO_FORMAT_A420_10BE => Self::A42010be,
3353            ffi::GST_VIDEO_FORMAT_A420_10LE => Self::A42010le,
3354            ffi::GST_VIDEO_FORMAT_A422_10BE => Self::A42210be,
3355            ffi::GST_VIDEO_FORMAT_A422_10LE => Self::A42210le,
3356            ffi::GST_VIDEO_FORMAT_A444_10BE => Self::A44410be,
3357            ffi::GST_VIDEO_FORMAT_A444_10LE => Self::A44410le,
3358            ffi::GST_VIDEO_FORMAT_NV61 => Self::Nv61,
3359            ffi::GST_VIDEO_FORMAT_P010_10BE => Self::P01010be,
3360            ffi::GST_VIDEO_FORMAT_P010_10LE => Self::P01010le,
3361            ffi::GST_VIDEO_FORMAT_IYU2 => Self::Iyu2,
3362            ffi::GST_VIDEO_FORMAT_VYUY => Self::Vyuy,
3363            ffi::GST_VIDEO_FORMAT_GBRA => Self::Gbra,
3364            ffi::GST_VIDEO_FORMAT_GBRA_10BE => Self::Gbra10be,
3365            ffi::GST_VIDEO_FORMAT_GBRA_10LE => Self::Gbra10le,
3366            ffi::GST_VIDEO_FORMAT_GBR_12BE => Self::Gbr12be,
3367            ffi::GST_VIDEO_FORMAT_GBR_12LE => Self::Gbr12le,
3368            ffi::GST_VIDEO_FORMAT_GBRA_12BE => Self::Gbra12be,
3369            ffi::GST_VIDEO_FORMAT_GBRA_12LE => Self::Gbra12le,
3370            ffi::GST_VIDEO_FORMAT_I420_12BE => Self::I42012be,
3371            ffi::GST_VIDEO_FORMAT_I420_12LE => Self::I42012le,
3372            ffi::GST_VIDEO_FORMAT_I422_12BE => Self::I42212be,
3373            ffi::GST_VIDEO_FORMAT_I422_12LE => Self::I42212le,
3374            ffi::GST_VIDEO_FORMAT_Y444_12BE => Self::Y44412be,
3375            ffi::GST_VIDEO_FORMAT_Y444_12LE => Self::Y44412le,
3376            ffi::GST_VIDEO_FORMAT_GRAY10_LE32 => Self::Gray10Le32,
3377            ffi::GST_VIDEO_FORMAT_NV12_10LE32 => Self::Nv1210le32,
3378            ffi::GST_VIDEO_FORMAT_NV16_10LE32 => Self::Nv1610le32,
3379            #[cfg(feature = "v1_16")]
3380            ffi::GST_VIDEO_FORMAT_NV12_10LE40 => Self::Nv1210le40,
3381            #[cfg(feature = "v1_16")]
3382            ffi::GST_VIDEO_FORMAT_Y210 => Self::Y210,
3383            #[cfg(feature = "v1_16")]
3384            ffi::GST_VIDEO_FORMAT_Y410 => Self::Y410,
3385            #[cfg(feature = "v1_16")]
3386            ffi::GST_VIDEO_FORMAT_VUYA => Self::Vuya,
3387            #[cfg(feature = "v1_16")]
3388            ffi::GST_VIDEO_FORMAT_BGR10A2_LE => Self::Bgr10a2Le,
3389            #[cfg(feature = "v1_18")]
3390            ffi::GST_VIDEO_FORMAT_RGB10A2_LE => Self::Rgb10a2Le,
3391            #[cfg(feature = "v1_18")]
3392            ffi::GST_VIDEO_FORMAT_Y444_16BE => Self::Y44416be,
3393            #[cfg(feature = "v1_18")]
3394            ffi::GST_VIDEO_FORMAT_Y444_16LE => Self::Y44416le,
3395            #[cfg(feature = "v1_18")]
3396            ffi::GST_VIDEO_FORMAT_P016_BE => Self::P016Be,
3397            #[cfg(feature = "v1_18")]
3398            ffi::GST_VIDEO_FORMAT_P016_LE => Self::P016Le,
3399            #[cfg(feature = "v1_18")]
3400            ffi::GST_VIDEO_FORMAT_P012_BE => Self::P012Be,
3401            #[cfg(feature = "v1_18")]
3402            ffi::GST_VIDEO_FORMAT_P012_LE => Self::P012Le,
3403            #[cfg(feature = "v1_18")]
3404            ffi::GST_VIDEO_FORMAT_Y212_BE => Self::Y212Be,
3405            #[cfg(feature = "v1_18")]
3406            ffi::GST_VIDEO_FORMAT_Y212_LE => Self::Y212Le,
3407            #[cfg(feature = "v1_18")]
3408            ffi::GST_VIDEO_FORMAT_Y412_BE => Self::Y412Be,
3409            #[cfg(feature = "v1_18")]
3410            ffi::GST_VIDEO_FORMAT_Y412_LE => Self::Y412Le,
3411            #[cfg(feature = "v1_18")]
3412            ffi::GST_VIDEO_FORMAT_NV12_4L4 => Self::Nv124l4,
3413            #[cfg(feature = "v1_18")]
3414            ffi::GST_VIDEO_FORMAT_NV12_32L32 => Self::Nv1232l32,
3415            #[cfg(feature = "v1_20")]
3416            ffi::GST_VIDEO_FORMAT_RGBP => Self::Rgbp,
3417            #[cfg(feature = "v1_20")]
3418            ffi::GST_VIDEO_FORMAT_BGRP => Self::Bgrp,
3419            #[cfg(feature = "v1_20")]
3420            ffi::GST_VIDEO_FORMAT_AV12 => Self::Av12,
3421            #[cfg(feature = "v1_20")]
3422            ffi::GST_VIDEO_FORMAT_ARGB64_LE => Self::Argb64Le,
3423            #[cfg(feature = "v1_20")]
3424            ffi::GST_VIDEO_FORMAT_ARGB64_BE => Self::Argb64Be,
3425            #[cfg(feature = "v1_20")]
3426            ffi::GST_VIDEO_FORMAT_RGBA64_LE => Self::Rgba64Le,
3427            #[cfg(feature = "v1_20")]
3428            ffi::GST_VIDEO_FORMAT_RGBA64_BE => Self::Rgba64Be,
3429            #[cfg(feature = "v1_20")]
3430            ffi::GST_VIDEO_FORMAT_BGRA64_LE => Self::Bgra64Le,
3431            #[cfg(feature = "v1_20")]
3432            ffi::GST_VIDEO_FORMAT_BGRA64_BE => Self::Bgra64Be,
3433            #[cfg(feature = "v1_20")]
3434            ffi::GST_VIDEO_FORMAT_ABGR64_LE => Self::Abgr64Le,
3435            #[cfg(feature = "v1_20")]
3436            ffi::GST_VIDEO_FORMAT_ABGR64_BE => Self::Abgr64Be,
3437            #[cfg(feature = "v1_22")]
3438            ffi::GST_VIDEO_FORMAT_NV12_16L32S => Self::Nv1216l32s,
3439            #[cfg(feature = "v1_22")]
3440            ffi::GST_VIDEO_FORMAT_NV12_8L128 => Self::Nv128l128,
3441            #[cfg(feature = "v1_22")]
3442            ffi::GST_VIDEO_FORMAT_NV12_10BE_8L128 => Self::Nv1210be8l128,
3443            #[cfg(feature = "v1_24")]
3444            ffi::GST_VIDEO_FORMAT_NV12_10LE40_4L4 => Self::Nv1210le404l4,
3445            #[cfg(feature = "v1_24")]
3446            ffi::GST_VIDEO_FORMAT_DMA_DRM => Self::DmaDrm,
3447            #[cfg(feature = "v1_24")]
3448            ffi::GST_VIDEO_FORMAT_MT2110T => Self::Mt2110t,
3449            #[cfg(feature = "v1_24")]
3450            ffi::GST_VIDEO_FORMAT_MT2110R => Self::Mt2110r,
3451            #[cfg(feature = "v1_24")]
3452            ffi::GST_VIDEO_FORMAT_A422 => Self::A422,
3453            #[cfg(feature = "v1_24")]
3454            ffi::GST_VIDEO_FORMAT_A444 => Self::A444,
3455            #[cfg(feature = "v1_24")]
3456            ffi::GST_VIDEO_FORMAT_A444_12LE => Self::A44412le,
3457            #[cfg(feature = "v1_24")]
3458            ffi::GST_VIDEO_FORMAT_A444_12BE => Self::A44412be,
3459            #[cfg(feature = "v1_24")]
3460            ffi::GST_VIDEO_FORMAT_A422_12LE => Self::A42212le,
3461            #[cfg(feature = "v1_24")]
3462            ffi::GST_VIDEO_FORMAT_A422_12BE => Self::A42212be,
3463            #[cfg(feature = "v1_24")]
3464            ffi::GST_VIDEO_FORMAT_A420_12LE => Self::A42012le,
3465            #[cfg(feature = "v1_24")]
3466            ffi::GST_VIDEO_FORMAT_A420_12BE => Self::A42012be,
3467            #[cfg(feature = "v1_24")]
3468            ffi::GST_VIDEO_FORMAT_A444_16LE => Self::A44416le,
3469            #[cfg(feature = "v1_24")]
3470            ffi::GST_VIDEO_FORMAT_A444_16BE => Self::A44416be,
3471            #[cfg(feature = "v1_24")]
3472            ffi::GST_VIDEO_FORMAT_A422_16LE => Self::A42216le,
3473            #[cfg(feature = "v1_24")]
3474            ffi::GST_VIDEO_FORMAT_A422_16BE => Self::A42216be,
3475            #[cfg(feature = "v1_24")]
3476            ffi::GST_VIDEO_FORMAT_A420_16LE => Self::A42016le,
3477            #[cfg(feature = "v1_24")]
3478            ffi::GST_VIDEO_FORMAT_A420_16BE => Self::A42016be,
3479            #[cfg(feature = "v1_24")]
3480            ffi::GST_VIDEO_FORMAT_GBR_16LE => Self::Gbr16le,
3481            #[cfg(feature = "v1_24")]
3482            ffi::GST_VIDEO_FORMAT_GBR_16BE => Self::Gbr16be,
3483            #[cfg(feature = "v1_24")]
3484            ffi::GST_VIDEO_FORMAT_RBGA => Self::Rbga,
3485            #[cfg(feature = "v1_26")]
3486            ffi::GST_VIDEO_FORMAT_Y216_LE => Self::Y216Le,
3487            #[cfg(feature = "v1_26")]
3488            ffi::GST_VIDEO_FORMAT_Y216_BE => Self::Y216Be,
3489            #[cfg(feature = "v1_26")]
3490            ffi::GST_VIDEO_FORMAT_Y416_LE => Self::Y416Le,
3491            #[cfg(feature = "v1_26")]
3492            ffi::GST_VIDEO_FORMAT_Y416_BE => Self::Y416Be,
3493            #[cfg(feature = "v1_26")]
3494            ffi::GST_VIDEO_FORMAT_GRAY10_LE16 => Self::Gray10Le16,
3495            #[cfg(feature = "v1_28")]
3496            ffi::GST_VIDEO_FORMAT_NV16_10LE40 => Self::Nv1610le40,
3497            #[cfg(feature = "v1_28")]
3498            ffi::GST_VIDEO_FORMAT_BGR10x2_LE => Self::Bgr10x2Le,
3499            #[cfg(feature = "v1_28")]
3500            ffi::GST_VIDEO_FORMAT_RGB10x2_LE => Self::Rgb10x2Le,
3501            value => Self::__Unknown(value),
3502        }
3503    }
3504}
3505
3506impl StaticType for VideoFormat {
3507    #[inline]
3508    #[doc(alias = "gst_video_format_get_type")]
3509    fn static_type() -> glib::Type {
3510        unsafe { from_glib(ffi::gst_video_format_get_type()) }
3511    }
3512}
3513
3514impl glib::HasParamSpec for VideoFormat {
3515    type ParamSpec = glib::ParamSpecEnum;
3516    type SetValue = Self;
3517    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3518
3519    fn param_spec_builder() -> Self::BuilderFn {
3520        Self::ParamSpec::builder_with_default
3521    }
3522}
3523
3524impl glib::value::ValueType for VideoFormat {
3525    type Type = Self;
3526}
3527
3528unsafe impl<'a> glib::value::FromValue<'a> for VideoFormat {
3529    type Checker = glib::value::GenericValueTypeChecker<Self>;
3530
3531    #[inline]
3532    unsafe fn from_value(value: &'a glib::Value) -> Self {
3533        skip_assert_initialized!();
3534        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3535    }
3536}
3537
3538impl ToValue for VideoFormat {
3539    #[inline]
3540    fn to_value(&self) -> glib::Value {
3541        let mut value = glib::Value::for_value_type::<Self>();
3542        unsafe {
3543            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3544        }
3545        value
3546    }
3547
3548    #[inline]
3549    fn value_type(&self) -> glib::Type {
3550        Self::static_type()
3551    }
3552}
3553
3554impl From<VideoFormat> for glib::Value {
3555    #[inline]
3556    fn from(v: VideoFormat) -> Self {
3557        skip_assert_initialized!();
3558        ToValue::to_value(&v)
3559    }
3560}
3561
3562#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3563#[non_exhaustive]
3564#[doc(alias = "GstVideoGammaMode")]
3565pub enum VideoGammaMode {
3566    /// disable gamma handling
3567    #[doc(alias = "GST_VIDEO_GAMMA_MODE_NONE")]
3568    None,
3569    /// convert between input and output gamma
3570    /// Different gamma conversion modes
3571    #[doc(alias = "GST_VIDEO_GAMMA_MODE_REMAP")]
3572    Remap,
3573    #[doc(hidden)]
3574    __Unknown(i32),
3575}
3576
3577#[doc(hidden)]
3578impl IntoGlib for VideoGammaMode {
3579    type GlibType = ffi::GstVideoGammaMode;
3580
3581    #[inline]
3582    fn into_glib(self) -> ffi::GstVideoGammaMode {
3583        match self {
3584            Self::None => ffi::GST_VIDEO_GAMMA_MODE_NONE,
3585            Self::Remap => ffi::GST_VIDEO_GAMMA_MODE_REMAP,
3586            Self::__Unknown(value) => value,
3587        }
3588    }
3589}
3590
3591#[doc(hidden)]
3592impl FromGlib<ffi::GstVideoGammaMode> for VideoGammaMode {
3593    #[inline]
3594    unsafe fn from_glib(value: ffi::GstVideoGammaMode) -> Self {
3595        skip_assert_initialized!();
3596
3597        match value {
3598            ffi::GST_VIDEO_GAMMA_MODE_NONE => Self::None,
3599            ffi::GST_VIDEO_GAMMA_MODE_REMAP => Self::Remap,
3600            value => Self::__Unknown(value),
3601        }
3602    }
3603}
3604
3605impl StaticType for VideoGammaMode {
3606    #[inline]
3607    #[doc(alias = "gst_video_gamma_mode_get_type")]
3608    fn static_type() -> glib::Type {
3609        unsafe { from_glib(ffi::gst_video_gamma_mode_get_type()) }
3610    }
3611}
3612
3613impl glib::HasParamSpec for VideoGammaMode {
3614    type ParamSpec = glib::ParamSpecEnum;
3615    type SetValue = Self;
3616    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3617
3618    fn param_spec_builder() -> Self::BuilderFn {
3619        Self::ParamSpec::builder_with_default
3620    }
3621}
3622
3623impl glib::value::ValueType for VideoGammaMode {
3624    type Type = Self;
3625}
3626
3627unsafe impl<'a> glib::value::FromValue<'a> for VideoGammaMode {
3628    type Checker = glib::value::GenericValueTypeChecker<Self>;
3629
3630    #[inline]
3631    unsafe fn from_value(value: &'a glib::Value) -> Self {
3632        skip_assert_initialized!();
3633        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3634    }
3635}
3636
3637impl ToValue for VideoGammaMode {
3638    #[inline]
3639    fn to_value(&self) -> glib::Value {
3640        let mut value = glib::Value::for_value_type::<Self>();
3641        unsafe {
3642            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3643        }
3644        value
3645    }
3646
3647    #[inline]
3648    fn value_type(&self) -> glib::Type {
3649        Self::static_type()
3650    }
3651}
3652
3653impl From<VideoGammaMode> for glib::Value {
3654    #[inline]
3655    fn from(v: VideoGammaMode) -> Self {
3656        skip_assert_initialized!();
3657        ToValue::to_value(&v)
3658    }
3659}
3660
3661/// Enum value describing the most common video for High Dynamic Range (HDR) formats.
3662#[cfg(feature = "v1_30")]
3663#[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
3664#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3665#[non_exhaustive]
3666#[doc(alias = "GstVideoHDRFormat")]
3667pub enum VideoHDRFormat {
3668    /// No HDR format detected.
3669    #[doc(alias = "GST_VIDEO_HDR_FORMAT_NONE")]
3670    None,
3671    /// HDR10 format
3672    #[doc(alias = "GST_VIDEO_HDR_FORMAT_HDR10")]
3673    Hdr10,
3674    /// HDR10+ format
3675    #[doc(alias = "GST_VIDEO_HDR_FORMAT_HDR10_PLUS")]
3676    Hdr10Plus,
3677    #[doc(hidden)]
3678    __Unknown(i32),
3679}
3680
3681#[cfg(feature = "v1_30")]
3682#[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
3683#[doc(hidden)]
3684impl IntoGlib for VideoHDRFormat {
3685    type GlibType = ffi::GstVideoHDRFormat;
3686
3687    #[inline]
3688    fn into_glib(self) -> ffi::GstVideoHDRFormat {
3689        match self {
3690            Self::None => ffi::GST_VIDEO_HDR_FORMAT_NONE,
3691            Self::Hdr10 => ffi::GST_VIDEO_HDR_FORMAT_HDR10,
3692            Self::Hdr10Plus => ffi::GST_VIDEO_HDR_FORMAT_HDR10_PLUS,
3693            Self::__Unknown(value) => value,
3694        }
3695    }
3696}
3697
3698#[cfg(feature = "v1_30")]
3699#[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
3700#[doc(hidden)]
3701impl FromGlib<ffi::GstVideoHDRFormat> for VideoHDRFormat {
3702    #[inline]
3703    unsafe fn from_glib(value: ffi::GstVideoHDRFormat) -> Self {
3704        skip_assert_initialized!();
3705
3706        match value {
3707            ffi::GST_VIDEO_HDR_FORMAT_NONE => Self::None,
3708            ffi::GST_VIDEO_HDR_FORMAT_HDR10 => Self::Hdr10,
3709            ffi::GST_VIDEO_HDR_FORMAT_HDR10_PLUS => Self::Hdr10Plus,
3710            value => Self::__Unknown(value),
3711        }
3712    }
3713}
3714
3715/// The possible values of the [`VideoInterlaceMode`][crate::VideoInterlaceMode] describing the interlace
3716/// mode of the stream.
3717#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3718#[non_exhaustive]
3719#[doc(alias = "GstVideoInterlaceMode")]
3720pub enum VideoInterlaceMode {
3721    /// all frames are progressive
3722    #[doc(alias = "GST_VIDEO_INTERLACE_MODE_PROGRESSIVE")]
3723    Progressive,
3724    /// 2 fields are interleaved in one video
3725    ///  frame. Extra buffer flags describe the field order.
3726    #[doc(alias = "GST_VIDEO_INTERLACE_MODE_INTERLEAVED")]
3727    Interleaved,
3728    /// frames contains both interlaced and
3729    ///  progressive video, the buffer flags describe the frame and fields.
3730    #[doc(alias = "GST_VIDEO_INTERLACE_MODE_MIXED")]
3731    Mixed,
3732    /// 2 fields are stored in one buffer, use the
3733    ///  frame ID to get access to the required field. For multiview (the
3734    ///  'views' property > 1) the fields of view N can be found at frame ID
3735    ///  (N * 2) and (N * 2) + 1.
3736    ///  Each field has only half the amount of lines as noted in the
3737    ///  height property. This mode requires multiple GstVideoMeta metadata
3738    ///  to describe the fields.
3739    #[doc(alias = "GST_VIDEO_INTERLACE_MODE_FIELDS")]
3740    Fields,
3741    /// 1 field is stored in one buffer,
3742    ///  `GST_VIDEO_BUFFER_FLAG_TF` or `GST_VIDEO_BUFFER_FLAG_BF` indicates if
3743    ///  the buffer is carrying the top or bottom field, respectively. The top and
3744    ///  bottom buffers must alternate in the pipeline, with this mode
3745    ///  (Since: 1.16).
3746    #[cfg(feature = "v1_16")]
3747    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
3748    #[doc(alias = "GST_VIDEO_INTERLACE_MODE_ALTERNATE")]
3749    Alternate,
3750    #[doc(hidden)]
3751    __Unknown(i32),
3752}
3753
3754impl VideoInterlaceMode {
3755    #[doc(alias = "gst_video_interlace_mode_from_string")]
3756    pub fn from_string(mode: &str) -> VideoInterlaceMode {
3757        assert_initialized_main_thread!();
3758        unsafe {
3759            from_glib(ffi::gst_video_interlace_mode_from_string(
3760                mode.to_glib_none().0,
3761            ))
3762        }
3763    }
3764
3765    pub fn to_str<'a>(self) -> &'a GStr {
3766        unsafe {
3767            GStr::from_ptr(
3768                ffi::gst_video_interlace_mode_to_string(self.into_glib())
3769                    .as_ref()
3770                    .expect("gst_video_interlace_mode_to_string returned NULL"),
3771            )
3772        }
3773    }
3774}
3775
3776impl std::fmt::Display for VideoInterlaceMode {
3777    #[inline]
3778    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
3779        f.write_str(&self.to_str())
3780    }
3781}
3782
3783#[doc(hidden)]
3784impl IntoGlib for VideoInterlaceMode {
3785    type GlibType = ffi::GstVideoInterlaceMode;
3786
3787    #[inline]
3788    fn into_glib(self) -> ffi::GstVideoInterlaceMode {
3789        match self {
3790            Self::Progressive => ffi::GST_VIDEO_INTERLACE_MODE_PROGRESSIVE,
3791            Self::Interleaved => ffi::GST_VIDEO_INTERLACE_MODE_INTERLEAVED,
3792            Self::Mixed => ffi::GST_VIDEO_INTERLACE_MODE_MIXED,
3793            Self::Fields => ffi::GST_VIDEO_INTERLACE_MODE_FIELDS,
3794            #[cfg(feature = "v1_16")]
3795            Self::Alternate => ffi::GST_VIDEO_INTERLACE_MODE_ALTERNATE,
3796            Self::__Unknown(value) => value,
3797        }
3798    }
3799}
3800
3801#[doc(hidden)]
3802impl FromGlib<ffi::GstVideoInterlaceMode> for VideoInterlaceMode {
3803    #[inline]
3804    unsafe fn from_glib(value: ffi::GstVideoInterlaceMode) -> Self {
3805        skip_assert_initialized!();
3806
3807        match value {
3808            ffi::GST_VIDEO_INTERLACE_MODE_PROGRESSIVE => Self::Progressive,
3809            ffi::GST_VIDEO_INTERLACE_MODE_INTERLEAVED => Self::Interleaved,
3810            ffi::GST_VIDEO_INTERLACE_MODE_MIXED => Self::Mixed,
3811            ffi::GST_VIDEO_INTERLACE_MODE_FIELDS => Self::Fields,
3812            #[cfg(feature = "v1_16")]
3813            ffi::GST_VIDEO_INTERLACE_MODE_ALTERNATE => Self::Alternate,
3814            value => Self::__Unknown(value),
3815        }
3816    }
3817}
3818
3819impl StaticType for VideoInterlaceMode {
3820    #[inline]
3821    #[doc(alias = "gst_video_interlace_mode_get_type")]
3822    fn static_type() -> glib::Type {
3823        unsafe { from_glib(ffi::gst_video_interlace_mode_get_type()) }
3824    }
3825}
3826
3827impl glib::HasParamSpec for VideoInterlaceMode {
3828    type ParamSpec = glib::ParamSpecEnum;
3829    type SetValue = Self;
3830    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3831
3832    fn param_spec_builder() -> Self::BuilderFn {
3833        Self::ParamSpec::builder_with_default
3834    }
3835}
3836
3837impl glib::value::ValueType for VideoInterlaceMode {
3838    type Type = Self;
3839}
3840
3841unsafe impl<'a> glib::value::FromValue<'a> for VideoInterlaceMode {
3842    type Checker = glib::value::GenericValueTypeChecker<Self>;
3843
3844    #[inline]
3845    unsafe fn from_value(value: &'a glib::Value) -> Self {
3846        skip_assert_initialized!();
3847        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3848    }
3849}
3850
3851impl ToValue for VideoInterlaceMode {
3852    #[inline]
3853    fn to_value(&self) -> glib::Value {
3854        let mut value = glib::Value::for_value_type::<Self>();
3855        unsafe {
3856            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3857        }
3858        value
3859    }
3860
3861    #[inline]
3862    fn value_type(&self) -> glib::Type {
3863        Self::static_type()
3864    }
3865}
3866
3867impl From<VideoInterlaceMode> for glib::Value {
3868    #[inline]
3869    fn from(v: VideoInterlaceMode) -> Self {
3870        skip_assert_initialized!();
3871        ToValue::to_value(&v)
3872    }
3873}
3874
3875/// Different color matrix conversion modes
3876#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3877#[non_exhaustive]
3878#[doc(alias = "GstVideoMatrixMode")]
3879pub enum VideoMatrixMode {
3880    /// do conversion between color matrices
3881    #[doc(alias = "GST_VIDEO_MATRIX_MODE_FULL")]
3882    Full,
3883    /// use the input color matrix to convert
3884    ///  to and from R'G'B
3885    #[doc(alias = "GST_VIDEO_MATRIX_MODE_INPUT_ONLY")]
3886    InputOnly,
3887    /// use the output color matrix to convert
3888    ///  to and from R'G'B
3889    #[doc(alias = "GST_VIDEO_MATRIX_MODE_OUTPUT_ONLY")]
3890    OutputOnly,
3891    /// disable color matrix conversion.
3892    #[doc(alias = "GST_VIDEO_MATRIX_MODE_NONE")]
3893    None,
3894    #[doc(hidden)]
3895    __Unknown(i32),
3896}
3897
3898#[doc(hidden)]
3899impl IntoGlib for VideoMatrixMode {
3900    type GlibType = ffi::GstVideoMatrixMode;
3901
3902    #[inline]
3903    fn into_glib(self) -> ffi::GstVideoMatrixMode {
3904        match self {
3905            Self::Full => ffi::GST_VIDEO_MATRIX_MODE_FULL,
3906            Self::InputOnly => ffi::GST_VIDEO_MATRIX_MODE_INPUT_ONLY,
3907            Self::OutputOnly => ffi::GST_VIDEO_MATRIX_MODE_OUTPUT_ONLY,
3908            Self::None => ffi::GST_VIDEO_MATRIX_MODE_NONE,
3909            Self::__Unknown(value) => value,
3910        }
3911    }
3912}
3913
3914#[doc(hidden)]
3915impl FromGlib<ffi::GstVideoMatrixMode> for VideoMatrixMode {
3916    #[inline]
3917    unsafe fn from_glib(value: ffi::GstVideoMatrixMode) -> Self {
3918        skip_assert_initialized!();
3919
3920        match value {
3921            ffi::GST_VIDEO_MATRIX_MODE_FULL => Self::Full,
3922            ffi::GST_VIDEO_MATRIX_MODE_INPUT_ONLY => Self::InputOnly,
3923            ffi::GST_VIDEO_MATRIX_MODE_OUTPUT_ONLY => Self::OutputOnly,
3924            ffi::GST_VIDEO_MATRIX_MODE_NONE => Self::None,
3925            value => Self::__Unknown(value),
3926        }
3927    }
3928}
3929
3930impl StaticType for VideoMatrixMode {
3931    #[inline]
3932    #[doc(alias = "gst_video_matrix_mode_get_type")]
3933    fn static_type() -> glib::Type {
3934        unsafe { from_glib(ffi::gst_video_matrix_mode_get_type()) }
3935    }
3936}
3937
3938impl glib::HasParamSpec for VideoMatrixMode {
3939    type ParamSpec = glib::ParamSpecEnum;
3940    type SetValue = Self;
3941    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3942
3943    fn param_spec_builder() -> Self::BuilderFn {
3944        Self::ParamSpec::builder_with_default
3945    }
3946}
3947
3948impl glib::value::ValueType for VideoMatrixMode {
3949    type Type = Self;
3950}
3951
3952unsafe impl<'a> glib::value::FromValue<'a> for VideoMatrixMode {
3953    type Checker = glib::value::GenericValueTypeChecker<Self>;
3954
3955    #[inline]
3956    unsafe fn from_value(value: &'a glib::Value) -> Self {
3957        skip_assert_initialized!();
3958        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3959    }
3960}
3961
3962impl ToValue for VideoMatrixMode {
3963    #[inline]
3964    fn to_value(&self) -> glib::Value {
3965        let mut value = glib::Value::for_value_type::<Self>();
3966        unsafe {
3967            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3968        }
3969        value
3970    }
3971
3972    #[inline]
3973    fn value_type(&self) -> glib::Type {
3974        Self::static_type()
3975    }
3976}
3977
3978impl From<VideoMatrixMode> for glib::Value {
3979    #[inline]
3980    fn from(v: VideoMatrixMode) -> Self {
3981        skip_assert_initialized!();
3982        ToValue::to_value(&v)
3983    }
3984}
3985
3986/// [`VideoMultiviewFramePacking`][crate::VideoMultiviewFramePacking] represents the subset of [`VideoMultiviewMode`][crate::VideoMultiviewMode]
3987/// values that can be applied to any video frame without needing extra metadata.
3988/// It can be used by elements that provide a property to override the
3989/// multiview interpretation of a video stream when the video doesn't contain
3990/// any markers.
3991///
3992/// This enum is used (for example) on playbin, to re-interpret a played
3993/// video stream as a stereoscopic video. The individual enum values are
3994/// equivalent to and have the same value as the matching [`VideoMultiviewMode`][crate::VideoMultiviewMode].
3995#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3996#[non_exhaustive]
3997#[doc(alias = "GstVideoMultiviewFramePacking")]
3998pub enum VideoMultiviewFramePacking {
3999    /// A special value indicating
4000    /// no frame packing info.
4001    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE")]
4002    None,
4003    /// All frames are monoscopic.
4004    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_MONO")]
4005    Mono,
4006    /// All frames represent a left-eye view.
4007    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_LEFT")]
4008    Left,
4009    /// All frames represent a right-eye view.
4010    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_RIGHT")]
4011    Right,
4012    /// Left and right eye views are
4013    /// provided in the left and right half of the frame respectively.
4014    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE")]
4015    SideBySide,
4016    /// Left and right eye
4017    /// views are provided in the left and right half of the frame, but
4018    /// have been sampled using quincunx method, with half-pixel offset
4019    /// between the 2 views.
4020    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE_QUINCUNX")]
4021    SideBySideQuincunx,
4022    /// Alternating vertical
4023    /// columns of pixels represent the left and right eye view respectively.
4024    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_COLUMN_INTERLEAVED")]
4025    ColumnInterleaved,
4026    /// Alternating horizontal
4027    /// rows of pixels represent the left and right eye view respectively.
4028    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_ROW_INTERLEAVED")]
4029    RowInterleaved,
4030    /// The top half of the frame
4031    /// contains the left eye, and the bottom half the right eye.
4032    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_TOP_BOTTOM")]
4033    TopBottom,
4034    /// Pixels are arranged with
4035    /// alternating pixels representing left and right eye views in a
4036    /// checkerboard fashion.
4037    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_CHECKERBOARD")]
4038    Checkerboard,
4039    #[doc(hidden)]
4040    __Unknown(i32),
4041}
4042
4043#[doc(hidden)]
4044impl IntoGlib for VideoMultiviewFramePacking {
4045    type GlibType = ffi::GstVideoMultiviewFramePacking;
4046
4047    #[inline]
4048    fn into_glib(self) -> ffi::GstVideoMultiviewFramePacking {
4049        match self {
4050            Self::None => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE,
4051            Self::Mono => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_MONO,
4052            Self::Left => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_LEFT,
4053            Self::Right => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_RIGHT,
4054            Self::SideBySide => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE,
4055            Self::SideBySideQuincunx => {
4056                ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE_QUINCUNX
4057            }
4058            Self::ColumnInterleaved => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_COLUMN_INTERLEAVED,
4059            Self::RowInterleaved => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_ROW_INTERLEAVED,
4060            Self::TopBottom => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_TOP_BOTTOM,
4061            Self::Checkerboard => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_CHECKERBOARD,
4062            Self::__Unknown(value) => value,
4063        }
4064    }
4065}
4066
4067#[doc(hidden)]
4068impl FromGlib<ffi::GstVideoMultiviewFramePacking> for VideoMultiviewFramePacking {
4069    #[inline]
4070    unsafe fn from_glib(value: ffi::GstVideoMultiviewFramePacking) -> Self {
4071        skip_assert_initialized!();
4072
4073        match value {
4074            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE => Self::None,
4075            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_MONO => Self::Mono,
4076            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_LEFT => Self::Left,
4077            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_RIGHT => Self::Right,
4078            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE => Self::SideBySide,
4079            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE_QUINCUNX => {
4080                Self::SideBySideQuincunx
4081            }
4082            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_COLUMN_INTERLEAVED => Self::ColumnInterleaved,
4083            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_ROW_INTERLEAVED => Self::RowInterleaved,
4084            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_TOP_BOTTOM => Self::TopBottom,
4085            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_CHECKERBOARD => Self::Checkerboard,
4086            value => Self::__Unknown(value),
4087        }
4088    }
4089}
4090
4091impl StaticType for VideoMultiviewFramePacking {
4092    #[inline]
4093    #[doc(alias = "gst_video_multiview_frame_packing_get_type")]
4094    fn static_type() -> glib::Type {
4095        unsafe { from_glib(ffi::gst_video_multiview_frame_packing_get_type()) }
4096    }
4097}
4098
4099impl glib::HasParamSpec for VideoMultiviewFramePacking {
4100    type ParamSpec = glib::ParamSpecEnum;
4101    type SetValue = Self;
4102    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4103
4104    fn param_spec_builder() -> Self::BuilderFn {
4105        Self::ParamSpec::builder_with_default
4106    }
4107}
4108
4109impl glib::value::ValueType for VideoMultiviewFramePacking {
4110    type Type = Self;
4111}
4112
4113unsafe impl<'a> glib::value::FromValue<'a> for VideoMultiviewFramePacking {
4114    type Checker = glib::value::GenericValueTypeChecker<Self>;
4115
4116    #[inline]
4117    unsafe fn from_value(value: &'a glib::Value) -> Self {
4118        skip_assert_initialized!();
4119        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
4120    }
4121}
4122
4123impl ToValue for VideoMultiviewFramePacking {
4124    #[inline]
4125    fn to_value(&self) -> glib::Value {
4126        let mut value = glib::Value::for_value_type::<Self>();
4127        unsafe {
4128            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4129        }
4130        value
4131    }
4132
4133    #[inline]
4134    fn value_type(&self) -> glib::Type {
4135        Self::static_type()
4136    }
4137}
4138
4139impl From<VideoMultiviewFramePacking> for glib::Value {
4140    #[inline]
4141    fn from(v: VideoMultiviewFramePacking) -> Self {
4142        skip_assert_initialized!();
4143        ToValue::to_value(&v)
4144    }
4145}
4146
4147/// All possible stereoscopic 3D and multiview representations.
4148/// In conjunction with [`VideoMultiviewFlags`][crate::VideoMultiviewFlags], describes how
4149/// multiview content is being transported in the stream.
4150#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4151#[non_exhaustive]
4152#[doc(alias = "GstVideoMultiviewMode")]
4153pub enum VideoMultiviewMode {
4154    /// A special value indicating
4155    /// no multiview information. Used in GstVideoInfo and other places to
4156    /// indicate that no specific multiview handling has been requested or
4157    /// provided. This value is never carried on caps.
4158    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_NONE")]
4159    None,
4160    /// All frames are monoscopic.
4161    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_MONO")]
4162    Mono,
4163    /// All frames represent a left-eye view.
4164    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_LEFT")]
4165    Left,
4166    /// All frames represent a right-eye view.
4167    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_RIGHT")]
4168    Right,
4169    /// Left and right eye views are
4170    /// provided in the left and right half of the frame respectively.
4171    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE")]
4172    SideBySide,
4173    /// Left and right eye
4174    /// views are provided in the left and right half of the frame, but
4175    /// have been sampled using quincunx method, with half-pixel offset
4176    /// between the 2 views.
4177    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX")]
4178    SideBySideQuincunx,
4179    /// Alternating vertical
4180    /// columns of pixels represent the left and right eye view respectively.
4181    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED")]
4182    ColumnInterleaved,
4183    /// Alternating horizontal
4184    /// rows of pixels represent the left and right eye view respectively.
4185    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED")]
4186    RowInterleaved,
4187    /// The top half of the frame
4188    /// contains the left eye, and the bottom half the right eye.
4189    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM")]
4190    TopBottom,
4191    /// Pixels are arranged with
4192    /// alternating pixels representing left and right eye views in a
4193    /// checkerboard fashion.
4194    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD")]
4195    Checkerboard,
4196    /// Left and right eye views
4197    /// are provided in separate frames alternately.
4198    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME")]
4199    FrameByFrame,
4200    /// Multiple
4201    /// independent views are provided in separate frames in sequence.
4202    /// This method only applies to raw video buffers at the moment.
4203    /// Specific view identification is via the `GstVideoMultiviewMeta`
4204    /// and [`VideoMeta`][crate::VideoMeta](s) on raw video buffers.
4205    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_MULTIVIEW_FRAME_BY_FRAME")]
4206    MultiviewFrameByFrame,
4207    /// Multiple views are
4208    /// provided as separate [`gst::Memory`][crate::gst::Memory] framebuffers attached to each
4209    /// [`gst::Buffer`][crate::gst::Buffer], described by the `GstVideoMultiviewMeta`
4210    /// and [`VideoMeta`][crate::VideoMeta](s)
4211    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_SEPARATED")]
4212    Separated,
4213    #[doc(hidden)]
4214    __Unknown(i32),
4215}
4216
4217impl VideoMultiviewMode {
4218    #[doc(alias = "gst_video_multiview_mode_from_caps_string")]
4219    pub fn from_caps_string(caps_mview_mode: &str) -> VideoMultiviewMode {
4220        assert_initialized_main_thread!();
4221        unsafe {
4222            from_glib(ffi::gst_video_multiview_mode_from_caps_string(
4223                caps_mview_mode.to_glib_none().0,
4224            ))
4225        }
4226    }
4227
4228    #[doc(alias = "gst_video_multiview_mode_to_caps_string")]
4229    pub fn to_caps_string(self) -> Option<glib::GString> {
4230        assert_initialized_main_thread!();
4231        unsafe {
4232            from_glib_none(ffi::gst_video_multiview_mode_to_caps_string(
4233                self.into_glib(),
4234            ))
4235        }
4236    }
4237}
4238
4239#[doc(hidden)]
4240impl IntoGlib for VideoMultiviewMode {
4241    type GlibType = ffi::GstVideoMultiviewMode;
4242
4243    fn into_glib(self) -> ffi::GstVideoMultiviewMode {
4244        match self {
4245            Self::None => ffi::GST_VIDEO_MULTIVIEW_MODE_NONE,
4246            Self::Mono => ffi::GST_VIDEO_MULTIVIEW_MODE_MONO,
4247            Self::Left => ffi::GST_VIDEO_MULTIVIEW_MODE_LEFT,
4248            Self::Right => ffi::GST_VIDEO_MULTIVIEW_MODE_RIGHT,
4249            Self::SideBySide => ffi::GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE,
4250            Self::SideBySideQuincunx => ffi::GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX,
4251            Self::ColumnInterleaved => ffi::GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED,
4252            Self::RowInterleaved => ffi::GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED,
4253            Self::TopBottom => ffi::GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM,
4254            Self::Checkerboard => ffi::GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD,
4255            Self::FrameByFrame => ffi::GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME,
4256            Self::MultiviewFrameByFrame => ffi::GST_VIDEO_MULTIVIEW_MODE_MULTIVIEW_FRAME_BY_FRAME,
4257            Self::Separated => ffi::GST_VIDEO_MULTIVIEW_MODE_SEPARATED,
4258            Self::__Unknown(value) => value,
4259        }
4260    }
4261}
4262
4263#[doc(hidden)]
4264impl FromGlib<ffi::GstVideoMultiviewMode> for VideoMultiviewMode {
4265    unsafe fn from_glib(value: ffi::GstVideoMultiviewMode) -> Self {
4266        skip_assert_initialized!();
4267
4268        match value {
4269            ffi::GST_VIDEO_MULTIVIEW_MODE_NONE => Self::None,
4270            ffi::GST_VIDEO_MULTIVIEW_MODE_MONO => Self::Mono,
4271            ffi::GST_VIDEO_MULTIVIEW_MODE_LEFT => Self::Left,
4272            ffi::GST_VIDEO_MULTIVIEW_MODE_RIGHT => Self::Right,
4273            ffi::GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE => Self::SideBySide,
4274            ffi::GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX => Self::SideBySideQuincunx,
4275            ffi::GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED => Self::ColumnInterleaved,
4276            ffi::GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED => Self::RowInterleaved,
4277            ffi::GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM => Self::TopBottom,
4278            ffi::GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD => Self::Checkerboard,
4279            ffi::GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME => Self::FrameByFrame,
4280            ffi::GST_VIDEO_MULTIVIEW_MODE_MULTIVIEW_FRAME_BY_FRAME => Self::MultiviewFrameByFrame,
4281            ffi::GST_VIDEO_MULTIVIEW_MODE_SEPARATED => Self::Separated,
4282            value => Self::__Unknown(value),
4283        }
4284    }
4285}
4286
4287impl StaticType for VideoMultiviewMode {
4288    #[inline]
4289    #[doc(alias = "gst_video_multiview_mode_get_type")]
4290    fn static_type() -> glib::Type {
4291        unsafe { from_glib(ffi::gst_video_multiview_mode_get_type()) }
4292    }
4293}
4294
4295impl glib::HasParamSpec for VideoMultiviewMode {
4296    type ParamSpec = glib::ParamSpecEnum;
4297    type SetValue = Self;
4298    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4299
4300    fn param_spec_builder() -> Self::BuilderFn {
4301        Self::ParamSpec::builder_with_default
4302    }
4303}
4304
4305impl glib::value::ValueType for VideoMultiviewMode {
4306    type Type = Self;
4307}
4308
4309unsafe impl<'a> glib::value::FromValue<'a> for VideoMultiviewMode {
4310    type Checker = glib::value::GenericValueTypeChecker<Self>;
4311
4312    #[inline]
4313    unsafe fn from_value(value: &'a glib::Value) -> Self {
4314        skip_assert_initialized!();
4315        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
4316    }
4317}
4318
4319impl ToValue for VideoMultiviewMode {
4320    #[inline]
4321    fn to_value(&self) -> glib::Value {
4322        let mut value = glib::Value::for_value_type::<Self>();
4323        unsafe {
4324            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4325        }
4326        value
4327    }
4328
4329    #[inline]
4330    fn value_type(&self) -> glib::Type {
4331        Self::static_type()
4332    }
4333}
4334
4335impl From<VideoMultiviewMode> for glib::Value {
4336    #[inline]
4337    fn from(v: VideoMultiviewMode) -> Self {
4338        skip_assert_initialized!();
4339        ToValue::to_value(&v)
4340    }
4341}
4342
4343/// The different video orientation methods.
4344#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4345#[non_exhaustive]
4346#[doc(alias = "GstVideoOrientationMethod")]
4347pub enum VideoOrientationMethod {
4348    /// Identity (no rotation)
4349    #[doc(alias = "GST_VIDEO_ORIENTATION_IDENTITY")]
4350    Identity,
4351    /// Rotate clockwise 90 degrees
4352    #[doc(alias = "GST_VIDEO_ORIENTATION_90R")]
4353    _90r,
4354    /// Rotate 180 degrees
4355    #[doc(alias = "GST_VIDEO_ORIENTATION_180")]
4356    _180,
4357    /// Rotate counter-clockwise 90 degrees
4358    #[doc(alias = "GST_VIDEO_ORIENTATION_90L")]
4359    _90l,
4360    /// Flip horizontally
4361    #[doc(alias = "GST_VIDEO_ORIENTATION_HORIZ")]
4362    Horiz,
4363    /// Flip vertically
4364    #[doc(alias = "GST_VIDEO_ORIENTATION_VERT")]
4365    Vert,
4366    /// Rotate counter-clockwise 90 degrees and flip vertically
4367    #[doc(alias = "GST_VIDEO_ORIENTATION_UL_LR")]
4368    UlLr,
4369    /// Rotate clockwise 90 degrees and flip vertically
4370    #[doc(alias = "GST_VIDEO_ORIENTATION_UR_LL")]
4371    UrLl,
4372    /// Select flip method based on image-orientation tag
4373    #[doc(alias = "GST_VIDEO_ORIENTATION_AUTO")]
4374    Auto,
4375    /// Current status depends on plugin internal setup
4376    #[doc(alias = "GST_VIDEO_ORIENTATION_CUSTOM")]
4377    Custom,
4378    #[doc(hidden)]
4379    __Unknown(i32),
4380}
4381
4382#[doc(hidden)]
4383impl IntoGlib for VideoOrientationMethod {
4384    type GlibType = ffi::GstVideoOrientationMethod;
4385
4386    #[inline]
4387    fn into_glib(self) -> ffi::GstVideoOrientationMethod {
4388        match self {
4389            Self::Identity => ffi::GST_VIDEO_ORIENTATION_IDENTITY,
4390            Self::_90r => ffi::GST_VIDEO_ORIENTATION_90R,
4391            Self::_180 => ffi::GST_VIDEO_ORIENTATION_180,
4392            Self::_90l => ffi::GST_VIDEO_ORIENTATION_90L,
4393            Self::Horiz => ffi::GST_VIDEO_ORIENTATION_HORIZ,
4394            Self::Vert => ffi::GST_VIDEO_ORIENTATION_VERT,
4395            Self::UlLr => ffi::GST_VIDEO_ORIENTATION_UL_LR,
4396            Self::UrLl => ffi::GST_VIDEO_ORIENTATION_UR_LL,
4397            Self::Auto => ffi::GST_VIDEO_ORIENTATION_AUTO,
4398            Self::Custom => ffi::GST_VIDEO_ORIENTATION_CUSTOM,
4399            Self::__Unknown(value) => value,
4400        }
4401    }
4402}
4403
4404#[doc(hidden)]
4405impl FromGlib<ffi::GstVideoOrientationMethod> for VideoOrientationMethod {
4406    #[inline]
4407    unsafe fn from_glib(value: ffi::GstVideoOrientationMethod) -> Self {
4408        skip_assert_initialized!();
4409
4410        match value {
4411            ffi::GST_VIDEO_ORIENTATION_IDENTITY => Self::Identity,
4412            ffi::GST_VIDEO_ORIENTATION_90R => Self::_90r,
4413            ffi::GST_VIDEO_ORIENTATION_180 => Self::_180,
4414            ffi::GST_VIDEO_ORIENTATION_90L => Self::_90l,
4415            ffi::GST_VIDEO_ORIENTATION_HORIZ => Self::Horiz,
4416            ffi::GST_VIDEO_ORIENTATION_VERT => Self::Vert,
4417            ffi::GST_VIDEO_ORIENTATION_UL_LR => Self::UlLr,
4418            ffi::GST_VIDEO_ORIENTATION_UR_LL => Self::UrLl,
4419            ffi::GST_VIDEO_ORIENTATION_AUTO => Self::Auto,
4420            ffi::GST_VIDEO_ORIENTATION_CUSTOM => Self::Custom,
4421            value => Self::__Unknown(value),
4422        }
4423    }
4424}
4425
4426impl StaticType for VideoOrientationMethod {
4427    #[inline]
4428    #[doc(alias = "gst_video_orientation_method_get_type")]
4429    fn static_type() -> glib::Type {
4430        unsafe { from_glib(ffi::gst_video_orientation_method_get_type()) }
4431    }
4432}
4433
4434impl glib::HasParamSpec for VideoOrientationMethod {
4435    type ParamSpec = glib::ParamSpecEnum;
4436    type SetValue = Self;
4437    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4438
4439    fn param_spec_builder() -> Self::BuilderFn {
4440        Self::ParamSpec::builder_with_default
4441    }
4442}
4443
4444impl glib::value::ValueType for VideoOrientationMethod {
4445    type Type = Self;
4446}
4447
4448unsafe impl<'a> glib::value::FromValue<'a> for VideoOrientationMethod {
4449    type Checker = glib::value::GenericValueTypeChecker<Self>;
4450
4451    #[inline]
4452    unsafe fn from_value(value: &'a glib::Value) -> Self {
4453        skip_assert_initialized!();
4454        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
4455    }
4456}
4457
4458impl ToValue for VideoOrientationMethod {
4459    #[inline]
4460    fn to_value(&self) -> glib::Value {
4461        let mut value = glib::Value::for_value_type::<Self>();
4462        unsafe {
4463            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4464        }
4465        value
4466    }
4467
4468    #[inline]
4469    fn value_type(&self) -> glib::Type {
4470        Self::static_type()
4471    }
4472}
4473
4474impl From<VideoOrientationMethod> for glib::Value {
4475    #[inline]
4476    fn from(v: VideoOrientationMethod) -> Self {
4477        skip_assert_initialized!();
4478        ToValue::to_value(&v)
4479    }
4480}
4481
4482/// Different primaries conversion modes
4483#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4484#[non_exhaustive]
4485#[doc(alias = "GstVideoPrimariesMode")]
4486pub enum VideoPrimariesMode {
4487    /// disable conversion between primaries
4488    #[doc(alias = "GST_VIDEO_PRIMARIES_MODE_NONE")]
4489    None,
4490    /// do conversion between primaries only
4491    ///  when it can be merged with color matrix conversion.
4492    #[doc(alias = "GST_VIDEO_PRIMARIES_MODE_MERGE_ONLY")]
4493    MergeOnly,
4494    /// fast conversion between primaries
4495    #[doc(alias = "GST_VIDEO_PRIMARIES_MODE_FAST")]
4496    Fast,
4497    #[doc(hidden)]
4498    __Unknown(i32),
4499}
4500
4501#[doc(hidden)]
4502impl IntoGlib for VideoPrimariesMode {
4503    type GlibType = ffi::GstVideoPrimariesMode;
4504
4505    #[inline]
4506    fn into_glib(self) -> ffi::GstVideoPrimariesMode {
4507        match self {
4508            Self::None => ffi::GST_VIDEO_PRIMARIES_MODE_NONE,
4509            Self::MergeOnly => ffi::GST_VIDEO_PRIMARIES_MODE_MERGE_ONLY,
4510            Self::Fast => ffi::GST_VIDEO_PRIMARIES_MODE_FAST,
4511            Self::__Unknown(value) => value,
4512        }
4513    }
4514}
4515
4516#[doc(hidden)]
4517impl FromGlib<ffi::GstVideoPrimariesMode> for VideoPrimariesMode {
4518    #[inline]
4519    unsafe fn from_glib(value: ffi::GstVideoPrimariesMode) -> Self {
4520        skip_assert_initialized!();
4521
4522        match value {
4523            ffi::GST_VIDEO_PRIMARIES_MODE_NONE => Self::None,
4524            ffi::GST_VIDEO_PRIMARIES_MODE_MERGE_ONLY => Self::MergeOnly,
4525            ffi::GST_VIDEO_PRIMARIES_MODE_FAST => Self::Fast,
4526            value => Self::__Unknown(value),
4527        }
4528    }
4529}
4530
4531impl StaticType for VideoPrimariesMode {
4532    #[inline]
4533    #[doc(alias = "gst_video_primaries_mode_get_type")]
4534    fn static_type() -> glib::Type {
4535        unsafe { from_glib(ffi::gst_video_primaries_mode_get_type()) }
4536    }
4537}
4538
4539impl glib::HasParamSpec for VideoPrimariesMode {
4540    type ParamSpec = glib::ParamSpecEnum;
4541    type SetValue = Self;
4542    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4543
4544    fn param_spec_builder() -> Self::BuilderFn {
4545        Self::ParamSpec::builder_with_default
4546    }
4547}
4548
4549impl glib::value::ValueType for VideoPrimariesMode {
4550    type Type = Self;
4551}
4552
4553unsafe impl<'a> glib::value::FromValue<'a> for VideoPrimariesMode {
4554    type Checker = glib::value::GenericValueTypeChecker<Self>;
4555
4556    #[inline]
4557    unsafe fn from_value(value: &'a glib::Value) -> Self {
4558        skip_assert_initialized!();
4559        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
4560    }
4561}
4562
4563impl ToValue for VideoPrimariesMode {
4564    #[inline]
4565    fn to_value(&self) -> glib::Value {
4566        let mut value = glib::Value::for_value_type::<Self>();
4567        unsafe {
4568            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4569        }
4570        value
4571    }
4572
4573    #[inline]
4574    fn value_type(&self) -> glib::Type {
4575        Self::static_type()
4576    }
4577}
4578
4579impl From<VideoPrimariesMode> for glib::Value {
4580    #[inline]
4581    fn from(v: VideoPrimariesMode) -> Self {
4582        skip_assert_initialized!();
4583        ToValue::to_value(&v)
4584    }
4585}
4586
4587/// Different subsampling and upsampling methods
4588#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4589#[non_exhaustive]
4590#[doc(alias = "GstVideoResamplerMethod")]
4591pub enum VideoResamplerMethod {
4592    /// Duplicates the samples when
4593    ///  upsampling and drops when downsampling
4594    #[doc(alias = "GST_VIDEO_RESAMPLER_METHOD_NEAREST")]
4595    Nearest,
4596    /// Uses linear interpolation to reconstruct
4597    ///  missing samples and averaging to downsample
4598    #[doc(alias = "GST_VIDEO_RESAMPLER_METHOD_LINEAR")]
4599    Linear,
4600    /// Uses cubic interpolation
4601    #[doc(alias = "GST_VIDEO_RESAMPLER_METHOD_CUBIC")]
4602    Cubic,
4603    /// Uses sinc interpolation
4604    #[doc(alias = "GST_VIDEO_RESAMPLER_METHOD_SINC")]
4605    Sinc,
4606    /// Uses lanczos interpolation
4607    #[doc(alias = "GST_VIDEO_RESAMPLER_METHOD_LANCZOS")]
4608    Lanczos,
4609    #[doc(hidden)]
4610    __Unknown(i32),
4611}
4612
4613#[doc(hidden)]
4614impl IntoGlib for VideoResamplerMethod {
4615    type GlibType = ffi::GstVideoResamplerMethod;
4616
4617    #[inline]
4618    fn into_glib(self) -> ffi::GstVideoResamplerMethod {
4619        match self {
4620            Self::Nearest => ffi::GST_VIDEO_RESAMPLER_METHOD_NEAREST,
4621            Self::Linear => ffi::GST_VIDEO_RESAMPLER_METHOD_LINEAR,
4622            Self::Cubic => ffi::GST_VIDEO_RESAMPLER_METHOD_CUBIC,
4623            Self::Sinc => ffi::GST_VIDEO_RESAMPLER_METHOD_SINC,
4624            Self::Lanczos => ffi::GST_VIDEO_RESAMPLER_METHOD_LANCZOS,
4625            Self::__Unknown(value) => value,
4626        }
4627    }
4628}
4629
4630#[doc(hidden)]
4631impl FromGlib<ffi::GstVideoResamplerMethod> for VideoResamplerMethod {
4632    #[inline]
4633    unsafe fn from_glib(value: ffi::GstVideoResamplerMethod) -> Self {
4634        skip_assert_initialized!();
4635
4636        match value {
4637            ffi::GST_VIDEO_RESAMPLER_METHOD_NEAREST => Self::Nearest,
4638            ffi::GST_VIDEO_RESAMPLER_METHOD_LINEAR => Self::Linear,
4639            ffi::GST_VIDEO_RESAMPLER_METHOD_CUBIC => Self::Cubic,
4640            ffi::GST_VIDEO_RESAMPLER_METHOD_SINC => Self::Sinc,
4641            ffi::GST_VIDEO_RESAMPLER_METHOD_LANCZOS => Self::Lanczos,
4642            value => Self::__Unknown(value),
4643        }
4644    }
4645}
4646
4647impl StaticType for VideoResamplerMethod {
4648    #[inline]
4649    #[doc(alias = "gst_video_resampler_method_get_type")]
4650    fn static_type() -> glib::Type {
4651        unsafe { from_glib(ffi::gst_video_resampler_method_get_type()) }
4652    }
4653}
4654
4655impl glib::HasParamSpec for VideoResamplerMethod {
4656    type ParamSpec = glib::ParamSpecEnum;
4657    type SetValue = Self;
4658    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4659
4660    fn param_spec_builder() -> Self::BuilderFn {
4661        Self::ParamSpec::builder_with_default
4662    }
4663}
4664
4665impl glib::value::ValueType for VideoResamplerMethod {
4666    type Type = Self;
4667}
4668
4669unsafe impl<'a> glib::value::FromValue<'a> for VideoResamplerMethod {
4670    type Checker = glib::value::GenericValueTypeChecker<Self>;
4671
4672    #[inline]
4673    unsafe fn from_value(value: &'a glib::Value) -> Self {
4674        skip_assert_initialized!();
4675        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
4676    }
4677}
4678
4679impl ToValue for VideoResamplerMethod {
4680    #[inline]
4681    fn to_value(&self) -> glib::Value {
4682        let mut value = glib::Value::for_value_type::<Self>();
4683        unsafe {
4684            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4685        }
4686        value
4687    }
4688
4689    #[inline]
4690    fn value_type(&self) -> glib::Type {
4691        Self::static_type()
4692    }
4693}
4694
4695impl From<VideoResamplerMethod> for glib::Value {
4696    #[inline]
4697    fn from(v: VideoResamplerMethod) -> Self {
4698        skip_assert_initialized!();
4699        ToValue::to_value(&v)
4700    }
4701}
4702
4703/// Enum value describing the available tiling modes.
4704#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4705#[non_exhaustive]
4706#[doc(alias = "GstVideoTileMode")]
4707pub enum VideoTileMode {
4708    /// Unknown or unset tile mode
4709    #[doc(alias = "GST_VIDEO_TILE_MODE_UNKNOWN")]
4710    Unknown,
4711    /// Every four adjacent blocks - two
4712    ///  horizontally and two vertically are grouped together and are located
4713    ///  in memory in Z or flipped Z order. In case of odd rows, the last row
4714    ///  of blocks is arranged in linear order.
4715    #[doc(alias = "GST_VIDEO_TILE_MODE_ZFLIPZ_2X2")]
4716    Zflipz2x2,
4717    /// Tiles are in row order.
4718    #[cfg(feature = "v1_18")]
4719    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4720    #[doc(alias = "GST_VIDEO_TILE_MODE_LINEAR")]
4721    Linear,
4722    #[doc(hidden)]
4723    __Unknown(i32),
4724}
4725
4726#[doc(hidden)]
4727impl IntoGlib for VideoTileMode {
4728    type GlibType = ffi::GstVideoTileMode;
4729
4730    #[inline]
4731    fn into_glib(self) -> ffi::GstVideoTileMode {
4732        match self {
4733            Self::Unknown => ffi::GST_VIDEO_TILE_MODE_UNKNOWN,
4734            Self::Zflipz2x2 => ffi::GST_VIDEO_TILE_MODE_ZFLIPZ_2X2,
4735            #[cfg(feature = "v1_18")]
4736            Self::Linear => ffi::GST_VIDEO_TILE_MODE_LINEAR,
4737            Self::__Unknown(value) => value,
4738        }
4739    }
4740}
4741
4742#[doc(hidden)]
4743impl FromGlib<ffi::GstVideoTileMode> for VideoTileMode {
4744    #[inline]
4745    unsafe fn from_glib(value: ffi::GstVideoTileMode) -> Self {
4746        skip_assert_initialized!();
4747
4748        match value {
4749            ffi::GST_VIDEO_TILE_MODE_UNKNOWN => Self::Unknown,
4750            ffi::GST_VIDEO_TILE_MODE_ZFLIPZ_2X2 => Self::Zflipz2x2,
4751            #[cfg(feature = "v1_18")]
4752            ffi::GST_VIDEO_TILE_MODE_LINEAR => Self::Linear,
4753            value => Self::__Unknown(value),
4754        }
4755    }
4756}
4757
4758impl StaticType for VideoTileMode {
4759    #[inline]
4760    #[doc(alias = "gst_video_tile_mode_get_type")]
4761    fn static_type() -> glib::Type {
4762        unsafe { from_glib(ffi::gst_video_tile_mode_get_type()) }
4763    }
4764}
4765
4766impl glib::HasParamSpec for VideoTileMode {
4767    type ParamSpec = glib::ParamSpecEnum;
4768    type SetValue = Self;
4769    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4770
4771    fn param_spec_builder() -> Self::BuilderFn {
4772        Self::ParamSpec::builder_with_default
4773    }
4774}
4775
4776impl glib::value::ValueType for VideoTileMode {
4777    type Type = Self;
4778}
4779
4780unsafe impl<'a> glib::value::FromValue<'a> for VideoTileMode {
4781    type Checker = glib::value::GenericValueTypeChecker<Self>;
4782
4783    #[inline]
4784    unsafe fn from_value(value: &'a glib::Value) -> Self {
4785        skip_assert_initialized!();
4786        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
4787    }
4788}
4789
4790impl ToValue for VideoTileMode {
4791    #[inline]
4792    fn to_value(&self) -> glib::Value {
4793        let mut value = glib::Value::for_value_type::<Self>();
4794        unsafe {
4795            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4796        }
4797        value
4798    }
4799
4800    #[inline]
4801    fn value_type(&self) -> glib::Type {
4802        Self::static_type()
4803    }
4804}
4805
4806impl From<VideoTileMode> for glib::Value {
4807    #[inline]
4808    fn from(v: VideoTileMode) -> Self {
4809        skip_assert_initialized!();
4810        ToValue::to_value(&v)
4811    }
4812}
4813
4814/// The video transfer function defines the formula for converting between
4815/// non-linear RGB (R'G'B') and linear RGB
4816#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4817#[non_exhaustive]
4818#[doc(alias = "GstVideoTransferFunction")]
4819pub enum VideoTransferFunction {
4820    /// unknown transfer function
4821    #[doc(alias = "GST_VIDEO_TRANSFER_UNKNOWN")]
4822    Unknown,
4823    /// linear RGB, gamma 1.0 curve
4824    #[doc(alias = "GST_VIDEO_TRANSFER_GAMMA10")]
4825    Gamma10,
4826    /// Gamma 1.8 curve
4827    #[doc(alias = "GST_VIDEO_TRANSFER_GAMMA18")]
4828    Gamma18,
4829    /// Gamma 2.0 curve
4830    #[doc(alias = "GST_VIDEO_TRANSFER_GAMMA20")]
4831    Gamma20,
4832    /// Gamma 2.2 curve
4833    #[doc(alias = "GST_VIDEO_TRANSFER_GAMMA22")]
4834    Gamma22,
4835    /// Gamma 2.2 curve with a linear segment in the lower
4836    ///  range, also ITU-R BT470M / ITU-R BT1700 625 PAL &
4837    ///  SECAM / ITU-R BT1361
4838    #[doc(alias = "GST_VIDEO_TRANSFER_BT709")]
4839    Bt709,
4840    /// Gamma 2.2 curve with a linear segment in the
4841    ///  lower range
4842    #[doc(alias = "GST_VIDEO_TRANSFER_SMPTE240M")]
4843    Smpte240m,
4844    /// Gamma 2.4 curve with a linear segment in the lower
4845    ///  range. IEC 61966-2-1 (sRGB or sYCC)
4846    #[doc(alias = "GST_VIDEO_TRANSFER_SRGB")]
4847    Srgb,
4848    /// Gamma 2.8 curve, also ITU-R BT470BG
4849    #[doc(alias = "GST_VIDEO_TRANSFER_GAMMA28")]
4850    Gamma28,
4851    /// Logarithmic transfer characteristic
4852    ///  100:1 range
4853    #[doc(alias = "GST_VIDEO_TRANSFER_LOG100")]
4854    Log100,
4855    /// Logarithmic transfer characteristic
4856    ///  316.22777:1 range (100 * sqrt(10) : 1)
4857    #[doc(alias = "GST_VIDEO_TRANSFER_LOG316")]
4858    Log316,
4859    /// Gamma 2.2 curve with a linear segment in the lower
4860    ///  range. Used for BT.2020 with 12 bits per
4861    ///  component. Since: 1.6
4862    #[doc(alias = "GST_VIDEO_TRANSFER_BT2020_12")]
4863    Bt202012,
4864    /// Gamma 2.19921875. Since: 1.8
4865    #[doc(alias = "GST_VIDEO_TRANSFER_ADOBERGB")]
4866    Adobergb,
4867    /// Rec. ITU-R BT.2020-2 with 10 bits per component.
4868    ///  (functionally the same as the values
4869    ///  GST_VIDEO_TRANSFER_BT709 and GST_VIDEO_TRANSFER_BT601).
4870    ///  Since: 1.18
4871    #[cfg(feature = "v1_18")]
4872    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4873    #[doc(alias = "GST_VIDEO_TRANSFER_BT2020_10")]
4874    Bt202010,
4875    /// SMPTE ST 2084 for 10, 12, 14, and 16-bit systems.
4876    ///  Known as perceptual quantization (PQ)
4877    ///  Since: 1.18
4878    #[cfg(feature = "v1_18")]
4879    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4880    #[doc(alias = "GST_VIDEO_TRANSFER_SMPTE2084")]
4881    Smpte2084,
4882    /// Association of Radio Industries and Businesses (ARIB)
4883    ///  STD-B67 and Rec. ITU-R BT.2100-1 hybrid loggamma (HLG) system
4884    ///  Since: 1.18
4885    #[cfg(feature = "v1_18")]
4886    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4887    #[doc(alias = "GST_VIDEO_TRANSFER_ARIB_STD_B67")]
4888    AribStdB67,
4889    /// also known as SMPTE170M / ITU-R BT1358 525 or 625 / ITU-R BT1700 NTSC
4890    #[cfg(feature = "v1_18")]
4891    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4892    #[doc(alias = "GST_VIDEO_TRANSFER_BT601")]
4893    Bt601,
4894    #[doc(hidden)]
4895    __Unknown(i32),
4896}
4897
4898impl VideoTransferFunction {
4899    #[cfg(feature = "v1_20")]
4900    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
4901    #[doc(alias = "gst_video_transfer_function_decode")]
4902    pub fn decode(self, val: f64) -> f64 {
4903        assert_initialized_main_thread!();
4904        unsafe { ffi::gst_video_transfer_function_decode(self.into_glib(), val) }
4905    }
4906
4907    #[cfg(feature = "v1_20")]
4908    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
4909    #[doc(alias = "gst_video_transfer_function_encode")]
4910    pub fn encode(self, val: f64) -> f64 {
4911        assert_initialized_main_thread!();
4912        unsafe { ffi::gst_video_transfer_function_encode(self.into_glib(), val) }
4913    }
4914
4915    #[cfg(feature = "v1_18")]
4916    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4917    #[doc(alias = "gst_video_transfer_function_from_iso")]
4918    pub fn from_iso(value: u32) -> VideoTransferFunction {
4919        assert_initialized_main_thread!();
4920        unsafe { from_glib(ffi::gst_video_transfer_function_from_iso(value)) }
4921    }
4922
4923    #[cfg(feature = "v1_18")]
4924    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4925    #[doc(alias = "gst_video_transfer_function_is_equivalent")]
4926    pub fn is_equivalent(self, from_bpp: u32, to_func: VideoTransferFunction, to_bpp: u32) -> bool {
4927        assert_initialized_main_thread!();
4928        unsafe {
4929            from_glib(ffi::gst_video_transfer_function_is_equivalent(
4930                self.into_glib(),
4931                from_bpp,
4932                to_func.into_glib(),
4933                to_bpp,
4934            ))
4935        }
4936    }
4937
4938    #[cfg(feature = "v1_18")]
4939    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4940    #[doc(alias = "gst_video_transfer_function_to_iso")]
4941    pub fn to_iso(self) -> u32 {
4942        assert_initialized_main_thread!();
4943        unsafe { ffi::gst_video_transfer_function_to_iso(self.into_glib()) }
4944    }
4945}
4946
4947#[doc(hidden)]
4948impl IntoGlib for VideoTransferFunction {
4949    type GlibType = ffi::GstVideoTransferFunction;
4950
4951    fn into_glib(self) -> ffi::GstVideoTransferFunction {
4952        match self {
4953            Self::Unknown => ffi::GST_VIDEO_TRANSFER_UNKNOWN,
4954            Self::Gamma10 => ffi::GST_VIDEO_TRANSFER_GAMMA10,
4955            Self::Gamma18 => ffi::GST_VIDEO_TRANSFER_GAMMA18,
4956            Self::Gamma20 => ffi::GST_VIDEO_TRANSFER_GAMMA20,
4957            Self::Gamma22 => ffi::GST_VIDEO_TRANSFER_GAMMA22,
4958            Self::Bt709 => ffi::GST_VIDEO_TRANSFER_BT709,
4959            Self::Smpte240m => ffi::GST_VIDEO_TRANSFER_SMPTE240M,
4960            Self::Srgb => ffi::GST_VIDEO_TRANSFER_SRGB,
4961            Self::Gamma28 => ffi::GST_VIDEO_TRANSFER_GAMMA28,
4962            Self::Log100 => ffi::GST_VIDEO_TRANSFER_LOG100,
4963            Self::Log316 => ffi::GST_VIDEO_TRANSFER_LOG316,
4964            Self::Bt202012 => ffi::GST_VIDEO_TRANSFER_BT2020_12,
4965            Self::Adobergb => ffi::GST_VIDEO_TRANSFER_ADOBERGB,
4966            #[cfg(feature = "v1_18")]
4967            Self::Bt202010 => ffi::GST_VIDEO_TRANSFER_BT2020_10,
4968            #[cfg(feature = "v1_18")]
4969            Self::Smpte2084 => ffi::GST_VIDEO_TRANSFER_SMPTE2084,
4970            #[cfg(feature = "v1_18")]
4971            Self::AribStdB67 => ffi::GST_VIDEO_TRANSFER_ARIB_STD_B67,
4972            #[cfg(feature = "v1_18")]
4973            Self::Bt601 => ffi::GST_VIDEO_TRANSFER_BT601,
4974            Self::__Unknown(value) => value,
4975        }
4976    }
4977}
4978
4979#[doc(hidden)]
4980impl FromGlib<ffi::GstVideoTransferFunction> for VideoTransferFunction {
4981    unsafe fn from_glib(value: ffi::GstVideoTransferFunction) -> Self {
4982        skip_assert_initialized!();
4983
4984        match value {
4985            ffi::GST_VIDEO_TRANSFER_UNKNOWN => Self::Unknown,
4986            ffi::GST_VIDEO_TRANSFER_GAMMA10 => Self::Gamma10,
4987            ffi::GST_VIDEO_TRANSFER_GAMMA18 => Self::Gamma18,
4988            ffi::GST_VIDEO_TRANSFER_GAMMA20 => Self::Gamma20,
4989            ffi::GST_VIDEO_TRANSFER_GAMMA22 => Self::Gamma22,
4990            ffi::GST_VIDEO_TRANSFER_BT709 => Self::Bt709,
4991            ffi::GST_VIDEO_TRANSFER_SMPTE240M => Self::Smpte240m,
4992            ffi::GST_VIDEO_TRANSFER_SRGB => Self::Srgb,
4993            ffi::GST_VIDEO_TRANSFER_GAMMA28 => Self::Gamma28,
4994            ffi::GST_VIDEO_TRANSFER_LOG100 => Self::Log100,
4995            ffi::GST_VIDEO_TRANSFER_LOG316 => Self::Log316,
4996            ffi::GST_VIDEO_TRANSFER_BT2020_12 => Self::Bt202012,
4997            ffi::GST_VIDEO_TRANSFER_ADOBERGB => Self::Adobergb,
4998            #[cfg(feature = "v1_18")]
4999            ffi::GST_VIDEO_TRANSFER_BT2020_10 => Self::Bt202010,
5000            #[cfg(feature = "v1_18")]
5001            ffi::GST_VIDEO_TRANSFER_SMPTE2084 => Self::Smpte2084,
5002            #[cfg(feature = "v1_18")]
5003            ffi::GST_VIDEO_TRANSFER_ARIB_STD_B67 => Self::AribStdB67,
5004            #[cfg(feature = "v1_18")]
5005            ffi::GST_VIDEO_TRANSFER_BT601 => Self::Bt601,
5006            value => Self::__Unknown(value),
5007        }
5008    }
5009}
5010
5011impl StaticType for VideoTransferFunction {
5012    #[inline]
5013    #[doc(alias = "gst_video_transfer_function_get_type")]
5014    fn static_type() -> glib::Type {
5015        unsafe { from_glib(ffi::gst_video_transfer_function_get_type()) }
5016    }
5017}
5018
5019impl glib::HasParamSpec for VideoTransferFunction {
5020    type ParamSpec = glib::ParamSpecEnum;
5021    type SetValue = Self;
5022    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
5023
5024    fn param_spec_builder() -> Self::BuilderFn {
5025        Self::ParamSpec::builder_with_default
5026    }
5027}
5028
5029impl glib::value::ValueType for VideoTransferFunction {
5030    type Type = Self;
5031}
5032
5033unsafe impl<'a> glib::value::FromValue<'a> for VideoTransferFunction {
5034    type Checker = glib::value::GenericValueTypeChecker<Self>;
5035
5036    #[inline]
5037    unsafe fn from_value(value: &'a glib::Value) -> Self {
5038        skip_assert_initialized!();
5039        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
5040    }
5041}
5042
5043impl ToValue for VideoTransferFunction {
5044    #[inline]
5045    fn to_value(&self) -> glib::Value {
5046        let mut value = glib::Value::for_value_type::<Self>();
5047        unsafe {
5048            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
5049        }
5050        value
5051    }
5052
5053    #[inline]
5054    fn value_type(&self) -> glib::Type {
5055        Self::static_type()
5056    }
5057}
5058
5059impl From<VideoTransferFunction> for glib::Value {
5060    #[inline]
5061    fn from(v: VideoTransferFunction) -> Self {
5062        skip_assert_initialized!();
5063        ToValue::to_value(&v)
5064    }
5065}