// This file was generated by gir (https://github.com/gtk-rs/gir)
// from gir-files (https://github.com/gtk-rs/gir-files)
// from gst-gir-files (https://gitlab.freedesktop.org/gstreamer/gir-files-rs.git)
// DO NOT EDIT

#![allow(non_camel_case_types, non_upper_case_globals, non_snake_case)]
#![allow(
    clippy::approx_constant,
    clippy::type_complexity,
    clippy::unreadable_literal,
    clippy::upper_case_acronyms
)]
#![cfg_attr(docsrs, feature(doc_cfg))]

use glib_sys as glib;
use gobject_sys as gobject;
use gstreamer_base_sys as gst_base;
use gstreamer_sys as gst;

#[allow(unused_imports)]
use libc::{FILE, intptr_t, off_t, size_t, ssize_t, time_t, uintptr_t};
#[cfg(unix)]
#[allow(unused_imports)]
use libc::{dev_t, gid_t, pid_t, socklen_t, uid_t};
#[allow(unused_imports)]
use std::ffi::{
    c_char, c_double, c_float, c_int, c_long, c_short, c_uchar, c_uint, c_ulong, c_ushort, c_void,
};

#[allow(unused_imports)]
use glib::{GType, gboolean, gconstpointer, gpointer};

// Enums
pub type GstAncillaryMetaField = c_int;
pub const GST_ANCILLARY_META_FIELD_PROGRESSIVE: GstAncillaryMetaField = 0;
pub const GST_ANCILLARY_META_FIELD_INTERLACED_FIRST: GstAncillaryMetaField = 16;
pub const GST_ANCILLARY_META_FIELD_INTERLACED_SECOND: GstAncillaryMetaField = 17;

pub type GstColorBalanceType = c_int;
pub const GST_COLOR_BALANCE_HARDWARE: GstColorBalanceType = 0;
pub const GST_COLOR_BALANCE_SOFTWARE: GstColorBalanceType = 1;

pub type GstNavigationCommand = c_int;
pub const GST_NAVIGATION_COMMAND_INVALID: GstNavigationCommand = 0;
pub const GST_NAVIGATION_COMMAND_MENU1: GstNavigationCommand = 1;
pub const GST_NAVIGATION_COMMAND_MENU2: GstNavigationCommand = 2;
pub const GST_NAVIGATION_COMMAND_MENU3: GstNavigationCommand = 3;
pub const GST_NAVIGATION_COMMAND_MENU4: GstNavigationCommand = 4;
pub const GST_NAVIGATION_COMMAND_MENU5: GstNavigationCommand = 5;
pub const GST_NAVIGATION_COMMAND_MENU6: GstNavigationCommand = 6;
pub const GST_NAVIGATION_COMMAND_MENU7: GstNavigationCommand = 7;
pub const GST_NAVIGATION_COMMAND_LEFT: GstNavigationCommand = 20;
pub const GST_NAVIGATION_COMMAND_RIGHT: GstNavigationCommand = 21;
pub const GST_NAVIGATION_COMMAND_UP: GstNavigationCommand = 22;
pub const GST_NAVIGATION_COMMAND_DOWN: GstNavigationCommand = 23;
pub const GST_NAVIGATION_COMMAND_ACTIVATE: GstNavigationCommand = 24;
pub const GST_NAVIGATION_COMMAND_PREV_ANGLE: GstNavigationCommand = 30;
pub const GST_NAVIGATION_COMMAND_NEXT_ANGLE: GstNavigationCommand = 31;

pub type GstNavigationEventType = c_int;
pub const GST_NAVIGATION_EVENT_INVALID: GstNavigationEventType = 0;
pub const GST_NAVIGATION_EVENT_KEY_PRESS: GstNavigationEventType = 1;
pub const GST_NAVIGATION_EVENT_KEY_RELEASE: GstNavigationEventType = 2;
pub const GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS: GstNavigationEventType = 3;
pub const GST_NAVIGATION_EVENT_MOUSE_BUTTON_RELEASE: GstNavigationEventType = 4;
pub const GST_NAVIGATION_EVENT_MOUSE_MOVE: GstNavigationEventType = 5;
pub const GST_NAVIGATION_EVENT_COMMAND: GstNavigationEventType = 6;
#[cfg(feature = "v1_18")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
pub const GST_NAVIGATION_EVENT_MOUSE_SCROLL: GstNavigationEventType = 7;
#[cfg(feature = "v1_22")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
pub const GST_NAVIGATION_EVENT_TOUCH_DOWN: GstNavigationEventType = 8;
#[cfg(feature = "v1_22")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
pub const GST_NAVIGATION_EVENT_TOUCH_MOTION: GstNavigationEventType = 9;
#[cfg(feature = "v1_22")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
pub const GST_NAVIGATION_EVENT_TOUCH_UP: GstNavigationEventType = 10;
#[cfg(feature = "v1_22")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
pub const GST_NAVIGATION_EVENT_TOUCH_FRAME: GstNavigationEventType = 11;
#[cfg(feature = "v1_22")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
pub const GST_NAVIGATION_EVENT_TOUCH_CANCEL: GstNavigationEventType = 12;
#[cfg(feature = "v1_26")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
pub const GST_NAVIGATION_EVENT_MOUSE_DOUBLE_CLICK: GstNavigationEventType = 13;

pub type GstNavigationMessageType = c_int;
pub const GST_NAVIGATION_MESSAGE_INVALID: GstNavigationMessageType = 0;
pub const GST_NAVIGATION_MESSAGE_MOUSE_OVER: GstNavigationMessageType = 1;
pub const GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED: GstNavigationMessageType = 2;
pub const GST_NAVIGATION_MESSAGE_ANGLES_CHANGED: GstNavigationMessageType = 3;
pub const GST_NAVIGATION_MESSAGE_EVENT: GstNavigationMessageType = 4;

pub type GstNavigationQueryType = c_int;
pub const GST_NAVIGATION_QUERY_INVALID: GstNavigationQueryType = 0;
pub const GST_NAVIGATION_QUERY_COMMANDS: GstNavigationQueryType = 1;
pub const GST_NAVIGATION_QUERY_ANGLES: GstNavigationQueryType = 2;

pub type GstVideoAFDSpec = c_int;
pub const GST_VIDEO_AFD_SPEC_DVB_ETSI: GstVideoAFDSpec = 0;
pub const GST_VIDEO_AFD_SPEC_ATSC_A53: GstVideoAFDSpec = 1;
pub const GST_VIDEO_AFD_SPEC_SMPTE_ST2016_1: GstVideoAFDSpec = 2;

pub type GstVideoAFDValue = c_int;
pub const GST_VIDEO_AFD_UNAVAILABLE: GstVideoAFDValue = 0;
pub const GST_VIDEO_AFD_16_9_TOP_ALIGNED: GstVideoAFDValue = 2;
pub const GST_VIDEO_AFD_14_9_TOP_ALIGNED: GstVideoAFDValue = 3;
pub const GST_VIDEO_AFD_GREATER_THAN_16_9: GstVideoAFDValue = 4;
pub const GST_VIDEO_AFD_4_3_FULL_16_9_FULL: GstVideoAFDValue = 8;
pub const GST_VIDEO_AFD_4_3_FULL_4_3_PILLAR: GstVideoAFDValue = 9;
pub const GST_VIDEO_AFD_16_9_LETTER_16_9_FULL: GstVideoAFDValue = 10;
pub const GST_VIDEO_AFD_14_9_LETTER_14_9_PILLAR: GstVideoAFDValue = 11;
pub const GST_VIDEO_AFD_4_3_FULL_14_9_CENTER: GstVideoAFDValue = 13;
pub const GST_VIDEO_AFD_16_9_LETTER_14_9_CENTER: GstVideoAFDValue = 14;
pub const GST_VIDEO_AFD_16_9_LETTER_4_3_CENTER: GstVideoAFDValue = 15;

pub type GstVideoAlphaMode = c_int;
pub const GST_VIDEO_ALPHA_MODE_COPY: GstVideoAlphaMode = 0;
pub const GST_VIDEO_ALPHA_MODE_SET: GstVideoAlphaMode = 1;
pub const GST_VIDEO_ALPHA_MODE_MULT: GstVideoAlphaMode = 2;

pub type GstVideoAncillaryDID = c_int;
pub const GST_VIDEO_ANCILLARY_DID_UNDEFINED: GstVideoAncillaryDID = 0;
pub const GST_VIDEO_ANCILLARY_DID_DELETION: GstVideoAncillaryDID = 128;
pub const GST_VIDEO_ANCILLARY_DID_HANC_3G_AUDIO_DATA_FIRST: GstVideoAncillaryDID = 160;
pub const GST_VIDEO_ANCILLARY_DID_HANC_3G_AUDIO_DATA_LAST: GstVideoAncillaryDID = 167;
pub const GST_VIDEO_ANCILLARY_DID_HANC_HDTV_AUDIO_DATA_FIRST: GstVideoAncillaryDID = 224;
pub const GST_VIDEO_ANCILLARY_DID_HANC_HDTV_AUDIO_DATA_LAST: GstVideoAncillaryDID = 231;
pub const GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_1_FIRST: GstVideoAncillaryDID = 236;
pub const GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_1_LAST: GstVideoAncillaryDID = 239;
pub const GST_VIDEO_ANCILLARY_DID_CAMERA_POSITION: GstVideoAncillaryDID = 240;
pub const GST_VIDEO_ANCILLARY_DID_HANC_ERROR_DETECTION: GstVideoAncillaryDID = 244;
pub const GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_2_FIRST: GstVideoAncillaryDID = 248;
pub const GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_2_LAST: GstVideoAncillaryDID = 255;

pub type GstVideoAncillaryDID16 = c_int;
pub const GST_VIDEO_ANCILLARY_DID16_S334_EIA_708: GstVideoAncillaryDID16 = 24833;
pub const GST_VIDEO_ANCILLARY_DID16_S334_EIA_608: GstVideoAncillaryDID16 = 24834;
pub const GST_VIDEO_ANCILLARY_DID16_S2016_3_AFD_BAR: GstVideoAncillaryDID16 = 16645;

pub type GstVideoCaptionType = c_int;
pub const GST_VIDEO_CAPTION_TYPE_UNKNOWN: GstVideoCaptionType = 0;
pub const GST_VIDEO_CAPTION_TYPE_CEA608_RAW: GstVideoCaptionType = 1;
pub const GST_VIDEO_CAPTION_TYPE_CEA608_S334_1A: GstVideoCaptionType = 2;
pub const GST_VIDEO_CAPTION_TYPE_CEA708_RAW: GstVideoCaptionType = 3;
pub const GST_VIDEO_CAPTION_TYPE_CEA708_CDP: GstVideoCaptionType = 4;

pub type GstVideoChromaMethod = c_int;
pub const GST_VIDEO_CHROMA_METHOD_NEAREST: GstVideoChromaMethod = 0;
pub const GST_VIDEO_CHROMA_METHOD_LINEAR: GstVideoChromaMethod = 1;

pub type GstVideoChromaMode = c_int;
pub const GST_VIDEO_CHROMA_MODE_FULL: GstVideoChromaMode = 0;
pub const GST_VIDEO_CHROMA_MODE_UPSAMPLE_ONLY: GstVideoChromaMode = 1;
pub const GST_VIDEO_CHROMA_MODE_DOWNSAMPLE_ONLY: GstVideoChromaMode = 2;
pub const GST_VIDEO_CHROMA_MODE_NONE: GstVideoChromaMode = 3;

pub type GstVideoColorMatrix = c_int;
pub const GST_VIDEO_COLOR_MATRIX_UNKNOWN: GstVideoColorMatrix = 0;
pub const GST_VIDEO_COLOR_MATRIX_RGB: GstVideoColorMatrix = 1;
pub const GST_VIDEO_COLOR_MATRIX_FCC: GstVideoColorMatrix = 2;
pub const GST_VIDEO_COLOR_MATRIX_BT709: GstVideoColorMatrix = 3;
pub const GST_VIDEO_COLOR_MATRIX_BT601: GstVideoColorMatrix = 4;
pub const GST_VIDEO_COLOR_MATRIX_SMPTE240M: GstVideoColorMatrix = 5;
pub const GST_VIDEO_COLOR_MATRIX_BT2020: GstVideoColorMatrix = 6;

pub type GstVideoColorPrimaries = c_int;
pub const GST_VIDEO_COLOR_PRIMARIES_UNKNOWN: GstVideoColorPrimaries = 0;
pub const GST_VIDEO_COLOR_PRIMARIES_BT709: GstVideoColorPrimaries = 1;
pub const GST_VIDEO_COLOR_PRIMARIES_BT470M: GstVideoColorPrimaries = 2;
pub const GST_VIDEO_COLOR_PRIMARIES_BT470BG: GstVideoColorPrimaries = 3;
pub const GST_VIDEO_COLOR_PRIMARIES_SMPTE170M: GstVideoColorPrimaries = 4;
pub const GST_VIDEO_COLOR_PRIMARIES_SMPTE240M: GstVideoColorPrimaries = 5;
pub const GST_VIDEO_COLOR_PRIMARIES_FILM: GstVideoColorPrimaries = 6;
pub const GST_VIDEO_COLOR_PRIMARIES_BT2020: GstVideoColorPrimaries = 7;
pub const GST_VIDEO_COLOR_PRIMARIES_ADOBERGB: GstVideoColorPrimaries = 8;
pub const GST_VIDEO_COLOR_PRIMARIES_SMPTEST428: GstVideoColorPrimaries = 9;
pub const GST_VIDEO_COLOR_PRIMARIES_SMPTERP431: GstVideoColorPrimaries = 10;
pub const GST_VIDEO_COLOR_PRIMARIES_SMPTEEG432: GstVideoColorPrimaries = 11;
pub const GST_VIDEO_COLOR_PRIMARIES_EBU3213: GstVideoColorPrimaries = 12;

pub type GstVideoColorRange = c_int;
pub const GST_VIDEO_COLOR_RANGE_UNKNOWN: GstVideoColorRange = 0;
pub const GST_VIDEO_COLOR_RANGE_0_255: GstVideoColorRange = 1;
pub const GST_VIDEO_COLOR_RANGE_16_235: GstVideoColorRange = 2;

pub type GstVideoDitherMethod = c_int;
pub const GST_VIDEO_DITHER_NONE: GstVideoDitherMethod = 0;
pub const GST_VIDEO_DITHER_VERTERR: GstVideoDitherMethod = 1;
pub const GST_VIDEO_DITHER_FLOYD_STEINBERG: GstVideoDitherMethod = 2;
pub const GST_VIDEO_DITHER_SIERRA_LITE: GstVideoDitherMethod = 3;
pub const GST_VIDEO_DITHER_BAYER: GstVideoDitherMethod = 4;

pub type GstVideoFieldOrder = c_int;
pub const GST_VIDEO_FIELD_ORDER_UNKNOWN: GstVideoFieldOrder = 0;
pub const GST_VIDEO_FIELD_ORDER_TOP_FIELD_FIRST: GstVideoFieldOrder = 1;
pub const GST_VIDEO_FIELD_ORDER_BOTTOM_FIELD_FIRST: GstVideoFieldOrder = 2;

pub type GstVideoFormat = c_int;
pub const GST_VIDEO_FORMAT_UNKNOWN: GstVideoFormat = 0;
pub const GST_VIDEO_FORMAT_ENCODED: GstVideoFormat = 1;
pub const GST_VIDEO_FORMAT_I420: GstVideoFormat = 2;
pub const GST_VIDEO_FORMAT_YV12: GstVideoFormat = 3;
pub const GST_VIDEO_FORMAT_YUY2: GstVideoFormat = 4;
pub const GST_VIDEO_FORMAT_UYVY: GstVideoFormat = 5;
pub const GST_VIDEO_FORMAT_AYUV: GstVideoFormat = 6;
pub const GST_VIDEO_FORMAT_RGBx: GstVideoFormat = 7;
pub const GST_VIDEO_FORMAT_BGRx: GstVideoFormat = 8;
pub const GST_VIDEO_FORMAT_xRGB: GstVideoFormat = 9;
pub const GST_VIDEO_FORMAT_xBGR: GstVideoFormat = 10;
pub const GST_VIDEO_FORMAT_RGBA: GstVideoFormat = 11;
pub const GST_VIDEO_FORMAT_BGRA: GstVideoFormat = 12;
pub const GST_VIDEO_FORMAT_ARGB: GstVideoFormat = 13;
pub const GST_VIDEO_FORMAT_ABGR: GstVideoFormat = 14;
pub const GST_VIDEO_FORMAT_RGB: GstVideoFormat = 15;
pub const GST_VIDEO_FORMAT_BGR: GstVideoFormat = 16;
pub const GST_VIDEO_FORMAT_Y41B: GstVideoFormat = 17;
pub const GST_VIDEO_FORMAT_Y42B: GstVideoFormat = 18;
pub const GST_VIDEO_FORMAT_YVYU: GstVideoFormat = 19;
pub const GST_VIDEO_FORMAT_Y444: GstVideoFormat = 20;
pub const GST_VIDEO_FORMAT_v210: GstVideoFormat = 21;
pub const GST_VIDEO_FORMAT_v216: GstVideoFormat = 22;
pub const GST_VIDEO_FORMAT_NV12: GstVideoFormat = 23;
pub const GST_VIDEO_FORMAT_NV21: GstVideoFormat = 24;
pub const GST_VIDEO_FORMAT_GRAY8: GstVideoFormat = 25;
pub const GST_VIDEO_FORMAT_GRAY16_BE: GstVideoFormat = 26;
pub const GST_VIDEO_FORMAT_GRAY16_LE: GstVideoFormat = 27;
pub const GST_VIDEO_FORMAT_v308: GstVideoFormat = 28;
pub const GST_VIDEO_FORMAT_RGB16: GstVideoFormat = 29;
pub const GST_VIDEO_FORMAT_BGR16: GstVideoFormat = 30;
pub const GST_VIDEO_FORMAT_RGB15: GstVideoFormat = 31;
pub const GST_VIDEO_FORMAT_BGR15: GstVideoFormat = 32;
pub const GST_VIDEO_FORMAT_UYVP: GstVideoFormat = 33;
pub const GST_VIDEO_FORMAT_A420: GstVideoFormat = 34;
pub const GST_VIDEO_FORMAT_RGB8P: GstVideoFormat = 35;
pub const GST_VIDEO_FORMAT_YUV9: GstVideoFormat = 36;
pub const GST_VIDEO_FORMAT_YVU9: GstVideoFormat = 37;
pub const GST_VIDEO_FORMAT_IYU1: GstVideoFormat = 38;
pub const GST_VIDEO_FORMAT_ARGB64: GstVideoFormat = 39;
pub const GST_VIDEO_FORMAT_AYUV64: GstVideoFormat = 40;
pub const GST_VIDEO_FORMAT_r210: GstVideoFormat = 41;
pub const GST_VIDEO_FORMAT_I420_10BE: GstVideoFormat = 42;
pub const GST_VIDEO_FORMAT_I420_10LE: GstVideoFormat = 43;
pub const GST_VIDEO_FORMAT_I422_10BE: GstVideoFormat = 44;
pub const GST_VIDEO_FORMAT_I422_10LE: GstVideoFormat = 45;
pub const GST_VIDEO_FORMAT_Y444_10BE: GstVideoFormat = 46;
pub const GST_VIDEO_FORMAT_Y444_10LE: GstVideoFormat = 47;
pub const GST_VIDEO_FORMAT_GBR: GstVideoFormat = 48;
pub const GST_VIDEO_FORMAT_GBR_10BE: GstVideoFormat = 49;
pub const GST_VIDEO_FORMAT_GBR_10LE: GstVideoFormat = 50;
pub const GST_VIDEO_FORMAT_NV16: GstVideoFormat = 51;
pub const GST_VIDEO_FORMAT_NV24: GstVideoFormat = 52;
pub const GST_VIDEO_FORMAT_NV12_64Z32: GstVideoFormat = 53;
pub const GST_VIDEO_FORMAT_A420_10BE: GstVideoFormat = 54;
pub const GST_VIDEO_FORMAT_A420_10LE: GstVideoFormat = 55;
pub const GST_VIDEO_FORMAT_A422_10BE: GstVideoFormat = 56;
pub const GST_VIDEO_FORMAT_A422_10LE: GstVideoFormat = 57;
pub const GST_VIDEO_FORMAT_A444_10BE: GstVideoFormat = 58;
pub const GST_VIDEO_FORMAT_A444_10LE: GstVideoFormat = 59;
pub const GST_VIDEO_FORMAT_NV61: GstVideoFormat = 60;
pub const GST_VIDEO_FORMAT_P010_10BE: GstVideoFormat = 61;
pub const GST_VIDEO_FORMAT_P010_10LE: GstVideoFormat = 62;
pub const GST_VIDEO_FORMAT_IYU2: GstVideoFormat = 63;
pub const GST_VIDEO_FORMAT_VYUY: GstVideoFormat = 64;
pub const GST_VIDEO_FORMAT_GBRA: GstVideoFormat = 65;
pub const GST_VIDEO_FORMAT_GBRA_10BE: GstVideoFormat = 66;
pub const GST_VIDEO_FORMAT_GBRA_10LE: GstVideoFormat = 67;
pub const GST_VIDEO_FORMAT_GBR_12BE: GstVideoFormat = 68;
pub const GST_VIDEO_FORMAT_GBR_12LE: GstVideoFormat = 69;
pub const GST_VIDEO_FORMAT_GBRA_12BE: GstVideoFormat = 70;
pub const GST_VIDEO_FORMAT_GBRA_12LE: GstVideoFormat = 71;
pub const GST_VIDEO_FORMAT_I420_12BE: GstVideoFormat = 72;
pub const GST_VIDEO_FORMAT_I420_12LE: GstVideoFormat = 73;
pub const GST_VIDEO_FORMAT_I422_12BE: GstVideoFormat = 74;
pub const GST_VIDEO_FORMAT_I422_12LE: GstVideoFormat = 75;
pub const GST_VIDEO_FORMAT_Y444_12BE: GstVideoFormat = 76;
pub const GST_VIDEO_FORMAT_Y444_12LE: GstVideoFormat = 77;
pub const GST_VIDEO_FORMAT_GRAY10_LE32: GstVideoFormat = 78;
pub const GST_VIDEO_FORMAT_NV12_10LE32: GstVideoFormat = 79;
pub const GST_VIDEO_FORMAT_NV16_10LE32: GstVideoFormat = 80;
pub const GST_VIDEO_FORMAT_NV12_10LE40: GstVideoFormat = 81;
pub const GST_VIDEO_FORMAT_Y210: GstVideoFormat = 82;
pub const GST_VIDEO_FORMAT_Y410: GstVideoFormat = 83;
pub const GST_VIDEO_FORMAT_VUYA: GstVideoFormat = 84;
pub const GST_VIDEO_FORMAT_BGR10A2_LE: GstVideoFormat = 85;
pub const GST_VIDEO_FORMAT_RGB10A2_LE: GstVideoFormat = 86;
pub const GST_VIDEO_FORMAT_Y444_16BE: GstVideoFormat = 87;
pub const GST_VIDEO_FORMAT_Y444_16LE: GstVideoFormat = 88;
pub const GST_VIDEO_FORMAT_P016_BE: GstVideoFormat = 89;
pub const GST_VIDEO_FORMAT_P016_LE: GstVideoFormat = 90;
pub const GST_VIDEO_FORMAT_P012_BE: GstVideoFormat = 91;
pub const GST_VIDEO_FORMAT_P012_LE: GstVideoFormat = 92;
pub const GST_VIDEO_FORMAT_Y212_BE: GstVideoFormat = 93;
pub const GST_VIDEO_FORMAT_Y212_LE: GstVideoFormat = 94;
pub const GST_VIDEO_FORMAT_Y412_BE: GstVideoFormat = 95;
pub const GST_VIDEO_FORMAT_Y412_LE: GstVideoFormat = 96;
#[cfg(feature = "v1_18")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
pub const GST_VIDEO_FORMAT_NV12_4L4: GstVideoFormat = 97;
#[cfg(feature = "v1_18")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
pub const GST_VIDEO_FORMAT_NV12_32L32: GstVideoFormat = 98;
#[cfg(feature = "v1_20")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
pub const GST_VIDEO_FORMAT_RGBP: GstVideoFormat = 99;
#[cfg(feature = "v1_20")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
pub const GST_VIDEO_FORMAT_BGRP: GstVideoFormat = 100;
#[cfg(feature = "v1_20")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
pub const GST_VIDEO_FORMAT_AV12: GstVideoFormat = 101;
#[cfg(feature = "v1_20")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
pub const GST_VIDEO_FORMAT_ARGB64_LE: GstVideoFormat = 102;
#[cfg(feature = "v1_20")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
pub const GST_VIDEO_FORMAT_ARGB64_BE: GstVideoFormat = 103;
#[cfg(feature = "v1_20")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
pub const GST_VIDEO_FORMAT_RGBA64_LE: GstVideoFormat = 104;
#[cfg(feature = "v1_20")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
pub const GST_VIDEO_FORMAT_RGBA64_BE: GstVideoFormat = 105;
#[cfg(feature = "v1_20")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
pub const GST_VIDEO_FORMAT_BGRA64_LE: GstVideoFormat = 106;
#[cfg(feature = "v1_20")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
pub const GST_VIDEO_FORMAT_BGRA64_BE: GstVideoFormat = 107;
#[cfg(feature = "v1_20")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
pub const GST_VIDEO_FORMAT_ABGR64_LE: GstVideoFormat = 108;
#[cfg(feature = "v1_20")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
pub const GST_VIDEO_FORMAT_ABGR64_BE: GstVideoFormat = 109;
#[cfg(feature = "v1_22")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
pub const GST_VIDEO_FORMAT_NV12_16L32S: GstVideoFormat = 110;
#[cfg(feature = "v1_22")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
pub const GST_VIDEO_FORMAT_NV12_8L128: GstVideoFormat = 111;
#[cfg(feature = "v1_22")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
pub const GST_VIDEO_FORMAT_NV12_10BE_8L128: GstVideoFormat = 112;
#[cfg(feature = "v1_24")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
pub const GST_VIDEO_FORMAT_NV12_10LE40_4L4: GstVideoFormat = 113;
#[cfg(feature = "v1_24")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
pub const GST_VIDEO_FORMAT_DMA_DRM: GstVideoFormat = 114;
#[cfg(feature = "v1_24")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
pub const GST_VIDEO_FORMAT_MT2110T: GstVideoFormat = 115;
#[cfg(feature = "v1_24")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
pub const GST_VIDEO_FORMAT_MT2110R: GstVideoFormat = 116;
#[cfg(feature = "v1_24")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
pub const GST_VIDEO_FORMAT_A422: GstVideoFormat = 117;
#[cfg(feature = "v1_24")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
pub const GST_VIDEO_FORMAT_A444: GstVideoFormat = 118;
#[cfg(feature = "v1_24")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
pub const GST_VIDEO_FORMAT_A444_12LE: GstVideoFormat = 119;
#[cfg(feature = "v1_24")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
pub const GST_VIDEO_FORMAT_A444_12BE: GstVideoFormat = 120;
#[cfg(feature = "v1_24")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
pub const GST_VIDEO_FORMAT_A422_12LE: GstVideoFormat = 121;
#[cfg(feature = "v1_24")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
pub const GST_VIDEO_FORMAT_A422_12BE: GstVideoFormat = 122;
#[cfg(feature = "v1_24")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
pub const GST_VIDEO_FORMAT_A420_12LE: GstVideoFormat = 123;
#[cfg(feature = "v1_24")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
pub const GST_VIDEO_FORMAT_A420_12BE: GstVideoFormat = 124;
#[cfg(feature = "v1_24")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
pub const GST_VIDEO_FORMAT_A444_16LE: GstVideoFormat = 125;
#[cfg(feature = "v1_24")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
pub const GST_VIDEO_FORMAT_A444_16BE: GstVideoFormat = 126;
#[cfg(feature = "v1_24")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
pub const GST_VIDEO_FORMAT_A422_16LE: GstVideoFormat = 127;
#[cfg(feature = "v1_24")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
pub const GST_VIDEO_FORMAT_A422_16BE: GstVideoFormat = 128;
#[cfg(feature = "v1_24")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
pub const GST_VIDEO_FORMAT_A420_16LE: GstVideoFormat = 129;
#[cfg(feature = "v1_24")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
pub const GST_VIDEO_FORMAT_A420_16BE: GstVideoFormat = 130;
#[cfg(feature = "v1_24")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
pub const GST_VIDEO_FORMAT_GBR_16LE: GstVideoFormat = 131;
#[cfg(feature = "v1_24")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
pub const GST_VIDEO_FORMAT_GBR_16BE: GstVideoFormat = 132;
#[cfg(feature = "v1_24")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
pub const GST_VIDEO_FORMAT_RBGA: GstVideoFormat = 133;
#[cfg(feature = "v1_26")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
pub const GST_VIDEO_FORMAT_Y216_LE: GstVideoFormat = 134;
#[cfg(feature = "v1_26")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
pub const GST_VIDEO_FORMAT_Y216_BE: GstVideoFormat = 135;
#[cfg(feature = "v1_26")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
pub const GST_VIDEO_FORMAT_Y416_LE: GstVideoFormat = 136;
#[cfg(feature = "v1_26")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
pub const GST_VIDEO_FORMAT_Y416_BE: GstVideoFormat = 137;
#[cfg(feature = "v1_26")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
pub const GST_VIDEO_FORMAT_GRAY10_LE16: GstVideoFormat = 138;
#[cfg(feature = "v1_28")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_28")))]
pub const GST_VIDEO_FORMAT_NV16_10LE40: GstVideoFormat = 139;
#[cfg(feature = "v1_28")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_28")))]
pub const GST_VIDEO_FORMAT_BGR10x2_LE: GstVideoFormat = 140;
#[cfg(feature = "v1_28")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_28")))]
pub const GST_VIDEO_FORMAT_RGB10x2_LE: GstVideoFormat = 141;

