use winter_matroska::TrackEntry; enum VPLevel { Level1 = 10, Level1_1 = 11, Level2 = 20, Level2_1 = 21, Level3 = 30, Level3_1 = 31, Level4 = 40, Level4_1 = 41, Level5 = 50, Level5_1 = 51, Level5_2 = 52, Level6 = 60, Level6_1 = 61, Level6_2 = 62, } struct VPLevelDef { level: VPLevel, max_luma_sample_rate: u64, max_luma_picture_size: u32, max_avg_bitrate: f64, max_cpb_size: f64, min_compression_ratio: f64, max_num_column_tiles: u8, min_altref_distance: u32, max_ref_frame_buffers: u8, } static LEVELS: &[VPLevelDef] = { #[allow(clippy::too_many_arguments)] const fn level( a: VPLevel, b: u64, c: u32, d: f64, e: f64, f: f64, g: u8, h: u32, i: u8, ) -> VPLevelDef { VPLevelDef { level: a, max_luma_sample_rate: b, max_luma_picture_size: c, max_avg_bitrate: d, max_cpb_size: e, min_compression_ratio: f, max_num_column_tiles: g, min_altref_distance: h, max_ref_frame_buffers: i, } } use VPLevel::*; #[rustfmt::skip] &[ level(Level1, 829440, 36864, 200., 400., 2., 1, 4, 8), level(Level1_1, 2764800, 73728, 800., 1000., 2., 1, 4, 8), level(Level2, 4608000, 122880, 1800., 1500., 2., 1, 4, 8), level(Level2_1, 9216000, 245760, 3600., 2800., 2., 2, 4, 8), level(Level3, 20736000, 552960, 7200., 6000., 2., 4, 4, 8), level(Level3_1, 36864000, 983040, 12000., 10000., 2., 4, 4, 8), level(Level4, 83558400, 2228224, 18000., 16000., 4., 4, 4, 8), level(Level4_1, 160432128, 2228224, 30000., 18000., 4., 4, 5, 6), level(Level5, 311951360, 8912896, 60000., 36000., 6., 8, 6, 4), level(Level5_1, 588251136, 8912896, 120000., 46000., 8., 8, 10, 4), level(Level5_2, 1176502272, 8912896, 180000., 90000., 8., 8, 10, 4), level(Level6, 1176502272, 35651584, 180000., 90000., 8., 16, 10, 4), level(Level6_1, 2353004544, 35651584, 240000., 180000., 8., 16, 10, 4), level(Level6_2, 4706009088, 35651584, 480000., 360000., 8., 16, 10, 4), ] }; pub fn vp9_codec_param(_te: &TrackEntry) -> String { "vp09.00.50.08".to_string() }