gstreamer_video/auto/
enums.rs

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