#![allow(clippy::too_many_arguments)]
#![allow(clippy::needless_range_loop)]
#![allow(clippy::collapsible_else_if)]
use alloc::boxed::Box;
use alloc::vec::Vec;
use core::default::Default;
use crate::common::types::*;
#[doc(hidden)]
#[derive(Clone, Copy, Debug, Default)]
pub struct BlockDiagnostic {
pub levels: [i32; 16],
pub eob_position: u8,
}
#[doc(hidden)]
#[derive(Clone, Debug, Default)]
pub struct MacroblockDiagnostic {
pub luma_mode: LumaMode,
pub chroma_mode: ChromaMode,
pub segment_id: u8,
pub coeffs_skipped: bool,
pub bpred_modes: [IntraMode; 16],
pub y2_block: BlockDiagnostic,
pub y_blocks: [BlockDiagnostic; 16],
pub uv_blocks: [BlockDiagnostic; 8],
}
#[doc(hidden)]
#[derive(Clone, Debug)]
pub struct DiagnosticFrame {
pub mb_width: u16,
pub mb_height: u16,
pub segments: [(i16, i16, i16, i16, i16, i16); 4],
pub macroblocks: Vec<MacroblockDiagnostic>,
pub token_probs: Box<TokenProbTreeNodes>,
pub partition0_size: u32,
}
#[doc(hidden)]
#[derive(Clone, Copy, Debug)]
pub struct TreeNode {
pub left: u8,
pub right: u8,
pub prob: Prob,
pub index: u8,
}
impl TreeNode {
pub(crate) const fn value_from_branch(t: u8) -> i8 {
(t & !0x80) as i8
}
}
type TokenProbTreeNodes = [[[[TreeNode; NUM_DCT_TOKENS - 1]; 3]; 8]; 4];