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    /// Android Hardware Buffer special format. It's only used with
3042    /// memory:AHardwareBuffer `GstCapsFeatures`, where an extra parameter
3043    /// (ahb-format) describes the AHardwareBuffer format.
3044    #[cfg(feature = "v1_30")]
3045    #[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
3046    #[doc(alias = "GST_VIDEO_FORMAT_AHARDWARE_BUFFER")]
3047    AhardwareBuffer,
3048    #[doc(hidden)]
3049    __Unknown(i32),
3050}
3051
3052impl VideoFormat {
3053    #[doc(alias = "gst_video_format_from_fourcc")]
3054    pub fn from_fourcc(fourcc: u32) -> VideoFormat {
3055        assert_initialized_main_thread!();
3056        unsafe { from_glib(ffi::gst_video_format_from_fourcc(fourcc)) }
3057    }
3058
3059    #[doc(alias = "gst_video_format_from_string")]
3060    pub fn from_string(format: &str) -> VideoFormat {
3061        assert_initialized_main_thread!();
3062        unsafe { from_glib(ffi::gst_video_format_from_string(format.to_glib_none().0)) }
3063    }
3064
3065    //#[doc(alias = "gst_video_format_get_palette")]
3066    //#[doc(alias = "get_palette")]
3067    //pub fn palette(self) -> (/*Unimplemented*/Option<Basic: Pointer>, usize) {
3068    //    unsafe { TODO: call ffi:gst_video_format_get_palette() }
3069    //}
3070
3071    #[doc(alias = "gst_video_format_to_fourcc")]
3072    pub fn to_fourcc(self) -> u32 {
3073        assert_initialized_main_thread!();
3074        unsafe { ffi::gst_video_format_to_fourcc(self.into_glib()) }
3075    }
3076}
3077
3078impl std::fmt::Display for VideoFormat {
3079    #[inline]
3080    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
3081        f.write_str(&self.to_str())
3082    }
3083}
3084
3085#[doc(hidden)]
3086impl IntoGlib for VideoFormat {
3087    type GlibType = ffi::GstVideoFormat;
3088
3089    fn into_glib(self) -> ffi::GstVideoFormat {
3090        match self {
3091            Self::Unknown => ffi::GST_VIDEO_FORMAT_UNKNOWN,
3092            Self::Encoded => ffi::GST_VIDEO_FORMAT_ENCODED,
3093            Self::I420 => ffi::GST_VIDEO_FORMAT_I420,
3094            Self::Yv12 => ffi::GST_VIDEO_FORMAT_YV12,
3095            Self::Yuy2 => ffi::GST_VIDEO_FORMAT_YUY2,
3096            Self::Uyvy => ffi::GST_VIDEO_FORMAT_UYVY,
3097            Self::Ayuv => ffi::GST_VIDEO_FORMAT_AYUV,
3098            Self::Rgbx => ffi::GST_VIDEO_FORMAT_RGBx,
3099            Self::Bgrx => ffi::GST_VIDEO_FORMAT_BGRx,
3100            Self::Xrgb => ffi::GST_VIDEO_FORMAT_xRGB,
3101            Self::Xbgr => ffi::GST_VIDEO_FORMAT_xBGR,
3102            Self::Rgba => ffi::GST_VIDEO_FORMAT_RGBA,
3103            Self::Bgra => ffi::GST_VIDEO_FORMAT_BGRA,
3104            Self::Argb => ffi::GST_VIDEO_FORMAT_ARGB,
3105            Self::Abgr => ffi::GST_VIDEO_FORMAT_ABGR,
3106            Self::Rgb => ffi::GST_VIDEO_FORMAT_RGB,
3107            Self::Bgr => ffi::GST_VIDEO_FORMAT_BGR,
3108            Self::Y41b => ffi::GST_VIDEO_FORMAT_Y41B,
3109            Self::Y42b => ffi::GST_VIDEO_FORMAT_Y42B,
3110            Self::Yvyu => ffi::GST_VIDEO_FORMAT_YVYU,
3111            Self::Y444 => ffi::GST_VIDEO_FORMAT_Y444,
3112            Self::V210 => ffi::GST_VIDEO_FORMAT_v210,
3113            Self::V216 => ffi::GST_VIDEO_FORMAT_v216,
3114            Self::Nv12 => ffi::GST_VIDEO_FORMAT_NV12,
3115            Self::Nv21 => ffi::GST_VIDEO_FORMAT_NV21,
3116            Self::Gray8 => ffi::GST_VIDEO_FORMAT_GRAY8,
3117            Self::Gray16Be => ffi::GST_VIDEO_FORMAT_GRAY16_BE,
3118            Self::Gray16Le => ffi::GST_VIDEO_FORMAT_GRAY16_LE,
3119            Self::V308 => ffi::GST_VIDEO_FORMAT_v308,
3120            Self::Rgb16 => ffi::GST_VIDEO_FORMAT_RGB16,
3121            Self::Bgr16 => ffi::GST_VIDEO_FORMAT_BGR16,
3122            Self::Rgb15 => ffi::GST_VIDEO_FORMAT_RGB15,
3123            Self::Bgr15 => ffi::GST_VIDEO_FORMAT_BGR15,
3124            Self::Uyvp => ffi::GST_VIDEO_FORMAT_UYVP,
3125            Self::A420 => ffi::GST_VIDEO_FORMAT_A420,
3126            Self::Rgb8p => ffi::GST_VIDEO_FORMAT_RGB8P,
3127            Self::Yuv9 => ffi::GST_VIDEO_FORMAT_YUV9,
3128            Self::Yvu9 => ffi::GST_VIDEO_FORMAT_YVU9,
3129            Self::Iyu1 => ffi::GST_VIDEO_FORMAT_IYU1,
3130            Self::Argb64 => ffi::GST_VIDEO_FORMAT_ARGB64,
3131            Self::Ayuv64 => ffi::GST_VIDEO_FORMAT_AYUV64,
3132            Self::R210 => ffi::GST_VIDEO_FORMAT_r210,
3133            Self::I42010be => ffi::GST_VIDEO_FORMAT_I420_10BE,
3134            Self::I42010le => ffi::GST_VIDEO_FORMAT_I420_10LE,
3135            Self::I42210be => ffi::GST_VIDEO_FORMAT_I422_10BE,
3136            Self::I42210le => ffi::GST_VIDEO_FORMAT_I422_10LE,
3137            Self::Y44410be => ffi::GST_VIDEO_FORMAT_Y444_10BE,
3138            Self::Y44410le => ffi::GST_VIDEO_FORMAT_Y444_10LE,
3139            Self::Gbr => ffi::GST_VIDEO_FORMAT_GBR,
3140            Self::Gbr10be => ffi::GST_VIDEO_FORMAT_GBR_10BE,
3141            Self::Gbr10le => ffi::GST_VIDEO_FORMAT_GBR_10LE,
3142            Self::Nv16 => ffi::GST_VIDEO_FORMAT_NV16,
3143            Self::Nv24 => ffi::GST_VIDEO_FORMAT_NV24,
3144            Self::Nv1264z32 => ffi::GST_VIDEO_FORMAT_NV12_64Z32,
3145            Self::A42010be => ffi::GST_VIDEO_FORMAT_A420_10BE,
3146            Self::A42010le => ffi::GST_VIDEO_FORMAT_A420_10LE,
3147            Self::A42210be => ffi::GST_VIDEO_FORMAT_A422_10BE,
3148            Self::A42210le => ffi::GST_VIDEO_FORMAT_A422_10LE,
3149            Self::A44410be => ffi::GST_VIDEO_FORMAT_A444_10BE,
3150            Self::A44410le => ffi::GST_VIDEO_FORMAT_A444_10LE,
3151            Self::Nv61 => ffi::GST_VIDEO_FORMAT_NV61,
3152            Self::P01010be => ffi::GST_VIDEO_FORMAT_P010_10BE,
3153            Self::P01010le => ffi::GST_VIDEO_FORMAT_P010_10LE,
3154            Self::Iyu2 => ffi::GST_VIDEO_FORMAT_IYU2,
3155            Self::Vyuy => ffi::GST_VIDEO_FORMAT_VYUY,
3156            Self::Gbra => ffi::GST_VIDEO_FORMAT_GBRA,
3157            Self::Gbra10be => ffi::GST_VIDEO_FORMAT_GBRA_10BE,
3158            Self::Gbra10le => ffi::GST_VIDEO_FORMAT_GBRA_10LE,
3159            Self::Gbr12be => ffi::GST_VIDEO_FORMAT_GBR_12BE,
3160            Self::Gbr12le => ffi::GST_VIDEO_FORMAT_GBR_12LE,
3161            Self::Gbra12be => ffi::GST_VIDEO_FORMAT_GBRA_12BE,
3162            Self::Gbra12le => ffi::GST_VIDEO_FORMAT_GBRA_12LE,
3163            Self::I42012be => ffi::GST_VIDEO_FORMAT_I420_12BE,
3164            Self::I42012le => ffi::GST_VIDEO_FORMAT_I420_12LE,
3165            Self::I42212be => ffi::GST_VIDEO_FORMAT_I422_12BE,
3166            Self::I42212le => ffi::GST_VIDEO_FORMAT_I422_12LE,
3167            Self::Y44412be => ffi::GST_VIDEO_FORMAT_Y444_12BE,
3168            Self::Y44412le => ffi::GST_VIDEO_FORMAT_Y444_12LE,
3169            Self::Gray10Le32 => ffi::GST_VIDEO_FORMAT_GRAY10_LE32,
3170            Self::Nv1210le32 => ffi::GST_VIDEO_FORMAT_NV12_10LE32,
3171            Self::Nv1610le32 => ffi::GST_VIDEO_FORMAT_NV16_10LE32,
3172            #[cfg(feature = "v1_16")]
3173            Self::Nv1210le40 => ffi::GST_VIDEO_FORMAT_NV12_10LE40,
3174            #[cfg(feature = "v1_16")]
3175            Self::Y210 => ffi::GST_VIDEO_FORMAT_Y210,
3176            #[cfg(feature = "v1_16")]
3177            Self::Y410 => ffi::GST_VIDEO_FORMAT_Y410,
3178            #[cfg(feature = "v1_16")]
3179            Self::Vuya => ffi::GST_VIDEO_FORMAT_VUYA,
3180            #[cfg(feature = "v1_16")]
3181            Self::Bgr10a2Le => ffi::GST_VIDEO_FORMAT_BGR10A2_LE,
3182            #[cfg(feature = "v1_18")]
3183            Self::Rgb10a2Le => ffi::GST_VIDEO_FORMAT_RGB10A2_LE,
3184            #[cfg(feature = "v1_18")]
3185            Self::Y44416be => ffi::GST_VIDEO_FORMAT_Y444_16BE,
3186            #[cfg(feature = "v1_18")]
3187            Self::Y44416le => ffi::GST_VIDEO_FORMAT_Y444_16LE,
3188            #[cfg(feature = "v1_18")]
3189            Self::P016Be => ffi::GST_VIDEO_FORMAT_P016_BE,
3190            #[cfg(feature = "v1_18")]
3191            Self::P016Le => ffi::GST_VIDEO_FORMAT_P016_LE,
3192            #[cfg(feature = "v1_18")]
3193            Self::P012Be => ffi::GST_VIDEO_FORMAT_P012_BE,
3194            #[cfg(feature = "v1_18")]
3195            Self::P012Le => ffi::GST_VIDEO_FORMAT_P012_LE,
3196            #[cfg(feature = "v1_18")]
3197            Self::Y212Be => ffi::GST_VIDEO_FORMAT_Y212_BE,
3198            #[cfg(feature = "v1_18")]
3199            Self::Y212Le => ffi::GST_VIDEO_FORMAT_Y212_LE,
3200            #[cfg(feature = "v1_18")]
3201            Self::Y412Be => ffi::GST_VIDEO_FORMAT_Y412_BE,
3202            #[cfg(feature = "v1_18")]
3203            Self::Y412Le => ffi::GST_VIDEO_FORMAT_Y412_LE,
3204            #[cfg(feature = "v1_18")]
3205            Self::Nv124l4 => ffi::GST_VIDEO_FORMAT_NV12_4L4,
3206            #[cfg(feature = "v1_18")]
3207            Self::Nv1232l32 => ffi::GST_VIDEO_FORMAT_NV12_32L32,
3208            #[cfg(feature = "v1_20")]
3209            Self::Rgbp => ffi::GST_VIDEO_FORMAT_RGBP,
3210            #[cfg(feature = "v1_20")]
3211            Self::Bgrp => ffi::GST_VIDEO_FORMAT_BGRP,
3212            #[cfg(feature = "v1_20")]
3213            Self::Av12 => ffi::GST_VIDEO_FORMAT_AV12,
3214            #[cfg(feature = "v1_20")]
3215            Self::Argb64Le => ffi::GST_VIDEO_FORMAT_ARGB64_LE,
3216            #[cfg(feature = "v1_20")]
3217            Self::Argb64Be => ffi::GST_VIDEO_FORMAT_ARGB64_BE,
3218            #[cfg(feature = "v1_20")]
3219            Self::Rgba64Le => ffi::GST_VIDEO_FORMAT_RGBA64_LE,
3220            #[cfg(feature = "v1_20")]
3221            Self::Rgba64Be => ffi::GST_VIDEO_FORMAT_RGBA64_BE,
3222            #[cfg(feature = "v1_20")]
3223            Self::Bgra64Le => ffi::GST_VIDEO_FORMAT_BGRA64_LE,
3224            #[cfg(feature = "v1_20")]
3225            Self::Bgra64Be => ffi::GST_VIDEO_FORMAT_BGRA64_BE,
3226            #[cfg(feature = "v1_20")]
3227            Self::Abgr64Le => ffi::GST_VIDEO_FORMAT_ABGR64_LE,
3228            #[cfg(feature = "v1_20")]
3229            Self::Abgr64Be => ffi::GST_VIDEO_FORMAT_ABGR64_BE,
3230            #[cfg(feature = "v1_22")]
3231            Self::Nv1216l32s => ffi::GST_VIDEO_FORMAT_NV12_16L32S,
3232            #[cfg(feature = "v1_22")]
3233            Self::Nv128l128 => ffi::GST_VIDEO_FORMAT_NV12_8L128,
3234            #[cfg(feature = "v1_22")]
3235            Self::Nv1210be8l128 => ffi::GST_VIDEO_FORMAT_NV12_10BE_8L128,
3236            #[cfg(feature = "v1_24")]
3237            Self::Nv1210le404l4 => ffi::GST_VIDEO_FORMAT_NV12_10LE40_4L4,
3238            #[cfg(feature = "v1_24")]
3239            Self::DmaDrm => ffi::GST_VIDEO_FORMAT_DMA_DRM,
3240            #[cfg(feature = "v1_24")]
3241            Self::Mt2110t => ffi::GST_VIDEO_FORMAT_MT2110T,
3242            #[cfg(feature = "v1_24")]
3243            Self::Mt2110r => ffi::GST_VIDEO_FORMAT_MT2110R,
3244            #[cfg(feature = "v1_24")]
3245            Self::A422 => ffi::GST_VIDEO_FORMAT_A422,
3246            #[cfg(feature = "v1_24")]
3247            Self::A444 => ffi::GST_VIDEO_FORMAT_A444,
3248            #[cfg(feature = "v1_24")]
3249            Self::A44412le => ffi::GST_VIDEO_FORMAT_A444_12LE,
3250            #[cfg(feature = "v1_24")]
3251            Self::A44412be => ffi::GST_VIDEO_FORMAT_A444_12BE,
3252            #[cfg(feature = "v1_24")]
3253            Self::A42212le => ffi::GST_VIDEO_FORMAT_A422_12LE,
3254            #[cfg(feature = "v1_24")]
3255            Self::A42212be => ffi::GST_VIDEO_FORMAT_A422_12BE,
3256            #[cfg(feature = "v1_24")]
3257            Self::A42012le => ffi::GST_VIDEO_FORMAT_A420_12LE,
3258            #[cfg(feature = "v1_24")]
3259            Self::A42012be => ffi::GST_VIDEO_FORMAT_A420_12BE,
3260            #[cfg(feature = "v1_24")]
3261            Self::A44416le => ffi::GST_VIDEO_FORMAT_A444_16LE,
3262            #[cfg(feature = "v1_24")]
3263            Self::A44416be => ffi::GST_VIDEO_FORMAT_A444_16BE,
3264            #[cfg(feature = "v1_24")]
3265            Self::A42216le => ffi::GST_VIDEO_FORMAT_A422_16LE,
3266            #[cfg(feature = "v1_24")]
3267            Self::A42216be => ffi::GST_VIDEO_FORMAT_A422_16BE,
3268            #[cfg(feature = "v1_24")]
3269            Self::A42016le => ffi::GST_VIDEO_FORMAT_A420_16LE,
3270            #[cfg(feature = "v1_24")]
3271            Self::A42016be => ffi::GST_VIDEO_FORMAT_A420_16BE,
3272            #[cfg(feature = "v1_24")]
3273            Self::Gbr16le => ffi::GST_VIDEO_FORMAT_GBR_16LE,
3274            #[cfg(feature = "v1_24")]
3275            Self::Gbr16be => ffi::GST_VIDEO_FORMAT_GBR_16BE,
3276            #[cfg(feature = "v1_24")]
3277            Self::Rbga => ffi::GST_VIDEO_FORMAT_RBGA,
3278            #[cfg(feature = "v1_26")]
3279            Self::Y216Le => ffi::GST_VIDEO_FORMAT_Y216_LE,
3280            #[cfg(feature = "v1_26")]
3281            Self::Y216Be => ffi::GST_VIDEO_FORMAT_Y216_BE,
3282            #[cfg(feature = "v1_26")]
3283            Self::Y416Le => ffi::GST_VIDEO_FORMAT_Y416_LE,
3284            #[cfg(feature = "v1_26")]
3285            Self::Y416Be => ffi::GST_VIDEO_FORMAT_Y416_BE,
3286            #[cfg(feature = "v1_26")]
3287            Self::Gray10Le16 => ffi::GST_VIDEO_FORMAT_GRAY10_LE16,
3288            #[cfg(feature = "v1_28")]
3289            Self::Nv1610le40 => ffi::GST_VIDEO_FORMAT_NV16_10LE40,
3290            #[cfg(feature = "v1_28")]
3291            Self::Bgr10x2Le => ffi::GST_VIDEO_FORMAT_BGR10x2_LE,
3292            #[cfg(feature = "v1_28")]
3293            Self::Rgb10x2Le => ffi::GST_VIDEO_FORMAT_RGB10x2_LE,
3294            #[cfg(feature = "v1_30")]
3295            Self::AhardwareBuffer => ffi::GST_VIDEO_FORMAT_AHARDWARE_BUFFER,
3296            Self::__Unknown(value) => value,
3297        }
3298    }
3299}
3300
3301#[doc(hidden)]
3302impl FromGlib<ffi::GstVideoFormat> for VideoFormat {
3303    unsafe fn from_glib(value: ffi::GstVideoFormat) -> Self {
3304        skip_assert_initialized!();
3305
3306        match value {
3307            ffi::GST_VIDEO_FORMAT_UNKNOWN => Self::Unknown,
3308            ffi::GST_VIDEO_FORMAT_ENCODED => Self::Encoded,
3309            ffi::GST_VIDEO_FORMAT_I420 => Self::I420,
3310            ffi::GST_VIDEO_FORMAT_YV12 => Self::Yv12,
3311            ffi::GST_VIDEO_FORMAT_YUY2 => Self::Yuy2,
3312            ffi::GST_VIDEO_FORMAT_UYVY => Self::Uyvy,
3313            ffi::GST_VIDEO_FORMAT_AYUV => Self::Ayuv,
3314            ffi::GST_VIDEO_FORMAT_RGBx => Self::Rgbx,
3315            ffi::GST_VIDEO_FORMAT_BGRx => Self::Bgrx,
3316            ffi::GST_VIDEO_FORMAT_xRGB => Self::Xrgb,
3317            ffi::GST_VIDEO_FORMAT_xBGR => Self::Xbgr,
3318            ffi::GST_VIDEO_FORMAT_RGBA => Self::Rgba,
3319            ffi::GST_VIDEO_FORMAT_BGRA => Self::Bgra,
3320            ffi::GST_VIDEO_FORMAT_ARGB => Self::Argb,
3321            ffi::GST_VIDEO_FORMAT_ABGR => Self::Abgr,
3322            ffi::GST_VIDEO_FORMAT_RGB => Self::Rgb,
3323            ffi::GST_VIDEO_FORMAT_BGR => Self::Bgr,
3324            ffi::GST_VIDEO_FORMAT_Y41B => Self::Y41b,
3325            ffi::GST_VIDEO_FORMAT_Y42B => Self::Y42b,
3326            ffi::GST_VIDEO_FORMAT_YVYU => Self::Yvyu,
3327            ffi::GST_VIDEO_FORMAT_Y444 => Self::Y444,
3328            ffi::GST_VIDEO_FORMAT_v210 => Self::V210,
3329            ffi::GST_VIDEO_FORMAT_v216 => Self::V216,
3330            ffi::GST_VIDEO_FORMAT_NV12 => Self::Nv12,
3331            ffi::GST_VIDEO_FORMAT_NV21 => Self::Nv21,
3332            ffi::GST_VIDEO_FORMAT_GRAY8 => Self::Gray8,
3333            ffi::GST_VIDEO_FORMAT_GRAY16_BE => Self::Gray16Be,
3334            ffi::GST_VIDEO_FORMAT_GRAY16_LE => Self::Gray16Le,
3335            ffi::GST_VIDEO_FORMAT_v308 => Self::V308,
3336            ffi::GST_VIDEO_FORMAT_RGB16 => Self::Rgb16,
3337            ffi::GST_VIDEO_FORMAT_BGR16 => Self::Bgr16,
3338            ffi::GST_VIDEO_FORMAT_RGB15 => Self::Rgb15,
3339            ffi::GST_VIDEO_FORMAT_BGR15 => Self::Bgr15,
3340            ffi::GST_VIDEO_FORMAT_UYVP => Self::Uyvp,
3341            ffi::GST_VIDEO_FORMAT_A420 => Self::A420,
3342            ffi::GST_VIDEO_FORMAT_RGB8P => Self::Rgb8p,
3343            ffi::GST_VIDEO_FORMAT_YUV9 => Self::Yuv9,
3344            ffi::GST_VIDEO_FORMAT_YVU9 => Self::Yvu9,
3345            ffi::GST_VIDEO_FORMAT_IYU1 => Self::Iyu1,
3346            ffi::GST_VIDEO_FORMAT_ARGB64 => Self::Argb64,
3347            ffi::GST_VIDEO_FORMAT_AYUV64 => Self::Ayuv64,
3348            ffi::GST_VIDEO_FORMAT_r210 => Self::R210,
3349            ffi::GST_VIDEO_FORMAT_I420_10BE => Self::I42010be,
3350            ffi::GST_VIDEO_FORMAT_I420_10LE => Self::I42010le,
3351            ffi::GST_VIDEO_FORMAT_I422_10BE => Self::I42210be,
3352            ffi::GST_VIDEO_FORMAT_I422_10LE => Self::I42210le,
3353            ffi::GST_VIDEO_FORMAT_Y444_10BE => Self::Y44410be,
3354            ffi::GST_VIDEO_FORMAT_Y444_10LE => Self::Y44410le,
3355            ffi::GST_VIDEO_FORMAT_GBR => Self::Gbr,
3356            ffi::GST_VIDEO_FORMAT_GBR_10BE => Self::Gbr10be,
3357            ffi::GST_VIDEO_FORMAT_GBR_10LE => Self::Gbr10le,
3358            ffi::GST_VIDEO_FORMAT_NV16 => Self::Nv16,
3359            ffi::GST_VIDEO_FORMAT_NV24 => Self::Nv24,
3360            ffi::GST_VIDEO_FORMAT_NV12_64Z32 => Self::Nv1264z32,
3361            ffi::GST_VIDEO_FORMAT_A420_10BE => Self::A42010be,
3362            ffi::GST_VIDEO_FORMAT_A420_10LE => Self::A42010le,
3363            ffi::GST_VIDEO_FORMAT_A422_10BE => Self::A42210be,
3364            ffi::GST_VIDEO_FORMAT_A422_10LE => Self::A42210le,
3365            ffi::GST_VIDEO_FORMAT_A444_10BE => Self::A44410be,
3366            ffi::GST_VIDEO_FORMAT_A444_10LE => Self::A44410le,
3367            ffi::GST_VIDEO_FORMAT_NV61 => Self::Nv61,
3368            ffi::GST_VIDEO_FORMAT_P010_10BE => Self::P01010be,
3369            ffi::GST_VIDEO_FORMAT_P010_10LE => Self::P01010le,
3370            ffi::GST_VIDEO_FORMAT_IYU2 => Self::Iyu2,
3371            ffi::GST_VIDEO_FORMAT_VYUY => Self::Vyuy,
3372            ffi::GST_VIDEO_FORMAT_GBRA => Self::Gbra,
3373            ffi::GST_VIDEO_FORMAT_GBRA_10BE => Self::Gbra10be,
3374            ffi::GST_VIDEO_FORMAT_GBRA_10LE => Self::Gbra10le,
3375            ffi::GST_VIDEO_FORMAT_GBR_12BE => Self::Gbr12be,
3376            ffi::GST_VIDEO_FORMAT_GBR_12LE => Self::Gbr12le,
3377            ffi::GST_VIDEO_FORMAT_GBRA_12BE => Self::Gbra12be,
3378            ffi::GST_VIDEO_FORMAT_GBRA_12LE => Self::Gbra12le,
3379            ffi::GST_VIDEO_FORMAT_I420_12BE => Self::I42012be,
3380            ffi::GST_VIDEO_FORMAT_I420_12LE => Self::I42012le,
3381            ffi::GST_VIDEO_FORMAT_I422_12BE => Self::I42212be,
3382            ffi::GST_VIDEO_FORMAT_I422_12LE => Self::I42212le,
3383            ffi::GST_VIDEO_FORMAT_Y444_12BE => Self::Y44412be,
3384            ffi::GST_VIDEO_FORMAT_Y444_12LE => Self::Y44412le,
3385            ffi::GST_VIDEO_FORMAT_GRAY10_LE32 => Self::Gray10Le32,
3386            ffi::GST_VIDEO_FORMAT_NV12_10LE32 => Self::Nv1210le32,
3387            ffi::GST_VIDEO_FORMAT_NV16_10LE32 => Self::Nv1610le32,
3388            #[cfg(feature = "v1_16")]
3389            ffi::GST_VIDEO_FORMAT_NV12_10LE40 => Self::Nv1210le40,
3390            #[cfg(feature = "v1_16")]
3391            ffi::GST_VIDEO_FORMAT_Y210 => Self::Y210,
3392            #[cfg(feature = "v1_16")]
3393            ffi::GST_VIDEO_FORMAT_Y410 => Self::Y410,
3394            #[cfg(feature = "v1_16")]
3395            ffi::GST_VIDEO_FORMAT_VUYA => Self::Vuya,
3396            #[cfg(feature = "v1_16")]
3397            ffi::GST_VIDEO_FORMAT_BGR10A2_LE => Self::Bgr10a2Le,
3398            #[cfg(feature = "v1_18")]
3399            ffi::GST_VIDEO_FORMAT_RGB10A2_LE => Self::Rgb10a2Le,
3400            #[cfg(feature = "v1_18")]
3401            ffi::GST_VIDEO_FORMAT_Y444_16BE => Self::Y44416be,
3402            #[cfg(feature = "v1_18")]
3403            ffi::GST_VIDEO_FORMAT_Y444_16LE => Self::Y44416le,
3404            #[cfg(feature = "v1_18")]
3405            ffi::GST_VIDEO_FORMAT_P016_BE => Self::P016Be,
3406            #[cfg(feature = "v1_18")]
3407            ffi::GST_VIDEO_FORMAT_P016_LE => Self::P016Le,
3408            #[cfg(feature = "v1_18")]
3409            ffi::GST_VIDEO_FORMAT_P012_BE => Self::P012Be,
3410            #[cfg(feature = "v1_18")]
3411            ffi::GST_VIDEO_FORMAT_P012_LE => Self::P012Le,
3412            #[cfg(feature = "v1_18")]
3413            ffi::GST_VIDEO_FORMAT_Y212_BE => Self::Y212Be,
3414            #[cfg(feature = "v1_18")]
3415            ffi::GST_VIDEO_FORMAT_Y212_LE => Self::Y212Le,
3416            #[cfg(feature = "v1_18")]
3417            ffi::GST_VIDEO_FORMAT_Y412_BE => Self::Y412Be,
3418            #[cfg(feature = "v1_18")]
3419            ffi::GST_VIDEO_FORMAT_Y412_LE => Self::Y412Le,
3420            #[cfg(feature = "v1_18")]
3421            ffi::GST_VIDEO_FORMAT_NV12_4L4 => Self::Nv124l4,
3422            #[cfg(feature = "v1_18")]
3423            ffi::GST_VIDEO_FORMAT_NV12_32L32 => Self::Nv1232l32,
3424            #[cfg(feature = "v1_20")]
3425            ffi::GST_VIDEO_FORMAT_RGBP => Self::Rgbp,
3426            #[cfg(feature = "v1_20")]
3427            ffi::GST_VIDEO_FORMAT_BGRP => Self::Bgrp,
3428            #[cfg(feature = "v1_20")]
3429            ffi::GST_VIDEO_FORMAT_AV12 => Self::Av12,
3430            #[cfg(feature = "v1_20")]
3431            ffi::GST_VIDEO_FORMAT_ARGB64_LE => Self::Argb64Le,
3432            #[cfg(feature = "v1_20")]
3433            ffi::GST_VIDEO_FORMAT_ARGB64_BE => Self::Argb64Be,
3434            #[cfg(feature = "v1_20")]
3435            ffi::GST_VIDEO_FORMAT_RGBA64_LE => Self::Rgba64Le,
3436            #[cfg(feature = "v1_20")]
3437            ffi::GST_VIDEO_FORMAT_RGBA64_BE => Self::Rgba64Be,
3438            #[cfg(feature = "v1_20")]
3439            ffi::GST_VIDEO_FORMAT_BGRA64_LE => Self::Bgra64Le,
3440            #[cfg(feature = "v1_20")]
3441            ffi::GST_VIDEO_FORMAT_BGRA64_BE => Self::Bgra64Be,
3442            #[cfg(feature = "v1_20")]
3443            ffi::GST_VIDEO_FORMAT_ABGR64_LE => Self::Abgr64Le,
3444            #[cfg(feature = "v1_20")]
3445            ffi::GST_VIDEO_FORMAT_ABGR64_BE => Self::Abgr64Be,
3446            #[cfg(feature = "v1_22")]
3447            ffi::GST_VIDEO_FORMAT_NV12_16L32S => Self::Nv1216l32s,
3448            #[cfg(feature = "v1_22")]
3449            ffi::GST_VIDEO_FORMAT_NV12_8L128 => Self::Nv128l128,
3450            #[cfg(feature = "v1_22")]
3451            ffi::GST_VIDEO_FORMAT_NV12_10BE_8L128 => Self::Nv1210be8l128,
3452            #[cfg(feature = "v1_24")]
3453            ffi::GST_VIDEO_FORMAT_NV12_10LE40_4L4 => Self::Nv1210le404l4,
3454            #[cfg(feature = "v1_24")]
3455            ffi::GST_VIDEO_FORMAT_DMA_DRM => Self::DmaDrm,
3456            #[cfg(feature = "v1_24")]
3457            ffi::GST_VIDEO_FORMAT_MT2110T => Self::Mt2110t,
3458            #[cfg(feature = "v1_24")]
3459            ffi::GST_VIDEO_FORMAT_MT2110R => Self::Mt2110r,
3460            #[cfg(feature = "v1_24")]
3461            ffi::GST_VIDEO_FORMAT_A422 => Self::A422,
3462            #[cfg(feature = "v1_24")]
3463            ffi::GST_VIDEO_FORMAT_A444 => Self::A444,
3464            #[cfg(feature = "v1_24")]
3465            ffi::GST_VIDEO_FORMAT_A444_12LE => Self::A44412le,
3466            #[cfg(feature = "v1_24")]
3467            ffi::GST_VIDEO_FORMAT_A444_12BE => Self::A44412be,
3468            #[cfg(feature = "v1_24")]
3469            ffi::GST_VIDEO_FORMAT_A422_12LE => Self::A42212le,
3470            #[cfg(feature = "v1_24")]
3471            ffi::GST_VIDEO_FORMAT_A422_12BE => Self::A42212be,
3472            #[cfg(feature = "v1_24")]
3473            ffi::GST_VIDEO_FORMAT_A420_12LE => Self::A42012le,
3474            #[cfg(feature = "v1_24")]
3475            ffi::GST_VIDEO_FORMAT_A420_12BE => Self::A42012be,
3476            #[cfg(feature = "v1_24")]
3477            ffi::GST_VIDEO_FORMAT_A444_16LE => Self::A44416le,
3478            #[cfg(feature = "v1_24")]
3479            ffi::GST_VIDEO_FORMAT_A444_16BE => Self::A44416be,
3480            #[cfg(feature = "v1_24")]
3481            ffi::GST_VIDEO_FORMAT_A422_16LE => Self::A42216le,
3482            #[cfg(feature = "v1_24")]
3483            ffi::GST_VIDEO_FORMAT_A422_16BE => Self::A42216be,
3484            #[cfg(feature = "v1_24")]
3485            ffi::GST_VIDEO_FORMAT_A420_16LE => Self::A42016le,
3486            #[cfg(feature = "v1_24")]
3487            ffi::GST_VIDEO_FORMAT_A420_16BE => Self::A42016be,
3488            #[cfg(feature = "v1_24")]
3489            ffi::GST_VIDEO_FORMAT_GBR_16LE => Self::Gbr16le,
3490            #[cfg(feature = "v1_24")]
3491            ffi::GST_VIDEO_FORMAT_GBR_16BE => Self::Gbr16be,
3492            #[cfg(feature = "v1_24")]
3493            ffi::GST_VIDEO_FORMAT_RBGA => Self::Rbga,
3494            #[cfg(feature = "v1_26")]
3495            ffi::GST_VIDEO_FORMAT_Y216_LE => Self::Y216Le,
3496            #[cfg(feature = "v1_26")]
3497            ffi::GST_VIDEO_FORMAT_Y216_BE => Self::Y216Be,
3498            #[cfg(feature = "v1_26")]
3499            ffi::GST_VIDEO_FORMAT_Y416_LE => Self::Y416Le,
3500            #[cfg(feature = "v1_26")]
3501            ffi::GST_VIDEO_FORMAT_Y416_BE => Self::Y416Be,
3502            #[cfg(feature = "v1_26")]
3503            ffi::GST_VIDEO_FORMAT_GRAY10_LE16 => Self::Gray10Le16,
3504            #[cfg(feature = "v1_28")]
3505            ffi::GST_VIDEO_FORMAT_NV16_10LE40 => Self::Nv1610le40,
3506            #[cfg(feature = "v1_28")]
3507            ffi::GST_VIDEO_FORMAT_BGR10x2_LE => Self::Bgr10x2Le,
3508            #[cfg(feature = "v1_28")]
3509            ffi::GST_VIDEO_FORMAT_RGB10x2_LE => Self::Rgb10x2Le,
3510            #[cfg(feature = "v1_30")]
3511            ffi::GST_VIDEO_FORMAT_AHARDWARE_BUFFER => Self::AhardwareBuffer,
3512            value => Self::__Unknown(value),
3513        }
3514    }
3515}
3516
3517impl StaticType for VideoFormat {
3518    #[inline]
3519    #[doc(alias = "gst_video_format_get_type")]
3520    fn static_type() -> glib::Type {
3521        unsafe { from_glib(ffi::gst_video_format_get_type()) }
3522    }
3523}
3524
3525impl glib::HasParamSpec for VideoFormat {
3526    type ParamSpec = glib::ParamSpecEnum;
3527    type SetValue = Self;
3528    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3529
3530    fn param_spec_builder() -> Self::BuilderFn {
3531        Self::ParamSpec::builder_with_default
3532    }
3533}
3534
3535impl glib::value::ValueType for VideoFormat {
3536    type Type = Self;
3537}
3538
3539unsafe impl<'a> glib::value::FromValue<'a> for VideoFormat {
3540    type Checker = glib::value::GenericValueTypeChecker<Self>;
3541
3542    #[inline]
3543    unsafe fn from_value(value: &'a glib::Value) -> Self {
3544        skip_assert_initialized!();
3545        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3546    }
3547}
3548
3549impl ToValue for VideoFormat {
3550    #[inline]
3551    fn to_value(&self) -> glib::Value {
3552        let mut value = glib::Value::for_value_type::<Self>();
3553        unsafe {
3554            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3555        }
3556        value
3557    }
3558
3559    #[inline]
3560    fn value_type(&self) -> glib::Type {
3561        Self::static_type()
3562    }
3563}
3564
3565impl From<VideoFormat> for glib::Value {
3566    #[inline]
3567    fn from(v: VideoFormat) -> Self {
3568        skip_assert_initialized!();
3569        ToValue::to_value(&v)
3570    }
3571}
3572
3573#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3574#[non_exhaustive]
3575#[doc(alias = "GstVideoGammaMode")]
3576pub enum VideoGammaMode {
3577    /// disable gamma handling
3578    #[doc(alias = "GST_VIDEO_GAMMA_MODE_NONE")]
3579    None,
3580    /// convert between input and output gamma
3581    /// Different gamma conversion modes
3582    #[doc(alias = "GST_VIDEO_GAMMA_MODE_REMAP")]
3583    Remap,
3584    #[doc(hidden)]
3585    __Unknown(i32),
3586}
3587
3588#[doc(hidden)]
3589impl IntoGlib for VideoGammaMode {
3590    type GlibType = ffi::GstVideoGammaMode;
3591
3592    #[inline]
3593    fn into_glib(self) -> ffi::GstVideoGammaMode {
3594        match self {
3595            Self::None => ffi::GST_VIDEO_GAMMA_MODE_NONE,
3596            Self::Remap => ffi::GST_VIDEO_GAMMA_MODE_REMAP,
3597            Self::__Unknown(value) => value,
3598        }
3599    }
3600}
3601
3602#[doc(hidden)]
3603impl FromGlib<ffi::GstVideoGammaMode> for VideoGammaMode {
3604    #[inline]
3605    unsafe fn from_glib(value: ffi::GstVideoGammaMode) -> Self {
3606        skip_assert_initialized!();
3607
3608        match value {
3609            ffi::GST_VIDEO_GAMMA_MODE_NONE => Self::None,
3610            ffi::GST_VIDEO_GAMMA_MODE_REMAP => Self::Remap,
3611            value => Self::__Unknown(value),
3612        }
3613    }
3614}
3615
3616impl StaticType for VideoGammaMode {
3617    #[inline]
3618    #[doc(alias = "gst_video_gamma_mode_get_type")]
3619    fn static_type() -> glib::Type {
3620        unsafe { from_glib(ffi::gst_video_gamma_mode_get_type()) }
3621    }
3622}
3623
3624impl glib::HasParamSpec for VideoGammaMode {
3625    type ParamSpec = glib::ParamSpecEnum;
3626    type SetValue = Self;
3627    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3628
3629    fn param_spec_builder() -> Self::BuilderFn {
3630        Self::ParamSpec::builder_with_default
3631    }
3632}
3633
3634impl glib::value::ValueType for VideoGammaMode {
3635    type Type = Self;
3636}
3637
3638unsafe impl<'a> glib::value::FromValue<'a> for VideoGammaMode {
3639    type Checker = glib::value::GenericValueTypeChecker<Self>;
3640
3641    #[inline]
3642    unsafe fn from_value(value: &'a glib::Value) -> Self {
3643        skip_assert_initialized!();
3644        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3645    }
3646}
3647
3648impl ToValue for VideoGammaMode {
3649    #[inline]
3650    fn to_value(&self) -> glib::Value {
3651        let mut value = glib::Value::for_value_type::<Self>();
3652        unsafe {
3653            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3654        }
3655        value
3656    }
3657
3658    #[inline]
3659    fn value_type(&self) -> glib::Type {
3660        Self::static_type()
3661    }
3662}
3663
3664impl From<VideoGammaMode> for glib::Value {
3665    #[inline]
3666    fn from(v: VideoGammaMode) -> Self {
3667        skip_assert_initialized!();
3668        ToValue::to_value(&v)
3669    }
3670}
3671
3672/// Enum value describing the most common video for High Dynamic Range (HDR) formats.
3673#[cfg(feature = "v1_30")]
3674#[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
3675#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3676#[non_exhaustive]
3677#[doc(alias = "GstVideoHDRFormat")]
3678pub enum VideoHDRFormat {
3679    /// No HDR format detected.
3680    #[doc(alias = "GST_VIDEO_HDR_FORMAT_NONE")]
3681    None,
3682    /// HDR10 format
3683    #[doc(alias = "GST_VIDEO_HDR_FORMAT_HDR10")]
3684    Hdr10,
3685    /// HDR10+ format
3686    #[doc(alias = "GST_VIDEO_HDR_FORMAT_HDR10_PLUS")]
3687    Hdr10Plus,
3688    #[doc(hidden)]
3689    __Unknown(i32),
3690}
3691
3692#[cfg(feature = "v1_30")]
3693#[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
3694#[doc(hidden)]
3695impl IntoGlib for VideoHDRFormat {
3696    type GlibType = ffi::GstVideoHDRFormat;
3697
3698    #[inline]
3699    fn into_glib(self) -> ffi::GstVideoHDRFormat {
3700        match self {
3701            Self::None => ffi::GST_VIDEO_HDR_FORMAT_NONE,
3702            Self::Hdr10 => ffi::GST_VIDEO_HDR_FORMAT_HDR10,
3703            Self::Hdr10Plus => ffi::GST_VIDEO_HDR_FORMAT_HDR10_PLUS,
3704            Self::__Unknown(value) => value,
3705        }
3706    }
3707}
3708
3709#[cfg(feature = "v1_30")]
3710#[cfg_attr(docsrs, doc(cfg(feature = "v1_30")))]
3711#[doc(hidden)]
3712impl FromGlib<ffi::GstVideoHDRFormat> for VideoHDRFormat {
3713    #[inline]
3714    unsafe fn from_glib(value: ffi::GstVideoHDRFormat) -> Self {
3715        skip_assert_initialized!();
3716
3717        match value {
3718            ffi::GST_VIDEO_HDR_FORMAT_NONE => Self::None,
3719            ffi::GST_VIDEO_HDR_FORMAT_HDR10 => Self::Hdr10,
3720            ffi::GST_VIDEO_HDR_FORMAT_HDR10_PLUS => Self::Hdr10Plus,
3721            value => Self::__Unknown(value),
3722        }
3723    }
3724}
3725
3726/// The possible values of the [`VideoInterlaceMode`][crate::VideoInterlaceMode] describing the interlace
3727/// mode of the stream.
3728#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3729#[non_exhaustive]
3730#[doc(alias = "GstVideoInterlaceMode")]
3731pub enum VideoInterlaceMode {
3732    /// all frames are progressive
3733    #[doc(alias = "GST_VIDEO_INTERLACE_MODE_PROGRESSIVE")]
3734    Progressive,
3735    /// 2 fields are interleaved in one video
3736    ///  frame. Extra buffer flags describe the field order.
3737    #[doc(alias = "GST_VIDEO_INTERLACE_MODE_INTERLEAVED")]
3738    Interleaved,
3739    /// frames contains both interlaced and
3740    ///  progressive video, the buffer flags describe the frame and fields.
3741    #[doc(alias = "GST_VIDEO_INTERLACE_MODE_MIXED")]
3742    Mixed,
3743    /// 2 fields are stored in one buffer, use the
3744    ///  frame ID to get access to the required field. For multiview (the
3745    ///  'views' property > 1) the fields of view N can be found at frame ID
3746    ///  (N * 2) and (N * 2) + 1.
3747    ///  Each field has only half the amount of lines as noted in the
3748    ///  height property. This mode requires multiple GstVideoMeta metadata
3749    ///  to describe the fields.
3750    #[doc(alias = "GST_VIDEO_INTERLACE_MODE_FIELDS")]
3751    Fields,
3752    /// 1 field is stored in one buffer,
3753    ///  `GST_VIDEO_BUFFER_FLAG_TF` or `GST_VIDEO_BUFFER_FLAG_BF` indicates if
3754    ///  the buffer is carrying the top or bottom field, respectively. The top and
3755    ///  bottom buffers must alternate in the pipeline, with this mode
3756    ///  (Since: 1.16).
3757    #[cfg(feature = "v1_16")]
3758    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
3759    #[doc(alias = "GST_VIDEO_INTERLACE_MODE_ALTERNATE")]
3760    Alternate,
3761    #[doc(hidden)]
3762    __Unknown(i32),
3763}
3764
3765impl VideoInterlaceMode {
3766    #[doc(alias = "gst_video_interlace_mode_from_string")]
3767    pub fn from_string(mode: &str) -> VideoInterlaceMode {
3768        assert_initialized_main_thread!();
3769        unsafe {
3770            from_glib(ffi::gst_video_interlace_mode_from_string(
3771                mode.to_glib_none().0,
3772            ))
3773        }
3774    }
3775
3776    pub fn to_str<'a>(self) -> &'a GStr {
3777        unsafe {
3778            GStr::from_ptr(
3779                ffi::gst_video_interlace_mode_to_string(self.into_glib())
3780                    .as_ref()
3781                    .expect("gst_video_interlace_mode_to_string returned NULL"),
3782            )
3783        }
3784    }
3785}
3786
3787impl std::fmt::Display for VideoInterlaceMode {
3788    #[inline]
3789    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
3790        f.write_str(&self.to_str())
3791    }
3792}
3793
3794#[doc(hidden)]
3795impl IntoGlib for VideoInterlaceMode {
3796    type GlibType = ffi::GstVideoInterlaceMode;
3797
3798    #[inline]
3799    fn into_glib(self) -> ffi::GstVideoInterlaceMode {
3800        match self {
3801            Self::Progressive => ffi::GST_VIDEO_INTERLACE_MODE_PROGRESSIVE,
3802            Self::Interleaved => ffi::GST_VIDEO_INTERLACE_MODE_INTERLEAVED,
3803            Self::Mixed => ffi::GST_VIDEO_INTERLACE_MODE_MIXED,
3804            Self::Fields => ffi::GST_VIDEO_INTERLACE_MODE_FIELDS,
3805            #[cfg(feature = "v1_16")]
3806            Self::Alternate => ffi::GST_VIDEO_INTERLACE_MODE_ALTERNATE,
3807            Self::__Unknown(value) => value,
3808        }
3809    }
3810}
3811
3812#[doc(hidden)]
3813impl FromGlib<ffi::GstVideoInterlaceMode> for VideoInterlaceMode {
3814    #[inline]
3815    unsafe fn from_glib(value: ffi::GstVideoInterlaceMode) -> Self {
3816        skip_assert_initialized!();
3817
3818        match value {
3819            ffi::GST_VIDEO_INTERLACE_MODE_PROGRESSIVE => Self::Progressive,
3820            ffi::GST_VIDEO_INTERLACE_MODE_INTERLEAVED => Self::Interleaved,
3821            ffi::GST_VIDEO_INTERLACE_MODE_MIXED => Self::Mixed,
3822            ffi::GST_VIDEO_INTERLACE_MODE_FIELDS => Self::Fields,
3823            #[cfg(feature = "v1_16")]
3824            ffi::GST_VIDEO_INTERLACE_MODE_ALTERNATE => Self::Alternate,
3825            value => Self::__Unknown(value),
3826        }
3827    }
3828}
3829
3830impl StaticType for VideoInterlaceMode {
3831    #[inline]
3832    #[doc(alias = "gst_video_interlace_mode_get_type")]
3833    fn static_type() -> glib::Type {
3834        unsafe { from_glib(ffi::gst_video_interlace_mode_get_type()) }
3835    }
3836}
3837
3838impl glib::HasParamSpec for VideoInterlaceMode {
3839    type ParamSpec = glib::ParamSpecEnum;
3840    type SetValue = Self;
3841    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3842
3843    fn param_spec_builder() -> Self::BuilderFn {
3844        Self::ParamSpec::builder_with_default
3845    }
3846}
3847
3848impl glib::value::ValueType for VideoInterlaceMode {
3849    type Type = Self;
3850}
3851
3852unsafe impl<'a> glib::value::FromValue<'a> for VideoInterlaceMode {
3853    type Checker = glib::value::GenericValueTypeChecker<Self>;
3854
3855    #[inline]
3856    unsafe fn from_value(value: &'a glib::Value) -> Self {
3857        skip_assert_initialized!();
3858        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3859    }
3860}
3861
3862impl ToValue for VideoInterlaceMode {
3863    #[inline]
3864    fn to_value(&self) -> glib::Value {
3865        let mut value = glib::Value::for_value_type::<Self>();
3866        unsafe {
3867            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3868        }
3869        value
3870    }
3871
3872    #[inline]
3873    fn value_type(&self) -> glib::Type {
3874        Self::static_type()
3875    }
3876}
3877
3878impl From<VideoInterlaceMode> for glib::Value {
3879    #[inline]
3880    fn from(v: VideoInterlaceMode) -> Self {
3881        skip_assert_initialized!();
3882        ToValue::to_value(&v)
3883    }
3884}
3885
3886/// Different color matrix conversion modes
3887#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3888#[non_exhaustive]
3889#[doc(alias = "GstVideoMatrixMode")]
3890pub enum VideoMatrixMode {
3891    /// do conversion between color matrices
3892    #[doc(alias = "GST_VIDEO_MATRIX_MODE_FULL")]
3893    Full,
3894    /// use the input color matrix to convert
3895    ///  to and from R'G'B
3896    #[doc(alias = "GST_VIDEO_MATRIX_MODE_INPUT_ONLY")]
3897    InputOnly,
3898    /// use the output color matrix to convert
3899    ///  to and from R'G'B
3900    #[doc(alias = "GST_VIDEO_MATRIX_MODE_OUTPUT_ONLY")]
3901    OutputOnly,
3902    /// disable color matrix conversion.
3903    #[doc(alias = "GST_VIDEO_MATRIX_MODE_NONE")]
3904    None,
3905    #[doc(hidden)]
3906    __Unknown(i32),
3907}
3908
3909#[doc(hidden)]
3910impl IntoGlib for VideoMatrixMode {
3911    type GlibType = ffi::GstVideoMatrixMode;
3912
3913    #[inline]
3914    fn into_glib(self) -> ffi::GstVideoMatrixMode {
3915        match self {
3916            Self::Full => ffi::GST_VIDEO_MATRIX_MODE_FULL,
3917            Self::InputOnly => ffi::GST_VIDEO_MATRIX_MODE_INPUT_ONLY,
3918            Self::OutputOnly => ffi::GST_VIDEO_MATRIX_MODE_OUTPUT_ONLY,
3919            Self::None => ffi::GST_VIDEO_MATRIX_MODE_NONE,
3920            Self::__Unknown(value) => value,
3921        }
3922    }
3923}
3924
3925#[doc(hidden)]
3926impl FromGlib<ffi::GstVideoMatrixMode> for VideoMatrixMode {
3927    #[inline]
3928    unsafe fn from_glib(value: ffi::GstVideoMatrixMode) -> Self {
3929        skip_assert_initialized!();
3930
3931        match value {
3932            ffi::GST_VIDEO_MATRIX_MODE_FULL => Self::Full,
3933            ffi::GST_VIDEO_MATRIX_MODE_INPUT_ONLY => Self::InputOnly,
3934            ffi::GST_VIDEO_MATRIX_MODE_OUTPUT_ONLY => Self::OutputOnly,
3935            ffi::GST_VIDEO_MATRIX_MODE_NONE => Self::None,
3936            value => Self::__Unknown(value),
3937        }
3938    }
3939}
3940
3941impl StaticType for VideoMatrixMode {
3942    #[inline]
3943    #[doc(alias = "gst_video_matrix_mode_get_type")]
3944    fn static_type() -> glib::Type {
3945        unsafe { from_glib(ffi::gst_video_matrix_mode_get_type()) }
3946    }
3947}
3948
3949impl glib::HasParamSpec for VideoMatrixMode {
3950    type ParamSpec = glib::ParamSpecEnum;
3951    type SetValue = Self;
3952    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3953
3954    fn param_spec_builder() -> Self::BuilderFn {
3955        Self::ParamSpec::builder_with_default
3956    }
3957}
3958
3959impl glib::value::ValueType for VideoMatrixMode {
3960    type Type = Self;
3961}
3962
3963unsafe impl<'a> glib::value::FromValue<'a> for VideoMatrixMode {
3964    type Checker = glib::value::GenericValueTypeChecker<Self>;
3965
3966    #[inline]
3967    unsafe fn from_value(value: &'a glib::Value) -> Self {
3968        skip_assert_initialized!();
3969        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3970    }
3971}
3972
3973impl ToValue for VideoMatrixMode {
3974    #[inline]
3975    fn to_value(&self) -> glib::Value {
3976        let mut value = glib::Value::for_value_type::<Self>();
3977        unsafe {
3978            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3979        }
3980        value
3981    }
3982
3983    #[inline]
3984    fn value_type(&self) -> glib::Type {
3985        Self::static_type()
3986    }
3987}
3988
3989impl From<VideoMatrixMode> for glib::Value {
3990    #[inline]
3991    fn from(v: VideoMatrixMode) -> Self {
3992        skip_assert_initialized!();
3993        ToValue::to_value(&v)
3994    }
3995}
3996
3997/// [`VideoMultiviewFramePacking`][crate::VideoMultiviewFramePacking] represents the subset of [`VideoMultiviewMode`][crate::VideoMultiviewMode]
3998/// values that can be applied to any video frame without needing extra metadata.
3999/// It can be used by elements that provide a property to override the
4000/// multiview interpretation of a video stream when the video doesn't contain
4001/// any markers.
4002///
4003/// This enum is used (for example) on playbin, to re-interpret a played
4004/// video stream as a stereoscopic video. The individual enum values are
4005/// equivalent to and have the same value as the matching [`VideoMultiviewMode`][crate::VideoMultiviewMode].
4006#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4007#[non_exhaustive]
4008#[doc(alias = "GstVideoMultiviewFramePacking")]
4009pub enum VideoMultiviewFramePacking {
4010    /// A special value indicating
4011    /// no frame packing info.
4012    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE")]
4013    None,
4014    /// All frames are monoscopic.
4015    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_MONO")]
4016    Mono,
4017    /// All frames represent a left-eye view.
4018    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_LEFT")]
4019    Left,
4020    /// All frames represent a right-eye view.
4021    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_RIGHT")]
4022    Right,
4023    /// Left and right eye views are
4024    /// provided in the left and right half of the frame respectively.
4025    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE")]
4026    SideBySide,
4027    /// Left and right eye
4028    /// views are provided in the left and right half of the frame, but
4029    /// have been sampled using quincunx method, with half-pixel offset
4030    /// between the 2 views.
4031    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE_QUINCUNX")]
4032    SideBySideQuincunx,
4033    /// Alternating vertical
4034    /// columns of pixels represent the left and right eye view respectively.
4035    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_COLUMN_INTERLEAVED")]
4036    ColumnInterleaved,
4037    /// Alternating horizontal
4038    /// rows of pixels represent the left and right eye view respectively.
4039    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_ROW_INTERLEAVED")]
4040    RowInterleaved,
4041    /// The top half of the frame
4042    /// contains the left eye, and the bottom half the right eye.
4043    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_TOP_BOTTOM")]
4044    TopBottom,
4045    /// Pixels are arranged with
4046    /// alternating pixels representing left and right eye views in a
4047    /// checkerboard fashion.
4048    #[doc(alias = "GST_VIDEO_MULTIVIEW_FRAME_PACKING_CHECKERBOARD")]
4049    Checkerboard,
4050    #[doc(hidden)]
4051    __Unknown(i32),
4052}
4053
4054#[doc(hidden)]
4055impl IntoGlib for VideoMultiviewFramePacking {
4056    type GlibType = ffi::GstVideoMultiviewFramePacking;
4057
4058    #[inline]
4059    fn into_glib(self) -> ffi::GstVideoMultiviewFramePacking {
4060        match self {
4061            Self::None => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE,
4062            Self::Mono => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_MONO,
4063            Self::Left => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_LEFT,
4064            Self::Right => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_RIGHT,
4065            Self::SideBySide => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE,
4066            Self::SideBySideQuincunx => {
4067                ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE_QUINCUNX
4068            }
4069            Self::ColumnInterleaved => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_COLUMN_INTERLEAVED,
4070            Self::RowInterleaved => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_ROW_INTERLEAVED,
4071            Self::TopBottom => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_TOP_BOTTOM,
4072            Self::Checkerboard => ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_CHECKERBOARD,
4073            Self::__Unknown(value) => value,
4074        }
4075    }
4076}
4077
4078#[doc(hidden)]
4079impl FromGlib<ffi::GstVideoMultiviewFramePacking> for VideoMultiviewFramePacking {
4080    #[inline]
4081    unsafe fn from_glib(value: ffi::GstVideoMultiviewFramePacking) -> Self {
4082        skip_assert_initialized!();
4083
4084        match value {
4085            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE => Self::None,
4086            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_MONO => Self::Mono,
4087            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_LEFT => Self::Left,
4088            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_RIGHT => Self::Right,
4089            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE => Self::SideBySide,
4090            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE_QUINCUNX => {
4091                Self::SideBySideQuincunx
4092            }
4093            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_COLUMN_INTERLEAVED => Self::ColumnInterleaved,
4094            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_ROW_INTERLEAVED => Self::RowInterleaved,
4095            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_TOP_BOTTOM => Self::TopBottom,
4096            ffi::GST_VIDEO_MULTIVIEW_FRAME_PACKING_CHECKERBOARD => Self::Checkerboard,
4097            value => Self::__Unknown(value),
4098        }
4099    }
4100}
4101
4102impl StaticType for VideoMultiviewFramePacking {
4103    #[inline]
4104    #[doc(alias = "gst_video_multiview_frame_packing_get_type")]
4105    fn static_type() -> glib::Type {
4106        unsafe { from_glib(ffi::gst_video_multiview_frame_packing_get_type()) }
4107    }
4108}
4109
4110impl glib::HasParamSpec for VideoMultiviewFramePacking {
4111    type ParamSpec = glib::ParamSpecEnum;
4112    type SetValue = Self;
4113    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4114
4115    fn param_spec_builder() -> Self::BuilderFn {
4116        Self::ParamSpec::builder_with_default
4117    }
4118}
4119
4120impl glib::value::ValueType for VideoMultiviewFramePacking {
4121    type Type = Self;
4122}
4123
4124unsafe impl<'a> glib::value::FromValue<'a> for VideoMultiviewFramePacking {
4125    type Checker = glib::value::GenericValueTypeChecker<Self>;
4126
4127    #[inline]
4128    unsafe fn from_value(value: &'a glib::Value) -> Self {
4129        skip_assert_initialized!();
4130        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
4131    }
4132}
4133
4134impl ToValue for VideoMultiviewFramePacking {
4135    #[inline]
4136    fn to_value(&self) -> glib::Value {
4137        let mut value = glib::Value::for_value_type::<Self>();
4138        unsafe {
4139            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4140        }
4141        value
4142    }
4143
4144    #[inline]
4145    fn value_type(&self) -> glib::Type {
4146        Self::static_type()
4147    }
4148}
4149
4150impl From<VideoMultiviewFramePacking> for glib::Value {
4151    #[inline]
4152    fn from(v: VideoMultiviewFramePacking) -> Self {
4153        skip_assert_initialized!();
4154        ToValue::to_value(&v)
4155    }
4156}
4157
4158/// All possible stereoscopic 3D and multiview representations.
4159/// In conjunction with [`VideoMultiviewFlags`][crate::VideoMultiviewFlags], describes how
4160/// multiview content is being transported in the stream.
4161#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4162#[non_exhaustive]
4163#[doc(alias = "GstVideoMultiviewMode")]
4164pub enum VideoMultiviewMode {
4165    /// A special value indicating
4166    /// no multiview information. Used in GstVideoInfo and other places to
4167    /// indicate that no specific multiview handling has been requested or
4168    /// provided. This value is never carried on caps.
4169    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_NONE")]
4170    None,
4171    /// All frames are monoscopic.
4172    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_MONO")]
4173    Mono,
4174    /// All frames represent a left-eye view.
4175    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_LEFT")]
4176    Left,
4177    /// All frames represent a right-eye view.
4178    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_RIGHT")]
4179    Right,
4180    /// Left and right eye views are
4181    /// provided in the left and right half of the frame respectively.
4182    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE")]
4183    SideBySide,
4184    /// Left and right eye
4185    /// views are provided in the left and right half of the frame, but
4186    /// have been sampled using quincunx method, with half-pixel offset
4187    /// between the 2 views.
4188    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX")]
4189    SideBySideQuincunx,
4190    /// Alternating vertical
4191    /// columns of pixels represent the left and right eye view respectively.
4192    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED")]
4193    ColumnInterleaved,
4194    /// Alternating horizontal
4195    /// rows of pixels represent the left and right eye view respectively.
4196    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED")]
4197    RowInterleaved,
4198    /// The top half of the frame
4199    /// contains the left eye, and the bottom half the right eye.
4200    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM")]
4201    TopBottom,
4202    /// Pixels are arranged with
4203    /// alternating pixels representing left and right eye views in a
4204    /// checkerboard fashion.
4205    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD")]
4206    Checkerboard,
4207    /// Left and right eye views
4208    /// are provided in separate frames alternately.
4209    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME")]
4210    FrameByFrame,
4211    /// Multiple
4212    /// independent views are provided in separate frames in sequence.
4213    /// This method only applies to raw video buffers at the moment.
4214    /// Specific view identification is via the `GstVideoMultiviewMeta`
4215    /// and [`VideoMeta`][crate::VideoMeta](s) on raw video buffers.
4216    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_MULTIVIEW_FRAME_BY_FRAME")]
4217    MultiviewFrameByFrame,
4218    /// Multiple views are
4219    /// provided as separate [`gst::Memory`][crate::gst::Memory] framebuffers attached to each
4220    /// [`gst::Buffer`][crate::gst::Buffer], described by the `GstVideoMultiviewMeta`
4221    /// and [`VideoMeta`][crate::VideoMeta](s)
4222    #[doc(alias = "GST_VIDEO_MULTIVIEW_MODE_SEPARATED")]
4223    Separated,
4224    #[doc(hidden)]
4225    __Unknown(i32),
4226}
4227
4228impl VideoMultiviewMode {
4229    #[doc(alias = "gst_video_multiview_mode_from_caps_string")]
4230    pub fn from_caps_string(caps_mview_mode: &str) -> VideoMultiviewMode {
4231        assert_initialized_main_thread!();
4232        unsafe {
4233            from_glib(ffi::gst_video_multiview_mode_from_caps_string(
4234                caps_mview_mode.to_glib_none().0,
4235            ))
4236        }
4237    }
4238
4239    #[doc(alias = "gst_video_multiview_mode_to_caps_string")]
4240    pub fn to_caps_string(self) -> Option<glib::GString> {
4241        assert_initialized_main_thread!();
4242        unsafe {
4243            from_glib_none(ffi::gst_video_multiview_mode_to_caps_string(
4244                self.into_glib(),
4245            ))
4246        }
4247    }
4248}
4249
4250#[doc(hidden)]
4251impl IntoGlib for VideoMultiviewMode {
4252    type GlibType = ffi::GstVideoMultiviewMode;
4253
4254    fn into_glib(self) -> ffi::GstVideoMultiviewMode {
4255        match self {
4256            Self::None => ffi::GST_VIDEO_MULTIVIEW_MODE_NONE,
4257            Self::Mono => ffi::GST_VIDEO_MULTIVIEW_MODE_MONO,
4258            Self::Left => ffi::GST_VIDEO_MULTIVIEW_MODE_LEFT,
4259            Self::Right => ffi::GST_VIDEO_MULTIVIEW_MODE_RIGHT,
4260            Self::SideBySide => ffi::GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE,
4261            Self::SideBySideQuincunx => ffi::GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX,
4262            Self::ColumnInterleaved => ffi::GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED,
4263            Self::RowInterleaved => ffi::GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED,
4264            Self::TopBottom => ffi::GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM,
4265            Self::Checkerboard => ffi::GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD,
4266            Self::FrameByFrame => ffi::GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME,
4267            Self::MultiviewFrameByFrame => ffi::GST_VIDEO_MULTIVIEW_MODE_MULTIVIEW_FRAME_BY_FRAME,
4268            Self::Separated => ffi::GST_VIDEO_MULTIVIEW_MODE_SEPARATED,
4269            Self::__Unknown(value) => value,
4270        }
4271    }
4272}
4273
4274#[doc(hidden)]
4275impl FromGlib<ffi::GstVideoMultiviewMode> for VideoMultiviewMode {
4276    unsafe fn from_glib(value: ffi::GstVideoMultiviewMode) -> Self {
4277        skip_assert_initialized!();
4278
4279        match value {
4280            ffi::GST_VIDEO_MULTIVIEW_MODE_NONE => Self::None,
4281            ffi::GST_VIDEO_MULTIVIEW_MODE_MONO => Self::Mono,
4282            ffi::GST_VIDEO_MULTIVIEW_MODE_LEFT => Self::Left,
4283            ffi::GST_VIDEO_MULTIVIEW_MODE_RIGHT => Self::Right,
4284            ffi::GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE => Self::SideBySide,
4285            ffi::GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX => Self::SideBySideQuincunx,
4286            ffi::GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED => Self::ColumnInterleaved,
4287            ffi::GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED => Self::RowInterleaved,
4288            ffi::GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM => Self::TopBottom,
4289            ffi::GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD => Self::Checkerboard,
4290            ffi::GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME => Self::FrameByFrame,
4291            ffi::GST_VIDEO_MULTIVIEW_MODE_MULTIVIEW_FRAME_BY_FRAME => Self::MultiviewFrameByFrame,
4292            ffi::GST_VIDEO_MULTIVIEW_MODE_SEPARATED => Self::Separated,
4293            value => Self::__Unknown(value),
4294        }
4295    }
4296}
4297
4298impl StaticType for VideoMultiviewMode {
4299    #[inline]
4300    #[doc(alias = "gst_video_multiview_mode_get_type")]
4301    fn static_type() -> glib::Type {
4302        unsafe { from_glib(ffi::gst_video_multiview_mode_get_type()) }
4303    }
4304}
4305
4306impl glib::HasParamSpec for VideoMultiviewMode {
4307    type ParamSpec = glib::ParamSpecEnum;
4308    type SetValue = Self;
4309    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4310
4311    fn param_spec_builder() -> Self::BuilderFn {
4312        Self::ParamSpec::builder_with_default
4313    }
4314}
4315
4316impl glib::value::ValueType for VideoMultiviewMode {
4317    type Type = Self;
4318}
4319
4320unsafe impl<'a> glib::value::FromValue<'a> for VideoMultiviewMode {
4321    type Checker = glib::value::GenericValueTypeChecker<Self>;
4322
4323    #[inline]
4324    unsafe fn from_value(value: &'a glib::Value) -> Self {
4325        skip_assert_initialized!();
4326        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
4327    }
4328}
4329
4330impl ToValue for VideoMultiviewMode {
4331    #[inline]
4332    fn to_value(&self) -> glib::Value {
4333        let mut value = glib::Value::for_value_type::<Self>();
4334        unsafe {
4335            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4336        }
4337        value
4338    }
4339
4340    #[inline]
4341    fn value_type(&self) -> glib::Type {
4342        Self::static_type()
4343    }
4344}
4345
4346impl From<VideoMultiviewMode> for glib::Value {
4347    #[inline]
4348    fn from(v: VideoMultiviewMode) -> Self {
4349        skip_assert_initialized!();
4350        ToValue::to_value(&v)
4351    }
4352}
4353
4354/// The different video orientation methods.
4355#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4356#[non_exhaustive]
4357#[doc(alias = "GstVideoOrientationMethod")]
4358pub enum VideoOrientationMethod {
4359    /// Identity (no rotation)
4360    #[doc(alias = "GST_VIDEO_ORIENTATION_IDENTITY")]
4361    Identity,
4362    /// Rotate clockwise 90 degrees
4363    #[doc(alias = "GST_VIDEO_ORIENTATION_90R")]
4364    _90r,
4365    /// Rotate 180 degrees
4366    #[doc(alias = "GST_VIDEO_ORIENTATION_180")]
4367    _180,
4368    /// Rotate counter-clockwise 90 degrees
4369    #[doc(alias = "GST_VIDEO_ORIENTATION_90L")]
4370    _90l,
4371    /// Flip horizontally
4372    #[doc(alias = "GST_VIDEO_ORIENTATION_HORIZ")]
4373    Horiz,
4374    /// Flip vertically
4375    #[doc(alias = "GST_VIDEO_ORIENTATION_VERT")]
4376    Vert,
4377    /// Rotate counter-clockwise 90 degrees and flip vertically
4378    #[doc(alias = "GST_VIDEO_ORIENTATION_UL_LR")]
4379    UlLr,
4380    /// Rotate clockwise 90 degrees and flip vertically
4381    #[doc(alias = "GST_VIDEO_ORIENTATION_UR_LL")]
4382    UrLl,
4383    /// Select flip method based on image-orientation tag
4384    #[doc(alias = "GST_VIDEO_ORIENTATION_AUTO")]
4385    Auto,
4386    /// Current status depends on plugin internal setup
4387    #[doc(alias = "GST_VIDEO_ORIENTATION_CUSTOM")]
4388    Custom,
4389    #[doc(hidden)]
4390    __Unknown(i32),
4391}
4392
4393#[doc(hidden)]
4394impl IntoGlib for VideoOrientationMethod {
4395    type GlibType = ffi::GstVideoOrientationMethod;
4396
4397    #[inline]
4398    fn into_glib(self) -> ffi::GstVideoOrientationMethod {
4399        match self {
4400            Self::Identity => ffi::GST_VIDEO_ORIENTATION_IDENTITY,
4401            Self::_90r => ffi::GST_VIDEO_ORIENTATION_90R,
4402            Self::_180 => ffi::GST_VIDEO_ORIENTATION_180,
4403            Self::_90l => ffi::GST_VIDEO_ORIENTATION_90L,
4404            Self::Horiz => ffi::GST_VIDEO_ORIENTATION_HORIZ,
4405            Self::Vert => ffi::GST_VIDEO_ORIENTATION_VERT,
4406            Self::UlLr => ffi::GST_VIDEO_ORIENTATION_UL_LR,
4407            Self::UrLl => ffi::GST_VIDEO_ORIENTATION_UR_LL,
4408            Self::Auto => ffi::GST_VIDEO_ORIENTATION_AUTO,
4409            Self::Custom => ffi::GST_VIDEO_ORIENTATION_CUSTOM,
4410            Self::__Unknown(value) => value,
4411        }
4412    }
4413}
4414
4415#[doc(hidden)]
4416impl FromGlib<ffi::GstVideoOrientationMethod> for VideoOrientationMethod {
4417    #[inline]
4418    unsafe fn from_glib(value: ffi::GstVideoOrientationMethod) -> Self {
4419        skip_assert_initialized!();
4420
4421        match value {
4422            ffi::GST_VIDEO_ORIENTATION_IDENTITY => Self::Identity,
4423            ffi::GST_VIDEO_ORIENTATION_90R => Self::_90r,
4424            ffi::GST_VIDEO_ORIENTATION_180 => Self::_180,
4425            ffi::GST_VIDEO_ORIENTATION_90L => Self::_90l,
4426            ffi::GST_VIDEO_ORIENTATION_HORIZ => Self::Horiz,
4427            ffi::GST_VIDEO_ORIENTATION_VERT => Self::Vert,
4428            ffi::GST_VIDEO_ORIENTATION_UL_LR => Self::UlLr,
4429            ffi::GST_VIDEO_ORIENTATION_UR_LL => Self::UrLl,
4430            ffi::GST_VIDEO_ORIENTATION_AUTO => Self::Auto,
4431            ffi::GST_VIDEO_ORIENTATION_CUSTOM => Self::Custom,
4432            value => Self::__Unknown(value),
4433        }
4434    }
4435}
4436
4437impl StaticType for VideoOrientationMethod {
4438    #[inline]
4439    #[doc(alias = "gst_video_orientation_method_get_type")]
4440    fn static_type() -> glib::Type {
4441        unsafe { from_glib(ffi::gst_video_orientation_method_get_type()) }
4442    }
4443}
4444
4445impl glib::HasParamSpec for VideoOrientationMethod {
4446    type ParamSpec = glib::ParamSpecEnum;
4447    type SetValue = Self;
4448    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4449
4450    fn param_spec_builder() -> Self::BuilderFn {
4451        Self::ParamSpec::builder_with_default
4452    }
4453}
4454
4455impl glib::value::ValueType for VideoOrientationMethod {
4456    type Type = Self;
4457}
4458
4459unsafe impl<'a> glib::value::FromValue<'a> for VideoOrientationMethod {
4460    type Checker = glib::value::GenericValueTypeChecker<Self>;
4461
4462    #[inline]
4463    unsafe fn from_value(value: &'a glib::Value) -> Self {
4464        skip_assert_initialized!();
4465        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
4466    }
4467}
4468
4469impl ToValue for VideoOrientationMethod {
4470    #[inline]
4471    fn to_value(&self) -> glib::Value {
4472        let mut value = glib::Value::for_value_type::<Self>();
4473        unsafe {
4474            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4475        }
4476        value
4477    }
4478
4479    #[inline]
4480    fn value_type(&self) -> glib::Type {
4481        Self::static_type()
4482    }
4483}
4484
4485impl From<VideoOrientationMethod> for glib::Value {
4486    #[inline]
4487    fn from(v: VideoOrientationMethod) -> Self {
4488        skip_assert_initialized!();
4489        ToValue::to_value(&v)
4490    }
4491}
4492
4493/// Different primaries conversion modes
4494#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4495#[non_exhaustive]
4496#[doc(alias = "GstVideoPrimariesMode")]
4497pub enum VideoPrimariesMode {
4498    /// disable conversion between primaries
4499    #[doc(alias = "GST_VIDEO_PRIMARIES_MODE_NONE")]
4500    None,
4501    /// do conversion between primaries only
4502    ///  when it can be merged with color matrix conversion.
4503    #[doc(alias = "GST_VIDEO_PRIMARIES_MODE_MERGE_ONLY")]
4504    MergeOnly,
4505    /// fast conversion between primaries
4506    #[doc(alias = "GST_VIDEO_PRIMARIES_MODE_FAST")]
4507    Fast,
4508    #[doc(hidden)]
4509    __Unknown(i32),
4510}
4511
4512#[doc(hidden)]
4513impl IntoGlib for VideoPrimariesMode {
4514    type GlibType = ffi::GstVideoPrimariesMode;
4515
4516    #[inline]
4517    fn into_glib(self) -> ffi::GstVideoPrimariesMode {
4518        match self {
4519            Self::None => ffi::GST_VIDEO_PRIMARIES_MODE_NONE,
4520            Self::MergeOnly => ffi::GST_VIDEO_PRIMARIES_MODE_MERGE_ONLY,
4521            Self::Fast => ffi::GST_VIDEO_PRIMARIES_MODE_FAST,
4522            Self::__Unknown(value) => value,
4523        }
4524    }
4525}
4526
4527#[doc(hidden)]
4528impl FromGlib<ffi::GstVideoPrimariesMode> for VideoPrimariesMode {
4529    #[inline]
4530    unsafe fn from_glib(value: ffi::GstVideoPrimariesMode) -> Self {
4531        skip_assert_initialized!();
4532
4533        match value {
4534            ffi::GST_VIDEO_PRIMARIES_MODE_NONE => Self::None,
4535            ffi::GST_VIDEO_PRIMARIES_MODE_MERGE_ONLY => Self::MergeOnly,
4536            ffi::GST_VIDEO_PRIMARIES_MODE_FAST => Self::Fast,
4537            value => Self::__Unknown(value),
4538        }
4539    }
4540}
4541
4542impl StaticType for VideoPrimariesMode {
4543    #[inline]
4544    #[doc(alias = "gst_video_primaries_mode_get_type")]
4545    fn static_type() -> glib::Type {
4546        unsafe { from_glib(ffi::gst_video_primaries_mode_get_type()) }
4547    }
4548}
4549
4550impl glib::HasParamSpec for VideoPrimariesMode {
4551    type ParamSpec = glib::ParamSpecEnum;
4552    type SetValue = Self;
4553    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4554
4555    fn param_spec_builder() -> Self::BuilderFn {
4556        Self::ParamSpec::builder_with_default
4557    }
4558}
4559
4560impl glib::value::ValueType for VideoPrimariesMode {
4561    type Type = Self;
4562}
4563
4564unsafe impl<'a> glib::value::FromValue<'a> for VideoPrimariesMode {
4565    type Checker = glib::value::GenericValueTypeChecker<Self>;
4566
4567    #[inline]
4568    unsafe fn from_value(value: &'a glib::Value) -> Self {
4569        skip_assert_initialized!();
4570        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
4571    }
4572}
4573
4574impl ToValue for VideoPrimariesMode {
4575    #[inline]
4576    fn to_value(&self) -> glib::Value {
4577        let mut value = glib::Value::for_value_type::<Self>();
4578        unsafe {
4579            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4580        }
4581        value
4582    }
4583
4584    #[inline]
4585    fn value_type(&self) -> glib::Type {
4586        Self::static_type()
4587    }
4588}
4589
4590impl From<VideoPrimariesMode> for glib::Value {
4591    #[inline]
4592    fn from(v: VideoPrimariesMode) -> Self {
4593        skip_assert_initialized!();
4594        ToValue::to_value(&v)
4595    }
4596}
4597
4598/// Different subsampling and upsampling methods
4599#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4600#[non_exhaustive]
4601#[doc(alias = "GstVideoResamplerMethod")]
4602pub enum VideoResamplerMethod {
4603    /// Duplicates the samples when
4604    ///  upsampling and drops when downsampling
4605    #[doc(alias = "GST_VIDEO_RESAMPLER_METHOD_NEAREST")]
4606    Nearest,
4607    /// Uses linear interpolation to reconstruct
4608    ///  missing samples and averaging to downsample
4609    #[doc(alias = "GST_VIDEO_RESAMPLER_METHOD_LINEAR")]
4610    Linear,
4611    /// Uses cubic interpolation
4612    #[doc(alias = "GST_VIDEO_RESAMPLER_METHOD_CUBIC")]
4613    Cubic,
4614    /// Uses sinc interpolation
4615    #[doc(alias = "GST_VIDEO_RESAMPLER_METHOD_SINC")]
4616    Sinc,
4617    /// Uses lanczos interpolation
4618    #[doc(alias = "GST_VIDEO_RESAMPLER_METHOD_LANCZOS")]
4619    Lanczos,
4620    #[doc(hidden)]
4621    __Unknown(i32),
4622}
4623
4624#[doc(hidden)]
4625impl IntoGlib for VideoResamplerMethod {
4626    type GlibType = ffi::GstVideoResamplerMethod;
4627
4628    #[inline]
4629    fn into_glib(self) -> ffi::GstVideoResamplerMethod {
4630        match self {
4631            Self::Nearest => ffi::GST_VIDEO_RESAMPLER_METHOD_NEAREST,
4632            Self::Linear => ffi::GST_VIDEO_RESAMPLER_METHOD_LINEAR,
4633            Self::Cubic => ffi::GST_VIDEO_RESAMPLER_METHOD_CUBIC,
4634            Self::Sinc => ffi::GST_VIDEO_RESAMPLER_METHOD_SINC,
4635            Self::Lanczos => ffi::GST_VIDEO_RESAMPLER_METHOD_LANCZOS,
4636            Self::__Unknown(value) => value,
4637        }
4638    }
4639}
4640
4641#[doc(hidden)]
4642impl FromGlib<ffi::GstVideoResamplerMethod> for VideoResamplerMethod {
4643    #[inline]
4644    unsafe fn from_glib(value: ffi::GstVideoResamplerMethod) -> Self {
4645        skip_assert_initialized!();
4646
4647        match value {
4648            ffi::GST_VIDEO_RESAMPLER_METHOD_NEAREST => Self::Nearest,
4649            ffi::GST_VIDEO_RESAMPLER_METHOD_LINEAR => Self::Linear,
4650            ffi::GST_VIDEO_RESAMPLER_METHOD_CUBIC => Self::Cubic,
4651            ffi::GST_VIDEO_RESAMPLER_METHOD_SINC => Self::Sinc,
4652            ffi::GST_VIDEO_RESAMPLER_METHOD_LANCZOS => Self::Lanczos,
4653            value => Self::__Unknown(value),
4654        }
4655    }
4656}
4657
4658impl StaticType for VideoResamplerMethod {
4659    #[inline]
4660    #[doc(alias = "gst_video_resampler_method_get_type")]
4661    fn static_type() -> glib::Type {
4662        unsafe { from_glib(ffi::gst_video_resampler_method_get_type()) }
4663    }
4664}
4665
4666impl glib::HasParamSpec for VideoResamplerMethod {
4667    type ParamSpec = glib::ParamSpecEnum;
4668    type SetValue = Self;
4669    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4670
4671    fn param_spec_builder() -> Self::BuilderFn {
4672        Self::ParamSpec::builder_with_default
4673    }
4674}
4675
4676impl glib::value::ValueType for VideoResamplerMethod {
4677    type Type = Self;
4678}
4679
4680unsafe impl<'a> glib::value::FromValue<'a> for VideoResamplerMethod {
4681    type Checker = glib::value::GenericValueTypeChecker<Self>;
4682
4683    #[inline]
4684    unsafe fn from_value(value: &'a glib::Value) -> Self {
4685        skip_assert_initialized!();
4686        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
4687    }
4688}
4689
4690impl ToValue for VideoResamplerMethod {
4691    #[inline]
4692    fn to_value(&self) -> glib::Value {
4693        let mut value = glib::Value::for_value_type::<Self>();
4694        unsafe {
4695            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4696        }
4697        value
4698    }
4699
4700    #[inline]
4701    fn value_type(&self) -> glib::Type {
4702        Self::static_type()
4703    }
4704}
4705
4706impl From<VideoResamplerMethod> for glib::Value {
4707    #[inline]
4708    fn from(v: VideoResamplerMethod) -> Self {
4709        skip_assert_initialized!();
4710        ToValue::to_value(&v)
4711    }
4712}
4713
4714/// Enum value describing the available tiling modes.
4715#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4716#[non_exhaustive]
4717#[doc(alias = "GstVideoTileMode")]
4718pub enum VideoTileMode {
4719    /// Unknown or unset tile mode
4720    #[doc(alias = "GST_VIDEO_TILE_MODE_UNKNOWN")]
4721    Unknown,
4722    /// Every four adjacent blocks - two
4723    ///  horizontally and two vertically are grouped together and are located
4724    ///  in memory in Z or flipped Z order. In case of odd rows, the last row
4725    ///  of blocks is arranged in linear order.
4726    #[doc(alias = "GST_VIDEO_TILE_MODE_ZFLIPZ_2X2")]
4727    Zflipz2x2,
4728    /// Tiles are in row order.
4729    #[cfg(feature = "v1_18")]
4730    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4731    #[doc(alias = "GST_VIDEO_TILE_MODE_LINEAR")]
4732    Linear,
4733    #[doc(hidden)]
4734    __Unknown(i32),
4735}
4736
4737#[doc(hidden)]
4738impl IntoGlib for VideoTileMode {
4739    type GlibType = ffi::GstVideoTileMode;
4740
4741    #[inline]
4742    fn into_glib(self) -> ffi::GstVideoTileMode {
4743        match self {
4744            Self::Unknown => ffi::GST_VIDEO_TILE_MODE_UNKNOWN,
4745            Self::Zflipz2x2 => ffi::GST_VIDEO_TILE_MODE_ZFLIPZ_2X2,
4746            #[cfg(feature = "v1_18")]
4747            Self::Linear => ffi::GST_VIDEO_TILE_MODE_LINEAR,
4748            Self::__Unknown(value) => value,
4749        }
4750    }
4751}
4752
4753#[doc(hidden)]
4754impl FromGlib<ffi::GstVideoTileMode> for VideoTileMode {
4755    #[inline]
4756    unsafe fn from_glib(value: ffi::GstVideoTileMode) -> Self {
4757        skip_assert_initialized!();
4758
4759        match value {
4760            ffi::GST_VIDEO_TILE_MODE_UNKNOWN => Self::Unknown,
4761            ffi::GST_VIDEO_TILE_MODE_ZFLIPZ_2X2 => Self::Zflipz2x2,
4762            #[cfg(feature = "v1_18")]
4763            ffi::GST_VIDEO_TILE_MODE_LINEAR => Self::Linear,
4764            value => Self::__Unknown(value),
4765        }
4766    }
4767}
4768
4769impl StaticType for VideoTileMode {
4770    #[inline]
4771    #[doc(alias = "gst_video_tile_mode_get_type")]
4772    fn static_type() -> glib::Type {
4773        unsafe { from_glib(ffi::gst_video_tile_mode_get_type()) }
4774    }
4775}
4776
4777impl glib::HasParamSpec for VideoTileMode {
4778    type ParamSpec = glib::ParamSpecEnum;
4779    type SetValue = Self;
4780    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4781
4782    fn param_spec_builder() -> Self::BuilderFn {
4783        Self::ParamSpec::builder_with_default
4784    }
4785}
4786
4787impl glib::value::ValueType for VideoTileMode {
4788    type Type = Self;
4789}
4790
4791unsafe impl<'a> glib::value::FromValue<'a> for VideoTileMode {
4792    type Checker = glib::value::GenericValueTypeChecker<Self>;
4793
4794    #[inline]
4795    unsafe fn from_value(value: &'a glib::Value) -> Self {
4796        skip_assert_initialized!();
4797        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
4798    }
4799}
4800
4801impl ToValue for VideoTileMode {
4802    #[inline]
4803    fn to_value(&self) -> glib::Value {
4804        let mut value = glib::Value::for_value_type::<Self>();
4805        unsafe {
4806            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4807        }
4808        value
4809    }
4810
4811    #[inline]
4812    fn value_type(&self) -> glib::Type {
4813        Self::static_type()
4814    }
4815}
4816
4817impl From<VideoTileMode> for glib::Value {
4818    #[inline]
4819    fn from(v: VideoTileMode) -> Self {
4820        skip_assert_initialized!();
4821        ToValue::to_value(&v)
4822    }
4823}
4824
4825/// The video transfer function defines the formula for converting between
4826/// non-linear RGB (R'G'B') and linear RGB
4827#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4828#[non_exhaustive]
4829#[doc(alias = "GstVideoTransferFunction")]
4830pub enum VideoTransferFunction {
4831    /// unknown transfer function
4832    #[doc(alias = "GST_VIDEO_TRANSFER_UNKNOWN")]
4833    Unknown,
4834    /// linear RGB, gamma 1.0 curve
4835    #[doc(alias = "GST_VIDEO_TRANSFER_GAMMA10")]
4836    Gamma10,
4837    /// Gamma 1.8 curve
4838    #[doc(alias = "GST_VIDEO_TRANSFER_GAMMA18")]
4839    Gamma18,
4840    /// Gamma 2.0 curve
4841    #[doc(alias = "GST_VIDEO_TRANSFER_GAMMA20")]
4842    Gamma20,
4843    /// Gamma 2.2 curve
4844    #[doc(alias = "GST_VIDEO_TRANSFER_GAMMA22")]
4845    Gamma22,
4846    /// Gamma 2.2 curve with a linear segment in the lower
4847    ///  range, also ITU-R BT470M / ITU-R BT1700 625 PAL &
4848    ///  SECAM / ITU-R BT1361
4849    #[doc(alias = "GST_VIDEO_TRANSFER_BT709")]
4850    Bt709,
4851    /// Gamma 2.2 curve with a linear segment in the
4852    ///  lower range
4853    #[doc(alias = "GST_VIDEO_TRANSFER_SMPTE240M")]
4854    Smpte240m,
4855    /// Gamma 2.4 curve with a linear segment in the lower
4856    ///  range. IEC 61966-2-1 (sRGB or sYCC)
4857    #[doc(alias = "GST_VIDEO_TRANSFER_SRGB")]
4858    Srgb,
4859    /// Gamma 2.8 curve, also ITU-R BT470BG
4860    #[doc(alias = "GST_VIDEO_TRANSFER_GAMMA28")]
4861    Gamma28,
4862    /// Logarithmic transfer characteristic
4863    ///  100:1 range
4864    #[doc(alias = "GST_VIDEO_TRANSFER_LOG100")]
4865    Log100,
4866    /// Logarithmic transfer characteristic
4867    ///  316.22777:1 range (100 * sqrt(10) : 1)
4868    #[doc(alias = "GST_VIDEO_TRANSFER_LOG316")]
4869    Log316,
4870    /// Gamma 2.2 curve with a linear segment in the lower
4871    ///  range. Used for BT.2020 with 12 bits per
4872    ///  component. Since: 1.6
4873    #[doc(alias = "GST_VIDEO_TRANSFER_BT2020_12")]
4874    Bt202012,
4875    /// Gamma 2.19921875. Since: 1.8
4876    #[doc(alias = "GST_VIDEO_TRANSFER_ADOBERGB")]
4877    Adobergb,
4878    /// Rec. ITU-R BT.2020-2 with 10 bits per component.
4879    ///  (functionally the same as the values
4880    ///  GST_VIDEO_TRANSFER_BT709 and GST_VIDEO_TRANSFER_BT601).
4881    ///  Since: 1.18
4882    #[cfg(feature = "v1_18")]
4883    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4884    #[doc(alias = "GST_VIDEO_TRANSFER_BT2020_10")]
4885    Bt202010,
4886    /// SMPTE ST 2084 for 10, 12, 14, and 16-bit systems.
4887    ///  Known as perceptual quantization (PQ)
4888    ///  Since: 1.18
4889    #[cfg(feature = "v1_18")]
4890    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4891    #[doc(alias = "GST_VIDEO_TRANSFER_SMPTE2084")]
4892    Smpte2084,
4893    /// Association of Radio Industries and Businesses (ARIB)
4894    ///  STD-B67 and Rec. ITU-R BT.2100-1 hybrid loggamma (HLG) system
4895    ///  Since: 1.18
4896    #[cfg(feature = "v1_18")]
4897    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4898    #[doc(alias = "GST_VIDEO_TRANSFER_ARIB_STD_B67")]
4899    AribStdB67,
4900    /// also known as SMPTE170M / ITU-R BT1358 525 or 625 / ITU-R BT1700 NTSC
4901    #[cfg(feature = "v1_18")]
4902    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4903    #[doc(alias = "GST_VIDEO_TRANSFER_BT601")]
4904    Bt601,
4905    #[doc(hidden)]
4906    __Unknown(i32),
4907}
4908
4909impl VideoTransferFunction {
4910    #[cfg(feature = "v1_20")]
4911    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
4912    #[doc(alias = "gst_video_transfer_function_decode")]
4913    pub fn decode(self, val: f64) -> f64 {
4914        assert_initialized_main_thread!();
4915        unsafe { ffi::gst_video_transfer_function_decode(self.into_glib(), val) }
4916    }
4917
4918    #[cfg(feature = "v1_20")]
4919    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
4920    #[doc(alias = "gst_video_transfer_function_encode")]
4921    pub fn encode(self, val: f64) -> f64 {
4922        assert_initialized_main_thread!();
4923        unsafe { ffi::gst_video_transfer_function_encode(self.into_glib(), val) }
4924    }
4925
4926    #[cfg(feature = "v1_18")]
4927    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4928    #[doc(alias = "gst_video_transfer_function_from_iso")]
4929    pub fn from_iso(value: u32) -> VideoTransferFunction {
4930        assert_initialized_main_thread!();
4931        unsafe { from_glib(ffi::gst_video_transfer_function_from_iso(value)) }
4932    }
4933
4934    #[cfg(feature = "v1_18")]
4935    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4936    #[doc(alias = "gst_video_transfer_function_is_equivalent")]
4937    pub fn is_equivalent(self, from_bpp: u32, to_func: VideoTransferFunction, to_bpp: u32) -> bool {
4938        assert_initialized_main_thread!();
4939        unsafe {
4940            from_glib(ffi::gst_video_transfer_function_is_equivalent(
4941                self.into_glib(),
4942                from_bpp,
4943                to_func.into_glib(),
4944                to_bpp,
4945            ))
4946        }
4947    }
4948
4949    #[cfg(feature = "v1_18")]
4950    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
4951    #[doc(alias = "gst_video_transfer_function_to_iso")]
4952    pub fn to_iso(self) -> u32 {
4953        assert_initialized_main_thread!();
4954        unsafe { ffi::gst_video_transfer_function_to_iso(self.into_glib()) }
4955    }
4956}
4957
4958#[doc(hidden)]
4959impl IntoGlib for VideoTransferFunction {
4960    type GlibType = ffi::GstVideoTransferFunction;
4961
4962    fn into_glib(self) -> ffi::GstVideoTransferFunction {
4963        match self {
4964            Self::Unknown => ffi::GST_VIDEO_TRANSFER_UNKNOWN,
4965            Self::Gamma10 => ffi::GST_VIDEO_TRANSFER_GAMMA10,
4966            Self::Gamma18 => ffi::GST_VIDEO_TRANSFER_GAMMA18,
4967            Self::Gamma20 => ffi::GST_VIDEO_TRANSFER_GAMMA20,
4968            Self::Gamma22 => ffi::GST_VIDEO_TRANSFER_GAMMA22,
4969            Self::Bt709 => ffi::GST_VIDEO_TRANSFER_BT709,
4970            Self::Smpte240m => ffi::GST_VIDEO_TRANSFER_SMPTE240M,
4971            Self::Srgb => ffi::GST_VIDEO_TRANSFER_SRGB,
4972            Self::Gamma28 => ffi::GST_VIDEO_TRANSFER_GAMMA28,
4973            Self::Log100 => ffi::GST_VIDEO_TRANSFER_LOG100,
4974            Self::Log316 => ffi::GST_VIDEO_TRANSFER_LOG316,
4975            Self::Bt202012 => ffi::GST_VIDEO_TRANSFER_BT2020_12,
4976            Self::Adobergb => ffi::GST_VIDEO_TRANSFER_ADOBERGB,
4977            #[cfg(feature = "v1_18")]
4978            Self::Bt202010 => ffi::GST_VIDEO_TRANSFER_BT2020_10,
4979            #[cfg(feature = "v1_18")]
4980            Self::Smpte2084 => ffi::GST_VIDEO_TRANSFER_SMPTE2084,
4981            #[cfg(feature = "v1_18")]
4982            Self::AribStdB67 => ffi::GST_VIDEO_TRANSFER_ARIB_STD_B67,
4983            #[cfg(feature = "v1_18")]
4984            Self::Bt601 => ffi::GST_VIDEO_TRANSFER_BT601,
4985            Self::__Unknown(value) => value,
4986        }
4987    }
4988}
4989
4990#[doc(hidden)]
4991impl FromGlib<ffi::GstVideoTransferFunction> for VideoTransferFunction {
4992    unsafe fn from_glib(value: ffi::GstVideoTransferFunction) -> Self {
4993        skip_assert_initialized!();
4994
4995        match value {
4996            ffi::GST_VIDEO_TRANSFER_UNKNOWN => Self::Unknown,
4997            ffi::GST_VIDEO_TRANSFER_GAMMA10 => Self::Gamma10,
4998            ffi::GST_VIDEO_TRANSFER_GAMMA18 => Self::Gamma18,
4999            ffi::GST_VIDEO_TRANSFER_GAMMA20 => Self::Gamma20,
5000            ffi::GST_VIDEO_TRANSFER_GAMMA22 => Self::Gamma22,
5001            ffi::GST_VIDEO_TRANSFER_BT709 => Self::Bt709,
5002            ffi::GST_VIDEO_TRANSFER_SMPTE240M => Self::Smpte240m,
5003            ffi::GST_VIDEO_TRANSFER_SRGB => Self::Srgb,
5004            ffi::GST_VIDEO_TRANSFER_GAMMA28 => Self::Gamma28,
5005            ffi::GST_VIDEO_TRANSFER_LOG100 => Self::Log100,
5006            ffi::GST_VIDEO_TRANSFER_LOG316 => Self::Log316,
5007            ffi::GST_VIDEO_TRANSFER_BT2020_12 => Self::Bt202012,
5008            ffi::GST_VIDEO_TRANSFER_ADOBERGB => Self::Adobergb,
5009            #[cfg(feature = "v1_18")]
5010            ffi::GST_VIDEO_TRANSFER_BT2020_10 => Self::Bt202010,
5011            #[cfg(feature = "v1_18")]
5012            ffi::GST_VIDEO_TRANSFER_SMPTE2084 => Self::Smpte2084,
5013            #[cfg(feature = "v1_18")]
5014            ffi::GST_VIDEO_TRANSFER_ARIB_STD_B67 => Self::AribStdB67,
5015            #[cfg(feature = "v1_18")]
5016            ffi::GST_VIDEO_TRANSFER_BT601 => Self::Bt601,
5017            value => Self::__Unknown(value),
5018        }
5019    }
5020}
5021
5022impl StaticType for VideoTransferFunction {
5023    #[inline]
5024    #[doc(alias = "gst_video_transfer_function_get_type")]
5025    fn static_type() -> glib::Type {
5026        unsafe { from_glib(ffi::gst_video_transfer_function_get_type()) }
5027    }
5028}
5029
5030impl glib::HasParamSpec for VideoTransferFunction {
5031    type ParamSpec = glib::ParamSpecEnum;
5032    type SetValue = Self;
5033    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
5034
5035    fn param_spec_builder() -> Self::BuilderFn {
5036        Self::ParamSpec::builder_with_default
5037    }
5038}
5039
5040impl glib::value::ValueType for VideoTransferFunction {
5041    type Type = Self;
5042}
5043
5044unsafe impl<'a> glib::value::FromValue<'a> for VideoTransferFunction {
5045    type Checker = glib::value::GenericValueTypeChecker<Self>;
5046
5047    #[inline]
5048    unsafe fn from_value(value: &'a glib::Value) -> Self {
5049        skip_assert_initialized!();
5050        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
5051    }
5052}
5053
5054impl ToValue for VideoTransferFunction {
5055    #[inline]
5056    fn to_value(&self) -> glib::Value {
5057        let mut value = glib::Value::for_value_type::<Self>();
5058        unsafe {
5059            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
5060        }
5061        value
5062    }
5063
5064    #[inline]
5065    fn value_type(&self) -> glib::Type {
5066        Self::static_type()
5067    }
5068}
5069
5070impl From<VideoTransferFunction> for glib::Value {
5071    #[inline]
5072    fn from(v: VideoTransferFunction) -> Self {
5073        skip_assert_initialized!();
5074        ToValue::to_value(&v)
5075    }
5076}