pub type GstVideoGLTextureOrientation = c_int;
pub const GST_VIDEO_GL_TEXTURE_ORIENTATION_X_NORMAL_Y_NORMAL: GstVideoGLTextureOrientation = 0;
pub const GST_VIDEO_GL_TEXTURE_ORIENTATION_X_NORMAL_Y_FLIP: GstVideoGLTextureOrientation = 1;
pub const GST_VIDEO_GL_TEXTURE_ORIENTATION_X_FLIP_Y_NORMAL: GstVideoGLTextureOrientation = 2;
pub const GST_VIDEO_GL_TEXTURE_ORIENTATION_X_FLIP_Y_FLIP: GstVideoGLTextureOrientation = 3;

pub type GstVideoGLTextureType = c_int;
pub const GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE: GstVideoGLTextureType = 0;
pub const GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA: GstVideoGLTextureType = 1;
pub const GST_VIDEO_GL_TEXTURE_TYPE_RGB16: GstVideoGLTextureType = 2;
pub const GST_VIDEO_GL_TEXTURE_TYPE_RGB: GstVideoGLTextureType = 3;
pub const GST_VIDEO_GL_TEXTURE_TYPE_RGBA: GstVideoGLTextureType = 4;
pub const GST_VIDEO_GL_TEXTURE_TYPE_R: GstVideoGLTextureType = 5;
pub const GST_VIDEO_GL_TEXTURE_TYPE_RG: GstVideoGLTextureType = 6;

pub type GstVideoGammaMode = c_int;
pub const GST_VIDEO_GAMMA_MODE_NONE: GstVideoGammaMode = 0;
pub const GST_VIDEO_GAMMA_MODE_REMAP: GstVideoGammaMode = 1;

pub type GstVideoInterlaceMode = c_int;
pub const GST_VIDEO_INTERLACE_MODE_PROGRESSIVE: GstVideoInterlaceMode = 0;
pub const GST_VIDEO_INTERLACE_MODE_INTERLEAVED: GstVideoInterlaceMode = 1;
pub const GST_VIDEO_INTERLACE_MODE_MIXED: GstVideoInterlaceMode = 2;
pub const GST_VIDEO_INTERLACE_MODE_FIELDS: GstVideoInterlaceMode = 3;
pub const GST_VIDEO_INTERLACE_MODE_ALTERNATE: GstVideoInterlaceMode = 4;

pub type GstVideoMatrixMode = c_int;
pub const GST_VIDEO_MATRIX_MODE_FULL: GstVideoMatrixMode = 0;
pub const GST_VIDEO_MATRIX_MODE_INPUT_ONLY: GstVideoMatrixMode = 1;
pub const GST_VIDEO_MATRIX_MODE_OUTPUT_ONLY: GstVideoMatrixMode = 2;
pub const GST_VIDEO_MATRIX_MODE_NONE: GstVideoMatrixMode = 3;

pub type GstVideoMultiviewFramePacking = c_int;
pub const GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE: GstVideoMultiviewFramePacking = -1;
pub const GST_VIDEO_MULTIVIEW_FRAME_PACKING_MONO: GstVideoMultiviewFramePacking = 0;
pub const GST_VIDEO_MULTIVIEW_FRAME_PACKING_LEFT: GstVideoMultiviewFramePacking = 1;
pub const GST_VIDEO_MULTIVIEW_FRAME_PACKING_RIGHT: GstVideoMultiviewFramePacking = 2;
pub const GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE: GstVideoMultiviewFramePacking = 3;
pub const GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE_QUINCUNX: GstVideoMultiviewFramePacking =
    4;
pub const GST_VIDEO_MULTIVIEW_FRAME_PACKING_COLUMN_INTERLEAVED: GstVideoMultiviewFramePacking = 5;
pub const GST_VIDEO_MULTIVIEW_FRAME_PACKING_ROW_INTERLEAVED: GstVideoMultiviewFramePacking = 6;
pub const GST_VIDEO_MULTIVIEW_FRAME_PACKING_TOP_BOTTOM: GstVideoMultiviewFramePacking = 7;
pub const GST_VIDEO_MULTIVIEW_FRAME_PACKING_CHECKERBOARD: GstVideoMultiviewFramePacking = 8;

pub type GstVideoMultiviewMode = c_int;
pub const GST_VIDEO_MULTIVIEW_MODE_NONE: GstVideoMultiviewMode = -1;
pub const GST_VIDEO_MULTIVIEW_MODE_MONO: GstVideoMultiviewMode = 0;
pub const GST_VIDEO_MULTIVIEW_MODE_LEFT: GstVideoMultiviewMode = 1;
pub const GST_VIDEO_MULTIVIEW_MODE_RIGHT: GstVideoMultiviewMode = 2;
pub const GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE: GstVideoMultiviewMode = 3;
pub const GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX: GstVideoMultiviewMode = 4;
pub const GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED: GstVideoMultiviewMode = 5;
pub const GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED: GstVideoMultiviewMode = 6;
pub const GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM: GstVideoMultiviewMode = 7;
pub const GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD: GstVideoMultiviewMode = 8;
pub const GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME: GstVideoMultiviewMode = 32;
pub const GST_VIDEO_MULTIVIEW_MODE_MULTIVIEW_FRAME_BY_FRAME: GstVideoMultiviewMode = 33;
pub const GST_VIDEO_MULTIVIEW_MODE_SEPARATED: GstVideoMultiviewMode = 34;

pub type GstVideoOrientationMethod = c_int;
pub const GST_VIDEO_ORIENTATION_IDENTITY: GstVideoOrientationMethod = 0;
pub const GST_VIDEO_ORIENTATION_90R: GstVideoOrientationMethod = 1;
pub const GST_VIDEO_ORIENTATION_180: GstVideoOrientationMethod = 2;
pub const GST_VIDEO_ORIENTATION_90L: GstVideoOrientationMethod = 3;
pub const GST_VIDEO_ORIENTATION_HORIZ: GstVideoOrientationMethod = 4;
pub const GST_VIDEO_ORIENTATION_VERT: GstVideoOrientationMethod = 5;
pub const GST_VIDEO_ORIENTATION_UL_LR: GstVideoOrientationMethod = 6;
pub const GST_VIDEO_ORIENTATION_UR_LL: GstVideoOrientationMethod = 7;
pub const GST_VIDEO_ORIENTATION_AUTO: GstVideoOrientationMethod = 8;
pub const GST_VIDEO_ORIENTATION_CUSTOM: GstVideoOrientationMethod = 9;

pub type GstVideoPrimariesMode = c_int;
pub const GST_VIDEO_PRIMARIES_MODE_NONE: GstVideoPrimariesMode = 0;
pub const GST_VIDEO_PRIMARIES_MODE_MERGE_ONLY: GstVideoPrimariesMode = 1;
pub const GST_VIDEO_PRIMARIES_MODE_FAST: GstVideoPrimariesMode = 2;

pub type GstVideoResamplerMethod = c_int;
pub const GST_VIDEO_RESAMPLER_METHOD_NEAREST: GstVideoResamplerMethod = 0;
pub const GST_VIDEO_RESAMPLER_METHOD_LINEAR: GstVideoResamplerMethod = 1;
pub const GST_VIDEO_RESAMPLER_METHOD_CUBIC: GstVideoResamplerMethod = 2;
pub const GST_VIDEO_RESAMPLER_METHOD_SINC: GstVideoResamplerMethod = 3;
pub const GST_VIDEO_RESAMPLER_METHOD_LANCZOS: GstVideoResamplerMethod = 4;

pub type GstVideoTileMode = c_int;
pub const GST_VIDEO_TILE_MODE_UNKNOWN: GstVideoTileMode = 0;
pub const GST_VIDEO_TILE_MODE_ZFLIPZ_2X2: GstVideoTileMode = 65536;
#[cfg(feature = "v1_18")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
pub const GST_VIDEO_TILE_MODE_LINEAR: GstVideoTileMode = 131072;

pub type GstVideoTileType = c_int;
pub const GST_VIDEO_TILE_TYPE_INDEXED: GstVideoTileType = 0;

pub type GstVideoTransferFunction = c_int;
pub const GST_VIDEO_TRANSFER_UNKNOWN: GstVideoTransferFunction = 0;
pub const GST_VIDEO_TRANSFER_GAMMA10: GstVideoTransferFunction = 1;
pub const GST_VIDEO_TRANSFER_GAMMA18: GstVideoTransferFunction = 2;
pub const GST_VIDEO_TRANSFER_GAMMA20: GstVideoTransferFunction = 3;
pub const GST_VIDEO_TRANSFER_GAMMA22: GstVideoTransferFunction = 4;
pub const GST_VIDEO_TRANSFER_BT709: GstVideoTransferFunction = 5;
pub const GST_VIDEO_TRANSFER_SMPTE240M: GstVideoTransferFunction = 6;
pub const GST_VIDEO_TRANSFER_SRGB: GstVideoTransferFunction = 7;
pub const GST_VIDEO_TRANSFER_GAMMA28: GstVideoTransferFunction = 8;
pub const GST_VIDEO_TRANSFER_LOG100: GstVideoTransferFunction = 9;
pub const GST_VIDEO_TRANSFER_LOG316: GstVideoTransferFunction = 10;
pub const GST_VIDEO_TRANSFER_BT2020_12: GstVideoTransferFunction = 11;
pub const GST_VIDEO_TRANSFER_ADOBERGB: GstVideoTransferFunction = 12;
pub const GST_VIDEO_TRANSFER_BT2020_10: GstVideoTransferFunction = 13;
pub const GST_VIDEO_TRANSFER_SMPTE2084: GstVideoTransferFunction = 14;
pub const GST_VIDEO_TRANSFER_ARIB_STD_B67: GstVideoTransferFunction = 15;
#[cfg(feature = "v1_18")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
pub const GST_VIDEO_TRANSFER_BT601: GstVideoTransferFunction = 16;

pub type GstVideoVBIParserResult = c_int;
pub const GST_VIDEO_VBI_PARSER_RESULT_DONE: GstVideoVBIParserResult = 0;
pub const GST_VIDEO_VBI_PARSER_RESULT_OK: GstVideoVBIParserResult = 1;
pub const GST_VIDEO_VBI_PARSER_RESULT_ERROR: GstVideoVBIParserResult = 2;

// Constants
pub const GST_BUFFER_POOL_OPTION_VIDEO_AFFINE_TRANSFORMATION_META: &[u8] =
    b"GstBufferPoolOptionVideoAffineTransformation\0";
pub const GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT: &[u8] = b"GstBufferPoolOptionVideoAlignment\0";
pub const GST_BUFFER_POOL_OPTION_VIDEO_GL_TEXTURE_UPLOAD_META: &[u8] =
    b"GstBufferPoolOptionVideoGLTextureUploadMeta\0";
pub const GST_BUFFER_POOL_OPTION_VIDEO_META: &[u8] = b"GstBufferPoolOptionVideoMeta\0";
pub const GST_CAPS_FEATURE_FORMAT_INTERLACED: &[u8] = b"format:Interlaced\0";
pub const GST_CAPS_FEATURE_META_GST_VIDEO_AFFINE_TRANSFORMATION_META: &[u8] =
    b"meta:GstVideoAffineTransformation\0";
pub const GST_CAPS_FEATURE_META_GST_VIDEO_GL_TEXTURE_UPLOAD_META: &[u8] =
    b"meta:GstVideoGLTextureUploadMeta\0";
pub const GST_CAPS_FEATURE_META_GST_VIDEO_META: &[u8] = b"meta:GstVideoMeta\0";
pub const GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION: &[u8] =
    b"meta:GstVideoOverlayComposition\0";
pub const GST_META_TAG_VIDEO_COLORSPACE_STR: &[u8] = b"colorspace\0";
pub const GST_META_TAG_VIDEO_ORIENTATION_STR: &[u8] = b"orientation\0";
pub const GST_META_TAG_VIDEO_SIZE_STR: &[u8] = b"size\0";
pub const GST_META_TAG_VIDEO_STR: &[u8] = b"video\0";
pub const GST_VIDEO_COLORIMETRY_BT2020: &[u8] = b"bt2020\0";
pub const GST_VIDEO_COLORIMETRY_BT2020_10: &[u8] = b"bt2020-10\0";
pub const GST_VIDEO_COLORIMETRY_BT2100_HLG: &[u8] = b"bt2100-hlg\0";
pub const GST_VIDEO_COLORIMETRY_BT2100_PQ: &[u8] = b"bt2100-pq\0";
pub const GST_VIDEO_COLORIMETRY_BT601: &[u8] = b"bt601\0";
pub const GST_VIDEO_COLORIMETRY_BT709: &[u8] = b"bt709\0";
pub const GST_VIDEO_COLORIMETRY_SMPTE240M: &[u8] = b"smpte240m\0";
pub const GST_VIDEO_COLORIMETRY_SRGB: &[u8] = b"sRGB\0";
pub const GST_VIDEO_COMP_A: c_int = 3;
pub const GST_VIDEO_COMP_B: c_int = 2;
pub const GST_VIDEO_COMP_G: c_int = 1;
pub const GST_VIDEO_COMP_INDEX: c_int = 0;
pub const GST_VIDEO_COMP_PALETTE: c_int = 1;
pub const GST_VIDEO_COMP_R: c_int = 0;
pub const GST_VIDEO_COMP_U: c_int = 1;
pub const GST_VIDEO_COMP_V: c_int = 2;
pub const GST_VIDEO_COMP_Y: c_int = 0;
pub const GST_VIDEO_CONVERTER_OPT_ALPHA_MODE: &[u8] = b"GstVideoConverter.alpha-mode\0";
pub const GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE: &[u8] = b"GstVideoConverter.alpha-value\0";
pub const GST_VIDEO_CONVERTER_OPT_ASYNC_TASKS: &[u8] = b"GstVideoConverter.async-tasks\0";
pub const GST_VIDEO_CONVERTER_OPT_BORDER_ARGB: &[u8] = b"GstVideoConverter.border-argb\0";
pub const GST_VIDEO_CONVERTER_OPT_CHROMA_MODE: &[u8] = b"GstVideoConverter.chroma-mode\0";
pub const GST_VIDEO_CONVERTER_OPT_CHROMA_RESAMPLER_METHOD: &[u8] =
    b"GstVideoConverter.chroma-resampler-method\0";
pub const GST_VIDEO_CONVERTER_OPT_DEST_HEIGHT: &[u8] = b"GstVideoConverter.dest-height\0";
pub const GST_VIDEO_CONVERTER_OPT_DEST_WIDTH: &[u8] = b"GstVideoConverter.dest-width\0";
pub const GST_VIDEO_CONVERTER_OPT_DEST_X: &[u8] = b"GstVideoConverter.dest-x\0";
pub const GST_VIDEO_CONVERTER_OPT_DEST_Y: &[u8] = b"GstVideoConverter.dest-y\0";
pub const GST_VIDEO_CONVERTER_OPT_DITHER_METHOD: &[u8] = b"GstVideoConverter.dither-method\0";
pub const GST_VIDEO_CONVERTER_OPT_DITHER_QUANTIZATION: &[u8] =
    b"GstVideoConverter.dither-quantization\0";
pub const GST_VIDEO_CONVERTER_OPT_FILL_BORDER: &[u8] = b"GstVideoConverter.fill-border\0";
pub const GST_VIDEO_CONVERTER_OPT_GAMMA_MODE: &[u8] = b"GstVideoConverter.gamma-mode\0";
pub const GST_VIDEO_CONVERTER_OPT_MATRIX_MODE: &[u8] = b"GstVideoConverter.matrix-mode\0";
pub const GST_VIDEO_CONVERTER_OPT_PRIMARIES_MODE: &[u8] = b"GstVideoConverter.primaries-mode\0";
pub const GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD: &[u8] = b"GstVideoConverter.resampler-method\0";
pub const GST_VIDEO_CONVERTER_OPT_RESAMPLER_TAPS: &[u8] = b"GstVideoConverter.resampler-taps\0";
pub const GST_VIDEO_CONVERTER_OPT_SRC_HEIGHT: &[u8] = b"GstVideoConverter.src-height\0";
pub const GST_VIDEO_CONVERTER_OPT_SRC_WIDTH: &[u8] = b"GstVideoConverter.src-width\0";
pub const GST_VIDEO_CONVERTER_OPT_SRC_X: &[u8] = b"GstVideoConverter.src-x\0";
pub const GST_VIDEO_CONVERTER_OPT_SRC_Y: &[u8] = b"GstVideoConverter.src-y\0";
pub const GST_VIDEO_CONVERTER_OPT_THREADS: &[u8] = b"GstVideoConverter.threads\0";
pub const GST_VIDEO_DECODER_MAX_ERRORS: c_int = -1;
pub const GST_VIDEO_DECODER_SINK_NAME: &[u8] = b"sink\0";
pub const GST_VIDEO_DECODER_SRC_NAME: &[u8] = b"src\0";
pub const GST_VIDEO_ENCODER_SINK_NAME: &[u8] = b"sink\0";
pub const GST_VIDEO_ENCODER_SRC_NAME: &[u8] = b"src\0";
pub const GST_VIDEO_FORMAT_LAST: c_int = 142;
pub const GST_VIDEO_FPS_RANGE: &[u8] = b"(fraction) [ 0, max ]\0";
pub const GST_VIDEO_MAX_COMPONENTS: c_int = 4;
pub const GST_VIDEO_MAX_PLANES: c_int = 4;
pub const GST_VIDEO_RESAMPLER_OPT_CUBIC_B: &[u8] = b"GstVideoResampler.cubic-b\0";
pub const GST_VIDEO_RESAMPLER_OPT_CUBIC_C: &[u8] = b"GstVideoResampler.cubic-c\0";
pub const GST_VIDEO_RESAMPLER_OPT_ENVELOPE: &[u8] = b"GstVideoResampler.envelope\0";
pub const GST_VIDEO_RESAMPLER_OPT_MAX_TAPS: &[u8] = b"GstVideoResampler.max-taps\0";
pub const GST_VIDEO_RESAMPLER_OPT_SHARPEN: &[u8] = b"GstVideoResampler.sharpen\0";
pub const GST_VIDEO_RESAMPLER_OPT_SHARPNESS: &[u8] = b"GstVideoResampler.sharpness\0";
pub const GST_VIDEO_SCALER_OPT_DITHER_METHOD: &[u8] = b"GstVideoScaler.dither-method\0";
pub const GST_VIDEO_SIZE_RANGE: &[u8] = b"(int) [ 1, max ]\0";
pub const GST_VIDEO_TILE_TYPE_MASK: c_int = 65535;
pub const GST_VIDEO_TILE_TYPE_SHIFT: c_int = 16;
pub const GST_VIDEO_TILE_X_TILES_MASK: c_int = 65535;
pub const GST_VIDEO_TILE_Y_TILES_SHIFT: c_int = 16;

