// Copyright 2020 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#![allow(
    dead_code,
    non_camel_case_types,
    non_snake_case,
    non_upper_case_globals
)]

/*
automatically generated by rust-bindgen

generated with the command:
cd ${CHROMEOS_DIR}/src/platform2/ && \
bindgen arc/vm/libvda/libvda_common.h \
  -o arc/vm/libvda/rust/src/common/bindings.rs \
  --whitelist-type "video_.*"
*/

pub type __int32_t = ::std::os::raw::c_int;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct video_frame_plane {
    pub offset: i32,
    pub stride: i32,
}
#[test]
fn bindgen_test_layout_video_frame_plane() {
    assert_eq!(
        ::std::mem::size_of::<video_frame_plane>(),
        8usize,
        concat!("Size of: ", stringify!(video_frame_plane))
    );
    assert_eq!(
        ::std::mem::align_of::<video_frame_plane>(),
        4usize,
        concat!("Alignment of ", stringify!(video_frame_plane))
    );
    assert_eq!(
        unsafe { &(*(::std::ptr::null::<video_frame_plane>())).offset as *const _ as usize },
        0usize,
        concat!(
            "Offset of field: ",
            stringify!(video_frame_plane),
            "::",
            stringify!(offset)
        )
    );
    assert_eq!(
        unsafe { &(*(::std::ptr::null::<video_frame_plane>())).stride as *const _ as usize },
        4usize,
        concat!(
            "Offset of field: ",
            stringify!(video_frame_plane),
            "::",
            stringify!(stride)
        )
    );
}
pub type video_frame_plane_t = video_frame_plane;
pub const video_codec_profile_VIDEO_CODEC_PROFILE_UNKNOWN: video_codec_profile = -1;
pub const video_codec_profile_VIDEO_CODEC_PROFILE_MIN: video_codec_profile = -1;
pub const video_codec_profile_H264PROFILE_MIN: video_codec_profile = 0;
pub const video_codec_profile_H264PROFILE_BASELINE: video_codec_profile = 0;
pub const video_codec_profile_H264PROFILE_MAIN: video_codec_profile = 1;
pub const video_codec_profile_H264PROFILE_EXTENDED: video_codec_profile = 2;
pub const video_codec_profile_H264PROFILE_HIGH: video_codec_profile = 3;
pub const video_codec_profile_H264PROFILE_HIGH10PROFILE: video_codec_profile = 4;
pub const video_codec_profile_H264PROFILE_HIGH422PROFILE: video_codec_profile = 5;
pub const video_codec_profile_H264PROFILE_HIGH444PREDICTIVEPROFILE: video_codec_profile = 6;
pub const video_codec_profile_H264PROFILE_SCALABLEBASELINE: video_codec_profile = 7;
pub const video_codec_profile_H264PROFILE_SCALABLEHIGH: video_codec_profile = 8;
pub const video_codec_profile_H264PROFILE_STEREOHIGH: video_codec_profile = 9;
pub const video_codec_profile_H264PROFILE_MULTIVIEWHIGH: video_codec_profile = 10;
pub const video_codec_profile_H264PROFILE_MAX: video_codec_profile = 10;
pub const video_codec_profile_VP8PROFILE_MIN: video_codec_profile = 11;
pub const video_codec_profile_VP8PROFILE_ANY: video_codec_profile = 11;
pub const video_codec_profile_VP8PROFILE_MAX: video_codec_profile = 11;
pub const video_codec_profile_VP9PROFILE_MIN: video_codec_profile = 12;
pub const video_codec_profile_VP9PROFILE_PROFILE0: video_codec_profile = 12;
pub const video_codec_profile_VP9PROFILE_PROFILE1: video_codec_profile = 13;
pub const video_codec_profile_VP9PROFILE_PROFILE2: video_codec_profile = 14;
pub const video_codec_profile_VP9PROFILE_PROFILE3: video_codec_profile = 15;
pub const video_codec_profile_VP9PROFILE_MAX: video_codec_profile = 15;
pub const video_codec_profile_HEVCPROFILE_MIN: video_codec_profile = 16;
pub const video_codec_profile_HEVCPROFILE_MAIN: video_codec_profile = 16;
pub const video_codec_profile_HEVCPROFILE_MAIN10: video_codec_profile = 17;
pub const video_codec_profile_HEVCPROFILE_MAIN_STILL_PICTURE: video_codec_profile = 18;
pub const video_codec_profile_HEVCPROFILE_MAX: video_codec_profile = 18;
pub const video_codec_profile_DOLBYVISION_MIN: video_codec_profile = 19;
pub const video_codec_profile_DOLBYVISION_PROFILE0: video_codec_profile = 19;
pub const video_codec_profile_DOLBYVISION_PROFILE4: video_codec_profile = 20;
pub const video_codec_profile_DOLBYVISION_PROFILE5: video_codec_profile = 21;
pub const video_codec_profile_DOLBYVISION_PROFILE7: video_codec_profile = 22;
pub const video_codec_profile_DOLBYVISION_MAX: video_codec_profile = 22;
pub const video_codec_profile_THEORAPROFILE_MIN: video_codec_profile = 23;
pub const video_codec_profile_THEORAPROFILE_ANY: video_codec_profile = 23;
pub const video_codec_profile_THEORAPROFILE_MAX: video_codec_profile = 23;
pub const video_codec_profile_AV1PROFILE_MIN: video_codec_profile = 24;
pub const video_codec_profile_AV1PROFILE_PROFILE_MAIN: video_codec_profile = 24;
pub const video_codec_profile_AV1PROFILE_PROFILE_HIGH: video_codec_profile = 25;
pub const video_codec_profile_AV1PROFILE_PROFILE_PRO: video_codec_profile = 26;
pub const video_codec_profile_AV1PROFILE_MAX: video_codec_profile = 26;
pub const video_codec_profile_VIDEO_CODEC_PROFILE_MAX: video_codec_profile = 26;
pub type video_codec_profile = i32;
pub use self::video_codec_profile as video_codec_profile_t;
pub const video_pixel_format_YV12: video_pixel_format = 0;
pub const video_pixel_format_NV12: video_pixel_format = 1;
pub const video_pixel_format_PIXEL_FORMAT_MAX: video_pixel_format = 1;
pub type video_pixel_format = u32;
pub use self::video_pixel_format as video_pixel_format_t;
