use bitflags::bitflags;
pub const V4L2_CTRL_WHICH_CUR_VAL: u32 = 0;
pub const V4L2_CTRL_WHICH_REQUEST_VAL: u32 = 0x0f010000;
bitflags! {
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub struct Vp8SegmentFlags: u32 {
const ENABLED = 0x01;
const UPDATE_MAP = 0x02;
const UPDATE_FEATURE_DATA = 0x04;
const DELTA_VALUE_MODE = 0x08;
}
}
#[repr(C)]
#[derive(Debug, Clone)]
pub struct v4l2_vp8_segment {
pub quant_update: [i8; 4],
pub lf_update: [i8; 4],
pub segment_probs: [u8; 3],
pub padding: u8,
pub flags: Vp8SegmentFlags,
}
bitflags! {
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub struct Vp8LoopFilter: u32 {
const ADJ_ENABLE = 0x01;
const DELTA_UPDATE = 0x02;
const FILTER_TYPE_SIMPLE = 0x04;
}
}
#[repr(C)]
#[derive(Debug, Clone)]
pub struct v4l2_vp8_loop_filter {
pub ref_frm_delta: [i8; 4],
pub mb_mode_delta: [i8; 4],
pub sharpness_level: u8,
pub level: u8,
pub padding: u16,
pub flags: Vp8LoopFilter,
}
#[repr(C)]
#[derive(Debug, Clone)]
pub struct v4l2_vp8_quantization {
pub y_ac_qi: u8,
pub y_dc_delta: i8,
pub y2_dc_delta: i8,
pub y2_ac_delta: i8,
pub uv_dc_delta: i8,
pub uv_ac_delta: i8,
pub padding: u16,
}
pub const V4L2_VP8_COEFF_PROB_CNT: usize = 11;
pub const V4L2_VP8_MV_PROB_CNT: usize = 19;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct v4l2_vp8_entropy {
pub coeff_probs: [[[[u8; V4L2_VP8_COEFF_PROB_CNT]; 3]; 8]; 4],
pub y_mode_probs: [u8; 4],
pub uv_mode_probs: [u8; 3],
pub mv_probs: [[u8; V4L2_VP8_MV_PROB_CNT]; 2],
pub padding: [u8; 3],
}
#[repr(C)]
#[derive(Debug, Clone)]
pub struct v4l2_vp8_entropy_coder_state {
pub range: u8,
pub value: u8,
pub bit_count: u8,
pub padding: u8,
}
bitflags! {
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub struct Vp8FrameFlags: u64 {
const KEY_FRAME = 0x01;
const EXPERIMENTAL = 0x02;
const SHOW_FRAME = 0x04;
const MB_NO_SKIP_COEFF = 0x08;
const SIGN_BIAS_GOLDEN = 0x10;
const SIGN_BIAS_ALT = 0x20;
}
}
pub const V4L2_CID_STATELESS_VP8_FRAME: u32 = (0x00a40000 | 0x900) + 200;
#[repr(C)]
#[derive(Debug, Clone)]
pub struct CtrlVp8Frame {
pub segment: v4l2_vp8_segment,
pub lf: v4l2_vp8_loop_filter,
pub quant: v4l2_vp8_quantization,
pub entropy: v4l2_vp8_entropy,
pub coder_state: v4l2_vp8_entropy_coder_state,
pub width: u16,
pub height: u16,
pub horizontal_scale: u8,
pub vertical_scale: u8,
pub version: u8,
pub prob_skip_false: u8,
pub prob_intra: u8,
pub prob_last: u8,
pub prob_gf: u8,
pub num_dct_parts: u8,
pub first_part_size: u32,
pub first_part_header_bits: u32,
pub dct_part_sizes: [u32; 8],
pub last_frame_ts: u64,
pub golden_frame_ts: u64,
pub alt_frame_ts: u64,
pub flags: Vp8FrameFlags,
}