// Flags
pub type GstNavigationModifierType = c_uint;
pub const GST_NAVIGATION_MODIFIER_NONE: GstNavigationModifierType = 0;
pub const GST_NAVIGATION_MODIFIER_SHIFT_MASK: GstNavigationModifierType = 1;
pub const GST_NAVIGATION_MODIFIER_LOCK_MASK: GstNavigationModifierType = 2;
pub const GST_NAVIGATION_MODIFIER_CONTROL_MASK: GstNavigationModifierType = 4;
pub const GST_NAVIGATION_MODIFIER_MOD1_MASK: GstNavigationModifierType = 8;
pub const GST_NAVIGATION_MODIFIER_MOD2_MASK: GstNavigationModifierType = 16;
pub const GST_NAVIGATION_MODIFIER_MOD3_MASK: GstNavigationModifierType = 32;
pub const GST_NAVIGATION_MODIFIER_MOD4_MASK: GstNavigationModifierType = 64;
pub const GST_NAVIGATION_MODIFIER_MOD5_MASK: GstNavigationModifierType = 128;
pub const GST_NAVIGATION_MODIFIER_BUTTON1_MASK: GstNavigationModifierType = 256;
pub const GST_NAVIGATION_MODIFIER_BUTTON2_MASK: GstNavigationModifierType = 512;
pub const GST_NAVIGATION_MODIFIER_BUTTON3_MASK: GstNavigationModifierType = 1024;
pub const GST_NAVIGATION_MODIFIER_BUTTON4_MASK: GstNavigationModifierType = 2048;
pub const GST_NAVIGATION_MODIFIER_BUTTON5_MASK: GstNavigationModifierType = 4096;
pub const GST_NAVIGATION_MODIFIER_SUPER_MASK: GstNavigationModifierType = 67108864;
pub const GST_NAVIGATION_MODIFIER_HYPER_MASK: GstNavigationModifierType = 134217728;
pub const GST_NAVIGATION_MODIFIER_META_MASK: GstNavigationModifierType = 268435456;
pub const GST_NAVIGATION_MODIFIER_MASK: GstNavigationModifierType = 469770239;

pub type GstVideoBufferFlags = c_uint;
pub const GST_VIDEO_BUFFER_FLAG_INTERLACED: GstVideoBufferFlags = 1048576;
pub const GST_VIDEO_BUFFER_FLAG_TFF: GstVideoBufferFlags = 2097152;
pub const GST_VIDEO_BUFFER_FLAG_RFF: GstVideoBufferFlags = 4194304;
pub const GST_VIDEO_BUFFER_FLAG_ONEFIELD: GstVideoBufferFlags = 8388608;
pub const GST_VIDEO_BUFFER_FLAG_MULTIPLE_VIEW: GstVideoBufferFlags = 16777216;
pub const GST_VIDEO_BUFFER_FLAG_FIRST_IN_BUNDLE: GstVideoBufferFlags = 33554432;
pub const GST_VIDEO_BUFFER_FLAG_TOP_FIELD: GstVideoBufferFlags = 10485760;
pub const GST_VIDEO_BUFFER_FLAG_BOTTOM_FIELD: GstVideoBufferFlags = 8388608;
pub const GST_VIDEO_BUFFER_FLAG_MARKER: GstVideoBufferFlags = 512;
pub const GST_VIDEO_BUFFER_FLAG_LAST: GstVideoBufferFlags = 268435456;

pub type GstVideoChromaFlags = c_uint;
pub const GST_VIDEO_CHROMA_FLAG_NONE: GstVideoChromaFlags = 0;
pub const GST_VIDEO_CHROMA_FLAG_INTERLACED: GstVideoChromaFlags = 1;

pub type GstVideoChromaSite = c_uint;
pub const GST_VIDEO_CHROMA_SITE_UNKNOWN: GstVideoChromaSite = 0;
pub const GST_VIDEO_CHROMA_SITE_NONE: GstVideoChromaSite = 1;
pub const GST_VIDEO_CHROMA_SITE_H_COSITED: GstVideoChromaSite = 2;
pub const GST_VIDEO_CHROMA_SITE_V_COSITED: GstVideoChromaSite = 4;
pub const GST_VIDEO_CHROMA_SITE_ALT_LINE: GstVideoChromaSite = 8;
pub const GST_VIDEO_CHROMA_SITE_COSITED: GstVideoChromaSite = 6;
pub const GST_VIDEO_CHROMA_SITE_JPEG: GstVideoChromaSite = 1;
pub const GST_VIDEO_CHROMA_SITE_MPEG2: GstVideoChromaSite = 2;
pub const GST_VIDEO_CHROMA_SITE_DV: GstVideoChromaSite = 14;

pub type GstVideoCodecFrameFlags = c_uint;
pub const GST_VIDEO_CODEC_FRAME_FLAG_DECODE_ONLY: GstVideoCodecFrameFlags = 1;
pub const GST_VIDEO_CODEC_FRAME_FLAG_SYNC_POINT: GstVideoCodecFrameFlags = 2;
pub const GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME: GstVideoCodecFrameFlags = 4;
pub const GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME_HEADERS: GstVideoCodecFrameFlags = 8;
#[cfg(feature = "v1_20")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
pub const GST_VIDEO_CODEC_FRAME_FLAG_CORRUPTED: GstVideoCodecFrameFlags = 16;

pub type GstVideoDecoderRequestSyncPointFlags = c_uint;
pub const GST_VIDEO_DECODER_REQUEST_SYNC_POINT_DISCARD_INPUT: GstVideoDecoderRequestSyncPointFlags =
    1;
pub const GST_VIDEO_DECODER_REQUEST_SYNC_POINT_CORRUPT_OUTPUT:
    GstVideoDecoderRequestSyncPointFlags = 2;

pub type GstVideoDitherFlags = c_uint;
pub const GST_VIDEO_DITHER_FLAG_NONE: GstVideoDitherFlags = 0;
pub const GST_VIDEO_DITHER_FLAG_INTERLACED: GstVideoDitherFlags = 1;
pub const GST_VIDEO_DITHER_FLAG_QUANTIZE: GstVideoDitherFlags = 2;

pub type GstVideoFlags = c_uint;
pub const GST_VIDEO_FLAG_NONE: GstVideoFlags = 0;
pub const GST_VIDEO_FLAG_VARIABLE_FPS: GstVideoFlags = 1;
pub const GST_VIDEO_FLAG_PREMULTIPLIED_ALPHA: GstVideoFlags = 2;

pub type GstVideoFormatFlags = c_uint;
pub const GST_VIDEO_FORMAT_FLAG_YUV: GstVideoFormatFlags = 1;
pub const GST_VIDEO_FORMAT_FLAG_RGB: GstVideoFormatFlags = 2;
pub const GST_VIDEO_FORMAT_FLAG_GRAY: GstVideoFormatFlags = 4;
pub const GST_VIDEO_FORMAT_FLAG_ALPHA: GstVideoFormatFlags = 8;
pub const GST_VIDEO_FORMAT_FLAG_LE: GstVideoFormatFlags = 16;
pub const GST_VIDEO_FORMAT_FLAG_PALETTE: GstVideoFormatFlags = 32;
pub const GST_VIDEO_FORMAT_FLAG_COMPLEX: GstVideoFormatFlags = 64;
pub const GST_VIDEO_FORMAT_FLAG_UNPACK: GstVideoFormatFlags = 128;
pub const GST_VIDEO_FORMAT_FLAG_TILED: GstVideoFormatFlags = 256;
#[cfg(feature = "v1_22")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
pub const GST_VIDEO_FORMAT_FLAG_SUBTILES: GstVideoFormatFlags = 512;

pub type GstVideoFrameFlags = c_uint;
pub const GST_VIDEO_FRAME_FLAG_NONE: GstVideoFrameFlags = 0;
pub const GST_VIDEO_FRAME_FLAG_INTERLACED: GstVideoFrameFlags = 1;
pub const GST_VIDEO_FRAME_FLAG_TFF: GstVideoFrameFlags = 2;
pub const GST_VIDEO_FRAME_FLAG_RFF: GstVideoFrameFlags = 4;
pub const GST_VIDEO_FRAME_FLAG_ONEFIELD: GstVideoFrameFlags = 8;
pub const GST_VIDEO_FRAME_FLAG_MULTIPLE_VIEW: GstVideoFrameFlags = 16;
pub const GST_VIDEO_FRAME_FLAG_FIRST_IN_BUNDLE: GstVideoFrameFlags = 32;
pub const GST_VIDEO_FRAME_FLAG_TOP_FIELD: GstVideoFrameFlags = 10;
pub const GST_VIDEO_FRAME_FLAG_BOTTOM_FIELD: GstVideoFrameFlags = 8;

pub type GstVideoFrameMapFlags = c_uint;
pub const GST_VIDEO_FRAME_MAP_FLAG_NO_REF: GstVideoFrameMapFlags = 65536;
pub const GST_VIDEO_FRAME_MAP_FLAG_LAST: GstVideoFrameMapFlags = 16777216;

pub type GstVideoMultiviewFlags = c_uint;
pub const GST_VIDEO_MULTIVIEW_FLAGS_NONE: GstVideoMultiviewFlags = 0;
pub const GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST: GstVideoMultiviewFlags = 1;
pub const GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLIPPED: GstVideoMultiviewFlags = 2;
pub const GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLOPPED: GstVideoMultiviewFlags = 4;
pub const GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLIPPED: GstVideoMultiviewFlags = 8;
pub const GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLOPPED: GstVideoMultiviewFlags = 16;
pub const GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT: GstVideoMultiviewFlags = 16384;
pub const GST_VIDEO_MULTIVIEW_FLAGS_MIXED_MONO: GstVideoMultiviewFlags = 32768;

pub type GstVideoOverlayFormatFlags = c_uint;
pub const GST_VIDEO_OVERLAY_FORMAT_FLAG_NONE: GstVideoOverlayFormatFlags = 0;
pub const GST_VIDEO_OVERLAY_FORMAT_FLAG_PREMULTIPLIED_ALPHA: GstVideoOverlayFormatFlags = 1;
pub const GST_VIDEO_OVERLAY_FORMAT_FLAG_GLOBAL_ALPHA: GstVideoOverlayFormatFlags = 2;

pub type GstVideoPackFlags = c_uint;
pub const GST_VIDEO_PACK_FLAG_NONE: GstVideoPackFlags = 0;
pub const GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE: GstVideoPackFlags = 1;
pub const GST_VIDEO_PACK_FLAG_INTERLACED: GstVideoPackFlags = 2;

pub type GstVideoResamplerFlags = c_uint;
pub const GST_VIDEO_RESAMPLER_FLAG_NONE: GstVideoResamplerFlags = 0;
pub const GST_VIDEO_RESAMPLER_FLAG_HALF_TAPS: GstVideoResamplerFlags = 1;

pub type GstVideoScalerFlags = c_uint;
pub const GST_VIDEO_SCALER_FLAG_NONE: GstVideoScalerFlags = 0;
pub const GST_VIDEO_SCALER_FLAG_INTERLACED: GstVideoScalerFlags = 1;

pub type GstVideoTimeCodeFlags = c_uint;
pub const GST_VIDEO_TIME_CODE_FLAGS_NONE: GstVideoTimeCodeFlags = 0;
pub const GST_VIDEO_TIME_CODE_FLAGS_DROP_FRAME: GstVideoTimeCodeFlags = 1;
pub const GST_VIDEO_TIME_CODE_FLAGS_INTERLACED: GstVideoTimeCodeFlags = 2;

// Unions
#[derive(Copy, Clone)]
#[repr(C)]
pub union GstVideoCodecFrame_abidata {
    pub ABI: GstVideoCodecFrame_abidata_ABI,
    pub padding: [gpointer; 20],
}

impl ::std::fmt::Debug for GstVideoCodecFrame_abidata {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoCodecFrame_abidata @ {self:p}"))
            .field("ABI", unsafe { &self.ABI })
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub union GstVideoInfo_ABI {
    pub abi: GstVideoInfo_ABI_abi,
    pub _gst_reserved: [gpointer; 4],
}

impl ::std::fmt::Debug for GstVideoInfo_ABI {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoInfo_ABI @ {self:p}"))
            .field("abi", unsafe { &self.abi })
            .finish()
    }
}

// Callbacks
pub type GstVideoAffineTransformationGetMatrix =
    Option<unsafe extern "C" fn(*mut GstVideoAffineTransformationMeta, *mut c_float) -> gboolean>;
pub type GstVideoConvertSampleCallback =
    Option<unsafe extern "C" fn(*mut gst::GstSample, *mut glib::GError, gpointer)>;
pub type GstVideoFormatPack = Option<
    unsafe extern "C" fn(
        *const GstVideoFormatInfo,
        GstVideoPackFlags,
        gpointer,
        c_int,
        *mut gpointer,
        *const c_int,
        GstVideoChromaSite,
        c_int,
        c_int,
    ),
>;
pub type GstVideoFormatUnpack = Option<
    unsafe extern "C" fn(
        *const GstVideoFormatInfo,
        GstVideoPackFlags,
        gpointer,
        *const gpointer,
        *const c_int,
        c_int,
        c_int,
        c_int,
    ),
>;
pub type GstVideoGLTextureUpload =
    Option<unsafe extern "C" fn(*mut GstVideoGLTextureUploadMeta, *mut c_uint) -> gboolean>;

// Records
#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstAncillaryMeta {
    pub meta: gst::GstMeta,
    pub field: GstAncillaryMetaField,
    pub c_not_y_channel: gboolean,
    pub line: u16,
    pub offset: u16,
    pub DID: u16,
    pub SDID_block_number: u16,
    pub data_count: u16,
    pub data: *mut u16,
    pub checksum: u16,
}

impl ::std::fmt::Debug for GstAncillaryMeta {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstAncillaryMeta @ {self:p}"))
            .field("meta", &self.meta)
            .field("field", &self.field)
            .field("c_not_y_channel", &self.c_not_y_channel)
            .field("line", &self.line)
            .field("offset", &self.offset)
            .field("DID", &self.DID)
            .field("SDID_block_number", &self.SDID_block_number)
            .field("data_count", &self.data_count)
            .field("data", &self.data)
            .field("checksum", &self.checksum)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstColorBalanceChannelClass {
    pub parent: gobject::GObjectClass,
    pub value_changed: Option<unsafe extern "C" fn(*mut GstColorBalanceChannel, c_int)>,
    pub _gst_reserved: [gpointer; 4],
}

impl ::std::fmt::Debug for GstColorBalanceChannelClass {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstColorBalanceChannelClass @ {self:p}"))
            .field("parent", &self.parent)
            .field("value_changed", &self.value_changed)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstColorBalanceInterface {
    pub iface: gobject::GTypeInterface,
    pub list_channels: Option<unsafe extern "C" fn(*mut GstColorBalance) -> *const glib::GList>,
    pub set_value:
        Option<unsafe extern "C" fn(*mut GstColorBalance, *mut GstColorBalanceChannel, c_int)>,
    pub get_value:
        Option<unsafe extern "C" fn(*mut GstColorBalance, *mut GstColorBalanceChannel) -> c_int>,
    pub get_balance_type: Option<unsafe extern "C" fn(*mut GstColorBalance) -> GstColorBalanceType>,
    pub value_changed:
        Option<unsafe extern "C" fn(*mut GstColorBalance, *mut GstColorBalanceChannel, c_int)>,
    pub _gst_reserved: [gpointer; 4],
}

impl ::std::fmt::Debug for GstColorBalanceInterface {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstColorBalanceInterface @ {self:p}"))
            .field("iface", &self.iface)
            .field("list_channels", &self.list_channels)
            .field("set_value", &self.set_value)
            .field("get_value", &self.get_value)
            .field("get_balance_type", &self.get_balance_type)
            .field("value_changed", &self.value_changed)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstNavigationInterface {
    pub iface: gobject::GTypeInterface,
    pub send_event: Option<unsafe extern "C" fn(*mut GstNavigation, *mut gst::GstStructure)>,
    pub send_event_simple: Option<unsafe extern "C" fn(*mut GstNavigation, *mut gst::GstEvent)>,
}

impl ::std::fmt::Debug for GstNavigationInterface {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstNavigationInterface @ {self:p}"))
            .field("iface", &self.iface)
            .field("send_event", &self.send_event)
            .field("send_event_simple", &self.send_event_simple)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoAFDMeta {
    pub meta: gst::GstMeta,
    pub field: u8,
    pub spec: GstVideoAFDSpec,
    pub afd: GstVideoAFDValue,
}

impl ::std::fmt::Debug for GstVideoAFDMeta {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoAFDMeta @ {self:p}"))
            .field("meta", &self.meta)
            .field("field", &self.field)
            .field("spec", &self.spec)
            .field("afd", &self.afd)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoAffineTransformationMeta {
    pub meta: gst::GstMeta,
    pub matrix: [c_float; 16],
}

impl ::std::fmt::Debug for GstVideoAffineTransformationMeta {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoAffineTransformationMeta @ {self:p}"))
            .field("meta", &self.meta)
            .field("matrix", &self.matrix)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoAggregatorClass {
    pub parent_class: gst_base::GstAggregatorClass,
    pub update_caps: Option<
        unsafe extern "C" fn(*mut GstVideoAggregator, *mut gst::GstCaps) -> *mut gst::GstCaps,
    >,
    pub aggregate_frames: Option<
        unsafe extern "C" fn(
            *mut GstVideoAggregator,
            *mut *mut gst::GstBuffer,
        ) -> gst::GstFlowReturn,
    >,
    pub create_output_buffer: Option<
        unsafe extern "C" fn(
            *mut GstVideoAggregator,
            *mut *mut gst::GstBuffer,
        ) -> gst::GstFlowReturn,
    >,
    pub find_best_format: Option<
        unsafe extern "C" fn(
            *mut GstVideoAggregator,
            *mut gst::GstCaps,
            *mut GstVideoInfo,
            *mut gboolean,
        ),
    >,
    pub _gst_reserved: [gpointer; 20],
}

impl ::std::fmt::Debug for GstVideoAggregatorClass {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoAggregatorClass @ {self:p}"))
            .field("update_caps", &self.update_caps)
            .field("aggregate_frames", &self.aggregate_frames)
            .field("create_output_buffer", &self.create_output_buffer)
            .field("find_best_format", &self.find_best_format)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoAggregatorConvertPadClass {
    pub parent_class: GstVideoAggregatorPadClass,
    pub create_conversion_info: Option<
        unsafe extern "C" fn(
            *mut GstVideoAggregatorConvertPad,
            *mut GstVideoAggregator,
            *mut GstVideoInfo,
        ),
    >,
    pub _gst_reserved: [gpointer; 4],
}

impl ::std::fmt::Debug for GstVideoAggregatorConvertPadClass {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoAggregatorConvertPadClass @ {self:p}"))
            .field("parent_class", &self.parent_class)
            .field("create_conversion_info", &self.create_conversion_info)
            .finish()
    }
}

#[repr(C)]
#[allow(dead_code)]
pub struct _GstVideoAggregatorConvertPadPrivate {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

pub type GstVideoAggregatorConvertPadPrivate = _GstVideoAggregatorConvertPadPrivate;

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoAggregatorPadClass {
    pub parent_class: gst_base::GstAggregatorPadClass,
    pub update_conversion_info: Option<unsafe extern "C" fn(*mut GstVideoAggregatorPad)>,
    pub prepare_frame: Option<
        unsafe extern "C" fn(
            *mut GstVideoAggregatorPad,
            *mut GstVideoAggregator,
            *mut gst::GstBuffer,
            *mut GstVideoFrame,
        ) -> gboolean,
    >,
    pub clean_frame: Option<
        unsafe extern "C" fn(
            *mut GstVideoAggregatorPad,
            *mut GstVideoAggregator,
            *mut GstVideoFrame,
        ),
    >,
    pub prepare_frame_start: Option<
        unsafe extern "C" fn(
            *mut GstVideoAggregatorPad,
            *mut GstVideoAggregator,
            *mut gst::GstBuffer,
            *mut GstVideoFrame,
        ),
    >,
    pub prepare_frame_finish: Option<
        unsafe extern "C" fn(
            *mut GstVideoAggregatorPad,
            *mut GstVideoAggregator,
            *mut GstVideoFrame,
        ),
    >,
    pub _gst_reserved: [gpointer; 18],
}

impl ::std::fmt::Debug for GstVideoAggregatorPadClass {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoAggregatorPadClass @ {self:p}"))
            .field("parent_class", &self.parent_class)
            .field("update_conversion_info", &self.update_conversion_info)
            .field("prepare_frame", &self.prepare_frame)
            .field("clean_frame", &self.clean_frame)
            .field("prepare_frame_start", &self.prepare_frame_start)
            .field("prepare_frame_finish", &self.prepare_frame_finish)
            .field("_gst_reserved", &self._gst_reserved)
            .finish()
    }
}

#[repr(C)]
#[allow(dead_code)]
pub struct _GstVideoAggregatorPadPrivate {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

pub type GstVideoAggregatorPadPrivate = _GstVideoAggregatorPadPrivate;

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoAggregatorParallelConvertPadClass {
    pub parent_class: GstVideoAggregatorConvertPadClass,
    pub _gst_reserved: [gpointer; 4],
}

impl ::std::fmt::Debug for GstVideoAggregatorParallelConvertPadClass {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!(
            "GstVideoAggregatorParallelConvertPadClass @ {self:p}"
        ))
        .field("parent_class", &self.parent_class)
        .finish()
    }
}

#[repr(C)]
#[allow(dead_code)]
pub struct _GstVideoAggregatorPrivate {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

pub type GstVideoAggregatorPrivate = _GstVideoAggregatorPrivate;

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoAlignment {
    pub padding_top: c_uint,
    pub padding_bottom: c_uint,
    pub padding_left: c_uint,
    pub padding_right: c_uint,
    pub stride_align: [c_uint; 4],
}

impl ::std::fmt::Debug for GstVideoAlignment {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoAlignment @ {self:p}"))
            .field("padding_top", &self.padding_top)
            .field("padding_bottom", &self.padding_bottom)
            .field("padding_left", &self.padding_left)
            .field("padding_right", &self.padding_right)
            .field("stride_align", &self.stride_align)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoAncillary {
    pub DID: u8,
    pub SDID_block_number: u8,
    pub data_count: u8,
    pub data: [u8; 256],
    pub _gst_reserved: [gpointer; 4],
}

impl ::std::fmt::Debug for GstVideoAncillary {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoAncillary @ {self:p}"))
            .field("DID", &self.DID)
            .field("SDID_block_number", &self.SDID_block_number)
            .field("data_count", &self.data_count)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoBarMeta {
    pub meta: gst::GstMeta,
    pub field: u8,
    pub is_letterbox: gboolean,
    pub bar_data1: c_uint,
    pub bar_data2: c_uint,
}

impl ::std::fmt::Debug for GstVideoBarMeta {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoBarMeta @ {self:p}"))
            .field("meta", &self.meta)
            .field("field", &self.field)
            .field("is_letterbox", &self.is_letterbox)
            .field("bar_data1", &self.bar_data1)
            .field("bar_data2", &self.bar_data2)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoBufferPoolClass {
    pub parent_class: gst::GstBufferPoolClass,
}

impl ::std::fmt::Debug for GstVideoBufferPoolClass {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoBufferPoolClass @ {self:p}"))
            .field("parent_class", &self.parent_class)
            .finish()
    }
}

#[repr(C)]
#[allow(dead_code)]
pub struct _GstVideoBufferPoolPrivate {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

pub type GstVideoBufferPoolPrivate = _GstVideoBufferPoolPrivate;

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoCaptionMeta {
    pub meta: gst::GstMeta,
    pub caption_type: GstVideoCaptionType,
    pub data: *mut u8,
    pub size: size_t,
}

impl ::std::fmt::Debug for GstVideoCaptionMeta {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoCaptionMeta @ {self:p}"))
            .field("meta", &self.meta)
            .field("caption_type", &self.caption_type)
            .field("data", &self.data)
            .field("size", &self.size)
            .finish()
    }
}

#[repr(C)]
#[allow(dead_code)]
pub struct _GstVideoChromaResample {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

pub type GstVideoChromaResample = _GstVideoChromaResample;

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoCodecAlphaMeta {
    pub meta: gst::GstMeta,
    pub buffer: *mut gst::GstBuffer,
}

impl ::std::fmt::Debug for GstVideoCodecAlphaMeta {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoCodecAlphaMeta @ {self:p}"))
            .field("meta", &self.meta)
            .field("buffer", &self.buffer)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoCodecFrame {
    pub ref_count: c_int,
    pub flags: u32,
    pub system_frame_number: u32,
    pub decode_frame_number: u32,
    pub presentation_frame_number: u32,
    pub dts: gst::GstClockTime,
    pub pts: gst::GstClockTime,
    pub duration: gst::GstClockTime,
    pub distance_from_sync: c_int,
    pub input_buffer: *mut gst::GstBuffer,
    pub output_buffer: *mut gst::GstBuffer,
    pub deadline: gst::GstClockTime,
    pub events: *mut glib::GList,
    pub user_data: gpointer,
    pub user_data_destroy_notify: glib::GDestroyNotify,
    pub abidata: GstVideoCodecFrame_abidata,
}

impl ::std::fmt::Debug for GstVideoCodecFrame {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoCodecFrame @ {self:p}"))
            .field("system_frame_number", &self.system_frame_number)
            .field("dts", &self.dts)
            .field("pts", &self.pts)
            .field("duration", &self.duration)
            .field("distance_from_sync", &self.distance_from_sync)
            .field("input_buffer", &self.input_buffer)
            .field("output_buffer", &self.output_buffer)
            .field("deadline", &self.deadline)
            .field("abidata", &self.abidata)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoCodecFrame_abidata_ABI {
    pub ts: gst::GstClockTime,
    pub ts2: gst::GstClockTime,
    pub num_subframes: c_uint,
    pub subframes_processed: c_uint,
}

impl ::std::fmt::Debug for GstVideoCodecFrame_abidata_ABI {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoCodecFrame_abidata_ABI @ {self:p}"))
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoCodecState {
    pub ref_count: c_int,
    pub info: GstVideoInfo,
    pub caps: *mut gst::GstCaps,
    pub codec_data: *mut gst::GstBuffer,
    pub allocation_caps: *mut gst::GstCaps,
    pub mastering_display_info: *mut GstVideoMasteringDisplayInfo,
    pub content_light_level: *mut GstVideoContentLightLevel,
    pub padding: [gpointer; 17],
}

impl ::std::fmt::Debug for GstVideoCodecState {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoCodecState @ {self:p}"))
            .field("info", &self.info)
            .field("caps", &self.caps)
            .field("codec_data", &self.codec_data)
            .field("allocation_caps", &self.allocation_caps)
            .field("mastering_display_info", &self.mastering_display_info)
            .field("content_light_level", &self.content_light_level)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoColorPrimariesInfo {
    pub primaries: GstVideoColorPrimaries,
    pub Wx: c_double,
    pub Wy: c_double,
    pub Rx: c_double,
    pub Ry: c_double,
    pub Gx: c_double,
    pub Gy: c_double,
    pub Bx: c_double,
    pub By: c_double,
}

impl ::std::fmt::Debug for GstVideoColorPrimariesInfo {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoColorPrimariesInfo @ {self:p}"))
            .field("primaries", &self.primaries)
            .field("Wx", &self.Wx)
            .field("Wy", &self.Wy)
            .field("Rx", &self.Rx)
            .field("Ry", &self.Ry)
            .field("Gx", &self.Gx)
            .field("Gy", &self.Gy)
            .field("Bx", &self.Bx)
            .field("By", &self.By)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoColorimetry {
    pub range: GstVideoColorRange,
    pub matrix: GstVideoColorMatrix,
    pub transfer: GstVideoTransferFunction,
    pub primaries: GstVideoColorPrimaries,
}

impl ::std::fmt::Debug for GstVideoColorimetry {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoColorimetry @ {self:p}"))
            .field("range", &self.range)
            .field("matrix", &self.matrix)
            .field("transfer", &self.transfer)
            .field("primaries", &self.primaries)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoContentLightLevel {
    pub max_content_light_level: u16,
    pub max_frame_average_light_level: u16,
    pub _gst_reserved: [gpointer; 4],
}

impl ::std::fmt::Debug for GstVideoContentLightLevel {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoContentLightLevel @ {self:p}"))
            .field("max_content_light_level", &self.max_content_light_level)
            .field(
                "max_frame_average_light_level",
                &self.max_frame_average_light_level,
            )
            .finish()
    }
}

#[repr(C)]
#[allow(dead_code)]
pub struct _GstVideoConverter {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

pub type GstVideoConverter = _GstVideoConverter;

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoCropMeta {
    pub meta: gst::GstMeta,
    pub x: c_uint,
    pub y: c_uint,
    pub width: c_uint,
    pub height: c_uint,
}

impl ::std::fmt::Debug for GstVideoCropMeta {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoCropMeta @ {self:p}"))
            .field("meta", &self.meta)
            .field("x", &self.x)
            .field("y", &self.y)
            .field("width", &self.width)
            .field("height", &self.height)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoDecoderClass {
    pub element_class: gst::GstElementClass,
    pub open: Option<unsafe extern "C" fn(*mut GstVideoDecoder) -> gboolean>,
    pub close: Option<unsafe extern "C" fn(*mut GstVideoDecoder) -> gboolean>,
    pub start: Option<unsafe extern "C" fn(*mut GstVideoDecoder) -> gboolean>,
    pub stop: Option<unsafe extern "C" fn(*mut GstVideoDecoder) -> gboolean>,
    pub parse: Option<
        unsafe extern "C" fn(
            *mut GstVideoDecoder,
            *mut GstVideoCodecFrame,
            *mut gst_base::GstAdapter,
            gboolean,
        ) -> gst::GstFlowReturn,
    >,
    pub set_format:
        Option<unsafe extern "C" fn(*mut GstVideoDecoder, *mut GstVideoCodecState) -> gboolean>,
    pub reset: Option<unsafe extern "C" fn(*mut GstVideoDecoder, gboolean) -> gboolean>,
    pub finish: Option<unsafe extern "C" fn(*mut GstVideoDecoder) -> gst::GstFlowReturn>,
    pub handle_frame: Option<
        unsafe extern "C" fn(*mut GstVideoDecoder, *mut GstVideoCodecFrame) -> gst::GstFlowReturn,
    >,
    pub sink_event:
        Option<unsafe extern "C" fn(*mut GstVideoDecoder, *mut gst::GstEvent) -> gboolean>,
    pub src_event:
        Option<unsafe extern "C" fn(*mut GstVideoDecoder, *mut gst::GstEvent) -> gboolean>,
    pub negotiate: Option<unsafe extern "C" fn(*mut GstVideoDecoder) -> gboolean>,
    pub decide_allocation:
        Option<unsafe extern "C" fn(*mut GstVideoDecoder, *mut gst::GstQuery) -> gboolean>,
    pub propose_allocation:
        Option<unsafe extern "C" fn(*mut GstVideoDecoder, *mut gst::GstQuery) -> gboolean>,
    pub flush: Option<unsafe extern "C" fn(*mut GstVideoDecoder) -> gboolean>,
    pub sink_query:
        Option<unsafe extern "C" fn(*mut GstVideoDecoder, *mut gst::GstQuery) -> gboolean>,
    pub src_query:
        Option<unsafe extern "C" fn(*mut GstVideoDecoder, *mut gst::GstQuery) -> gboolean>,
    pub getcaps:
        Option<unsafe extern "C" fn(*mut GstVideoDecoder, *mut gst::GstCaps) -> *mut gst::GstCaps>,
    pub drain: Option<unsafe extern "C" fn(*mut GstVideoDecoder) -> gst::GstFlowReturn>,
    pub transform_meta: Option<
        unsafe extern "C" fn(
            *mut GstVideoDecoder,
            *mut GstVideoCodecFrame,
            *mut gst::GstMeta,
        ) -> gboolean,
    >,
    pub handle_missing_data: Option<
        unsafe extern "C" fn(
            *mut GstVideoDecoder,
            gst::GstClockTime,
            gst::GstClockTime,
        ) -> gboolean,
    >,
    pub padding: [gpointer; 13],
}

impl ::std::fmt::Debug for GstVideoDecoderClass {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoDecoderClass @ {self:p}"))
            .field("open", &self.open)
            .field("close", &self.close)
            .field("start", &self.start)
            .field("stop", &self.stop)
            .field("parse", &self.parse)
            .field("set_format", &self.set_format)
            .field("reset", &self.reset)
            .field("finish", &self.finish)
            .field("handle_frame", &self.handle_frame)
            .field("sink_event", &self.sink_event)
            .field("src_event", &self.src_event)
            .field("negotiate", &self.negotiate)
            .field("decide_allocation", &self.decide_allocation)
            .field("propose_allocation", &self.propose_allocation)
            .field("flush", &self.flush)
            .field("sink_query", &self.sink_query)
            .field("src_query", &self.src_query)
            .field("getcaps", &self.getcaps)
            .field("drain", &self.drain)
            .field("transform_meta", &self.transform_meta)
            .field("handle_missing_data", &self.handle_missing_data)
            .finish()
    }
}

#[repr(C)]
#[allow(dead_code)]
pub struct _GstVideoDecoderPrivate {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

pub type GstVideoDecoderPrivate = _GstVideoDecoderPrivate;

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoDirectionInterface {
    pub iface: gobject::GTypeInterface,
}

impl ::std::fmt::Debug for GstVideoDirectionInterface {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoDirectionInterface @ {self:p}"))
            .field("iface", &self.iface)
            .finish()
    }
}

#[repr(C)]
#[allow(dead_code)]
pub struct _GstVideoDither {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

pub type GstVideoDither = _GstVideoDither;

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoDmabufPoolClass {
    pub parent_class: GstVideoBufferPoolClass,
}

impl ::std::fmt::Debug for GstVideoDmabufPoolClass {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoDmabufPoolClass @ {self:p}"))
            .field("parent_class", &self.parent_class)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoEncoderClass {
    pub element_class: gst::GstElementClass,
    pub open: Option<unsafe extern "C" fn(*mut GstVideoEncoder) -> gboolean>,
    pub close: Option<unsafe extern "C" fn(*mut GstVideoEncoder) -> gboolean>,
    pub start: Option<unsafe extern "C" fn(*mut GstVideoEncoder) -> gboolean>,
    pub stop: Option<unsafe extern "C" fn(*mut GstVideoEncoder) -> gboolean>,
    pub set_format:
        Option<unsafe extern "C" fn(*mut GstVideoEncoder, *mut GstVideoCodecState) -> gboolean>,
    pub handle_frame: Option<
        unsafe extern "C" fn(*mut GstVideoEncoder, *mut GstVideoCodecFrame) -> gst::GstFlowReturn,
    >,
    pub reset: Option<unsafe extern "C" fn(*mut GstVideoEncoder, gboolean) -> gboolean>,
    pub finish: Option<unsafe extern "C" fn(*mut GstVideoEncoder) -> gst::GstFlowReturn>,
    pub pre_push: Option<
        unsafe extern "C" fn(*mut GstVideoEncoder, *mut GstVideoCodecFrame) -> gst::GstFlowReturn,
    >,
    pub getcaps:
        Option<unsafe extern "C" fn(*mut GstVideoEncoder, *mut gst::GstCaps) -> *mut gst::GstCaps>,
    pub sink_event:
        Option<unsafe extern "C" fn(*mut GstVideoEncoder, *mut gst::GstEvent) -> gboolean>,
    pub src_event:
        Option<unsafe extern "C" fn(*mut GstVideoEncoder, *mut gst::GstEvent) -> gboolean>,
    pub negotiate: Option<unsafe extern "C" fn(*mut GstVideoEncoder) -> gboolean>,
    pub decide_allocation:
        Option<unsafe extern "C" fn(*mut GstVideoEncoder, *mut gst::GstQuery) -> gboolean>,
    pub propose_allocation:
        Option<unsafe extern "C" fn(*mut GstVideoEncoder, *mut gst::GstQuery) -> gboolean>,
    pub flush: Option<unsafe extern "C" fn(*mut GstVideoEncoder) -> gboolean>,
    pub sink_query:
        Option<unsafe extern "C" fn(*mut GstVideoEncoder, *mut gst::GstQuery) -> gboolean>,
    pub src_query:
        Option<unsafe extern "C" fn(*mut GstVideoEncoder, *mut gst::GstQuery) -> gboolean>,
    pub transform_meta: Option<
        unsafe extern "C" fn(
            *mut GstVideoEncoder,
            *mut GstVideoCodecFrame,
            *mut gst::GstMeta,
        ) -> gboolean,
    >,
    pub _gst_reserved: [gpointer; 16],
}

impl ::std::fmt::Debug for GstVideoEncoderClass {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoEncoderClass @ {self:p}"))
            .field("open", &self.open)
            .field("close", &self.close)
            .field("start", &self.start)
            .field("stop", &self.stop)
            .field("set_format", &self.set_format)
            .field("handle_frame", &self.handle_frame)
            .field("reset", &self.reset)
            .field("finish", &self.finish)
            .field("pre_push", &self.pre_push)
            .field("getcaps", &self.getcaps)
            .field("sink_event", &self.sink_event)
            .field("src_event", &self.src_event)
            .field("negotiate", &self.negotiate)
            .field("decide_allocation", &self.decide_allocation)
            .field("propose_allocation", &self.propose_allocation)
            .field("flush", &self.flush)
            .field("sink_query", &self.sink_query)
            .field("src_query", &self.src_query)
            .field("transform_meta", &self.transform_meta)
            .finish()
    }
}

#[repr(C)]
#[allow(dead_code)]
pub struct _GstVideoEncoderPrivate {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

pub type GstVideoEncoderPrivate = _GstVideoEncoderPrivate;

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoFilterClass {
    pub parent_class: gst_base::GstBaseTransformClass,
    pub set_info: Option<
        unsafe extern "C" fn(
            *mut GstVideoFilter,
            *mut gst::GstCaps,
            *mut GstVideoInfo,
            *mut gst::GstCaps,
            *mut GstVideoInfo,
        ) -> gboolean,
    >,
    pub transform_frame: Option<
        unsafe extern "C" fn(
            *mut GstVideoFilter,
            *mut GstVideoFrame,
            *mut GstVideoFrame,
        ) -> gst::GstFlowReturn,
    >,
    pub transform_frame_ip:
        Option<unsafe extern "C" fn(*mut GstVideoFilter, *mut GstVideoFrame) -> gst::GstFlowReturn>,
    pub _gst_reserved: [gpointer; 4],
}

impl ::std::fmt::Debug for GstVideoFilterClass {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoFilterClass @ {self:p}"))
            .field("parent_class", &self.parent_class)
            .field("set_info", &self.set_info)
            .field("transform_frame", &self.transform_frame)
            .field("transform_frame_ip", &self.transform_frame_ip)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoFormatInfo {
    pub format: GstVideoFormat,
    pub name: *const c_char,
    pub description: *const c_char,
    pub flags: GstVideoFormatFlags,
    pub bits: c_uint,
    pub n_components: c_uint,
    pub shift: [c_uint; 4],
    pub depth: [c_uint; 4],
    pub pixel_stride: [c_int; 4],
    pub n_planes: c_uint,
    pub plane: [c_uint; 4],
    pub poffset: [c_uint; 4],
    pub w_sub: [c_uint; 4],
    pub h_sub: [c_uint; 4],
    pub unpack_format: GstVideoFormat,
    pub unpack_func: GstVideoFormatUnpack,
    pub pack_lines: c_int,
    pub pack_func: GstVideoFormatPack,
    pub tile_mode: GstVideoTileMode,
    pub tile_ws: c_uint,
    pub tile_hs: c_uint,
    pub tile_info: [GstVideoTileInfo; 4],
}

impl ::std::fmt::Debug for GstVideoFormatInfo {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoFormatInfo @ {self:p}"))
            .field("format", &self.format)
            .field("name", &self.name)
            .field("description", &self.description)
            .field("flags", &self.flags)
            .field("bits", &self.bits)
            .field("n_components", &self.n_components)
            .field("shift", &self.shift)
            .field("depth", &self.depth)
            .field("pixel_stride", &self.pixel_stride)
            .field("n_planes", &self.n_planes)
            .field("plane", &self.plane)
            .field("poffset", &self.poffset)
            .field("w_sub", &self.w_sub)
            .field("h_sub", &self.h_sub)
            .field("unpack_format", &self.unpack_format)
            .field("unpack_func", &self.unpack_func)
            .field("pack_lines", &self.pack_lines)
            .field("pack_func", &self.pack_func)
            .field("tile_mode", &self.tile_mode)
            .field("tile_ws", &self.tile_ws)
            .field("tile_hs", &self.tile_hs)
            .field("tile_info", &self.tile_info)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoFrame {
    pub info: GstVideoInfo,
    pub flags: GstVideoFrameFlags,
    pub buffer: *mut gst::GstBuffer,
    pub meta: gpointer,
    pub id: c_int,
    pub data: [gpointer; 4],
    pub map: [gst::GstMapInfo; 4],
    pub _gst_reserved: [gpointer; 4],
}

impl ::std::fmt::Debug for GstVideoFrame {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoFrame @ {self:p}"))
            .field("info", &self.info)
            .field("flags", &self.flags)
            .field("buffer", &self.buffer)
            .field("meta", &self.meta)
            .field("id", &self.id)
            .field("data", &self.data)
            .field("map", &self.map)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoGLTextureUploadMeta {
    pub meta: gst::GstMeta,
    pub texture_orientation: GstVideoGLTextureOrientation,
    pub n_textures: c_uint,
    pub texture_type: [GstVideoGLTextureType; 4],
    pub buffer: *mut gst::GstBuffer,
    pub upload: GstVideoGLTextureUpload,
    pub user_data: gpointer,
    pub user_data_copy: gobject::GBoxedCopyFunc,
    pub user_data_free: gobject::GBoxedFreeFunc,
}

impl ::std::fmt::Debug for GstVideoGLTextureUploadMeta {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoGLTextureUploadMeta @ {self:p}"))
            .field("meta", &self.meta)
            .field("texture_orientation", &self.texture_orientation)
            .field("n_textures", &self.n_textures)
            .field("texture_type", &self.texture_type)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoInfo {
    pub finfo: *const GstVideoFormatInfo,
    pub interlace_mode: GstVideoInterlaceMode,
    pub flags: GstVideoFlags,
    pub width: c_int,
    pub height: c_int,
    pub size: size_t,
    pub views: c_int,
    pub chroma_site: GstVideoChromaSite,
    pub colorimetry: GstVideoColorimetry,
    pub par_n: c_int,
    pub par_d: c_int,
    pub fps_n: c_int,
    pub fps_d: c_int,
    pub offset: [size_t; 4],
    pub stride: [c_int; 4],
    pub ABI: GstVideoInfo_ABI,
}

impl ::std::fmt::Debug for GstVideoInfo {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoInfo @ {self:p}"))
            .field("finfo", &self.finfo)
            .field("interlace_mode", &self.interlace_mode)
            .field("flags", &self.flags)
            .field("width", &self.width)
            .field("height", &self.height)
            .field("size", &self.size)
            .field("views", &self.views)
            .field("chroma_site", &self.chroma_site)
            .field("colorimetry", &self.colorimetry)
            .field("par_n", &self.par_n)
            .field("par_d", &self.par_d)
            .field("fps_n", &self.fps_n)
            .field("fps_d", &self.fps_d)
            .field("offset", &self.offset)
            .field("stride", &self.stride)
            .field("ABI", &self.ABI)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoInfoDmaDrm {
    pub vinfo: GstVideoInfo,
    pub drm_fourcc: u32,
    pub drm_modifier: u64,
    pub _gst_reserved: [u32; 20],
}

impl ::std::fmt::Debug for GstVideoInfoDmaDrm {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoInfoDmaDrm @ {self:p}"))
            .field("vinfo", &self.vinfo)
            .field("drm_fourcc", &self.drm_fourcc)
            .field("drm_modifier", &self.drm_modifier)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoInfo_ABI_abi {
    pub multiview_mode: GstVideoMultiviewMode,
    pub multiview_flags: GstVideoMultiviewFlags,
    pub field_order: GstVideoFieldOrder,
}

impl ::std::fmt::Debug for GstVideoInfo_ABI_abi {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoInfo_ABI_abi @ {self:p}"))
            .field("multiview_mode", &self.multiview_mode)
            .field("multiview_flags", &self.multiview_flags)
            .field("field_order", &self.field_order)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoMasteringDisplayInfo {
    pub display_primaries: [GstVideoMasteringDisplayInfoCoordinates; 3],
    pub white_point: GstVideoMasteringDisplayInfoCoordinates,
    pub max_display_mastering_luminance: u32,
    pub min_display_mastering_luminance: u32,
    pub _gst_reserved: [gpointer; 4],
}

impl ::std::fmt::Debug for GstVideoMasteringDisplayInfo {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoMasteringDisplayInfo @ {self:p}"))
            .field("display_primaries", &self.display_primaries)
            .field("white_point", &self.white_point)
            .field(
                "max_display_mastering_luminance",
                &self.max_display_mastering_luminance,
            )
            .field(
                "min_display_mastering_luminance",
                &self.min_display_mastering_luminance,
            )
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoMasteringDisplayInfoCoordinates {
    pub x: u16,
    pub y: u16,
}

impl ::std::fmt::Debug for GstVideoMasteringDisplayInfoCoordinates {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!(
            "GstVideoMasteringDisplayInfoCoordinates @ {self:p}"
        ))
        .field("x", &self.x)
        .field("y", &self.y)
        .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoMeta {
    pub meta: gst::GstMeta,
    pub buffer: *mut gst::GstBuffer,
    pub flags: GstVideoFrameFlags,
    pub format: GstVideoFormat,
    pub id: c_int,
    pub width: c_uint,
    pub height: c_uint,
    pub n_planes: c_uint,
    pub offset: [size_t; 4],
    pub stride: [c_int; 4],
    pub map: Option<
        unsafe extern "C" fn(
            *mut GstVideoMeta,
            c_uint,
            *mut gst::GstMapInfo,
            *mut gpointer,
            *mut c_int,
            gst::GstMapFlags,
        ) -> gboolean,
    >,
    pub unmap:
        Option<unsafe extern "C" fn(*mut GstVideoMeta, c_uint, *mut gst::GstMapInfo) -> gboolean>,
    pub alignment: GstVideoAlignment,
}

impl ::std::fmt::Debug for GstVideoMeta {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoMeta @ {self:p}"))
            .field("meta", &self.meta)
            .field("buffer", &self.buffer)
            .field("flags", &self.flags)
            .field("format", &self.format)
            .field("id", &self.id)
            .field("width", &self.width)
            .field("height", &self.height)
            .field("n_planes", &self.n_planes)
            .field("offset", &self.offset)
            .field("stride", &self.stride)
            .field("map", &self.map)
            .field("unmap", &self.unmap)
            .field("alignment", &self.alignment)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoMetaTransform {
    pub in_info: *mut GstVideoInfo,
    pub out_info: *mut GstVideoInfo,
}

impl ::std::fmt::Debug for GstVideoMetaTransform {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoMetaTransform @ {self:p}"))
            .field("in_info", &self.in_info)
            .field("out_info", &self.out_info)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoMetaTransformMatrix {
    pub in_info: *const GstVideoInfo,
    pub in_rectangle: GstVideoRectangle,
    pub out_info: *const GstVideoInfo,
    pub out_rectangle: GstVideoRectangle,
    pub matrix: [c_float; 9],
}

impl ::std::fmt::Debug for GstVideoMetaTransformMatrix {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoMetaTransformMatrix @ {self:p}"))
            .field("in_info", &self.in_info)
            .field("in_rectangle", &self.in_rectangle)
            .field("out_info", &self.out_info)
            .field("out_rectangle", &self.out_rectangle)
            .field("matrix", &self.matrix)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoOrientationInterface {
    pub iface: gobject::GTypeInterface,
    pub get_hflip: Option<unsafe extern "C" fn(*mut GstVideoOrientation, gboolean) -> gboolean>,
    pub get_vflip: Option<unsafe extern "C" fn(*mut GstVideoOrientation, gboolean) -> gboolean>,
    pub get_hcenter: Option<unsafe extern "C" fn(*mut GstVideoOrientation, c_int) -> gboolean>,
    pub get_vcenter: Option<unsafe extern "C" fn(*mut GstVideoOrientation, c_int) -> gboolean>,
    pub set_hflip: Option<unsafe extern "C" fn(*mut GstVideoOrientation, gboolean) -> gboolean>,
    pub set_vflip: Option<unsafe extern "C" fn(*mut GstVideoOrientation, gboolean) -> gboolean>,
    pub set_hcenter: Option<unsafe extern "C" fn(*mut GstVideoOrientation, c_int) -> gboolean>,
    pub set_vcenter: Option<unsafe extern "C" fn(*mut GstVideoOrientation, c_int) -> gboolean>,
}

impl ::std::fmt::Debug for GstVideoOrientationInterface {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoOrientationInterface @ {self:p}"))
            .field("iface", &self.iface)
            .field("get_hflip", &self.get_hflip)
            .field("get_vflip", &self.get_vflip)
            .field("get_hcenter", &self.get_hcenter)
            .field("get_vcenter", &self.get_vcenter)
            .field("set_hflip", &self.set_hflip)
            .field("set_vflip", &self.set_vflip)
            .field("set_hcenter", &self.set_hcenter)
            .field("set_vcenter", &self.set_vcenter)
            .finish()
    }
}

#[repr(C)]
#[allow(dead_code)]
pub struct GstVideoOverlayComposition {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

impl ::std::fmt::Debug for GstVideoOverlayComposition {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoOverlayComposition @ {self:p}"))
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoOverlayCompositionMeta {
    pub meta: gst::GstMeta,
    pub overlay: *mut GstVideoOverlayComposition,
}

impl ::std::fmt::Debug for GstVideoOverlayCompositionMeta {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoOverlayCompositionMeta @ {self:p}"))
            .field("meta", &self.meta)
            .field("overlay", &self.overlay)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoOverlayInterface {
    pub iface: gobject::GTypeInterface,
    pub expose: Option<unsafe extern "C" fn(*mut GstVideoOverlay)>,
    pub handle_events: Option<unsafe extern "C" fn(*mut GstVideoOverlay, gboolean)>,
    pub set_render_rectangle:
        Option<unsafe extern "C" fn(*mut GstVideoOverlay, c_int, c_int, c_int, c_int)>,
    pub set_window_handle: Option<unsafe extern "C" fn(*mut GstVideoOverlay, uintptr_t)>,
}

impl ::std::fmt::Debug for GstVideoOverlayInterface {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoOverlayInterface @ {self:p}"))
            .field("iface", &self.iface)
            .field("expose", &self.expose)
            .field("handle_events", &self.handle_events)
            .field("set_render_rectangle", &self.set_render_rectangle)
            .field("set_window_handle", &self.set_window_handle)
            .finish()
    }
}

#[repr(C)]
#[allow(dead_code)]
pub struct GstVideoOverlayRectangle {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

impl ::std::fmt::Debug for GstVideoOverlayRectangle {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoOverlayRectangle @ {self:p}"))
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoRectangle {
    pub x: c_int,
    pub y: c_int,
    pub w: c_int,
    pub h: c_int,
}

impl ::std::fmt::Debug for GstVideoRectangle {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoRectangle @ {self:p}"))
            .field("x", &self.x)
            .field("y", &self.y)
            .field("w", &self.w)
            .field("h", &self.h)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoRegionOfInterestMeta {
    pub meta: gst::GstMeta,
    pub roi_type: glib::GQuark,
    pub id: c_int,
    pub parent_id: c_int,
    pub x: c_uint,
    pub y: c_uint,
    pub w: c_uint,
    pub h: c_uint,
    pub params: *mut glib::GList,
}

impl ::std::fmt::Debug for GstVideoRegionOfInterestMeta {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoRegionOfInterestMeta @ {self:p}"))
            .field("meta", &self.meta)
            .field("roi_type", &self.roi_type)
            .field("id", &self.id)
            .field("parent_id", &self.parent_id)
            .field("x", &self.x)
            .field("y", &self.y)
            .field("w", &self.w)
            .field("h", &self.h)
            .field("params", &self.params)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoResampler {
    pub in_size: c_int,
    pub out_size: c_int,
    pub max_taps: c_uint,
    pub n_phases: c_uint,
    pub offset: *mut u32,
    pub phase: *mut u32,
    pub n_taps: *mut u32,
    pub taps: *mut c_double,
    pub _gst_reserved: [gpointer; 4],
}

impl ::std::fmt::Debug for GstVideoResampler {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoResampler @ {self:p}"))
            .field("in_size", &self.in_size)
            .field("out_size", &self.out_size)
            .field("max_taps", &self.max_taps)
            .field("n_phases", &self.n_phases)
            .field("offset", &self.offset)
            .field("phase", &self.phase)
            .field("n_taps", &self.n_taps)
            .field("taps", &self.taps)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoSEIUserDataUnregisteredMeta {
    pub meta: gst::GstMeta,
    pub uuid: [u8; 16],
    pub data: *mut u8,
    pub size: size_t,
}

impl ::std::fmt::Debug for GstVideoSEIUserDataUnregisteredMeta {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoSEIUserDataUnregisteredMeta @ {self:p}"))
            .field("meta", &self.meta)
            .field("uuid", &self.uuid)
            .field("data", &self.data)
            .field("size", &self.size)
            .finish()
    }
}

#[repr(C)]
#[allow(dead_code)]
pub struct _GstVideoScaler {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

pub type GstVideoScaler = _GstVideoScaler;

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoSinkClass {
    pub parent_class: gst_base::GstBaseSinkClass,
    pub show_frame:
        Option<unsafe extern "C" fn(*mut GstVideoSink, *mut gst::GstBuffer) -> gst::GstFlowReturn>,
    pub set_info: Option<
        unsafe extern "C" fn(*mut GstVideoSink, *mut gst::GstCaps, *const GstVideoInfo) -> gboolean,
    >,
    pub _gst_reserved: [gpointer; 3],
}

impl ::std::fmt::Debug for GstVideoSinkClass {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoSinkClass @ {self:p}"))
            .field("parent_class", &self.parent_class)
            .field("show_frame", &self.show_frame)
            .field("set_info", &self.set_info)
            .finish()
    }
}

#[repr(C)]
#[allow(dead_code)]
pub struct _GstVideoSinkPrivate {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

pub type GstVideoSinkPrivate = _GstVideoSinkPrivate;

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoTileInfo {
    pub width: c_uint,
    pub height: c_uint,
    pub stride: c_uint,
    pub size: c_uint,
    pub padding: [u32; 4],
}

impl ::std::fmt::Debug for GstVideoTileInfo {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoTileInfo @ {self:p}"))
            .field("width", &self.width)
            .field("height", &self.height)
            .field("stride", &self.stride)
            .field("size", &self.size)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoTimeCode {
    pub config: GstVideoTimeCodeConfig,
    pub hours: c_uint,
    pub minutes: c_uint,
    pub seconds: c_uint,
    pub frames: c_uint,
    pub field_count: c_uint,
}

impl ::std::fmt::Debug for GstVideoTimeCode {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoTimeCode @ {self:p}"))
            .field("config", &self.config)
            .field("hours", &self.hours)
            .field("minutes", &self.minutes)
            .field("seconds", &self.seconds)
            .field("frames", &self.frames)
            .field("field_count", &self.field_count)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoTimeCodeConfig {
    pub fps_n: c_uint,
    pub fps_d: c_uint,
    pub flags: GstVideoTimeCodeFlags,
    pub latest_daily_jam: *mut glib::GDateTime,
}

impl ::std::fmt::Debug for GstVideoTimeCodeConfig {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoTimeCodeConfig @ {self:p}"))
            .field("fps_n", &self.fps_n)
            .field("fps_d", &self.fps_d)
            .field("flags", &self.flags)
            .field("latest_daily_jam", &self.latest_daily_jam)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoTimeCodeInterval {
    pub hours: c_uint,
    pub minutes: c_uint,
    pub seconds: c_uint,
    pub frames: c_uint,
}

impl ::std::fmt::Debug for GstVideoTimeCodeInterval {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoTimeCodeInterval @ {self:p}"))
            .field("hours", &self.hours)
            .field("minutes", &self.minutes)
            .field("seconds", &self.seconds)
            .field("frames", &self.frames)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoTimeCodeMeta {
    pub meta: gst::GstMeta,
    pub tc: GstVideoTimeCode,
}

impl ::std::fmt::Debug for GstVideoTimeCodeMeta {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoTimeCodeMeta @ {self:p}"))
            .field("meta", &self.meta)
            .field("tc", &self.tc)
            .finish()
    }
}

#[repr(C)]
#[allow(dead_code)]
pub struct GstVideoVBIEncoder {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

impl ::std::fmt::Debug for GstVideoVBIEncoder {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoVBIEncoder @ {self:p}"))
            .finish()
    }
}

#[repr(C)]
#[allow(dead_code)]
pub struct GstVideoVBIParser {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

impl ::std::fmt::Debug for GstVideoVBIParser {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoVBIParser @ {self:p}"))
            .finish()
    }
}

// Classes
#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstColorBalanceChannel {
    pub parent: gobject::GObject,
    pub label: *mut c_char,
    pub min_value: c_int,
    pub max_value: c_int,
    pub _gst_reserved: [gpointer; 4],
}

impl ::std::fmt::Debug for GstColorBalanceChannel {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstColorBalanceChannel @ {self:p}"))
            .field("parent", &self.parent)
            .field("label", &self.label)
            .field("min_value", &self.min_value)
            .field("max_value", &self.max_value)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoAggregator {
    pub aggregator: gst_base::GstAggregator,
    pub info: GstVideoInfo,
    pub priv_: *mut GstVideoAggregatorPrivate,
    pub _gst_reserved: [gpointer; 20],
}

impl ::std::fmt::Debug for GstVideoAggregator {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoAggregator @ {self:p}"))
            .field("aggregator", &self.aggregator)
            .field("info", &self.info)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoAggregatorConvertPad {
    pub parent: GstVideoAggregatorPad,
    pub priv_: *mut GstVideoAggregatorConvertPadPrivate,
    pub _gst_reserved: [gpointer; 4],
}

impl ::std::fmt::Debug for GstVideoAggregatorConvertPad {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoAggregatorConvertPad @ {self:p}"))
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoAggregatorPad {
    pub parent: gst_base::GstAggregatorPad,
    pub info: GstVideoInfo,
    pub priv_: *mut GstVideoAggregatorPadPrivate,
    pub _gst_reserved: [gpointer; 4],
}

impl ::std::fmt::Debug for GstVideoAggregatorPad {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoAggregatorPad @ {self:p}"))
            .field("parent", &self.parent)
            .field("info", &self.info)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoAggregatorParallelConvertPad {
    pub parent_instance: GstVideoAggregatorConvertPad,
}

impl ::std::fmt::Debug for GstVideoAggregatorParallelConvertPad {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoAggregatorParallelConvertPad @ {self:p}"))
            .field("parent_instance", &self.parent_instance)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoBufferPool {
    pub bufferpool: gst::GstBufferPool,
    pub priv_: *mut GstVideoBufferPoolPrivate,
}

impl ::std::fmt::Debug for GstVideoBufferPool {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoBufferPool @ {self:p}"))
            .field("bufferpool", &self.bufferpool)
            .field("priv_", &self.priv_)
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoDecoder {
    pub element: gst::GstElement,
    pub sinkpad: *mut gst::GstPad,
    pub srcpad: *mut gst::GstPad,
    pub stream_lock: glib::GRecMutex,
    pub input_segment: gst::GstSegment,
    pub output_segment: gst::GstSegment,
    pub priv_: *mut GstVideoDecoderPrivate,
    pub padding: [gpointer; 20],
}

impl ::std::fmt::Debug for GstVideoDecoder {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoDecoder @ {self:p}"))
            .finish()
    }
}

#[repr(C)]
#[allow(dead_code)]
pub struct GstVideoDmabufPool {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

impl ::std::fmt::Debug for GstVideoDmabufPool {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoDmabufPool @ {self:p}"))
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoEncoder {
    pub element: gst::GstElement,
    pub sinkpad: *mut gst::GstPad,
    pub srcpad: *mut gst::GstPad,
    pub stream_lock: glib::GRecMutex,
    pub input_segment: gst::GstSegment,
    pub output_segment: gst::GstSegment,
    pub priv_: *mut GstVideoEncoderPrivate,
    pub padding: [gpointer; 20],
}

impl ::std::fmt::Debug for GstVideoEncoder {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoEncoder @ {self:p}"))
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoFilter {
    pub element: gst_base::GstBaseTransform,
    pub negotiated: gboolean,
    pub in_info: GstVideoInfo,
    pub out_info: GstVideoInfo,
    pub _gst_reserved: [gpointer; 4],
}

impl ::std::fmt::Debug for GstVideoFilter {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoFilter @ {self:p}"))
            .field("element", &self.element)
            .field("negotiated", &self.negotiated)
            .field("in_info", &self.in_info)
            .field("out_info", &self.out_info)
            .finish()
    }
}

#[repr(C)]
#[allow(dead_code)]
pub struct GstVideoMultiviewFlagsSet {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

impl ::std::fmt::Debug for GstVideoMultiviewFlagsSet {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoMultiviewFlagsSet @ {self:p}"))
            .finish()
    }
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GstVideoSink {
    pub element: gst_base::GstBaseSink,
    pub width: c_int,
    pub height: c_int,
    pub priv_: *mut GstVideoSinkPrivate,
    pub _gst_reserved: [gpointer; 4],
}

impl ::std::fmt::Debug for GstVideoSink {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GstVideoSink @ {self:p}"))
            .field("element", &self.element)
            .field("width", &self.width)
            .field("height", &self.height)
            .finish()
    }
}

// Interfaces
#[repr(C)]
#[allow(dead_code)]
pub struct GstColorBalance {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

impl ::std::fmt::Debug for GstColorBalance {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        write!(f, "GstColorBalance @ {self:p}")
    }
}

#[repr(C)]
#[allow(dead_code)]
pub struct GstNavigation {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

impl ::std::fmt::Debug for GstNavigation {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        write!(f, "GstNavigation @ {self:p}")
    }
}

#[repr(C)]
#[allow(dead_code)]
pub struct GstVideoDirection {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

impl ::std::fmt::Debug for GstVideoDirection {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        write!(f, "GstVideoDirection @ {self:p}")
    }
}

#[repr(C)]
#[allow(dead_code)]
pub struct GstVideoOrientation {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

impl ::std::fmt::Debug for GstVideoOrientation {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        write!(f, "GstVideoOrientation @ {self:p}")
    }
}

#[repr(C)]
#[allow(dead_code)]
pub struct GstVideoOverlay {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

impl ::std::fmt::Debug for GstVideoOverlay {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        write!(f, "GstVideoOverlay @ {self:p}")
    }
}

unsafe extern "C" {

    //=========================================================================
    // GstAncillaryMetaField
    //=========================================================================
    #[cfg(feature = "v1_24")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
    pub fn gst_ancillary_meta_field_get_type() -> GType;

    //=========================================================================
    // GstColorBalanceType
    //=========================================================================
    pub fn gst_color_balance_type_get_type() -> GType;

    //=========================================================================
    // GstNavigationCommand
    //=========================================================================
    pub fn gst_navigation_command_get_type() -> GType;

    //=========================================================================
    // GstNavigationEventType
    //=========================================================================
    pub fn gst_navigation_event_type_get_type() -> GType;

    //=========================================================================
    // GstNavigationMessageType
    //=========================================================================
    pub fn gst_navigation_message_type_get_type() -> GType;

    //=========================================================================
    // GstNavigationQueryType
    //=========================================================================
    pub fn gst_navigation_query_type_get_type() -> GType;

    //=========================================================================
    // GstVideoAFDSpec
    //=========================================================================
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_afd_spec_get_type() -> GType;

    //=========================================================================
    // GstVideoAFDValue
    //=========================================================================
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_afd_value_get_type() -> GType;

    //=========================================================================
    // GstVideoAlphaMode
    //=========================================================================
    pub fn gst_video_alpha_mode_get_type() -> GType;

    //=========================================================================
    // GstVideoAncillaryDID
    //=========================================================================
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_ancillary_did_get_type() -> GType;

    //=========================================================================
    // GstVideoAncillaryDID16
    //=========================================================================
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_ancillary_di_d16_get_type() -> GType;

    //=========================================================================
    // GstVideoCaptionType
    //=========================================================================
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_caption_type_get_type() -> GType;
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_caption_type_from_caps(caps: *const gst::GstCaps) -> GstVideoCaptionType;
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_caption_type_to_caps(type_: GstVideoCaptionType) -> *mut gst::GstCaps;

    //=========================================================================
    // GstVideoChromaMethod
    //=========================================================================
    pub fn gst_video_chroma_method_get_type() -> GType;

    //=========================================================================
    // GstVideoChromaMode
    //=========================================================================
    pub fn gst_video_chroma_mode_get_type() -> GType;

    //=========================================================================
    // GstVideoColorMatrix
    //=========================================================================
    pub fn gst_video_color_matrix_get_type() -> GType;
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_color_matrix_from_iso(value: c_uint) -> GstVideoColorMatrix;
    pub fn gst_video_color_matrix_get_Kr_Kb(
        matrix: GstVideoColorMatrix,
        Kr: *mut c_double,
        Kb: *mut c_double,
    ) -> gboolean;
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_color_matrix_to_iso(matrix: GstVideoColorMatrix) -> c_uint;

    //=========================================================================
    // GstVideoColorPrimaries
    //=========================================================================
    pub fn gst_video_color_primaries_get_type() -> GType;
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_color_primaries_from_iso(value: c_uint) -> GstVideoColorPrimaries;
    pub fn gst_video_color_primaries_get_info(
        primaries: GstVideoColorPrimaries,
    ) -> *const GstVideoColorPrimariesInfo;
    #[cfg(feature = "v1_22")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
    pub fn gst_video_color_primaries_is_equivalent(
        primaries: GstVideoColorPrimaries,
        other: GstVideoColorPrimaries,
    ) -> gboolean;
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_color_primaries_to_iso(primaries: GstVideoColorPrimaries) -> c_uint;

    //=========================================================================
    // GstVideoColorRange
    //=========================================================================
    pub fn gst_video_color_range_get_type() -> GType;
    pub fn gst_video_color_range_offsets(
        range: GstVideoColorRange,
        info: *const GstVideoFormatInfo,
        offset: *mut [c_int; 4],
        scale: *mut [c_int; 4],
    );

    //=========================================================================
    // GstVideoDitherMethod
    //=========================================================================
    pub fn gst_video_dither_method_get_type() -> GType;

    //=========================================================================
    // GstVideoFieldOrder
    //=========================================================================
    pub fn gst_video_field_order_get_type() -> GType;
    pub fn gst_video_field_order_from_string(order: *const c_char) -> GstVideoFieldOrder;
    pub fn gst_video_field_order_to_string(order: GstVideoFieldOrder) -> *const c_char;

    //=========================================================================
    // GstVideoFormat
    //=========================================================================
    pub fn gst_video_format_get_type() -> GType;
    pub fn gst_video_format_from_fourcc(fourcc: u32) -> GstVideoFormat;
    pub fn gst_video_format_from_masks(
        depth: c_int,
        bpp: c_int,
        endianness: c_int,
        red_mask: c_uint,
        green_mask: c_uint,
        blue_mask: c_uint,
        alpha_mask: c_uint,
    ) -> GstVideoFormat;
    pub fn gst_video_format_from_string(format: *const c_char) -> GstVideoFormat;
    pub fn gst_video_format_get_info(format: GstVideoFormat) -> *const GstVideoFormatInfo;
    pub fn gst_video_format_get_palette(format: GstVideoFormat, size: *mut size_t)
    -> gconstpointer;
    pub fn gst_video_format_to_fourcc(format: GstVideoFormat) -> u32;
    pub fn gst_video_format_to_string(format: GstVideoFormat) -> *const c_char;

    //=========================================================================
    // GstVideoGLTextureOrientation
    //=========================================================================
    #[cfg(feature = "v1_20")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
    pub fn gst_video_gl_texture_orientation_get_type() -> GType;

    //=========================================================================
    // GstVideoGLTextureType
    //=========================================================================
    #[cfg(feature = "v1_20")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
    pub fn gst_video_gl_texture_type_get_type() -> GType;

    //=========================================================================
    // GstVideoGammaMode
    //=========================================================================
    pub fn gst_video_gamma_mode_get_type() -> GType;

    //=========================================================================
    // GstVideoInterlaceMode
    //=========================================================================
    pub fn gst_video_interlace_mode_get_type() -> GType;
    pub fn gst_video_interlace_mode_from_string(mode: *const c_char) -> GstVideoInterlaceMode;
    pub fn gst_video_interlace_mode_to_string(mode: GstVideoInterlaceMode) -> *const c_char;

    //=========================================================================
    // GstVideoMatrixMode
    //=========================================================================
    pub fn gst_video_matrix_mode_get_type() -> GType;

    //=========================================================================
    // GstVideoMultiviewFramePacking
    //=========================================================================
    pub fn gst_video_multiview_frame_packing_get_type() -> GType;

    //=========================================================================
    // GstVideoMultiviewMode
    //=========================================================================
    pub fn gst_video_multiview_mode_get_type() -> GType;
    pub fn gst_video_multiview_mode_from_caps_string(
        caps_mview_mode: *const c_char,
    ) -> GstVideoMultiviewMode;
    pub fn gst_video_multiview_mode_to_caps_string(
        mview_mode: GstVideoMultiviewMode,
    ) -> *const c_char;

    //=========================================================================
    // GstVideoOrientationMethod
    //=========================================================================
    pub fn gst_video_orientation_method_get_type() -> GType;

    //=========================================================================
    // GstVideoPrimariesMode
    //=========================================================================
    pub fn gst_video_primaries_mode_get_type() -> GType;

    //=========================================================================
    // GstVideoResamplerMethod
    //=========================================================================
    pub fn gst_video_resampler_method_get_type() -> GType;

    //=========================================================================
    // GstVideoTileMode
    //=========================================================================
    pub fn gst_video_tile_mode_get_type() -> GType;

    //=========================================================================
    // GstVideoTileType
    //=========================================================================
    pub fn gst_video_tile_type_get_type() -> GType;

    //=========================================================================
    // GstVideoTransferFunction
    //=========================================================================
    pub fn gst_video_transfer_function_get_type() -> GType;
    #[cfg(feature = "v1_20")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
    pub fn gst_video_transfer_function_decode(
        func: GstVideoTransferFunction,
        val: c_double,
    ) -> c_double;
    #[cfg(feature = "v1_20")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
    pub fn gst_video_transfer_function_encode(
        func: GstVideoTransferFunction,
        val: c_double,
    ) -> c_double;
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_transfer_function_from_iso(value: c_uint) -> GstVideoTransferFunction;
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_transfer_function_is_equivalent(
        from_func: GstVideoTransferFunction,
        from_bpp: c_uint,
        to_func: GstVideoTransferFunction,
        to_bpp: c_uint,
    ) -> gboolean;
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_transfer_function_to_iso(func: GstVideoTransferFunction) -> c_uint;

    //=========================================================================
    // GstVideoVBIParserResult
    //=========================================================================
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_vbi_parser_result_get_type() -> GType;

    //=========================================================================
    // GstNavigationModifierType
    //=========================================================================
    #[cfg(feature = "v1_22")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
    pub fn gst_navigation_modifier_type_get_type() -> GType;

    //=========================================================================
    // GstVideoBufferFlags
    //=========================================================================
    pub fn gst_video_buffer_flags_get_type() -> GType;

    //=========================================================================
    // GstVideoChromaFlags
    //=========================================================================
    pub fn gst_video_chroma_flags_get_type() -> GType;

    //=========================================================================
    // GstVideoChromaSite
    //=========================================================================
    pub fn gst_video_chroma_site_get_type() -> GType;
    #[cfg(feature = "v1_20")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
    pub fn gst_video_chroma_site_from_string(s: *const c_char) -> GstVideoChromaSite;
    #[cfg(feature = "v1_20")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
    pub fn gst_video_chroma_site_to_string(site: GstVideoChromaSite) -> *mut c_char;

    //=========================================================================
    // GstVideoCodecFrameFlags
    //=========================================================================
    #[cfg(feature = "v1_20")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
    pub fn gst_video_codec_frame_flags_get_type() -> GType;

    //=========================================================================
    // GstVideoDecoderRequestSyncPointFlags
    //=========================================================================
    #[cfg(feature = "v1_20")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
    pub fn gst_video_decoder_request_sync_point_flags_get_type() -> GType;

    //=========================================================================
    // GstVideoDitherFlags
    //=========================================================================
    pub fn gst_video_dither_flags_get_type() -> GType;

    //=========================================================================
    // GstVideoFlags
    //=========================================================================
    pub fn gst_video_flags_get_type() -> GType;

    //=========================================================================
    // GstVideoFormatFlags
    //=========================================================================
    pub fn gst_video_format_flags_get_type() -> GType;

    //=========================================================================
    // GstVideoFrameFlags
    //=========================================================================
    pub fn gst_video_frame_flags_get_type() -> GType;

    //=========================================================================
    // GstVideoFrameMapFlags
    //=========================================================================
    pub fn gst_video_frame_map_flags_get_type() -> GType;

    //=========================================================================
    // GstVideoMultiviewFlags
    //=========================================================================
    pub fn gst_video_multiview_flags_get_type() -> GType;

    //=========================================================================
    // GstVideoOverlayFormatFlags
    //=========================================================================
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_overlay_format_flags_get_type() -> GType;

    //=========================================================================
    // GstVideoPackFlags
    //=========================================================================
    pub fn gst_video_pack_flags_get_type() -> GType;

    //=========================================================================
    // GstVideoResamplerFlags
    //=========================================================================
    pub fn gst_video_resampler_flags_get_type() -> GType;

    //=========================================================================
    // GstVideoScalerFlags
    //=========================================================================
    pub fn gst_video_scaler_flags_get_type() -> GType;

    //=========================================================================
    // GstVideoTimeCodeFlags
    //=========================================================================
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_time_code_flags_get_type() -> GType;

    //=========================================================================
    // GstAncillaryMeta
    //=========================================================================
    #[cfg(feature = "v1_24")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
    pub fn gst_ancillary_meta_get_info() -> *const gst::GstMetaInfo;

    //=========================================================================
    // GstVideoAFDMeta
    //=========================================================================
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_afd_meta_get_info() -> *const gst::GstMetaInfo;

    //=========================================================================
    // GstVideoAffineTransformationMeta
    //=========================================================================
    pub fn gst_video_affine_transformation_meta_apply_matrix(
        meta: *mut GstVideoAffineTransformationMeta,
        matrix: *const [c_float; 16],
    );
    pub fn gst_video_affine_transformation_meta_get_info() -> *const gst::GstMetaInfo;

    //=========================================================================
    // GstVideoAlignment
    //=========================================================================
    pub fn gst_video_alignment_reset(align: *mut GstVideoAlignment);

    //=========================================================================
    // GstVideoBarMeta
    //=========================================================================
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_bar_meta_get_info() -> *const gst::GstMetaInfo;

    //=========================================================================
    // GstVideoCaptionMeta
    //=========================================================================
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_caption_meta_get_info() -> *const gst::GstMetaInfo;

    //=========================================================================
    // GstVideoChromaResample
    //=========================================================================
    pub fn gst_video_chroma_resample_free(resample: *mut GstVideoChromaResample);
    pub fn gst_video_chroma_resample_get_info(
        resample: *mut GstVideoChromaResample,
        n_lines: *mut c_uint,
        offset: *mut c_int,
    );
    pub fn gst_video_chroma_resample_new(
        method: GstVideoChromaMethod,
        site: GstVideoChromaSite,
        flags: GstVideoChromaFlags,
        format: GstVideoFormat,
        h_factor: c_int,
        v_factor: c_int,
    ) -> *mut GstVideoChromaResample;

    //=========================================================================
    // GstVideoCodecAlphaMeta
    //=========================================================================
    #[cfg(feature = "v1_20")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
    pub fn gst_video_codec_alpha_meta_get_info() -> *const gst::GstMetaInfo;

    //=========================================================================
    // GstVideoCodecFrame
    //=========================================================================
    pub fn gst_video_codec_frame_get_type() -> GType;
    pub fn gst_video_codec_frame_get_user_data(frame: *mut GstVideoCodecFrame) -> gpointer;
    pub fn gst_video_codec_frame_ref(frame: *mut GstVideoCodecFrame) -> *mut GstVideoCodecFrame;
    pub fn gst_video_codec_frame_set_user_data(
        frame: *mut GstVideoCodecFrame,
        user_data: gpointer,
        notify: glib::GDestroyNotify,
    );
    pub fn gst_video_codec_frame_unref(frame: *mut GstVideoCodecFrame);

    //=========================================================================
    // GstVideoCodecState
    //=========================================================================
    pub fn gst_video_codec_state_get_type() -> GType;
    pub fn gst_video_codec_state_ref(state: *mut GstVideoCodecState) -> *mut GstVideoCodecState;
    pub fn gst_video_codec_state_unref(state: *mut GstVideoCodecState);

    //=========================================================================
    // GstVideoColorimetry
    //=========================================================================
    pub fn gst_video_colorimetry_from_string(
        cinfo: *mut GstVideoColorimetry,
        color: *const c_char,
    ) -> gboolean;
    pub fn gst_video_colorimetry_is_equal(
        cinfo: *const GstVideoColorimetry,
        other: *const GstVideoColorimetry,
    ) -> gboolean;
    #[cfg(feature = "v1_22")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
    pub fn gst_video_colorimetry_is_equivalent(
        cinfo: *const GstVideoColorimetry,
        bitdepth: c_uint,
        other: *const GstVideoColorimetry,
        other_bitdepth: c_uint,
    ) -> gboolean;
    pub fn gst_video_colorimetry_matches(
        cinfo: *const GstVideoColorimetry,
        color: *const c_char,
    ) -> gboolean;
    pub fn gst_video_colorimetry_to_string(cinfo: *const GstVideoColorimetry) -> *mut c_char;

    //=========================================================================
    // GstVideoContentLightLevel
    //=========================================================================
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_content_light_level_add_to_caps(
        linfo: *const GstVideoContentLightLevel,
        caps: *mut gst::GstCaps,
    ) -> gboolean;
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_content_light_level_from_caps(
        linfo: *mut GstVideoContentLightLevel,
        caps: *const gst::GstCaps,
    ) -> gboolean;
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_content_light_level_from_string(
        linfo: *mut GstVideoContentLightLevel,
        level: *const c_char,
    ) -> gboolean;
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_content_light_level_init(linfo: *mut GstVideoContentLightLevel);
    #[cfg(feature = "v1_20")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
    pub fn gst_video_content_light_level_is_equal(
        linfo: *const GstVideoContentLightLevel,
        other: *const GstVideoContentLightLevel,
    ) -> gboolean;
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_content_light_level_to_string(
        linfo: *const GstVideoContentLightLevel,
    ) -> *mut c_char;

    //=========================================================================
    // GstVideoConverter
    //=========================================================================
    pub fn gst_video_converter_frame(
        convert: *mut GstVideoConverter,
        src: *const GstVideoFrame,
        dest: *mut GstVideoFrame,
    );
    #[cfg(feature = "v1_20")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
    pub fn gst_video_converter_frame_finish(convert: *mut GstVideoConverter);
    pub fn gst_video_converter_free(convert: *mut GstVideoConverter);
    pub fn gst_video_converter_get_config(
        convert: *mut GstVideoConverter,
    ) -> *const gst::GstStructure;
    #[cfg(feature = "v1_22")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
    pub fn gst_video_converter_get_in_info(convert: *mut GstVideoConverter) -> *const GstVideoInfo;
    #[cfg(feature = "v1_22")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
    pub fn gst_video_converter_get_out_info(convert: *mut GstVideoConverter)
    -> *const GstVideoInfo;
    pub fn gst_video_converter_set_config(
        convert: *mut GstVideoConverter,
        config: *mut gst::GstStructure,
    ) -> gboolean;
    #[cfg(feature = "v1_28")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_28")))]
    pub fn gst_video_converter_transform_metas(
        convert: *mut GstVideoConverter,
        src: *mut gst::GstBuffer,
        dest: *mut gst::GstBuffer,
    ) -> gboolean;
    pub fn gst_video_converter_new(
        in_info: *const GstVideoInfo,
        out_info: *const GstVideoInfo,
        config: *mut gst::GstStructure,
    ) -> *mut GstVideoConverter;
    #[cfg(feature = "v1_20")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
    pub fn gst_video_converter_new_with_pool(
        in_info: *const GstVideoInfo,
        out_info: *const GstVideoInfo,
        config: *mut gst::GstStructure,
        pool: *mut gst::GstTaskPool,
    ) -> *mut GstVideoConverter;

    //=========================================================================
    // GstVideoCropMeta
    //=========================================================================
    pub fn gst_video_crop_meta_get_info() -> *const gst::GstMetaInfo;

    //=========================================================================
    // GstVideoDither
    //=========================================================================
    pub fn gst_video_dither_free(dither: *mut GstVideoDither);
    pub fn gst_video_dither_line(
        dither: *mut GstVideoDither,
        line: gpointer,
        x: c_uint,
        y: c_uint,
        width: c_uint,
    );
    pub fn gst_video_dither_new(
        method: GstVideoDitherMethod,
        flags: GstVideoDitherFlags,
        format: GstVideoFormat,
        quantizer: *mut [c_uint; 4],
        width: c_uint,
    ) -> *mut GstVideoDither;

    //=========================================================================
    // GstVideoFormatInfo
    //=========================================================================
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_format_info_component(
        info: *const GstVideoFormatInfo,
        plane: c_uint,
        components: *mut c_int,
    );
    #[cfg(feature = "v1_22")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
    pub fn gst_video_format_info_extrapolate_stride(
        finfo: *const GstVideoFormatInfo,
        plane: c_int,
        stride: c_int,
    ) -> c_int;

    //=========================================================================
    // GstVideoFrame
    //=========================================================================
    pub fn gst_video_frame_copy(dest: *mut GstVideoFrame, src: *const GstVideoFrame) -> gboolean;
    pub fn gst_video_frame_copy_plane(
        dest: *mut GstVideoFrame,
        src: *const GstVideoFrame,
        plane: c_uint,
    ) -> gboolean;
    pub fn gst_video_frame_unmap(frame: *mut GstVideoFrame);
    pub fn gst_video_frame_map(
        frame: *mut GstVideoFrame,
        info: *const GstVideoInfo,
        buffer: *mut gst::GstBuffer,
        flags: gst::GstMapFlags,
    ) -> gboolean;
    pub fn gst_video_frame_map_id(
        frame: *mut GstVideoFrame,
        info: *const GstVideoInfo,
        buffer: *mut gst::GstBuffer,
        id: c_int,
        flags: gst::GstMapFlags,
    ) -> gboolean;

    //=========================================================================
    // GstVideoGLTextureUploadMeta
    //=========================================================================
    pub fn gst_video_gl_texture_upload_meta_upload(
        meta: *mut GstVideoGLTextureUploadMeta,
        texture_id: *mut c_uint,
    ) -> gboolean;
    pub fn gst_video_gl_texture_upload_meta_get_info() -> *const gst::GstMetaInfo;

    //=========================================================================
    // GstVideoInfo
    //=========================================================================
    pub fn gst_video_info_get_type() -> GType;
    pub fn gst_video_info_new() -> *mut GstVideoInfo;
    #[cfg(feature = "v1_20")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
    pub fn gst_video_info_new_from_caps(caps: *const gst::GstCaps) -> *mut GstVideoInfo;
    pub fn gst_video_info_align(info: *mut GstVideoInfo, align: *mut GstVideoAlignment)
    -> gboolean;
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_info_align_full(
        info: *mut GstVideoInfo,
        align: *mut GstVideoAlignment,
        plane_size: *mut size_t,
    ) -> gboolean;
    pub fn gst_video_info_convert(
        info: *const GstVideoInfo,
        src_format: gst::GstFormat,
        src_value: i64,
        dest_format: gst::GstFormat,
        dest_value: *mut i64,
    ) -> gboolean;
    pub fn gst_video_info_copy(info: *const GstVideoInfo) -> *mut GstVideoInfo;
    pub fn gst_video_info_free(info: *mut GstVideoInfo);
    pub fn gst_video_info_is_equal(
        info: *const GstVideoInfo,
        other: *const GstVideoInfo,
    ) -> gboolean;
    pub fn gst_video_info_set_format(
        info: *mut GstVideoInfo,
        format: GstVideoFormat,
        width: c_uint,
        height: c_uint,
    ) -> gboolean;
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_info_set_interlaced_format(
        info: *mut GstVideoInfo,
        format: GstVideoFormat,
        mode: GstVideoInterlaceMode,
        width: c_uint,
        height: c_uint,
    ) -> gboolean;
    pub fn gst_video_info_to_caps(info: *const GstVideoInfo) -> *mut gst::GstCaps;
    pub fn gst_video_info_from_caps(info: *mut GstVideoInfo, caps: *const gst::GstCaps)
    -> gboolean;
    pub fn gst_video_info_init(info: *mut GstVideoInfo);

    //=========================================================================
    // GstVideoInfoDmaDrm
    //=========================================================================
    #[cfg(feature = "v1_24")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
    pub fn gst_video_info_dma_drm_get_type() -> GType;
    #[cfg(feature = "v1_24")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
    pub fn gst_video_info_dma_drm_new() -> *mut GstVideoInfoDmaDrm;
    #[cfg(feature = "v1_24")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
    pub fn gst_video_info_dma_drm_new_from_caps(
        caps: *const gst::GstCaps,
    ) -> *mut GstVideoInfoDmaDrm;
    #[cfg(feature = "v1_24")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
    pub fn gst_video_info_dma_drm_free(drm_info: *mut GstVideoInfoDmaDrm);
    #[cfg(feature = "v1_24")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
    pub fn gst_video_info_dma_drm_to_caps(drm_info: *const GstVideoInfoDmaDrm)
    -> *mut gst::GstCaps;
    #[cfg(feature = "v1_24")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
    pub fn gst_video_info_dma_drm_to_video_info(
        drm_info: *const GstVideoInfoDmaDrm,
        info: *mut GstVideoInfo,
    ) -> gboolean;
    #[cfg(feature = "v1_24")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
    pub fn gst_video_info_dma_drm_from_caps(
        drm_info: *mut GstVideoInfoDmaDrm,
        caps: *const gst::GstCaps,
    ) -> gboolean;
    #[cfg(feature = "v1_24")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
    pub fn gst_video_info_dma_drm_from_video_info(
        drm_info: *mut GstVideoInfoDmaDrm,
        info: *const GstVideoInfo,
        modifier: u64,
    ) -> gboolean;
    #[cfg(feature = "v1_24")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
    pub fn gst_video_info_dma_drm_init(drm_info: *mut GstVideoInfoDmaDrm);

    //=========================================================================
    // GstVideoMasteringDisplayInfo
    //=========================================================================
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_mastering_display_info_add_to_caps(
        minfo: *const GstVideoMasteringDisplayInfo,
        caps: *mut gst::GstCaps,
    ) -> gboolean;
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_mastering_display_info_from_caps(
        minfo: *mut GstVideoMasteringDisplayInfo,
        caps: *const gst::GstCaps,
    ) -> gboolean;
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_mastering_display_info_init(minfo: *mut GstVideoMasteringDisplayInfo);
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_mastering_display_info_is_equal(
        minfo: *const GstVideoMasteringDisplayInfo,
        other: *const GstVideoMasteringDisplayInfo,
    ) -> gboolean;
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_mastering_display_info_to_string(
        minfo: *const GstVideoMasteringDisplayInfo,
    ) -> *mut c_char;
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_mastering_display_info_from_string(
        minfo: *mut GstVideoMasteringDisplayInfo,
        mastering: *const c_char,
    ) -> gboolean;

    //=========================================================================
    // GstVideoMeta
    //=========================================================================
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_meta_get_plane_height(
        meta: *mut GstVideoMeta,
        plane_height: *mut [c_uint; 4],
    ) -> gboolean;
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_meta_get_plane_size(
        meta: *mut GstVideoMeta,
        plane_size: *mut [size_t; 4],
    ) -> gboolean;
    pub fn gst_video_meta_map(
        meta: *mut GstVideoMeta,
        plane: c_uint,
        info: *mut gst::GstMapInfo,
        data: *mut gpointer,
        stride: *mut c_int,
        flags: gst::GstMapFlags,
    ) -> gboolean;
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_meta_set_alignment(
        meta: *mut GstVideoMeta,
        alignment: GstVideoAlignment,
    ) -> gboolean;
    #[cfg(feature = "v1_28")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_28")))]
    pub fn gst_video_meta_set_alignment_full(
        meta: *mut GstVideoMeta,
        alignment: *const GstVideoAlignment,
    ) -> gboolean;
    pub fn gst_video_meta_unmap(
        meta: *mut GstVideoMeta,
        plane: c_uint,
        info: *mut gst::GstMapInfo,
    ) -> gboolean;
    pub fn gst_video_meta_get_info() -> *const gst::GstMetaInfo;

    //=========================================================================
    // GstVideoMetaTransform
    //=========================================================================
    pub fn gst_video_meta_transform_scale_get_quark() -> glib::GQuark;

    //=========================================================================
    // GstVideoMetaTransformMatrix
    //=========================================================================
    #[cfg(feature = "v1_28")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_28")))]
    pub fn gst_video_meta_transform_matrix_init(
        trans: *mut GstVideoMetaTransformMatrix,
        in_info: *const GstVideoInfo,
        in_rectangle: *const GstVideoRectangle,
        out_info: *const GstVideoInfo,
        out_rectangle: *const GstVideoRectangle,
    );
    #[cfg(feature = "v1_28")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_28")))]
    pub fn gst_video_meta_transform_matrix_point(
        transform: *const GstVideoMetaTransformMatrix,
        x: *mut c_int,
        y: *mut c_int,
    ) -> gboolean;
    #[cfg(feature = "v1_28")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_28")))]
    pub fn gst_video_meta_transform_matrix_point_clipped(
        transform: *const GstVideoMetaTransformMatrix,
        x: *mut c_int,
        y: *mut c_int,
    ) -> gboolean;
    #[cfg(feature = "v1_28")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_28")))]
    pub fn gst_video_meta_transform_matrix_rectangle(
        transform: *const GstVideoMetaTransformMatrix,
        rect: *mut GstVideoRectangle,
    ) -> gboolean;
    #[cfg(feature = "v1_28")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_28")))]
    pub fn gst_video_meta_transform_matrix_rectangle_clipped(
        transform: *const GstVideoMetaTransformMatrix,
        rect: *mut GstVideoRectangle,
    ) -> gboolean;
    #[cfg(feature = "v1_28")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_28")))]
    pub fn gst_video_meta_transform_matrix_get_quark() -> glib::GQuark;

    //=========================================================================
    // GstVideoOverlayComposition
    //=========================================================================
    pub fn gst_video_overlay_composition_get_type() -> GType;
    pub fn gst_video_overlay_composition_new(
        rectangle: *mut GstVideoOverlayRectangle,
    ) -> *mut GstVideoOverlayComposition;
    pub fn gst_video_overlay_composition_add_rectangle(
        comp: *mut GstVideoOverlayComposition,
        rectangle: *mut GstVideoOverlayRectangle,
    );
    pub fn gst_video_overlay_composition_blend(
        comp: *mut GstVideoOverlayComposition,
        video_buf: *mut GstVideoFrame,
    ) -> gboolean;
    pub fn gst_video_overlay_composition_copy(
        comp: *mut GstVideoOverlayComposition,
    ) -> *mut GstVideoOverlayComposition;
    pub fn gst_video_overlay_composition_get_rectangle(
        comp: *mut GstVideoOverlayComposition,
        n: c_uint,
    ) -> *mut GstVideoOverlayRectangle;
    pub fn gst_video_overlay_composition_get_seqnum(
        comp: *mut GstVideoOverlayComposition,
    ) -> c_uint;
    pub fn gst_video_overlay_composition_make_writable(
        comp: *mut GstVideoOverlayComposition,
    ) -> *mut GstVideoOverlayComposition;
    pub fn gst_video_overlay_composition_n_rectangles(
        comp: *mut GstVideoOverlayComposition,
    ) -> c_uint;

    //=========================================================================
    // GstVideoOverlayCompositionMeta
    //=========================================================================
    pub fn gst_video_overlay_composition_meta_get_info() -> *const gst::GstMetaInfo;

    //=========================================================================
    // GstVideoOverlayRectangle
    //=========================================================================
    pub fn gst_video_overlay_rectangle_get_type() -> GType;
    pub fn gst_video_overlay_rectangle_new_raw(
        pixels: *mut gst::GstBuffer,
        render_x: c_int,
        render_y: c_int,
        render_width: c_uint,
        render_height: c_uint,
        flags: GstVideoOverlayFormatFlags,
    ) -> *mut GstVideoOverlayRectangle;
    pub fn gst_video_overlay_rectangle_copy(
        rectangle: *mut GstVideoOverlayRectangle,
    ) -> *mut GstVideoOverlayRectangle;
    pub fn gst_video_overlay_rectangle_get_flags(
        rectangle: *mut GstVideoOverlayRectangle,
    ) -> GstVideoOverlayFormatFlags;
    pub fn gst_video_overlay_rectangle_get_global_alpha(
        rectangle: *mut GstVideoOverlayRectangle,
    ) -> c_float;
    pub fn gst_video_overlay_rectangle_get_pixels_argb(
        rectangle: *mut GstVideoOverlayRectangle,
        flags: GstVideoOverlayFormatFlags,
    ) -> *mut gst::GstBuffer;
    pub fn gst_video_overlay_rectangle_get_pixels_ayuv(
        rectangle: *mut GstVideoOverlayRectangle,
        flags: GstVideoOverlayFormatFlags,
    ) -> *mut gst::GstBuffer;
    pub fn gst_video_overlay_rectangle_get_pixels_raw(
        rectangle: *mut GstVideoOverlayRectangle,
        flags: GstVideoOverlayFormatFlags,
    ) -> *mut gst::GstBuffer;
    pub fn gst_video_overlay_rectangle_get_pixels_unscaled_argb(
        rectangle: *mut GstVideoOverlayRectangle,
        flags: GstVideoOverlayFormatFlags,
    ) -> *mut gst::GstBuffer;
    pub fn gst_video_overlay_rectangle_get_pixels_unscaled_ayuv(
        rectangle: *mut GstVideoOverlayRectangle,
        flags: GstVideoOverlayFormatFlags,
    ) -> *mut gst::GstBuffer;
    pub fn gst_video_overlay_rectangle_get_pixels_unscaled_raw(
        rectangle: *mut GstVideoOverlayRectangle,
        flags: GstVideoOverlayFormatFlags,
    ) -> *mut gst::GstBuffer;
    pub fn gst_video_overlay_rectangle_get_render_rectangle(
        rectangle: *mut GstVideoOverlayRectangle,
        render_x: *mut c_int,
        render_y: *mut c_int,
        render_width: *mut c_uint,
        render_height: *mut c_uint,
    ) -> gboolean;
    pub fn gst_video_overlay_rectangle_get_seqnum(
        rectangle: *mut GstVideoOverlayRectangle,
    ) -> c_uint;
    pub fn gst_video_overlay_rectangle_set_global_alpha(
        rectangle: *mut GstVideoOverlayRectangle,
        global_alpha: c_float,
    );
    pub fn gst_video_overlay_rectangle_set_render_rectangle(
        rectangle: *mut GstVideoOverlayRectangle,
        render_x: c_int,
        render_y: c_int,
        render_width: c_uint,
        render_height: c_uint,
    );

    //=========================================================================
    // GstVideoRegionOfInterestMeta
    //=========================================================================
    pub fn gst_video_region_of_interest_meta_add_param(
        meta: *mut GstVideoRegionOfInterestMeta,
        s: *mut gst::GstStructure,
    );
    pub fn gst_video_region_of_interest_meta_get_param(
        meta: *mut GstVideoRegionOfInterestMeta,
        name: *const c_char,
    ) -> *mut gst::GstStructure;
    pub fn gst_video_region_of_interest_meta_get_info() -> *const gst::GstMetaInfo;

    //=========================================================================
    // GstVideoResampler
    //=========================================================================
    pub fn gst_video_resampler_clear(resampler: *mut GstVideoResampler);
    pub fn gst_video_resampler_init(
        resampler: *mut GstVideoResampler,
        method: GstVideoResamplerMethod,
        flags: GstVideoResamplerFlags,
        n_phases: c_uint,
        n_taps: c_uint,
        shift: c_double,
        in_size: c_uint,
        out_size: c_uint,
        options: *mut gst::GstStructure,
    ) -> gboolean;

    //=========================================================================
    // GstVideoSEIUserDataUnregisteredMeta
    //=========================================================================
    #[cfg(feature = "v1_22")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
    pub fn gst_video_sei_user_data_unregistered_meta_get_info() -> *const gst::GstMetaInfo;

    //=========================================================================
    // GstVideoScaler
    //=========================================================================
    pub fn gst_video_scaler_2d(
        hscale: *mut GstVideoScaler,
        vscale: *mut GstVideoScaler,
        format: GstVideoFormat,
        src: gpointer,
        src_stride: c_int,
        dest: gpointer,
        dest_stride: c_int,
        x: c_uint,
        y: c_uint,
        width: c_uint,
        height: c_uint,
    );
    pub fn gst_video_scaler_combine_packed_YUV(
        y_scale: *mut GstVideoScaler,
        uv_scale: *mut GstVideoScaler,
        in_format: GstVideoFormat,
        out_format: GstVideoFormat,
    ) -> *mut GstVideoScaler;
    pub fn gst_video_scaler_free(scale: *mut GstVideoScaler);
    pub fn gst_video_scaler_get_coeff(
        scale: *mut GstVideoScaler,
        out_offset: c_uint,
        in_offset: *mut c_uint,
        n_taps: *mut c_uint,
    ) -> *const c_double;
    pub fn gst_video_scaler_get_max_taps(scale: *mut GstVideoScaler) -> c_uint;
    pub fn gst_video_scaler_horizontal(
        scale: *mut GstVideoScaler,
        format: GstVideoFormat,
        src: gpointer,
        dest: gpointer,
        dest_offset: c_uint,
        width: c_uint,
    );
    pub fn gst_video_scaler_vertical(
        scale: *mut GstVideoScaler,
        format: GstVideoFormat,
        src_lines: *mut gpointer,
        dest: gpointer,
        dest_offset: c_uint,
        width: c_uint,
    );
    pub fn gst_video_scaler_new(
        method: GstVideoResamplerMethod,
        flags: GstVideoScalerFlags,
        n_taps: c_uint,
        in_size: c_uint,
        out_size: c_uint,
        options: *mut gst::GstStructure,
    ) -> *mut GstVideoScaler;

    //=========================================================================
    // GstVideoTimeCode
    //=========================================================================
    pub fn gst_video_time_code_get_type() -> GType;
    pub fn gst_video_time_code_new(
        fps_n: c_uint,
        fps_d: c_uint,
        latest_daily_jam: *mut glib::GDateTime,
        flags: GstVideoTimeCodeFlags,
        hours: c_uint,
        minutes: c_uint,
        seconds: c_uint,
        frames: c_uint,
        field_count: c_uint,
    ) -> *mut GstVideoTimeCode;
    pub fn gst_video_time_code_new_empty() -> *mut GstVideoTimeCode;
    pub fn gst_video_time_code_new_from_date_time(
        fps_n: c_uint,
        fps_d: c_uint,
        dt: *mut glib::GDateTime,
        flags: GstVideoTimeCodeFlags,
        field_count: c_uint,
    ) -> *mut GstVideoTimeCode;
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_time_code_new_from_date_time_full(
        fps_n: c_uint,
        fps_d: c_uint,
        dt: *mut glib::GDateTime,
        flags: GstVideoTimeCodeFlags,
        field_count: c_uint,
    ) -> *mut GstVideoTimeCode;
    pub fn gst_video_time_code_new_from_string(tc_str: *const c_char) -> *mut GstVideoTimeCode;
    pub fn gst_video_time_code_add_frames(tc: *mut GstVideoTimeCode, frames: i64);
    pub fn gst_video_time_code_add_interval(
        tc: *const GstVideoTimeCode,
        tc_inter: *const GstVideoTimeCodeInterval,
    ) -> *mut GstVideoTimeCode;
    pub fn gst_video_time_code_clear(tc: *mut GstVideoTimeCode);
    pub fn gst_video_time_code_compare(
        tc1: *const GstVideoTimeCode,
        tc2: *const GstVideoTimeCode,
    ) -> c_int;
    pub fn gst_video_time_code_copy(tc: *const GstVideoTimeCode) -> *mut GstVideoTimeCode;
    pub fn gst_video_time_code_frames_since_daily_jam(tc: *const GstVideoTimeCode) -> u64;
    pub fn gst_video_time_code_free(tc: *mut GstVideoTimeCode);
    pub fn gst_video_time_code_increment_frame(tc: *mut GstVideoTimeCode);
    pub fn gst_video_time_code_init(
        tc: *mut GstVideoTimeCode,
        fps_n: c_uint,
        fps_d: c_uint,
        latest_daily_jam: *mut glib::GDateTime,
        flags: GstVideoTimeCodeFlags,
        hours: c_uint,
        minutes: c_uint,
        seconds: c_uint,
        frames: c_uint,
        field_count: c_uint,
    );
    pub fn gst_video_time_code_init_from_date_time(
        tc: *mut GstVideoTimeCode,
        fps_n: c_uint,
        fps_d: c_uint,
        dt: *mut glib::GDateTime,
        flags: GstVideoTimeCodeFlags,
        field_count: c_uint,
    );
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_time_code_init_from_date_time_full(
        tc: *mut GstVideoTimeCode,
        fps_n: c_uint,
        fps_d: c_uint,
        dt: *mut glib::GDateTime,
        flags: GstVideoTimeCodeFlags,
        field_count: c_uint,
    ) -> gboolean;
    pub fn gst_video_time_code_is_valid(tc: *const GstVideoTimeCode) -> gboolean;
    pub fn gst_video_time_code_nsec_since_daily_jam(tc: *const GstVideoTimeCode) -> u64;
    pub fn gst_video_time_code_to_date_time(tc: *const GstVideoTimeCode) -> *mut glib::GDateTime;
    pub fn gst_video_time_code_to_string(tc: *const GstVideoTimeCode) -> *mut c_char;

    //=========================================================================
    // GstVideoTimeCodeInterval
    //=========================================================================
    pub fn gst_video_time_code_interval_get_type() -> GType;
    pub fn gst_video_time_code_interval_new(
        hours: c_uint,
        minutes: c_uint,
        seconds: c_uint,
        frames: c_uint,
    ) -> *mut GstVideoTimeCodeInterval;
    pub fn gst_video_time_code_interval_new_from_string(
        tc_inter_str: *const c_char,
    ) -> *mut GstVideoTimeCodeInterval;
    pub fn gst_video_time_code_interval_clear(tc: *mut GstVideoTimeCodeInterval);
    pub fn gst_video_time_code_interval_copy(
        tc: *const GstVideoTimeCodeInterval,
    ) -> *mut GstVideoTimeCodeInterval;
    pub fn gst_video_time_code_interval_free(tc: *mut GstVideoTimeCodeInterval);
    pub fn gst_video_time_code_interval_init(
        tc: *mut GstVideoTimeCodeInterval,
        hours: c_uint,
        minutes: c_uint,
        seconds: c_uint,
        frames: c_uint,
    );

    //=========================================================================
    // GstVideoTimeCodeMeta
    //=========================================================================
    pub fn gst_video_time_code_meta_get_info() -> *const gst::GstMetaInfo;

    //=========================================================================
    // GstVideoVBIEncoder
    //=========================================================================
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_vbi_encoder_get_type() -> GType;
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_vbi_encoder_new(
        format: GstVideoFormat,
        pixel_width: u32,
    ) -> *mut GstVideoVBIEncoder;
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_vbi_encoder_add_ancillary(
        encoder: *mut GstVideoVBIEncoder,
        composite: gboolean,
        DID: u8,
        SDID_block_number: u8,
        data: *const u8,
        data_count: c_uint,
    ) -> gboolean;
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_vbi_encoder_copy(
        encoder: *const GstVideoVBIEncoder,
    ) -> *mut GstVideoVBIEncoder;
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_vbi_encoder_free(encoder: *mut GstVideoVBIEncoder);
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_vbi_encoder_write_line(encoder: *mut GstVideoVBIEncoder, data: *mut u8);

    //=========================================================================
    // GstVideoVBIParser
    //=========================================================================
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_vbi_parser_get_type() -> GType;
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_vbi_parser_new(
        format: GstVideoFormat,
        pixel_width: u32,
    ) -> *mut GstVideoVBIParser;
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_vbi_parser_add_line(parser: *mut GstVideoVBIParser, data: *const u8);
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_vbi_parser_copy(parser: *const GstVideoVBIParser) -> *mut GstVideoVBIParser;
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_vbi_parser_free(parser: *mut GstVideoVBIParser);
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_vbi_parser_get_ancillary(
        parser: *mut GstVideoVBIParser,
        anc: *mut GstVideoAncillary,
    ) -> GstVideoVBIParserResult;

    //=========================================================================
    // GstColorBalanceChannel
    //=========================================================================
    pub fn gst_color_balance_channel_get_type() -> GType;

    //=========================================================================
    // GstVideoAggregator
    //=========================================================================
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_aggregator_get_type() -> GType;
    #[cfg(feature = "v1_20")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
    pub fn gst_video_aggregator_get_execution_task_pool(
        vagg: *mut GstVideoAggregator,
    ) -> *mut gst::GstTaskPool;

    //=========================================================================
    // GstVideoAggregatorConvertPad
    //=========================================================================
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_aggregator_convert_pad_get_type() -> GType;
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_aggregator_convert_pad_update_conversion_info(
        pad: *mut GstVideoAggregatorConvertPad,
    );

    //=========================================================================
    // GstVideoAggregatorPad
    //=========================================================================
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_aggregator_pad_get_type() -> GType;
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_aggregator_pad_get_current_buffer(
        pad: *mut GstVideoAggregatorPad,
    ) -> *mut gst::GstBuffer;
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_aggregator_pad_get_prepared_frame(
        pad: *mut GstVideoAggregatorPad,
    ) -> *mut GstVideoFrame;
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_aggregator_pad_has_current_buffer(pad: *mut GstVideoAggregatorPad)
    -> gboolean;
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_aggregator_pad_set_needs_alpha(
        pad: *mut GstVideoAggregatorPad,
        needs_alpha: gboolean,
    );

    //=========================================================================
    // GstVideoAggregatorParallelConvertPad
    //=========================================================================
    #[cfg(feature = "v1_20")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
    pub fn gst_video_aggregator_parallel_convert_pad_get_type() -> GType;

    //=========================================================================
    // GstVideoBufferPool
    //=========================================================================
    pub fn gst_video_buffer_pool_get_type() -> GType;
    pub fn gst_video_buffer_pool_new() -> *mut gst::GstBufferPool;

    //=========================================================================
    // GstVideoDecoder
    //=========================================================================
    pub fn gst_video_decoder_get_type() -> GType;
    pub fn gst_video_decoder_add_to_frame(decoder: *mut GstVideoDecoder, n_bytes: c_int);
    pub fn gst_video_decoder_allocate_output_buffer(
        decoder: *mut GstVideoDecoder,
    ) -> *mut gst::GstBuffer;
    pub fn gst_video_decoder_allocate_output_frame(
        decoder: *mut GstVideoDecoder,
        frame: *mut GstVideoCodecFrame,
    ) -> gst::GstFlowReturn;
    pub fn gst_video_decoder_allocate_output_frame_with_params(
        decoder: *mut GstVideoDecoder,
        frame: *mut GstVideoCodecFrame,
        params: *mut gst::GstBufferPoolAcquireParams,
    ) -> gst::GstFlowReturn;
    pub fn gst_video_decoder_drop_frame(
        dec: *mut GstVideoDecoder,
        frame: *mut GstVideoCodecFrame,
    ) -> gst::GstFlowReturn;
    #[cfg(feature = "v1_20")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
    pub fn gst_video_decoder_drop_subframe(
        dec: *mut GstVideoDecoder,
        frame: *mut GstVideoCodecFrame,
    ) -> gst::GstFlowReturn;
    pub fn gst_video_decoder_finish_frame(
        decoder: *mut GstVideoDecoder,
        frame: *mut GstVideoCodecFrame,
    ) -> gst::GstFlowReturn;
    #[cfg(feature = "v1_20")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
    pub fn gst_video_decoder_finish_subframe(
        decoder: *mut GstVideoDecoder,
        frame: *mut GstVideoCodecFrame,
    ) -> gst::GstFlowReturn;
    pub fn gst_video_decoder_get_allocator(
        decoder: *mut GstVideoDecoder,
        allocator: *mut *mut gst::GstAllocator,
        params: *mut gst::GstAllocationParams,
    );
    pub fn gst_video_decoder_get_buffer_pool(
        decoder: *mut GstVideoDecoder,
    ) -> *mut gst::GstBufferPool;
    pub fn gst_video_decoder_get_estimate_rate(dec: *mut GstVideoDecoder) -> c_int;
    pub fn gst_video_decoder_get_frame(
        decoder: *mut GstVideoDecoder,
        frame_number: c_int,
    ) -> *mut GstVideoCodecFrame;
    pub fn gst_video_decoder_get_frames(decoder: *mut GstVideoDecoder) -> *mut glib::GList;
    #[cfg(feature = "v1_20")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
    pub fn gst_video_decoder_get_input_subframe_index(
        decoder: *mut GstVideoDecoder,
        frame: *mut GstVideoCodecFrame,
    ) -> c_uint;
    pub fn gst_video_decoder_get_latency(
        decoder: *mut GstVideoDecoder,
        min_latency: *mut gst::GstClockTime,
        max_latency: *mut gst::GstClockTime,
    );
    pub fn gst_video_decoder_get_max_decode_time(
        decoder: *mut GstVideoDecoder,
        frame: *mut GstVideoCodecFrame,
    ) -> gst::GstClockTimeDiff;
    pub fn gst_video_decoder_get_max_errors(dec: *mut GstVideoDecoder) -> c_int;
    pub fn gst_video_decoder_get_needs_format(dec: *mut GstVideoDecoder) -> gboolean;
    #[cfg(feature = "v1_20")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
    pub fn gst_video_decoder_get_needs_sync_point(dec: *mut GstVideoDecoder) -> gboolean;
    pub fn gst_video_decoder_get_oldest_frame(
        decoder: *mut GstVideoDecoder,
    ) -> *mut GstVideoCodecFrame;
    pub fn gst_video_decoder_get_output_state(
        decoder: *mut GstVideoDecoder,
    ) -> *mut GstVideoCodecState;
    pub fn gst_video_decoder_get_packetized(decoder: *mut GstVideoDecoder) -> gboolean;
    pub fn gst_video_decoder_get_pending_frame_size(decoder: *mut GstVideoDecoder) -> size_t;
    #[cfg(feature = "v1_20")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
    pub fn gst_video_decoder_get_processed_subframe_index(
        decoder: *mut GstVideoDecoder,
        frame: *mut GstVideoCodecFrame,
    ) -> c_uint;
    pub fn gst_video_decoder_get_qos_proportion(decoder: *mut GstVideoDecoder) -> c_double;
    #[cfg(feature = "v1_20")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
    pub fn gst_video_decoder_get_subframe_mode(decoder: *mut GstVideoDecoder) -> gboolean;
    pub fn gst_video_decoder_have_frame(decoder: *mut GstVideoDecoder) -> gst::GstFlowReturn;
    #[cfg(feature = "v1_20")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
    pub fn gst_video_decoder_have_last_subframe(
        decoder: *mut GstVideoDecoder,
        frame: *mut GstVideoCodecFrame,
    ) -> gst::GstFlowReturn;
    pub fn gst_video_decoder_merge_tags(
        decoder: *mut GstVideoDecoder,
        tags: *const gst::GstTagList,
        mode: gst::GstTagMergeMode,
    );
    pub fn gst_video_decoder_negotiate(decoder: *mut GstVideoDecoder) -> gboolean;
    pub fn gst_video_decoder_proxy_getcaps(
        decoder: *mut GstVideoDecoder,
        caps: *mut gst::GstCaps,
        filter: *mut gst::GstCaps,
    ) -> *mut gst::GstCaps;
    pub fn gst_video_decoder_release_frame(
        dec: *mut GstVideoDecoder,
        frame: *mut GstVideoCodecFrame,
    );
    #[cfg(feature = "v1_20")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
    pub fn gst_video_decoder_request_sync_point(
        dec: *mut GstVideoDecoder,
        frame: *mut GstVideoCodecFrame,
        flags: GstVideoDecoderRequestSyncPointFlags,
    );
    pub fn gst_video_decoder_set_estimate_rate(dec: *mut GstVideoDecoder, enabled: gboolean);
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_decoder_set_interlaced_output_state(
        decoder: *mut GstVideoDecoder,
        fmt: GstVideoFormat,
        interlace_mode: GstVideoInterlaceMode,
        width: c_uint,
        height: c_uint,
        reference: *mut GstVideoCodecState,
    ) -> *mut GstVideoCodecState;
    pub fn gst_video_decoder_set_latency(
        decoder: *mut GstVideoDecoder,
        min_latency: gst::GstClockTime,
        max_latency: gst::GstClockTime,
    );
    pub fn gst_video_decoder_set_max_errors(dec: *mut GstVideoDecoder, num: c_int);
    pub fn gst_video_decoder_set_needs_format(dec: *mut GstVideoDecoder, enabled: gboolean);
    #[cfg(feature = "v1_20")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
    pub fn gst_video_decoder_set_needs_sync_point(dec: *mut GstVideoDecoder, enabled: gboolean);
    pub fn gst_video_decoder_set_output_state(
        decoder: *mut GstVideoDecoder,
        fmt: GstVideoFormat,
        width: c_uint,
        height: c_uint,
        reference: *mut GstVideoCodecState,
    ) -> *mut GstVideoCodecState;
    pub fn gst_video_decoder_set_packetized(decoder: *mut GstVideoDecoder, packetized: gboolean);
    #[cfg(feature = "v1_20")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
    pub fn gst_video_decoder_set_subframe_mode(
        decoder: *mut GstVideoDecoder,
        subframe_mode: gboolean,
    );
    pub fn gst_video_decoder_set_use_default_pad_acceptcaps(
        decoder: *mut GstVideoDecoder,
        use_: gboolean,
    );

    //=========================================================================
    // GstVideoDmabufPool
    //=========================================================================
    #[cfg(feature = "v1_28")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_28")))]
    pub fn gst_video_dmabuf_pool_get_type() -> GType;
    #[cfg(feature = "v1_28")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_28")))]
    pub fn gst_video_dmabuf_pool_new() -> *mut gst::GstBufferPool;

    //=========================================================================
    // GstVideoEncoder
    //=========================================================================
    pub fn gst_video_encoder_get_type() -> GType;
    pub fn gst_video_encoder_allocate_output_buffer(
        encoder: *mut GstVideoEncoder,
        size: size_t,
    ) -> *mut gst::GstBuffer;
    pub fn gst_video_encoder_allocate_output_frame(
        encoder: *mut GstVideoEncoder,
        frame: *mut GstVideoCodecFrame,
        size: size_t,
    ) -> gst::GstFlowReturn;
    #[cfg(feature = "v1_26")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
    pub fn gst_video_encoder_drop_frame(
        encoder: *mut GstVideoEncoder,
        frame: *mut GstVideoCodecFrame,
    );
    pub fn gst_video_encoder_finish_frame(
        encoder: *mut GstVideoEncoder,
        frame: *mut GstVideoCodecFrame,
    ) -> gst::GstFlowReturn;
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_encoder_finish_subframe(
        encoder: *mut GstVideoEncoder,
        frame: *mut GstVideoCodecFrame,
    ) -> gst::GstFlowReturn;
    pub fn gst_video_encoder_get_allocator(
        encoder: *mut GstVideoEncoder,
        allocator: *mut *mut gst::GstAllocator,
        params: *mut gst::GstAllocationParams,
    );
    pub fn gst_video_encoder_get_frame(
        encoder: *mut GstVideoEncoder,
        frame_number: c_int,
    ) -> *mut GstVideoCodecFrame;
    pub fn gst_video_encoder_get_frames(encoder: *mut GstVideoEncoder) -> *mut glib::GList;
    pub fn gst_video_encoder_get_latency(
        encoder: *mut GstVideoEncoder,
        min_latency: *mut gst::GstClockTime,
        max_latency: *mut gst::GstClockTime,
    );
    pub fn gst_video_encoder_get_max_encode_time(
        encoder: *mut GstVideoEncoder,
        frame: *mut GstVideoCodecFrame,
    ) -> gst::GstClockTimeDiff;
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_encoder_get_min_force_key_unit_interval(
        encoder: *mut GstVideoEncoder,
    ) -> gst::GstClockTime;
    pub fn gst_video_encoder_get_oldest_frame(
        encoder: *mut GstVideoEncoder,
    ) -> *mut GstVideoCodecFrame;
    pub fn gst_video_encoder_get_output_state(
        encoder: *mut GstVideoEncoder,
    ) -> *mut GstVideoCodecState;
    pub fn gst_video_encoder_is_qos_enabled(encoder: *mut GstVideoEncoder) -> gboolean;
    pub fn gst_video_encoder_merge_tags(
        encoder: *mut GstVideoEncoder,
        tags: *const gst::GstTagList,
        mode: gst::GstTagMergeMode,
    );
    pub fn gst_video_encoder_negotiate(encoder: *mut GstVideoEncoder) -> gboolean;
    pub fn gst_video_encoder_proxy_getcaps(
        enc: *mut GstVideoEncoder,
        caps: *mut gst::GstCaps,
        filter: *mut gst::GstCaps,
    ) -> *mut gst::GstCaps;
    #[cfg(feature = "v1_26")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
    pub fn gst_video_encoder_release_frame(
        encoder: *mut GstVideoEncoder,
        frame: *mut GstVideoCodecFrame,
    );
    pub fn gst_video_encoder_set_headers(encoder: *mut GstVideoEncoder, headers: *mut glib::GList);
    pub fn gst_video_encoder_set_latency(
        encoder: *mut GstVideoEncoder,
        min_latency: gst::GstClockTime,
        max_latency: gst::GstClockTime,
    );
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_encoder_set_min_force_key_unit_interval(
        encoder: *mut GstVideoEncoder,
        interval: gst::GstClockTime,
    );
    pub fn gst_video_encoder_set_min_pts(encoder: *mut GstVideoEncoder, min_pts: gst::GstClockTime);
    pub fn gst_video_encoder_set_output_state(
        encoder: *mut GstVideoEncoder,
        caps: *mut gst::GstCaps,
        reference: *mut GstVideoCodecState,
    ) -> *mut GstVideoCodecState;
    pub fn gst_video_encoder_set_qos_enabled(encoder: *mut GstVideoEncoder, enabled: gboolean);

    //=========================================================================
    // GstVideoFilter
    //=========================================================================
    pub fn gst_video_filter_get_type() -> GType;

    //=========================================================================
    // GstVideoMultiviewFlagsSet
    //=========================================================================
    pub fn gst_video_multiview_flagset_get_type() -> GType;

    //=========================================================================
    // GstVideoSink
    //=========================================================================
    pub fn gst_video_sink_get_type() -> GType;
    pub fn gst_video_sink_center_rect(
        src: GstVideoRectangle,
        dst: GstVideoRectangle,
        result: *mut GstVideoRectangle,
        scaling: gboolean,
    );

    //=========================================================================
    // GstColorBalance
    //=========================================================================
    pub fn gst_color_balance_get_type() -> GType;
    pub fn gst_color_balance_get_balance_type(balance: *mut GstColorBalance)
    -> GstColorBalanceType;
    pub fn gst_color_balance_get_value(
        balance: *mut GstColorBalance,
        channel: *mut GstColorBalanceChannel,
    ) -> c_int;
    pub fn gst_color_balance_list_channels(balance: *mut GstColorBalance) -> *const glib::GList;
    pub fn gst_color_balance_set_value(
        balance: *mut GstColorBalance,
        channel: *mut GstColorBalanceChannel,
        value: c_int,
    );
    pub fn gst_color_balance_value_changed(
        balance: *mut GstColorBalance,
        channel: *mut GstColorBalanceChannel,
        value: c_int,
    );

    //=========================================================================
    // GstNavigation
    //=========================================================================
    pub fn gst_navigation_get_type() -> GType;
    #[cfg(feature = "v1_22")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
    pub fn gst_navigation_event_get_coordinates(
        event: *mut gst::GstEvent,
        x: *mut c_double,
        y: *mut c_double,
    ) -> gboolean;
    pub fn gst_navigation_event_get_type(event: *mut gst::GstEvent) -> GstNavigationEventType;
    #[cfg(feature = "v1_22")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
    pub fn gst_navigation_event_new_command(command: GstNavigationCommand) -> *mut gst::GstEvent;
    #[cfg(feature = "v1_22")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
    pub fn gst_navigation_event_new_key_press(
        key: *const c_char,
        state: GstNavigationModifierType,
    ) -> *mut gst::GstEvent;
    #[cfg(feature = "v1_22")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
    pub fn gst_navigation_event_new_key_release(
        key: *const c_char,
        state: GstNavigationModifierType,
    ) -> *mut gst::GstEvent;
    #[cfg(feature = "v1_22")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
    pub fn gst_navigation_event_new_mouse_button_press(
        button: c_int,
        x: c_double,
        y: c_double,
        state: GstNavigationModifierType,
    ) -> *mut gst::GstEvent;
    #[cfg(feature = "v1_22")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
    pub fn gst_navigation_event_new_mouse_button_release(
        button: c_int,
        x: c_double,
        y: c_double,
        state: GstNavigationModifierType,
    ) -> *mut gst::GstEvent;
    #[cfg(feature = "v1_26")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
    pub fn gst_navigation_event_new_mouse_double_click(
        button: c_int,
        x: c_double,
        y: c_double,
        state: GstNavigationModifierType,
    ) -> *mut gst::GstEvent;
    #[cfg(feature = "v1_22")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
    pub fn gst_navigation_event_new_mouse_move(
        x: c_double,
        y: c_double,
        state: GstNavigationModifierType,
    ) -> *mut gst::GstEvent;
    #[cfg(feature = "v1_22")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
    pub fn gst_navigation_event_new_mouse_scroll(
        x: c_double,
        y: c_double,
        delta_x: c_double,
        delta_y: c_double,
        state: GstNavigationModifierType,
    ) -> *mut gst::GstEvent;
    #[cfg(feature = "v1_22")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
    pub fn gst_navigation_event_new_touch_cancel(
        state: GstNavigationModifierType,
    ) -> *mut gst::GstEvent;
    #[cfg(feature = "v1_22")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
    pub fn gst_navigation_event_new_touch_down(
        identifier: c_uint,
        x: c_double,
        y: c_double,
        pressure: c_double,
        state: GstNavigationModifierType,
    ) -> *mut gst::GstEvent;
    #[cfg(feature = "v1_22")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
    pub fn gst_navigation_event_new_touch_frame(
        state: GstNavigationModifierType,
    ) -> *mut gst::GstEvent;
    #[cfg(feature = "v1_22")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
    pub fn gst_navigation_event_new_touch_motion(
        identifier: c_uint,
        x: c_double,
        y: c_double,
        pressure: c_double,
        state: GstNavigationModifierType,
    ) -> *mut gst::GstEvent;
    #[cfg(feature = "v1_22")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
    pub fn gst_navigation_event_new_touch_up(
        identifier: c_uint,
        x: c_double,
        y: c_double,
        state: GstNavigationModifierType,
    ) -> *mut gst::GstEvent;
    pub fn gst_navigation_event_parse_command(
        event: *mut gst::GstEvent,
        command: *mut GstNavigationCommand,
    ) -> gboolean;
    pub fn gst_navigation_event_parse_key_event(
        event: *mut gst::GstEvent,
        key: *mut *const c_char,
    ) -> gboolean;
    #[cfg(feature = "v1_22")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
    pub fn gst_navigation_event_parse_modifier_state(
        event: *mut gst::GstEvent,
        state: *mut GstNavigationModifierType,
    ) -> gboolean;
    pub fn gst_navigation_event_parse_mouse_button_event(
        event: *mut gst::GstEvent,
        button: *mut c_int,
        x: *mut c_double,
        y: *mut c_double,
    ) -> gboolean;
    pub fn gst_navigation_event_parse_mouse_move_event(
        event: *mut gst::GstEvent,
        x: *mut c_double,
        y: *mut c_double,
    ) -> gboolean;
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_navigation_event_parse_mouse_scroll_event(
        event: *mut gst::GstEvent,
        x: *mut c_double,
        y: *mut c_double,
        delta_x: *mut c_double,
        delta_y: *mut c_double,
    ) -> gboolean;
    #[cfg(feature = "v1_22")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
    pub fn gst_navigation_event_parse_touch_event(
        event: *mut gst::GstEvent,
        identifier: *mut c_uint,
        x: *mut c_double,
        y: *mut c_double,
        pressure: *mut c_double,
    ) -> gboolean;
    #[cfg(feature = "v1_22")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
    pub fn gst_navigation_event_parse_touch_up_event(
        event: *mut gst::GstEvent,
        identifier: *mut c_uint,
        x: *mut c_double,
        y: *mut c_double,
    ) -> gboolean;
    #[cfg(feature = "v1_22")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
    pub fn gst_navigation_event_set_coordinates(
        event: *mut gst::GstEvent,
        x: c_double,
        y: c_double,
    ) -> gboolean;
    pub fn gst_navigation_message_get_type(
        message: *mut gst::GstMessage,
    ) -> GstNavigationMessageType;
    pub fn gst_navigation_message_new_angles_changed(
        src: *mut gst::GstObject,
        cur_angle: c_uint,
        n_angles: c_uint,
    ) -> *mut gst::GstMessage;
    pub fn gst_navigation_message_new_commands_changed(
        src: *mut gst::GstObject,
    ) -> *mut gst::GstMessage;
    pub fn gst_navigation_message_new_event(
        src: *mut gst::GstObject,
        event: *mut gst::GstEvent,
    ) -> *mut gst::GstMessage;
    pub fn gst_navigation_message_new_mouse_over(
        src: *mut gst::GstObject,
        active: gboolean,
    ) -> *mut gst::GstMessage;
    pub fn gst_navigation_message_parse_angles_changed(
        message: *mut gst::GstMessage,
        cur_angle: *mut c_uint,
        n_angles: *mut c_uint,
    ) -> gboolean;
    pub fn gst_navigation_message_parse_event(
        message: *mut gst::GstMessage,
        event: *mut *mut gst::GstEvent,
    ) -> gboolean;
    pub fn gst_navigation_message_parse_mouse_over(
        message: *mut gst::GstMessage,
        active: *mut gboolean,
    ) -> gboolean;
    pub fn gst_navigation_query_get_type(query: *mut gst::GstQuery) -> GstNavigationQueryType;
    pub fn gst_navigation_query_new_angles() -> *mut gst::GstQuery;
    pub fn gst_navigation_query_new_commands() -> *mut gst::GstQuery;
    pub fn gst_navigation_query_parse_angles(
        query: *mut gst::GstQuery,
        cur_angle: *mut c_uint,
        n_angles: *mut c_uint,
    ) -> gboolean;
    pub fn gst_navigation_query_parse_commands_length(
        query: *mut gst::GstQuery,
        n_cmds: *mut c_uint,
    ) -> gboolean;
    pub fn gst_navigation_query_parse_commands_nth(
        query: *mut gst::GstQuery,
        nth: c_uint,
        cmd: *mut GstNavigationCommand,
    ) -> gboolean;
    pub fn gst_navigation_query_set_angles(
        query: *mut gst::GstQuery,
        cur_angle: c_uint,
        n_angles: c_uint,
    );
    pub fn gst_navigation_query_set_commands(query: *mut gst::GstQuery, n_cmds: c_int, ...);
    pub fn gst_navigation_query_set_commandsv(
        query: *mut gst::GstQuery,
        n_cmds: c_int,
        cmds: *mut GstNavigationCommand,
    );
    pub fn gst_navigation_send_command(
        navigation: *mut GstNavigation,
        command: GstNavigationCommand,
    );
    pub fn gst_navigation_send_event(
        navigation: *mut GstNavigation,
        structure: *mut gst::GstStructure,
    );
    #[cfg(feature = "v1_22")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
    pub fn gst_navigation_send_event_simple(
        navigation: *mut GstNavigation,
        event: *mut gst::GstEvent,
    );
    pub fn gst_navigation_send_key_event(
        navigation: *mut GstNavigation,
        event: *const c_char,
        key: *const c_char,
    );
    pub fn gst_navigation_send_mouse_event(
        navigation: *mut GstNavigation,
        event: *const c_char,
        button: c_int,
        x: c_double,
        y: c_double,
    );
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_navigation_send_mouse_scroll_event(
        navigation: *mut GstNavigation,
        x: c_double,
        y: c_double,
        delta_x: c_double,
        delta_y: c_double,
    );

    //=========================================================================
    // GstVideoDirection
    //=========================================================================
    pub fn gst_video_direction_get_type() -> GType;

    //=========================================================================
    // GstVideoOrientation
    //=========================================================================
    pub fn gst_video_orientation_get_type() -> GType;
    #[cfg(feature = "v1_20")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
    pub fn gst_video_orientation_from_tag(
        taglist: *mut gst::GstTagList,
        method: *mut GstVideoOrientationMethod,
    ) -> gboolean;
    pub fn gst_video_orientation_get_hcenter(
        video_orientation: *mut GstVideoOrientation,
        center: *mut c_int,
    ) -> gboolean;
    pub fn gst_video_orientation_get_hflip(
        video_orientation: *mut GstVideoOrientation,
        flip: *mut gboolean,
    ) -> gboolean;
    pub fn gst_video_orientation_get_vcenter(
        video_orientation: *mut GstVideoOrientation,
        center: *mut c_int,
    ) -> gboolean;
    pub fn gst_video_orientation_get_vflip(
        video_orientation: *mut GstVideoOrientation,
        flip: *mut gboolean,
    ) -> gboolean;
    pub fn gst_video_orientation_set_hcenter(
        video_orientation: *mut GstVideoOrientation,
        center: c_int,
    ) -> gboolean;
    pub fn gst_video_orientation_set_hflip(
        video_orientation: *mut GstVideoOrientation,
        flip: gboolean,
    ) -> gboolean;
    pub fn gst_video_orientation_set_vcenter(
        video_orientation: *mut GstVideoOrientation,
        center: c_int,
    ) -> gboolean;
    pub fn gst_video_orientation_set_vflip(
        video_orientation: *mut GstVideoOrientation,
        flip: gboolean,
    ) -> gboolean;

    //=========================================================================
    // GstVideoOverlay
    //=========================================================================
    pub fn gst_video_overlay_get_type() -> GType;
    pub fn gst_video_overlay_install_properties(
        oclass: *mut gobject::GObjectClass,
        last_prop_id: c_int,
    );
    pub fn gst_video_overlay_set_property(
        object: *mut gobject::GObject,
        last_prop_id: c_int,
        property_id: c_uint,
        value: *const gobject::GValue,
    ) -> gboolean;
    pub fn gst_video_overlay_expose(overlay: *mut GstVideoOverlay);
    pub fn gst_video_overlay_got_window_handle(overlay: *mut GstVideoOverlay, handle: uintptr_t);
    pub fn gst_video_overlay_handle_events(overlay: *mut GstVideoOverlay, handle_events: gboolean);
    pub fn gst_video_overlay_prepare_window_handle(overlay: *mut GstVideoOverlay);
    pub fn gst_video_overlay_set_render_rectangle(
        overlay: *mut GstVideoOverlay,
        x: c_int,
        y: c_int,
        width: c_int,
        height: c_int,
    ) -> gboolean;
    pub fn gst_video_overlay_set_window_handle(overlay: *mut GstVideoOverlay, handle: uintptr_t);

    //=========================================================================
    // Other functions
    //=========================================================================
    pub fn gst_ancillary_meta_api_get_type() -> GType;
    #[cfg(feature = "v1_24")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
    pub fn gst_buffer_add_ancillary_meta(buffer: *mut gst::GstBuffer) -> *mut GstAncillaryMeta;
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_buffer_add_video_afd_meta(
        buffer: *mut gst::GstBuffer,
        field: u8,
        spec: GstVideoAFDSpec,
        afd: GstVideoAFDValue,
    ) -> *mut GstVideoAFDMeta;
    pub fn gst_buffer_add_video_affine_transformation_meta(
        buffer: *mut gst::GstBuffer,
    ) -> *mut GstVideoAffineTransformationMeta;
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_buffer_add_video_bar_meta(
        buffer: *mut gst::GstBuffer,
        field: u8,
        is_letterbox: gboolean,
        bar_data1: c_uint,
        bar_data2: c_uint,
    ) -> *mut GstVideoBarMeta;
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_buffer_add_video_caption_meta(
        buffer: *mut gst::GstBuffer,
        caption_type: GstVideoCaptionType,
        data: *const u8,
        size: size_t,
    ) -> *mut GstVideoCaptionMeta;
    #[cfg(feature = "v1_20")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
    pub fn gst_buffer_add_video_codec_alpha_meta(
        buffer: *mut gst::GstBuffer,
        alpha_buffer: *mut gst::GstBuffer,
    ) -> *mut GstVideoCodecAlphaMeta;
    pub fn gst_buffer_add_video_gl_texture_upload_meta(
        buffer: *mut gst::GstBuffer,
        texture_orientation: GstVideoGLTextureOrientation,
        n_textures: c_uint,
        texture_type: *mut GstVideoGLTextureType,
        upload: GstVideoGLTextureUpload,
        user_data: gpointer,
        user_data_copy: gobject::GBoxedCopyFunc,
        user_data_free: gobject::GBoxedFreeFunc,
    ) -> *mut GstVideoGLTextureUploadMeta;
    pub fn gst_buffer_add_video_meta(
        buffer: *mut gst::GstBuffer,
        flags: GstVideoFrameFlags,
        format: GstVideoFormat,
        width: c_uint,
        height: c_uint,
    ) -> *mut GstVideoMeta;
    pub fn gst_buffer_add_video_meta_full(
        buffer: *mut gst::GstBuffer,
        flags: GstVideoFrameFlags,
        format: GstVideoFormat,
        width: c_uint,
        height: c_uint,
        n_planes: c_uint,
        offset: *const [size_t; 4],
        stride: *const [c_int; 4],
    ) -> *mut GstVideoMeta;
    pub fn gst_buffer_add_video_overlay_composition_meta(
        buf: *mut gst::GstBuffer,
        comp: *mut GstVideoOverlayComposition,
    ) -> *mut GstVideoOverlayCompositionMeta;
    pub fn gst_buffer_add_video_region_of_interest_meta(
        buffer: *mut gst::GstBuffer,
        roi_type: *const c_char,
        x: c_uint,
        y: c_uint,
        w: c_uint,
        h: c_uint,
    ) -> *mut GstVideoRegionOfInterestMeta;
    pub fn gst_buffer_add_video_region_of_interest_meta_id(
        buffer: *mut gst::GstBuffer,
        roi_type: glib::GQuark,
        x: c_uint,
        y: c_uint,
        w: c_uint,
        h: c_uint,
    ) -> *mut GstVideoRegionOfInterestMeta;
    #[cfg(feature = "v1_22")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
    pub fn gst_buffer_add_video_sei_user_data_unregistered_meta(
        buffer: *mut gst::GstBuffer,
        uuid: *mut [u8; 16],
        data: *mut u8,
        size: size_t,
    ) -> *mut GstVideoSEIUserDataUnregisteredMeta;
    pub fn gst_buffer_add_video_time_code_meta(
        buffer: *mut gst::GstBuffer,
        tc: *const GstVideoTimeCode,
    ) -> *mut GstVideoTimeCodeMeta;
    pub fn gst_buffer_add_video_time_code_meta_full(
        buffer: *mut gst::GstBuffer,
        fps_n: c_uint,
        fps_d: c_uint,
        latest_daily_jam: *mut glib::GDateTime,
        flags: GstVideoTimeCodeFlags,
        hours: c_uint,
        minutes: c_uint,
        seconds: c_uint,
        frames: c_uint,
        field_count: c_uint,
    ) -> *mut GstVideoTimeCodeMeta;
    pub fn gst_buffer_get_video_meta(buffer: *mut gst::GstBuffer) -> *mut GstVideoMeta;
    pub fn gst_buffer_get_video_meta_id(
        buffer: *mut gst::GstBuffer,
        id: c_int,
    ) -> *mut GstVideoMeta;
    pub fn gst_buffer_get_video_region_of_interest_meta_id(
        buffer: *mut gst::GstBuffer,
        id: c_int,
    ) -> *mut GstVideoRegionOfInterestMeta;
    pub fn gst_buffer_pool_config_get_video_alignment(
        config: *const gst::GstStructure,
        align: *mut GstVideoAlignment,
    ) -> gboolean;
    pub fn gst_buffer_pool_config_set_video_alignment(
        config: *mut gst::GstStructure,
        align: *const GstVideoAlignment,
    );
    pub fn gst_is_video_overlay_prepare_window_handle_message(
        msg: *mut gst::GstMessage,
    ) -> gboolean;
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_afd_meta_api_get_type() -> GType;
    pub fn gst_video_affine_transformation_meta_api_get_type() -> GType;
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_bar_meta_api_get_type() -> GType;
    pub fn gst_video_blend(
        dest: *mut GstVideoFrame,
        src: *mut GstVideoFrame,
        x: c_int,
        y: c_int,
        global_alpha: c_float,
    ) -> gboolean;
    pub fn gst_video_blend_scale_linear_RGBA(
        src: *mut GstVideoInfo,
        src_buffer: *mut gst::GstBuffer,
        dest_height: c_int,
        dest_width: c_int,
        dest: *mut GstVideoInfo,
        dest_buffer: *mut *mut gst::GstBuffer,
    );
    pub fn gst_video_calculate_display_ratio(
        dar_n: *mut c_uint,
        dar_d: *mut c_uint,
        video_width: c_uint,
        video_height: c_uint,
        video_par_n: c_uint,
        video_par_d: c_uint,
        display_par_n: c_uint,
        display_par_d: c_uint,
    ) -> gboolean;
    #[cfg(feature = "v1_16")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
    pub fn gst_video_caption_meta_api_get_type() -> GType;
    #[cfg(feature = "v1_20")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
    pub fn gst_video_center_rect(
        src: *const GstVideoRectangle,
        dst: *const GstVideoRectangle,
        result: *mut GstVideoRectangle,
        scaling: gboolean,
    );
    pub fn gst_video_chroma_from_string(s: *const c_char) -> GstVideoChromaSite;
    pub fn gst_video_chroma_resample(
        resample: *mut GstVideoChromaResample,
        lines: *mut gpointer,
        width: c_int,
    );
    pub fn gst_video_chroma_to_string(site: GstVideoChromaSite) -> *const c_char;
    #[cfg(feature = "v1_20")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
    pub fn gst_video_codec_alpha_meta_api_get_type() -> GType;
    pub fn gst_video_color_transfer_decode(
        func: GstVideoTransferFunction,
        val: c_double,
    ) -> c_double;
    pub fn gst_video_color_transfer_encode(
        func: GstVideoTransferFunction,
        val: c_double,
    ) -> c_double;
    pub fn gst_video_convert_sample(
        sample: *mut gst::GstSample,
        to_caps: *const gst::GstCaps,
        timeout: gst::GstClockTime,
        error: *mut *mut glib::GError,
    ) -> *mut gst::GstSample;
    pub fn gst_video_convert_sample_async(
        sample: *mut gst::GstSample,
        to_caps: *const gst::GstCaps,
        timeout: gst::GstClockTime,
        callback: GstVideoConvertSampleCallback,
        user_data: gpointer,
        destroy_notify: glib::GDestroyNotify,
    );
    pub fn gst_video_crop_meta_api_get_type() -> GType;
    #[cfg(feature = "v1_26")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
    pub fn gst_video_dma_drm_format_from_gst_format(
        format: GstVideoFormat,
        modifier: *mut u64,
    ) -> u32;
    #[cfg(feature = "v1_26")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
    pub fn gst_video_dma_drm_format_to_gst_format(fourcc: u32, modifier: u64) -> GstVideoFormat;
    #[cfg(feature = "v1_24")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
    pub fn gst_video_dma_drm_fourcc_from_format(format: GstVideoFormat) -> u32;
    #[cfg(feature = "v1_24")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
    pub fn gst_video_dma_drm_fourcc_from_string(
        format_str: *const c_char,
        modifier: *mut u64,
    ) -> u32;
    #[cfg(feature = "v1_24")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
    pub fn gst_video_dma_drm_fourcc_to_format(fourcc: u32) -> GstVideoFormat;
    #[cfg(feature = "v1_24")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
    pub fn gst_video_dma_drm_fourcc_to_string(fourcc: u32, modifier: u64) -> *mut c_char;
    pub fn gst_video_event_is_force_key_unit(event: *mut gst::GstEvent) -> gboolean;
    pub fn gst_video_event_new_downstream_force_key_unit(
        timestamp: gst::GstClockTime,
        stream_time: gst::GstClockTime,
        running_time: gst::GstClockTime,
        all_headers: gboolean,
        count: c_uint,
    ) -> *mut gst::GstEvent;
    pub fn gst_video_event_new_still_frame(in_still: gboolean) -> *mut gst::GstEvent;
    pub fn gst_video_event_new_upstream_force_key_unit(
        running_time: gst::GstClockTime,
        all_headers: gboolean,
        count: c_uint,
    ) -> *mut gst::GstEvent;
    pub fn gst_video_event_parse_downstream_force_key_unit(
        event: *mut gst::GstEvent,
        timestamp: *mut gst::GstClockTime,
        stream_time: *mut gst::GstClockTime,
        running_time: *mut gst::GstClockTime,
        all_headers: *mut gboolean,
        count: *mut c_uint,
    ) -> gboolean;
    pub fn gst_video_event_parse_still_frame(
        event: *mut gst::GstEvent,
        in_still: *mut gboolean,
    ) -> gboolean;
    pub fn gst_video_event_parse_upstream_force_key_unit(
        event: *mut gst::GstEvent,
        running_time: *mut gst::GstClockTime,
        all_headers: *mut gboolean,
        count: *mut c_uint,
    ) -> gboolean;
    #[cfg(feature = "v1_24")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
    pub fn gst_video_formats_any(len: *mut c_uint) -> *const GstVideoFormat;
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_formats_raw(len: *mut c_uint) -> *const GstVideoFormat;
    pub fn gst_video_gl_texture_upload_meta_api_get_type() -> GType;
    pub fn gst_video_guess_framerate(
        duration: gst::GstClockTime,
        dest_n: *mut c_int,
        dest_d: *mut c_int,
    ) -> gboolean;
    #[cfg(feature = "v1_22")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
    pub fn gst_video_is_common_aspect_ratio(
        width: c_int,
        height: c_int,
        par_n: c_int,
        par_d: c_int,
    ) -> gboolean;
    #[cfg(feature = "v1_24")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
    pub fn gst_video_is_dma_drm_caps(caps: *const gst::GstCaps) -> gboolean;
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_make_raw_caps(
        formats: *const GstVideoFormat,
        len: c_uint,
    ) -> *mut gst::GstCaps;
    #[cfg(feature = "v1_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
    pub fn gst_video_make_raw_caps_with_features(
        formats: *const GstVideoFormat,
        len: c_uint,
        features: *mut gst::GstCapsFeatures,
    ) -> *mut gst::GstCaps;
    pub fn gst_video_meta_api_get_type() -> GType;
    pub fn gst_video_multiview_get_doubled_height_modes() -> *const gobject::GValue;
    pub fn gst_video_multiview_get_doubled_size_modes() -> *const gobject::GValue;
    pub fn gst_video_multiview_get_doubled_width_modes() -> *const gobject::GValue;
    pub fn gst_video_multiview_get_mono_modes() -> *const gobject::GValue;
    pub fn gst_video_multiview_get_unpacked_modes() -> *const gobject::GValue;
    pub fn gst_video_multiview_guess_half_aspect(
        mv_mode: GstVideoMultiviewMode,
        width: c_uint,
        height: c_uint,
        par_n: c_uint,
        par_d: c_uint,
    ) -> gboolean;
    pub fn gst_video_multiview_video_info_change_mode(
        info: *mut GstVideoInfo,
        out_mview_mode: GstVideoMultiviewMode,
        out_mview_flags: GstVideoMultiviewFlags,
    );
    pub fn gst_video_overlay_composition_meta_api_get_type() -> GType;
    pub fn gst_video_region_of_interest_meta_api_get_type() -> GType;
    #[cfg(feature = "v1_22")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
    pub fn gst_video_sei_user_data_unregistered_meta_api_get_type() -> GType;
    #[cfg(feature = "v1_22")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
    pub fn gst_video_sei_user_data_unregistered_parse_precision_time_stamp(
        user_data: *mut GstVideoSEIUserDataUnregisteredMeta,
        status: *mut u8,
        precision_time_stamp: *mut u64,
    ) -> gboolean;
    pub fn gst_video_tile_get_index(
        mode: GstVideoTileMode,
        x: c_int,
        y: c_int,
        x_tiles: c_int,
        y_tiles: c_int,
    ) -> c_uint;
    pub fn gst_video_time_code_meta_api_get_type() -> GType;

}
