split nihav-codec-support crate from nihav-core
[nihav.git] / nihav-realmedia / src / codecs / rv40.rs
CommitLineData
5641dccf
KS
1use nihav_core::formats;
2use nihav_core::frame::*;
3use nihav_core::io::bitreader::*;
4use nihav_core::io::codebook::*;
5use nihav_core::io::intcode::*;
6use nihav_core::codecs::*;
b4d5b851 7use nihav_codec_support::codecs::{MV, ZERO_MV};
47527732
KS
8use super::rv3040::*;
9use super::rv40dsp::*;
10
11struct AICCodeReader8 {
12 lengths: &'static [u8],
13 codes: &'static [u8],
14}
15
16impl CodebookDescReader<i8> for AICCodeReader8 {
17 fn bits(&mut self, idx: usize) -> u8 { self.lengths[idx] }
18 fn code(&mut self, idx: usize) -> u32 { self.codes[idx] as u32 }
19 fn sym (&mut self, idx: usize) -> i8 { idx as i8 }
20 fn len (&mut self) -> usize { self.lengths.len() }
21}
22
23struct AICCodeReader16 {
24 lengths: &'static [u8],
25 codes: &'static [u16],
26}
27
28impl CodebookDescReader<i8> for AICCodeReader16 {
29 fn bits(&mut self, idx: usize) -> u8 { self.lengths[idx] }
30 fn code(&mut self, idx: usize) -> u32 { self.codes[idx] as u32 }
31 fn sym (&mut self, idx: usize) -> i8 { idx as i8 }
32 fn len (&mut self) -> usize { self.lengths.len() }
33}
34
35struct TypeCodeReader {
36 lengths: &'static [u8],
37 codes: &'static [u8],
38 syms: &'static [MBType],
39}
40
41impl CodebookDescReader<MBType> for TypeCodeReader {
42 fn bits(&mut self, idx: usize) -> u8 { self.lengths[idx] }
43 fn code(&mut self, idx: usize) -> u32 { self.codes[idx] as u32 }
44 fn sym (&mut self, idx: usize) -> MBType{ self.syms[idx] }
45 fn len (&mut self) -> usize { self.lengths.len() }
46}
47
48struct RealVideo40BR {
49 width: usize,
50 height: usize,
51 aic_top_cb: Codebook<i8>,
52 aic_mode1_cb: Vec<Codebook<i8>>,
53 aic_mode2_cb: Vec<Codebook<i8>>,
54 ptype_cb: Vec<Codebook<MBType>>,
55 btype_cb: Vec<Codebook<MBType>>,
56 had_skip_run: bool,
57}
58
59impl RealVideo40BR {
60 fn new() -> Self {
61 let mut coderead = AICCodeReader8{ lengths: &RV40_AIC_TOP_BITS, codes: &RV40_AIC_TOP_CODES };
62 let aic_top_cb = Codebook::new(&mut coderead, CodebookMode::MSB).unwrap();
63
64 let mut aic_mode1_cb: Vec<Codebook<i8>> = Vec::with_capacity(RV40_AIC_MODE1_BITS.len());
65 for i in 0..RV40_AIC_MODE1_BITS.len() {
66 if (i % 10) != 9 {
67 let mut coderead = AICCodeReader8{ lengths: &RV40_AIC_MODE1_BITS[i], codes: &RV40_AIC_MODE1_CODES[i] };
68 let cb = Codebook::new(&mut coderead, CodebookMode::MSB).unwrap();
69 aic_mode1_cb.push(cb);
70 } else {
71 let mut coderead = AICCodeReader8{ lengths: &RV40_AIC_MODE1_BITS_DUMMY, codes: &RV40_AIC_MODE1_CODES_DUMMY };
72 let cb = Codebook::new(&mut coderead, CodebookMode::MSB).unwrap();
73 aic_mode1_cb.push(cb);
74 }
75 }
76
77 let mut aic_mode2_cb: Vec<Codebook<i8>> = Vec::with_capacity(RV40_AIC_MODE2_BITS.len());
78 for i in 0..RV40_AIC_MODE2_BITS.len() {
79 let mut coderead = AICCodeReader16{ lengths: &RV40_AIC_MODE2_BITS[i], codes: &RV40_AIC_MODE2_CODES[i] };
80 let cb = Codebook::new(&mut coderead, CodebookMode::MSB).unwrap();
81 aic_mode2_cb.push(cb);
82 }
83
84 let mut ptype_cb: Vec<Codebook<MBType>> = Vec::with_capacity(RV40_PTYPE_BITS.len());
85 for i in 0..RV40_PTYPE_BITS.len() {
86 let mut coderead = TypeCodeReader{ lengths: &RV40_PTYPE_BITS[i], codes: &RV40_PTYPE_CODES[i], syms: RV40_PTYPE_SYMS };
87 let cb = Codebook::new(&mut coderead, CodebookMode::MSB).unwrap();
88 ptype_cb.push(cb);
89 }
90
91 let mut btype_cb: Vec<Codebook<MBType>> = Vec::with_capacity(RV40_BTYPE_BITS.len());
92 for i in 0..RV40_BTYPE_BITS.len() {
93 let mut coderead = TypeCodeReader{ lengths: &RV40_BTYPE_BITS[i], codes: &RV40_BTYPE_CODES[i], syms: RV40_BTYPE_SYMS };
94 let cb = Codebook::new(&mut coderead, CodebookMode::MSB).unwrap();
95 btype_cb.push(cb);
96 }
97
98 RealVideo40BR {
99 width: 0,
100 height: 0,
e07387c7
KS
101 aic_top_cb,
102 aic_mode1_cb,
103 aic_mode2_cb,
104 ptype_cb,
105 btype_cb,
47527732
KS
106 had_skip_run: false,
107 }
108 }
e07387c7 109 fn predict_b_mv_component(&self, sstate: &SState, mvi: &MVInfo, mbinfo: &[RV34MBInfo], mbtype: MBType, fwd: bool) -> MV {
47527732
KS
110 let mut pred_mvs: [MV; 3] = [ZERO_MV; 3];
111 let mut mv_count: usize = 0;
112 let mb_x = sstate.mb_x;
113 let mb_y = sstate.mb_y;
114 let mb_stride = sstate.mb_w;
115 let mb_idx = mb_x + mb_y * mb_stride;
116
117 if !mbtype.has_mv_dir(fwd) {
118 return ZERO_MV;
119 }
120
121 if sstate.has_left && mbinfo[mb_idx - 1].mbtype.has_mv_dir(fwd) {
122 pred_mvs[mv_count] = mvi.get_mv(mb_x - 1, mb_y, 0, 0, fwd);
123 mv_count += 1;
124 }
125 if !sstate.has_top {
126 return pred_mvs[0];
127 }
128 if mbinfo[mb_idx - mb_stride].mbtype.has_mv_dir(fwd) {
129 pred_mvs[mv_count] = mvi.get_mv(mb_x, mb_y - 1, 0, 0, fwd);
130 mv_count += 1;
131 }
132 if sstate.has_tr {
133 if mbinfo[mb_idx - mb_stride + 1].mbtype.has_mv_dir(fwd) {
134 pred_mvs[mv_count] = mvi.get_mv(mb_x + 1, mb_y - 1, 0, 0, fwd);
135 mv_count += 1;
136 }
137 } else {
138 if sstate.has_tl && mbinfo[mb_idx - mb_stride - 1].mbtype.has_mv_dir(fwd) {
139 pred_mvs[mv_count] = mvi.get_mv(mb_x - 1, mb_y - 1, 0, 0, fwd);
140 mv_count += 1;
141 }
142 }
143
144 match mv_count {
145 3 => MV::pred(pred_mvs[0], pred_mvs[1], pred_mvs[2]),
146 2 => { let sum_mv = pred_mvs[0] + pred_mvs[1]; MV { x: sum_mv.x / 2, y: sum_mv.y / 2 } },
147 1 => pred_mvs[0],
148 _ => ZERO_MV,
149 }
150 }
151}
152
153fn get_dimension(br: &mut BitReader, tab: &'static [i16]) -> DecoderResult<usize> {
154 let t = br.read(3)? as usize;
155 if tab[t] > 0 { return Ok(tab[t] as usize); }
156 if tab[t] < 0 {
157 let idx = (-tab[t] as usize) + (br.read(1)? as usize);
158 if tab[idx] != 0 { return Ok(tab[idx] as usize); }
159 }
160 let mut size: usize = 0;
161 loop {
162 let t = br.read(8)? as usize;
163 size += t << 2;
164 if t != 255 { break; }
165 }
166 Ok(size)
167}
168
169impl RV34BitstreamDecoder for RealVideo40BR {
170 fn decode_slice_header(&mut self, br: &mut BitReader, old_w: usize, old_h: usize) -> DecoderResult<RV34SliceHeader> {
171 if br.read(1)? != 0 { return Err(DecoderError::InvalidData); }
172 let ft_idx = br.read(2)?;
173 let ftype = match ft_idx {
174 0|1 => FrameType::I,
175 2 => FrameType::P,
176 _ => FrameType::B,
177 };
178 let q = br.read(5)? as u8;
179 if br.read(2)? != 0 { return Err(DecoderError::InvalidData); }
180 let set_idx = br.read(2)? as usize;
181 let deblock = !br.read_bool()?;
182 let pts = br.read(13)? as u16;
183 let w;
184 let h;
185 if (ftype == FrameType::I) || !br.read_bool()? {
186 w = get_dimension(br, &RV40_STANDARD_WIDTHS)?;
187 h = get_dimension(br, &RV40_STANDARD_HEIGHTS)?;
188 } else {
189 w = old_w;
190 h = old_h;
191 }
192 let start = br.read(get_slice_start_offset_bits(w, h))? as usize;
47527732
KS
193
194 self.had_skip_run = false;
195
e07387c7 196 Ok(RV34SliceHeader{ ftype, quant: q, deblock, pts, width: w, height: h, start, end: 0, set_idx })
47527732
KS
197 }
198 fn decode_intra_pred(&mut self, br: &mut BitReader, types: &mut [i8], mut pos: usize, tstride: usize, has_top: bool) -> DecoderResult<()> {
199 let start;
47527732
KS
200 if has_top {
201 start = 0;
202 } else {
203 let code = br.read_cb(&self.aic_top_cb)?;
204 types[pos + 0] = (code >> 2) & 2;
205 types[pos + 1] = (code >> 1) & 2;
206 types[pos + 2] = (code >> 0) & 2;
207 types[pos + 3] = (code << 1) & 2;
47527732
KS
208 pos += tstride;
209 start = 1;
210 }
211 for _ in start..4 {
212 let mut x: usize = 0;
213 while x < 4 {
214 let tr = types[pos + x - tstride + 1];
215 let t = types[pos + x - tstride];
216 let l = types[pos + x - 1];
47527732
KS
217 let ctx = if x < 3 { ((tr & 0xF) as u16) + (((t as u16) & 0xF) << 4) + (((l as u16) & 0xF) << 8) } else { 0xFFF };
218 let res = RV40_AIC_PATTERNS.iter().position(|&x| x == ctx);
219 if let Some(idx) = res {
220 let code = br.read_cb(&self.aic_mode2_cb[idx])?;
221 types[pos + x + 0] = code / 9;
222 types[pos + x + 1] = code % 9;
47527732
KS
223 x += 2;
224 } else {
225 if (t != -1) && (l != -1) {
226 let idx = (t as usize) + (l as usize) * 10;
227 types[pos + x] = br.read_cb(&self.aic_mode1_cb[idx])?;
228 } else {
229 match l {
230 -1 if t < 2 => { types[pos + x] = (br.read(1)? as i8) ^ 1; },
231 0 | 2 => { types[pos + x] = ((br.read(1)? as i8) ^ 1) << 1; },
232 _ => { types[pos + x] = 0; },
233 };
234 }
47527732
KS
235 x += 1;
236 }
237 }
238 pos += tstride;
239 }
240 Ok(())
241 }
242 fn decode_inter_mb_hdr(&mut self, br: &mut BitReader, ftype: FrameType, mbtype_ref: MBType) -> DecoderResult<MBInfo> {
243 let skip_run = if self.had_skip_run { 0 } else { br.read_code(UintCodeType::Gamma)? as usize };
244 if skip_run > 0 {
245 self.had_skip_run = true;
246 return Ok(MBInfo { mbtype: MBType::MBSkip, skip_run: skip_run - 1, dquant: false })
247 }
248 self.had_skip_run = false;
249 let mut mbtype;
250 let idx;
251 if ftype == FrameType::P {
252 idx = match mbtype_ref {
253 MBType::MBIntra => 0,
254 MBType::MBIntra16 => 1,
255 MBType::MBP16x16 => 2,
256 MBType::MBP8x8 => 3,
257 MBType::MBP16x8 => 4,
258 MBType::MBP8x16 => 5,
259 MBType::MBP16x16Mix => 6,
260 _ => unreachable!(),
261 };
262 mbtype = br.read_cb(&self.ptype_cb[idx])?;
263 } else {
264 idx = match mbtype_ref {
265 MBType::MBIntra => 0,
266 MBType::MBIntra16 => 1,
267 MBType::MBForward => 2,
268 MBType::MBBackward => 3,
269 MBType::MBBidir => 4,
270 MBType::MBDirect => 5,
271 _ => 0,
272 };
273 mbtype = br.read_cb(&self.btype_cb[idx])?;
274 }
275 let dquant = mbtype == MBType::Invalid;
276 if dquant {
277 mbtype = if ftype == FrameType::P { br.read_cb(&self.ptype_cb[idx])? }
278 else { br.read_cb(&self.btype_cb[idx])? };
279 }
e07387c7 280 Ok(MBInfo { mbtype, skip_run: 0, dquant })
47527732 281 }
e07387c7 282 fn predict_b_mv(&self, sstate: &SState, mvi: &MVInfo, mbtype: MBType, mvs: &[MV], mbinfo: &[RV34MBInfo]) -> (MV, MV) {
47527732
KS
283 let mut mv_f = self.predict_b_mv_component(sstate, mvi, mbinfo, mbtype, true);
284 let mut mv_b = self.predict_b_mv_component(sstate, mvi, mbinfo, mbtype, false);
285
286 match mbtype {
287 MBType::MBForward => { mv_f += mvs[0]; },
288 MBType::MBBackward => { mv_b += mvs[0]; },
289 MBType::MBBidir => {
290 mv_f += mvs[0];
291 mv_b += mvs[1];
292 },
293 _ => {},
294 };
295
296 (mv_f, mv_b)
297 }
298 fn quant_dc(&self, is_intra: bool, q: u8) -> u8 { RV40_QUANT_DC[if is_intra { 0 } else { 1 }][q as usize] }
299}
300
301struct RealVideo40Decoder {
302 bd: RealVideo40BR,
2422d969 303 info: NACodecInfoRef,
47527732
KS
304 dec: RV34Decoder,
305}
306
307impl RealVideo40Decoder {
308 fn new() -> Self {
309 RealVideo40Decoder{
310 bd: RealVideo40BR::new(),
2422d969 311 info: NACodecInfoRef::default(),
47527732
KS
312 dec: RV34Decoder::new(false, Box::new(RV40DSP::new())),
313 }
314 }
315}
316
317impl NADecoder for RealVideo40Decoder {
3c69ce1b 318 fn init(&mut self, supp: &mut NADecoderSupport, info: NACodecInfoRef) -> DecoderResult<()> {
47527732
KS
319 if let NACodecTypeInfo::Video(vinfo) = info.get_properties() {
320 let fmt = formats::YUV420_FORMAT;
321 let myinfo = NACodecTypeInfo::Video(NAVideoInfo::new(0, 0, false, fmt));
2422d969 322 self.info = NACodecInfo::new_ref(info.get_name(), myinfo, info.get_extradata()).into_ref();
47527732
KS
323
324 let edata = info.get_extradata().unwrap();
325 let src: &[u8] = &edata;
326
327{
328println!("edata:");
e07387c7 329for i in 0..src.len() { print!(" {:02X}", src[i]); } println!();
47527732
KS
330}
331 if src.len() < 2 { return Err(DecoderError::InvalidData); }
332
333 self.bd.width = vinfo.get_width();
334 self.bd.height = vinfo.get_height();
3c69ce1b
KS
335
336 supp.pool_u8.set_dec_bufs(3);
337 supp.pool_u8.prealloc_video(NAVideoInfo::new(self.bd.width, self.bd.height, false, fmt), 4)?;
338
47527732
KS
339 Ok(())
340 } else {
341println!("???");
342 Err(DecoderError::InvalidData)
343 }
344 }
3c69ce1b 345 fn decode(&mut self, supp: &mut NADecoderSupport, pkt: &NAPacket) -> DecoderResult<NAFrameRef> {
47527732
KS
346 let src = pkt.get_buffer();
347
3c69ce1b 348 let (bufinfo, ftype, ts) = self.dec.parse_frame(supp, src.as_slice(), &mut self.bd)?;
47527732
KS
349
350 let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), bufinfo);
351 frm.set_keyframe(ftype == FrameType::I);
352 frm.set_frame_type(ftype);
353 frm.set_pts(Some(ts));
171860fc 354 Ok(frm.into_ref())
47527732 355 }
f9be4e75
KS
356 fn flush(&mut self) {
357 self.dec.flush();
358 }
47527732
KS
359}
360
08a1fab7 361pub fn get_decoder() -> Box<dyn NADecoder + Send> {
47527732
KS
362 Box::new(RealVideo40Decoder::new())
363}
364
365#[cfg(test)]
366mod test {
3167c45c
KS
367 use nihav_core::codecs::RegisteredDecoders;
368 use nihav_core::demuxers::RegisteredDemuxers;
369 use nihav_core::test::dec_video::*;
e64739f8
KS
370 use crate::realmedia_register_all_codecs;
371 use crate::realmedia_register_all_demuxers;
47527732
KS
372 #[test]
373 fn test_rv40() {
3167c45c
KS
374 let mut dmx_reg = RegisteredDemuxers::new();
375 realmedia_register_all_demuxers(&mut dmx_reg);
376 let mut dec_reg = RegisteredDecoders::new();
377 realmedia_register_all_codecs(&mut dec_reg);
378
47527732 379// test_file_decoding("realmedia", "assets/RV/rv40_ralf.rmvb", Some(1000), true, false, /*None*/Some("rv40"));
3167c45c 380 test_file_decoding("realmedia", "assets/RV/rv40_weighted_mc.rmvb", Some(400), true, false, None/*Some("rv40")*/, &dmx_reg, &dec_reg);
47527732 381// test_file_decoding("realmedia", "assets/RV/rv40_weighted_mc_2.rmvb", Some(1000), true, false, /*None*/Some("rv40"));
a1f26d1b 382//panic!("end");
47527732
KS
383 }
384}
385
386const RV40_STANDARD_WIDTHS: [i16; 8] = [ 160, 172, 240, 320, 352, 640, 704, 0 ];
387const RV40_STANDARD_HEIGHTS: [i16; 12] = [ 120, 132, 144, 240, 288, 480, -8, -10, 180, 360, 576, 0 ];
388
389const RV40_QUANT_DC: [[u8; 32]; 2] = [
390 [
391 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
392 16, 17, 17, 18, 18, 18, 19, 19, 19, 20, 20, 20, 22, 22, 22, 22
393 ], [
394 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
395 16, 17, 18, 19, 20, 20, 21, 21, 22, 23, 23, 23, 24, 24, 24, 24
396 ]
397];
398
399const RV40_AIC_PATTERNS: [u16; 20] = [
400 0x000, 0x100, 0x200,
401 0x011, 0x111, 0x211, 0x511, 0x611,
402 0x022, 0x122, 0x222, 0x722,
403 0x272, 0x227,
404 0x822, 0x282, 0x228,
405 0x112, 0x116, 0x221
406];
407
408const RV40_AIC_TOP_CODES: [u8; 16] = [
409 0x01, 0x05, 0x01, 0x00, 0x03, 0x3D, 0x1D, 0x02,
410 0x04, 0x3C, 0x3F, 0x1C, 0x0D, 0x3E, 0x0C, 0x01
411];
412const RV40_AIC_TOP_BITS: [u8; 16] = [
413 1, 4, 5, 5, 5, 7, 6, 5, 4, 7, 7, 6, 5, 7, 5, 3
414];
415
416const RV40_AIC_MODE1_CODES_DUMMY: [u8; 1] = [ 0 ];
417const RV40_AIC_MODE1_BITS_DUMMY: [u8; 1] = [ 1 ];
418
419const RV40_AIC_MODE1_CODES: [[u8; 9]; 90] = [
420 [ 0x01, 0x01, 0x01, 0x11, 0x00, 0x09, 0x03, 0x10, 0x05 ],
421 [ 0x09, 0x01, 0x01, 0x05, 0x11, 0x00, 0x03, 0x21, 0x20 ],
422 [ 0x01, 0x01, 0x01, 0x11, 0x09, 0x10, 0x05, 0x00, 0x03 ],
423 [ 0x01, 0x01, 0x00, 0x03, 0x21, 0x05, 0x09, 0x20, 0x11 ],
424 [ 0x01, 0x09, 0x00, 0x29, 0x08, 0x15, 0x03, 0x0B, 0x28 ],
425 [ 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x03, 0x02 ],
426 [ 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x01, 0x09, 0x08 ],
427 [ 0x01, 0x01, 0x01, 0x09, 0x01, 0x08, 0x00, 0x03, 0x05 ],
428 [ 0x01, 0x01, 0x01, 0x00, 0x05, 0x11, 0x09, 0x10, 0x03 ],
429 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
430
431 [ 0x01, 0x01, 0x01, 0x05, 0x01, 0x00, 0x03, 0x09, 0x08 ],
432 [ 0x09, 0x01, 0x01, 0x05, 0x11, 0x00, 0x03, 0x21, 0x20 ],
433 [ 0x01, 0x01, 0x01, 0x0D, 0x05, 0x04, 0x00, 0x07, 0x0C ],
434 [ 0x01, 0x01, 0x00, 0x05, 0x11, 0x03, 0x09, 0x21, 0x20 ],
435 [ 0x05, 0x01, 0x01, 0x11, 0x00, 0x09, 0x03, 0x21, 0x20 ],
436 [ 0x09, 0x01, 0x01, 0x00, 0x05, 0x01, 0x03, 0x11, 0x10 ],
437 [ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x03, 0x02 ],
438 [ 0x01, 0x01, 0x01, 0x09, 0x00, 0x05, 0x01, 0x03, 0x08 ],
439 [ 0x01, 0x01, 0x01, 0x09, 0x11, 0x05, 0x00, 0x10, 0x03 ],
440 [ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
441
442 [ 0x01, 0x00, 0x01, 0x09, 0x08, 0x15, 0x14, 0x0B, 0x03 ],
443 [ 0x0D, 0x01, 0x01, 0x05, 0x0C, 0x04, 0x01, 0x00, 0x07 ],
444 [ 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x03, 0x01, 0x01 ],
445 [ 0x05, 0x01, 0x01, 0x04, 0x19, 0x07, 0x18, 0x0D, 0x00 ],
446 [ 0x11, 0x09, 0x01, 0x21, 0x05, 0x20, 0x01, 0x00, 0x03 ],
447 [ 0x41, 0x01, 0x00, 0x05, 0x40, 0x03, 0x09, 0x21, 0x11 ],
448 [ 0x29, 0x01, 0x00, 0x28, 0x09, 0x15, 0x03, 0x08, 0x0B ],
449 [ 0x01, 0x00, 0x01, 0x11, 0x09, 0x10, 0x05, 0x01, 0x03 ],
450 [ 0x05, 0x01, 0x01, 0x04, 0x0D, 0x0C, 0x07, 0x00, 0x01 ],
451 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
452
453 [ 0x01, 0x00, 0x03, 0x05, 0x11, 0x10, 0x25, 0x24, 0x13 ],
454 [ 0x21, 0x01, 0x01, 0x00, 0x11, 0x03, 0x05, 0x20, 0x09 ],
455 [ 0x01, 0x01, 0x01, 0x00, 0x09, 0x11, 0x10, 0x05, 0x03 ],
456 [ 0x21, 0x05, 0x01, 0x01, 0x09, 0x00, 0x11, 0x20, 0x03 ],
457 [ 0x05, 0x01, 0x00, 0x04, 0x01, 0x19, 0x07, 0x18, 0x0D ],
458 [ 0x11, 0x01, 0x00, 0x01, 0x09, 0x01, 0x03, 0x10, 0x05 ],
459 [ 0x1D, 0x01, 0x05, 0x0D, 0x0C, 0x04, 0x00, 0x1C, 0x0F ],
460 [ 0x05, 0x19, 0x01, 0x04, 0x00, 0x18, 0x1B, 0x1A, 0x07 ],
461 [ 0x09, 0x01, 0x00, 0x01, 0x05, 0x03, 0x11, 0x10, 0x01 ],
462 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
463
464 [ 0x01, 0x00, 0x03, 0x41, 0x05, 0x40, 0x09, 0x11, 0x21 ],
465 [ 0x05, 0x01, 0x01, 0x19, 0x04, 0x07, 0x00, 0x18, 0x0D ],
466 [ 0x01, 0x01, 0x01, 0x05, 0x01, 0x04, 0x01, 0x00, 0x03 ],
467 [ 0x01, 0x05, 0x00, 0x0D, 0x01, 0x04, 0x07, 0x19, 0x18 ],
468 [ 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x03, 0x02 ],
469 [ 0x31, 0x01, 0x05, 0x19, 0x04, 0x07, 0x00, 0x30, 0x0D ],
470 [ 0x01, 0x00, 0x03, 0x11, 0x01, 0x05, 0x01, 0x09, 0x10 ],
471 [ 0x01, 0x05, 0x01, 0x11, 0x01, 0x10, 0x00, 0x03, 0x09 ],
472 [ 0x01, 0x09, 0x00, 0x29, 0x03, 0x08, 0x28, 0x15, 0x0B ],
473 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
474
475 [ 0x01, 0x01, 0x00, 0x09, 0x15, 0x03, 0x08, 0x14, 0x0B ],
476 [ 0x11, 0x01, 0x01, 0x00, 0x09, 0x01, 0x03, 0x10, 0x05 ],
477 [ 0x01, 0x00, 0x03, 0x25, 0x11, 0x05, 0x10, 0x24, 0x13 ],
478 [ 0x11, 0x01, 0x00, 0x01, 0x09, 0x01, 0x05, 0x10, 0x03 ],
479 [ 0x05, 0x01, 0x00, 0x0D, 0x0C, 0x04, 0x0F, 0x1D, 0x1C ],
480 [ 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x03, 0x02 ],
481 [ 0x21, 0x01, 0x05, 0x09, 0x11, 0x00, 0x03, 0x41, 0x40 ],
482 [ 0x05, 0x01, 0x00, 0x1D, 0x1C, 0x0D, 0x0C, 0x0F, 0x04 ],
483 [ 0x05, 0x01, 0x00, 0x0D, 0x31, 0x04, 0x19, 0x30, 0x07 ],
484 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
485
486 [ 0x01, 0x01, 0x00, 0x21, 0x05, 0x11, 0x03, 0x09, 0x20 ],
487 [ 0x01, 0x01, 0x00, 0x11, 0x03, 0x05, 0x01, 0x09, 0x10 ],
488 [ 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x03, 0x02 ],
489 [ 0x05, 0x01, 0x04, 0x19, 0x07, 0x0D, 0x00, 0x31, 0x30 ],
490 [ 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x03, 0x02 ],
491 [ 0x05, 0x01, 0x01, 0x11, 0x09, 0x00, 0x03, 0x21, 0x20 ],
492 [ 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x03, 0x02 ],
493 [ 0x01, 0x01, 0x01, 0x00, 0x01, 0x03, 0x01, 0x01, 0x02 ],
494 [ 0x09, 0x01, 0x00, 0x29, 0x08, 0x15, 0x03, 0x28, 0x0B ],
495 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
496
497 [ 0x01, 0x01, 0x01, 0x05, 0x01, 0x04, 0x00, 0x01, 0x03 ],
498 [ 0x09, 0x01, 0x00, 0x29, 0x28, 0x15, 0x08, 0x03, 0x0B ],
499 [ 0x01, 0x00, 0x01, 0x11, 0x05, 0x10, 0x09, 0x01, 0x03 ],
500 [ 0x05, 0x04, 0x01, 0x1D, 0x0D, 0x0C, 0x1C, 0x00, 0x0F ],
501 [ 0x09, 0x11, 0x01, 0x41, 0x00, 0x40, 0x05, 0x03, 0x21 ],
502 [ 0x0D, 0x05, 0x01, 0x1D, 0x1C, 0x0C, 0x04, 0x00, 0x0F ],
503 [ 0x41, 0x09, 0x01, 0x40, 0x00, 0x11, 0x05, 0x03, 0x21 ],
504 [ 0x01, 0x01, 0x01, 0x05, 0x01, 0x04, 0x00, 0x01, 0x03 ],
505 [ 0x05, 0x04, 0x01, 0x0D, 0x01, 0x0C, 0x07, 0x01, 0x00 ],
506 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
507
508 [ 0x05, 0x04, 0x01, 0x07, 0x19, 0x31, 0x30, 0x0D, 0x00 ],
509 [ 0x21, 0x01, 0x01, 0x00, 0x11, 0x09, 0x20, 0x05, 0x03 ],
510 [ 0x05, 0x01, 0x01, 0x04, 0x07, 0x0D, 0x0C, 0x00, 0x01 ],
511 [ 0x21, 0x09, 0x01, 0x00, 0x20, 0x05, 0x23, 0x22, 0x03 ],
512 [ 0x31, 0x0D, 0x01, 0x19, 0x05, 0x30, 0x04, 0x07, 0x00 ],
513 [ 0x31, 0x05, 0x01, 0x04, 0x19, 0x00, 0x0D, 0x30, 0x07 ],
514 [ 0x31, 0x01, 0x00, 0x0D, 0x05, 0x19, 0x04, 0x30, 0x07 ],
515 [ 0x01, 0x01, 0x01, 0x00, 0x01, 0x03, 0x02, 0x01, 0x01 ],
516 [ 0x01, 0x00, 0x01, 0x01, 0x05, 0x09, 0x08, 0x03, 0x01 ],
517 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
518];
519static RV40_AIC_MODE1_BITS: [[u8; 9]; 90] = [
520 [ 1, 4, 2, 7, 4, 6, 4, 7, 5 ],
521 [ 5, 1, 3, 4, 6, 3, 3, 7, 7 ],
522 [ 1, 4, 2, 7, 6, 7, 5, 4, 4 ],
523 [ 1, 3, 3, 3, 7, 4, 5, 7, 6 ],
524 [ 2, 4, 2, 6, 4, 5, 2, 4, 6 ],
525 [ 7, 2, 3, 4, 7, 1, 5, 7, 7 ],
526 [ 5, 1, 3, 6, 5, 5, 2, 7, 7 ],
527 [ 2, 5, 1, 7, 3, 7, 5, 5, 6 ],
528 [ 2, 4, 1, 4, 5, 7, 6, 7, 4 ],
529 [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
530
531 [ 2, 1, 3, 6, 5, 5, 5, 7, 7 ],
532 [ 5, 1, 3, 4, 6, 3, 3, 7, 7 ],
533 [ 4, 1, 2, 6, 5, 5, 4, 5, 6 ],
534 [ 3, 1, 3, 4, 6, 3, 5, 7, 7 ],
535 [ 4, 1, 3, 6, 3, 5, 3, 7, 7 ],
536 [ 6, 1, 4, 4, 5, 2, 4, 7, 7 ],
537 [ 7, 1, 5, 7, 4, 3, 2, 7, 7 ],
538 [ 5, 3, 2, 7, 5, 6, 1, 5, 7 ],
539 [ 4, 1, 2, 6, 7, 5, 4, 7, 4 ],
540 [ 1, 0, 1, 0, 0, 0, 0, 0, 0 ],
541
542 [ 3, 3, 1, 5, 5, 6, 6, 5, 3 ],
543 [ 6, 2, 1, 5, 6, 5, 4, 4, 5 ],
544 [ 6, 4, 1, 7, 6, 7, 6, 3, 2 ],
545 [ 4, 3, 1, 4, 6, 4, 6, 5, 3 ],
546 [ 6, 5, 1, 7, 4, 7, 3, 3, 3 ],
547 [ 7, 2, 2, 3, 7, 2, 4, 6, 5 ],
548 [ 6, 2, 2, 6, 4, 5, 2, 4, 4 ],
549 [ 4, 4, 1, 7, 6, 7, 5, 2, 4 ],
550 [ 5, 4, 1, 5, 6, 6, 5, 4, 2 ],
551 [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
552
553 [ 2, 2, 2, 3, 5, 5, 6, 6, 5 ],
554 [ 7, 1, 3, 3, 6, 3, 4, 7, 5 ],
555 [ 2, 4, 1, 4, 6, 7, 7, 5, 4 ],
556 [ 7, 4, 3, 1, 5, 3, 6, 7, 3 ],
557 [ 4, 3, 3, 4, 1, 6, 4, 6, 5 ],
558 [ 7, 4, 4, 2, 6, 1, 4, 7, 5 ],
559 [ 5, 2, 3, 4, 4, 3, 2, 5, 4 ],
560 [ 3, 5, 2, 3, 2, 5, 5, 5, 3 ],
561 [ 6, 4, 4, 2, 5, 4, 7, 7, 1 ],
562 [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
563
564 [ 2, 2, 2, 7, 3, 7, 4, 5, 6 ],
565 [ 4, 1, 3, 6, 4, 4, 3, 6, 5 ],
566 [ 2, 4, 1, 7, 3, 7, 6, 6, 6 ],
567 [ 3, 4, 3, 5, 1, 4, 4, 6, 6 ],
568 [ 4, 5, 2, 7, 1, 7, 3, 7, 7 ],
569 [ 6, 2, 3, 5, 3, 3, 2, 6, 4 ],
570 [ 4, 4, 4, 7, 2, 5, 1, 6, 7 ],
571 [ 4, 5, 2, 7, 1, 7, 4, 4, 6 ],
572 [ 2, 4, 2, 6, 2, 4, 6, 5, 4 ],
573 [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
574
575 [ 1, 3, 3, 5, 6, 3, 5, 6, 5 ],
576 [ 7, 1, 4, 4, 6, 2, 4, 7, 5 ],
577 [ 2, 2, 2, 6, 5, 3, 5, 6, 5 ],
578 [ 7, 4, 4, 2, 6, 1, 5, 7, 4 ],
579 [ 3, 2, 2, 4, 4, 3, 4, 5, 5 ],
580 [ 7, 2, 5, 3, 7, 1, 4, 7, 7 ],
581 [ 6, 2, 3, 4, 5, 2, 2, 7, 7 ],
582 [ 3, 2, 2, 5, 5, 4, 4, 4, 3 ],
583 [ 3, 2, 2, 4, 6, 3, 5, 6, 3 ],
584 [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
585
586 [ 1, 3, 3, 7, 4, 6, 3, 5, 7 ],
587 [ 4, 1, 4, 7, 4, 5, 2, 6, 7 ],
588 [ 2, 4, 1, 7, 5, 7, 3, 7, 7 ],
589 [ 3, 2, 3, 5, 3, 4, 2, 6, 6 ],
590 [ 3, 5, 4, 7, 2, 7, 1, 7, 7 ],
591 [ 4, 1, 3, 6, 5, 3, 3, 7, 7 ],
592 [ 4, 2, 5, 7, 3, 7, 1, 7, 7 ],
593 [ 7, 4, 1, 7, 3, 7, 2, 5, 7 ],
594 [ 4, 2, 2, 6, 4, 5, 2, 6, 4 ],
595 [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
596
597 [ 3, 4, 1, 7, 6, 7, 6, 2, 6 ],
598 [ 4, 2, 2, 6, 6, 5, 4, 2, 4 ],
599 [ 4, 4, 1, 7, 5, 7, 6, 2, 4 ],
600 [ 3, 3, 2, 5, 4, 4, 5, 2, 4 ],
601 [ 4, 5, 2, 7, 2, 7, 3, 2, 6 ],
602 [ 4, 3, 2, 5, 5, 4, 3, 2, 4 ],
603 [ 7, 4, 2, 7, 2, 5, 3, 2, 6 ],
604 [ 4, 6, 2, 7, 3, 7, 6, 1, 6 ],
605 [ 5, 5, 1, 6, 4, 6, 5, 2, 4 ],
606 [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
607
608 [ 3, 3, 2, 3, 5, 6, 6, 4, 2 ],
609 [ 7, 1, 3, 3, 6, 5, 7, 4, 3 ],
610 [ 5, 4, 1, 5, 5, 6, 6, 4, 2 ],
611 [ 6, 4, 2, 2, 6, 3, 6, 6, 2 ],
612 [ 6, 4, 2, 5, 3, 6, 3, 3, 2 ],
613 [ 6, 3, 2, 3, 5, 2, 4, 6, 3 ],
614 [ 6, 2, 2, 4, 3, 5, 3, 6, 3 ],
615 [ 7, 5, 1, 7, 4, 7, 7, 3, 2 ],
616 [ 5, 5, 2, 3, 6, 7, 7, 5, 1 ],
617 [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
618];
619
620const RV40_AIC_MODE2_CODES: [[u16; 81]; 20] = [
621 [
622 0x0001, 0x0001, 0x0005, 0x01F5, 0x0011, 0x0049, 0x0000, 0x0048, 0x004B,
623 0x0035, 0x0003, 0x0034, 0x03C9, 0x01F4, 0x00C9, 0x004A, 0x0FD9, 0x03C8,
624 0x0010, 0x0037, 0x0001, 0x00C8, 0x0075, 0x01F7, 0x00CB, 0x0074, 0x0002,
625 0x01F6, 0x00CA, 0x01F1, 0x01F0, 0x1F81, 0x07F9, 0x1F80, 0x1F83, 0x07F8,
626 0x0077, 0x00F5, 0x0036, 0x07FB, 0x0076, 0x1F82, 0x00F4, 0x00F7, 0x07FA,
627 0x0071, 0x00F6, 0x03CB, 0x03CA, 0x0FD8, 0x00F1, 0x03F5, 0x1F8D, 0x07E5,
628 0x0013, 0x0031, 0x00F0, 0x0FDB, 0x00F3, 0x07E4, 0x0030, 0x01F3, 0x07E7,
629 0x03F4, 0x07E6, 0x0070, 0x3F19, 0x01F2, 0x3F18, 0x0FDA, 0x0033, 0x07E1,
630 0x01FD, 0x01FC, 0x0073, 0x01FF, 0x0FC5, 0x0FC4, 0x0FC7, 0x03F7, 0x0072,
631 ], [
632 0x0005, 0x0005, 0x0005, 0x0079, 0x0005, 0x000D, 0x001D, 0x0078, 0x0069,
633 0x0004, 0x0001, 0x0007, 0x0068, 0x001C, 0x001F, 0x0004, 0x006B, 0x000C,
634 0x0004, 0x001E, 0x0006, 0x006A, 0x0015, 0x000F, 0x0014, 0x0017, 0x0007,
635 0x0016, 0x000E, 0x0011, 0x0009, 0x00D1, 0x00D0, 0x0181, 0x00D3, 0x007B,
636 0x0010, 0x0013, 0x0004, 0x00D2, 0x0007, 0x0319, 0x0008, 0x007A, 0x00DD,
637 0x0019, 0x0006, 0x000B, 0x0065, 0x00DC, 0x0012, 0x0064, 0x0180, 0x00DF,
638 0x0006, 0x0018, 0x0001, 0x00DE, 0x001D, 0x00D9, 0x001B, 0x0067, 0x000A,
639 0x00D8, 0x00DB, 0x001C, 0x0318, 0x00DA, 0x0635, 0x0183, 0x0000, 0x00C5,
640 0x0066, 0x0061, 0x0035, 0x00C4, 0x0182, 0x0634, 0x031B, 0x00C7, 0x001F,
641 ], [
642 0x0005, 0x0001, 0x001D, 0x01C1, 0x0035, 0x00F1, 0x006D, 0x00F0, 0x0049,
643 0x0000, 0x0004, 0x0003, 0x00F3, 0x0048, 0x0034, 0x006C, 0x01C0, 0x01C3,
644 0x0007, 0x0006, 0x0001, 0x006F, 0x0002, 0x004B, 0x006E, 0x001C, 0x0005,
645 0x0069, 0x0068, 0x006B, 0x0037, 0x01C2, 0x00F2, 0x0395, 0x01CD, 0x00FD,
646 0x006A, 0x0036, 0x0015, 0x01CC, 0x0014, 0x0394, 0x004A, 0x00FC, 0x00FF,
647 0x0017, 0x0031, 0x00FE, 0x01CF, 0x0397, 0x00F9, 0x01CE, 0x0725, 0x0396,
648 0x0016, 0x0030, 0x0075, 0x0724, 0x00F8, 0x0727, 0x0033, 0x0391, 0x0390,
649 0x0011, 0x0032, 0x001F, 0x00FB, 0x0074, 0x0726, 0x00FA, 0x001E, 0x0077,
650 0x0019, 0x0018, 0x0004, 0x0010, 0x003D, 0x0076, 0x0071, 0x0013, 0x0001,
651 ], [
652 0x000D, 0x0019, 0x0011, 0x0015, 0x0061, 0x0019, 0x0014, 0x01AD, 0x0060,
653 0x0018, 0x0001, 0x0005, 0x001B, 0x0010, 0x0019, 0x0005, 0x0017, 0x0018,
654 0x0016, 0x0004, 0x0004, 0x0013, 0x000C, 0x0012, 0x001A, 0x0018, 0x0005,
655 0x000F, 0x001B, 0x0004, 0x001D, 0x0011, 0x001C, 0x0010, 0x000E, 0x001B,
656 0x0013, 0x001F, 0x001A, 0x0029, 0x0005, 0x0063, 0x001E, 0x0009, 0x0062,
657 0x0008, 0x0007, 0x0007, 0x0019, 0x0004, 0x001A, 0x0018, 0x006D, 0x0007,
658 0x001B, 0x0007, 0x001A, 0x006C, 0x0006, 0x0012, 0x0005, 0x006F, 0x000B,
659 0x006E, 0x0069, 0x001D, 0x0359, 0x0028, 0x002B, 0x002A, 0x001C, 0x00D5,
660 0x0358, 0x001F, 0x0001, 0x001E, 0x0068, 0x00D4, 0x00D7, 0x0019, 0x0000,
661 ], [
662 0x00B9, 0x0061, 0x0060, 0x00B8, 0x02B5, 0x01AD, 0x00BB, 0x0AF5, 0x0151,
663 0x0001, 0x0001, 0x0005, 0x0000, 0x0003, 0x0005, 0x0004, 0x0063, 0x0025,
664 0x00BA, 0x0004, 0x0007, 0x0062, 0x00A5, 0x0024, 0x006D, 0x0002, 0x006C,
665 0x02B4, 0x000D, 0x006F, 0x0027, 0x00A4, 0x0026, 0x01AC, 0x0150, 0x01AF,
666 0x01AE, 0x0021, 0x006E, 0x02B7, 0x0020, 0x0153, 0x0023, 0x00A7, 0x0152,
667 0x00A6, 0x0006, 0x000C, 0x0022, 0x01A9, 0x0019, 0x002D, 0x02B6, 0x01A8,
668 0x000F, 0x0007, 0x000E, 0x00A1, 0x0069, 0x002C, 0x0001, 0x01AB, 0x00A0,
669 0x02B1, 0x00A3, 0x002F, 0x0AF4, 0x02B0, 0x0AF7, 0x02B3, 0x0068, 0x015D,
670 0x0AF6, 0x01AA, 0x0055, 0x015C, 0x02B2, 0x0579, 0x0578, 0x015F, 0x00A2,
671 ], [
672 0x0905, 0x013D, 0x013C, 0x0904, 0x121D, 0x049D, 0x049C, 0x243D, 0x0907,
673 0x00ED, 0x0001, 0x0015, 0x0041, 0x013F, 0x0031, 0x0014, 0x025D, 0x025C,
674 0x013E, 0x000D, 0x0000, 0x0040, 0x0139, 0x0043, 0x0030, 0x0017, 0x0033,
675 0x0906, 0x0032, 0x0042, 0x00EC, 0x025F, 0x00EF, 0x025E, 0x049F, 0x0138,
676 0x0901, 0x013B, 0x0259, 0x121C, 0x049E, 0x0900, 0x0258, 0x243C, 0x121F,
677 0x0903, 0x003D, 0x00EE, 0x025B, 0x025A, 0x004D, 0x013A, 0x0902, 0x0245,
678 0x00E9, 0x0016, 0x00E8, 0x0499, 0x0125, 0x0244, 0x004C, 0x0498, 0x090D,
679 0x00EB, 0x003C, 0x0011, 0x049B, 0x049A, 0x0485, 0x00EA, 0x003F, 0x0124,
680 0x090C, 0x003E, 0x0039, 0x0095, 0x0247, 0x0246, 0x0484, 0x0094, 0x0038,
681 ], [
682 0x0F09, 0x00CD, 0x01FD, 0x0791, 0x1E6D, 0x0790, 0x03D9, 0x3CD1, 0x3CD0,
683 0x0075, 0x0001, 0x0001, 0x0035, 0x00CC, 0x0011, 0x0000, 0x03D8, 0x01FC,
684 0x03DB, 0x0010, 0x0003, 0x00CF, 0x03DA, 0x00CE, 0x0074, 0x0034, 0x0077,
685 0x0793, 0x0013, 0x0076, 0x0071, 0x03C5, 0x0070, 0x01FF, 0x0792, 0x01FE,
686 0x01F9, 0x0037, 0x00C9, 0x0F08, 0x01F8, 0x03C4, 0x00C8, 0x0F0B, 0x079D,
687 0x03C7, 0x0001, 0x0012, 0x0073, 0x00CB, 0x0005, 0x0036, 0x03C6, 0x0072,
688 0x007D, 0x0002, 0x00CA, 0x079C, 0x01FB, 0x00F5, 0x0031, 0x079F, 0x0F0A,
689 0x0F35, 0x079E, 0x01FA, 0x1E6C, 0x1E6F, 0x3CD3, 0x0799, 0x03C1, 0x1E6E,
690 0x3CD2, 0x0030, 0x00F4, 0x007C, 0x03C0, 0x03C3, 0x0798, 0x01E5, 0x00F7,
691 ], [
692 0x01A5, 0x0001, 0x001D, 0x0021, 0x00A1, 0x000D, 0x0061, 0x06B9, 0x00A0,
693 0x0060, 0x0001, 0x0005, 0x000C, 0x0020, 0x001C, 0x0004, 0x01A4, 0x01A7,
694 0x00A3, 0x001F, 0x001E, 0x0023, 0x0022, 0x002D, 0x002C, 0x0063, 0x0062,
695 0x1A81, 0x01A6, 0x01A1, 0x06B8, 0x06BB, 0x00A2, 0x06BA, 0x0D59, 0x06A5,
696 0x01A0, 0x000F, 0x006D, 0x06A4, 0x002F, 0x00AD, 0x006C, 0x06A7, 0x00AC,
697 0x0D58, 0x000E, 0x01A3, 0x00AF, 0x00AE, 0x006F, 0x01A2, 0x0D5B, 0x00A9,
698 0x0019, 0x0001, 0x0009, 0x00A8, 0x006E, 0x002E, 0x0000, 0x01AD, 0x00AB,
699 0x00AA, 0x0355, 0x0029, 0x1A80, 0x1A83, 0x1A82, 0x0354, 0x01AC, 0x0D5A,
700 0x1A8D, 0x01AF, 0x0357, 0x0D45, 0x0D44, 0x0D47, 0x1A8C, 0x06A6, 0x06A1,
701 ], [
702 0x0001, 0x0011, 0x0005, 0x0775, 0x00F9, 0x00F8, 0x0031, 0x0030, 0x0049,
703 0x00FB, 0x0010, 0x0033, 0x0EC9, 0x038D, 0x038C, 0x00FA, 0x038F, 0x0774,
704 0x0048, 0x0032, 0x0000, 0x01D5, 0x00E5, 0x038E, 0x00E4, 0x0013, 0x000D,
705 0x0389, 0x0777, 0x0388, 0x038B, 0x1DF9, 0x0EC8, 0x3BC9, 0x1DF8, 0x038A,
706 0x03B5, 0x0776, 0x00E7, 0x3BC8, 0x01D4, 0x3BCB, 0x0ECB, 0x0771, 0x0ECA,
707 0x01D7, 0x03B4, 0x01D6, 0x1DFB, 0x0EF5, 0x0770, 0x0EF4, 0x3BCA, 0x0773,
708 0x00E6, 0x03B7, 0x004B, 0x1DFA, 0x03B6, 0x0EF7, 0x00E1, 0x0EF6, 0x0EF1,
709 0x03B1, 0x01D1, 0x003D, 0x0EF0, 0x0772, 0x077D, 0x077C, 0x003C, 0x01D0,
710 0x03B0, 0x01D3, 0x003F, 0x03B3, 0x01D2, 0x0EF3, 0x077F, 0x00E0, 0x004A,
711 ], [
712 0x0015, 0x0049, 0x0014, 0x07D1, 0x03FD, 0x03FC, 0x01C1, 0x01C0, 0x00F1,
713 0x0017, 0x0001, 0x0001, 0x01C3, 0x0048, 0x004B, 0x0016, 0x0031, 0x01C2,
714 0x004A, 0x0011, 0x0000, 0x01CD, 0x00F0, 0x01CC, 0x0075, 0x0010, 0x000D,
715 0x03FF, 0x01CF, 0x01CE, 0x07D0, 0x0F81, 0x07D3, 0x1F1D, 0x0F80, 0x07D2,
716 0x01C9, 0x03FE, 0x0074, 0x07DD, 0x00F3, 0x1F1C, 0x07DC, 0x03F9, 0x07DF,
717 0x00F2, 0x00FD, 0x0077, 0x07DE, 0x07D9, 0x01C8, 0x07D8, 0x0F83, 0x03F8,
718 0x0030, 0x0076, 0x0013, 0x0F82, 0x00FC, 0x03FB, 0x0033, 0x03FA, 0x03E5,
719 0x03E4, 0x01CB, 0x0032, 0x1F1F, 0x03E7, 0x07DB, 0x07DA, 0x003D, 0x01CA,
720 0x07C5, 0x03E6, 0x0071, 0x0F8D, 0x07C4, 0x1F1E, 0x0F8C, 0x03E1, 0x01F5,
721 ], [
722 0x0019, 0x0065, 0x0018, 0x0351, 0x0350, 0x0353, 0x0021, 0x0020, 0x0064,
723 0x001D, 0x0005, 0x0005, 0x01A5, 0x0023, 0x0067, 0x0005, 0x0066, 0x0022,
724 0x001B, 0x0004, 0x0001, 0x0004, 0x001C, 0x0061, 0x001A, 0x0005, 0x0004,
725 0x0007, 0x002D, 0x0006, 0x002C, 0x01A4, 0x002F, 0x0352, 0x035D, 0x0060,
726 0x0001, 0x002E, 0x001F, 0x035C, 0x0000, 0x06B1, 0x01A7, 0x0029, 0x01A6,
727 0x0028, 0x0063, 0x0062, 0x035F, 0x01A1, 0x002B, 0x06B0, 0x06B3, 0x01A0,
728 0x0003, 0x006D, 0x001E, 0x035E, 0x006C, 0x06B2, 0x0002, 0x01A3, 0x01A2,
729 0x000D, 0x0005, 0x0007, 0x01AD, 0x006F, 0x002A, 0x006E, 0x0004, 0x0004,
730 0x000C, 0x0007, 0x0006, 0x000F, 0x000E, 0x00D5, 0x0009, 0x0006, 0x0007,
731 ], [
732 0x0065, 0x0181, 0x0064, 0x36C9, 0x06D5, 0x0DB5, 0x0379, 0x0180, 0x0183,
733 0x00D5, 0x001D, 0x001C, 0x0DB4, 0x0182, 0x0378, 0x00D4, 0x00D7, 0x06D4,
734 0x0067, 0x001F, 0x0001, 0x00D6, 0x00D1, 0x018D, 0x0066, 0x0001, 0x0000,
735 0x037B, 0x06D7, 0x037A, 0x0DB7, 0x36C8, 0x06D6, 0x0DB6, 0x1B79, 0x0DB1,
736 0x018C, 0x0365, 0x00D0, 0x1B78, 0x00D3, 0x1B7B, 0x0364, 0x06D1, 0x06D0,
737 0x018F, 0x018E, 0x00D2, 0x36CB, 0x0367, 0x0366, 0x06D3, 0x0DB0, 0x06D2,
738 0x0361, 0x06DD, 0x0189, 0x36CA, 0x0360, 0x36F5, 0x0188, 0x0DB3, 0x36F4,
739 0x0009, 0x0008, 0x0005, 0x06DC, 0x00DD, 0x018B, 0x00DC, 0x0004, 0x000B,
740 0x018A, 0x0061, 0x0003, 0x0363, 0x00DF, 0x06DF, 0x0362, 0x000A, 0x001E,
741 ], [
742 0x001D, 0x0061, 0x000D, 0x0D55, 0x06B9, 0x06B8, 0x01A5, 0x0021, 0x0020,
743 0x0023, 0x000C, 0x0060, 0x0D54, 0x00AD, 0x00AC, 0x0022, 0x00AF, 0x06BB,
744 0x000F, 0x001C, 0x0001, 0x002D, 0x0063, 0x01A4, 0x000E, 0x0001, 0x0005,
745 0x01A7, 0x06BA, 0x01A6, 0x06A5, 0x0D57, 0x0D56, 0x1ABD, 0x0D51, 0x00AE,
746 0x002C, 0x00A9, 0x002F, 0x0D50, 0x01A1, 0x1ABC, 0x06A4, 0x06A7, 0x06A6,
747 0x00A8, 0x06A1, 0x01A0, 0x1ABF, 0x0D53, 0x06A0, 0x0D52, 0x1ABE, 0x06A3,
748 0x0062, 0x002E, 0x0009, 0x0D5D, 0x01A3, 0x0D5C, 0x006D, 0x00AB, 0x06A2,
749 0x006C, 0x001F, 0x0001, 0x06AD, 0x0029, 0x01A2, 0x0028, 0x0004, 0x001E,
750 0x01AD, 0x006F, 0x0000, 0x01AC, 0x01AF, 0x06AC, 0x00AA, 0x006E, 0x0019,
751 ], [
752 0x0019, 0x007D, 0x0018, 0x01B5, 0x000D, 0x01B4, 0x007C, 0x007F, 0x01B7,
753 0x000C, 0x001B, 0x001A, 0x01B6, 0x000F, 0x00D5, 0x0019, 0x007E, 0x00D4,
754 0x0018, 0x001B, 0x0001, 0x000E, 0x0011, 0x0009, 0x0005, 0x0005, 0x0005,
755 0x00D7, 0x01B1, 0x0008, 0x01B0, 0x0079, 0x06FD, 0x0371, 0x0370, 0x00D6,
756 0x0078, 0x01B3, 0x0010, 0x0373, 0x0013, 0x06FC, 0x007B, 0x007A, 0x00D1,
757 0x00D0, 0x00D3, 0x0065, 0x0372, 0x06FF, 0x0064, 0x06FE, 0x037D, 0x00D2,
758 0x00DD, 0x0067, 0x0004, 0x037C, 0x0012, 0x01B2, 0x0007, 0x0066, 0x01BD,
759 0x0006, 0x0061, 0x0004, 0x01BC, 0x001A, 0x0060, 0x001D, 0x0004, 0x001C,
760 0x0063, 0x0001, 0x0007, 0x000B, 0x0000, 0x0062, 0x000A, 0x0005, 0x0007,
761 ], [
762 0x0069, 0x0045, 0x0068, 0x04BD, 0x0255, 0x04BC, 0x00E5, 0x00E4, 0x0031,
763 0x0030, 0x0019, 0x0001, 0x0121, 0x00E7, 0x00E6, 0x0033, 0x00E1, 0x00E0,
764 0x006B, 0x0018, 0x0001, 0x0044, 0x0032, 0x0047, 0x006A, 0x001B, 0x0005,
765 0x003D, 0x0046, 0x0015, 0x0041, 0x0120, 0x0123, 0x04BF, 0x0122, 0x0040,
766 0x003C, 0x00E3, 0x0014, 0x0254, 0x0043, 0x0975, 0x012D, 0x00E2, 0x00ED,
767 0x0042, 0x00EC, 0x004D, 0x0257, 0x0256, 0x0251, 0x04BE, 0x0974, 0x0250,
768 0x00EF, 0x00EE, 0x004C, 0x04B9, 0x012C, 0x04B8, 0x004F, 0x04BB, 0x0253,
769 0x003F, 0x0017, 0x0001, 0x0252, 0x00E9, 0x00E8, 0x00EB, 0x0000, 0x0003,
770 0x0016, 0x0002, 0x0004, 0x004E, 0x003E, 0x00EA, 0x0049, 0x000D, 0x0007,
771 ], [
772 0x000D, 0x01BD, 0x000C, 0x0D31, 0x0D30, 0x0D33, 0x0359, 0x0358, 0x002D,
773 0x0065, 0x001D, 0x001C, 0x0D32, 0x035B, 0x035A, 0x002C, 0x01BC, 0x0345,
774 0x000F, 0x001F, 0x0001, 0x002F, 0x0064, 0x01BF, 0x0067, 0x0001, 0x0005,
775 0x0066, 0x002E, 0x0061, 0x0029, 0x0695, 0x0694, 0x0697, 0x0696, 0x0060,
776 0x01BE, 0x0D3D, 0x0028, 0x1A49, 0x0344, 0x1A48, 0x1A4B, 0x0D3C, 0x0691,
777 0x002B, 0x01B9, 0x002A, 0x0D3F, 0x0690, 0x0347, 0x0D3E, 0x1A4A, 0x0346,
778 0x00D5, 0x0341, 0x0063, 0x0D39, 0x0340, 0x0D38, 0x01B8, 0x0D3B, 0x0D3A,
779 0x00D4, 0x0062, 0x0000, 0x0693, 0x01BB, 0x0343, 0x0342, 0x001E, 0x000E,
780 0x006D, 0x0009, 0x0001, 0x006C, 0x00D7, 0x034D, 0x01BA, 0x0008, 0x0004,
781 ], [
782 0x0075, 0x00CD, 0x0035, 0x03C1, 0x03C0, 0x07F9, 0x03C3, 0x1F8D, 0x00CC,
783 0x0074, 0x0011, 0x0010, 0x03C2, 0x0FD9, 0x01F1, 0x00CF, 0x03CD, 0x00CE,
784 0x0034, 0x0001, 0x0001, 0x0037, 0x00C9, 0x00C8, 0x0036, 0x0000, 0x0001,
785 0x0FD8, 0x03CC, 0x00CB, 0x01F0, 0x07F8, 0x03CF, 0x07FB, 0x07FA, 0x00CA,
786 0x01F3, 0x03CE, 0x00F5, 0x0FDB, 0x00F4, 0x07E5, 0x07E4, 0x07E7, 0x01F2,
787 0x07E6, 0x03C9, 0x01FD, 0x0FDA, 0x1F8C, 0x07E1, 0x1F8F, 0x1F8E, 0x03C8,
788 0x03CB, 0x0077, 0x0076, 0x0FC5, 0x03CA, 0x07E0, 0x00F7, 0x0FC4, 0x03F5,
789 0x00F6, 0x01FC, 0x0003, 0x03F4, 0x0071, 0x03F7, 0x00F1, 0x0013, 0x0031,
790 0x0030, 0x0070, 0x0005, 0x0012, 0x0073, 0x01FF, 0x0072, 0x007D, 0x0002,
791 ], [
792 0x0061, 0x0055, 0x0060, 0x02C9, 0x02C8, 0x02CB, 0x0171, 0x00B5, 0x0054,
793 0x0001, 0x0001, 0x0001, 0x0057, 0x0001, 0x0063, 0x001D, 0x0062, 0x0039,
794 0x006D, 0x0000, 0x0005, 0x0038, 0x0056, 0x00B4, 0x006C, 0x0003, 0x001C,
795 0x006F, 0x003B, 0x0002, 0x003A, 0x0170, 0x00B7, 0x0173, 0x0051, 0x006E,
796 0x0025, 0x0050, 0x0069, 0x02CA, 0x0024, 0x0027, 0x0172, 0x00B6, 0x00B1,
797 0x000D, 0x000C, 0x001F, 0x017D, 0x0026, 0x0068, 0x0053, 0x017C, 0x006B,
798 0x001E, 0x000F, 0x0004, 0x017F, 0x006A, 0x02F5, 0x0019, 0x0021, 0x0052,
799 0x02F4, 0x02F7, 0x0020, 0x0BCD, 0x05E5, 0x05E4, 0x0BCC, 0x0023, 0x00B0,
800 0x02F6, 0x00B3, 0x0022, 0x02F1, 0x02F0, 0x0BCF, 0x0BCE, 0x017E, 0x005D,
801 ], [
802 0x00BD, 0x0025, 0x01A1, 0x0159, 0x0299, 0x00BC, 0x0024, 0x0505, 0x0504,
803 0x01A0, 0x0001, 0x001D, 0x006D, 0x001C, 0x0001, 0x0005, 0x0027, 0x01A3,
804 0x0158, 0x001F, 0x001E, 0x01A2, 0x0026, 0x0021, 0x000D, 0x0020, 0x0023,
805 0x0298, 0x006C, 0x0022, 0x00BF, 0x00BE, 0x01AD, 0x002D, 0x029B, 0x00B9,
806 0x01AC, 0x00B8, 0x01AF, 0x029A, 0x006F, 0x015B, 0x006E, 0x0285, 0x0284,
807 0x01AE, 0x0019, 0x002C, 0x01A9, 0x01A8, 0x000C, 0x000F, 0x015A, 0x00BB,
808 0x000E, 0x0000, 0x0069, 0x01AB, 0x0018, 0x01AA, 0x0004, 0x0055, 0x00BA,
809 0x0507, 0x0145, 0x0054, 0x0506, 0x00A5, 0x0501, 0x00A4, 0x0057, 0x0500,
810 0x0A05, 0x0144, 0x00A7, 0x0287, 0x0286, 0x0503, 0x0147, 0x0A04, 0x0146,
811 ], [
812 0x0759, 0x0041, 0x00E5, 0x03BD, 0x0E9D, 0x012D, 0x012C, 0x3A1D, 0x03BC,
813 0x012F, 0x000D, 0x0040, 0x00E4, 0x03BF, 0x0043, 0x0042, 0x0758, 0x03BE,
814 0x00E7, 0x0001, 0x0000, 0x003D, 0x00E6, 0x0015, 0x0014, 0x0017, 0x003C,
815 0x743D, 0x012E, 0x03B9, 0x03B8, 0x0E9C, 0x03BB, 0x075B, 0x3A1C, 0x0E9F,
816 0x0129, 0x00E1, 0x0128, 0x0E9E, 0x012B, 0x075A, 0x00E0, 0x0E99, 0x0745,
817 0x3A1F, 0x03BA, 0x0744, 0x0E98, 0x1D0D, 0x03A5, 0x0E9B, 0x743C, 0x0E9A,
818 0x012A, 0x004D, 0x00E3, 0x0E85, 0x01D5, 0x0E84, 0x004C, 0x0747, 0x1D0C,
819 0x01D4, 0x003F, 0x0016, 0x0746, 0x03A4, 0x0741, 0x004F, 0x003E, 0x01D7,
820 0x0740, 0x000C, 0x0011, 0x004E, 0x00E2, 0x00ED, 0x00EC, 0x0049, 0x0048,
821 ]
822];
823const RV40_AIC_MODE2_BITS: [[u8; 81]; 20] = [
824 [
8251, 5, 4, 10, 6, 8, 5, 8, 8,
826 7, 5, 7, 11, 10, 9, 8, 13, 11,
827 6, 7, 3, 9, 8, 10, 9, 8, 5,
828 10, 9, 10, 10, 14, 12, 14, 14, 12,
829 8, 9, 7, 12, 8, 14, 9, 9, 12,
830 8, 9, 11, 11, 13, 9, 11, 14, 12,
831 6, 7, 9, 13, 9, 12, 7, 10, 12,
832 11, 12, 8, 15, 10, 15, 13, 7, 12,
833 10, 10, 8, 10, 13, 13, 13, 11, 8,
834 ], [
835 4, 6, 5, 11, 8, 10, 7, 11, 9,
836 4, 1, 4, 9, 7, 7, 5, 9, 10,
837 6, 7, 4, 9, 9, 10, 9, 9, 6,
838 9, 10, 9, 10, 12, 12, 13, 12, 11,
839 9, 9, 8, 12, 8, 14, 10, 11, 12,
840 7, 8, 10, 11, 12, 9, 11, 13, 12,
841 6, 7, 8, 12, 9, 12, 7, 11, 10,
842 12, 12, 9, 14, 12, 15, 13, 8, 12,
843 11, 11, 10, 12, 13, 15, 14, 12, 9,
844 ], [
845 5, 7, 6, 12, 9, 11, 8, 11, 10,
846 7, 5, 7, 11, 10, 9, 8, 12, 12,
847 5, 5, 1, 8, 7, 10, 8, 6, 4,
848 8, 8, 8, 9, 12, 11, 13, 12, 11,
849 8, 9, 8, 12, 8, 13, 10, 11, 11,
850 8, 9, 11, 12, 13, 11, 12, 14, 13,
851 8, 9, 10, 14, 11, 14, 9, 13, 13,
852 8, 9, 6, 11, 10, 14, 11, 6, 10,
853 6, 6, 4, 8, 9, 10, 10, 8, 5,
854 ], [
855 11, 7, 8, 10, 12, 9, 10, 14, 12,
856 7, 1, 5, 7, 8, 6, 4, 10, 9,
857 10, 5, 4, 8, 11, 8, 7, 6, 7,
858 11, 6, 7, 8, 10, 8, 10, 11, 9,
859 10, 8, 9, 13, 9, 12, 8, 11, 12,
860 11, 4, 7, 8, 9, 6, 8, 12, 9,
861 8, 5, 8, 12, 9, 10, 6, 12, 11,
862 12, 12, 10, 15, 13, 13, 13, 10, 13,
863 15, 10, 9, 10, 12, 13, 13, 10, 9,
864 ], [
865 11, 8, 8, 11, 13, 10, 11, 15, 12,
866 7, 1, 4, 7, 7, 5, 4, 8, 9,
867 11, 5, 5, 8, 11, 9, 8, 7, 8,
868 13, 7, 8, 9, 11, 9, 10, 12, 10,
869 10, 9, 8, 13, 9, 12, 9, 11, 12,
870 11, 5, 7, 9, 10, 6, 9, 13, 10,
871 7, 4, 7, 11, 8, 9, 5, 10, 11,
872 13, 11, 9, 15, 13, 15, 13, 8, 12,
873 15, 10, 10, 12, 13, 14, 14, 12, 11,
874 ], [
875 12, 9, 9, 12, 13, 11, 11, 14, 12,
876 8, 2, 5, 7, 9, 6, 5, 10, 10,
877 9, 4, 2, 7, 9, 7, 6, 5, 6,
878 12, 6, 7, 8, 10, 8, 10, 11, 9,
879 12, 9, 10, 13, 11, 12, 10, 14, 13,
880 12, 6, 8, 10, 10, 7, 9, 12, 10,
881 8, 5, 8, 11, 9, 10, 7, 11, 12,
882 8, 6, 5, 11, 11, 11, 8, 6, 9,
883 12, 6, 6, 8, 10, 10, 11, 8, 6,
884 ], [
885 13, 9, 10, 12, 14, 12, 11, 15, 15,
886 8, 1, 5, 7, 9, 6, 5, 11, 10,
887 11, 6, 5, 9, 11, 9, 8, 7, 8,
888 12, 6, 8, 8, 11, 8, 10, 12, 10,
889 10, 7, 9, 13, 10, 11, 9, 13, 12,
890 11, 3, 6, 8, 9, 4, 7, 11, 8,
891 8, 5, 9, 12, 10, 9, 7, 12, 13,
892 13, 12, 10, 14, 14, 15, 12, 11, 14,
893 15, 7, 9, 8, 11, 11, 12, 10, 9,
894 ], [
895 10, 5, 6, 9, 11, 7, 8, 12, 11,
896 8, 1, 4, 7, 9, 6, 4, 10, 10,
897 11, 6, 6, 9, 9, 9, 9, 8, 8,
898 14, 10, 10, 12, 12, 11, 12, 13, 12,
899 10, 7, 8, 12, 9, 11, 8, 12, 11,
900 13, 7, 10, 11, 11, 8, 10, 13, 11,
901 6, 3, 7, 11, 8, 9, 5, 10, 11,
902 11, 11, 9, 14, 14, 14, 11, 10, 13,
903 14, 10, 11, 13, 13, 13, 14, 12, 12,
904 ], [
905 2, 5, 3, 11, 8, 8, 6, 6, 7,
906 8, 5, 6, 12, 10, 10, 8, 10, 11,
907 7, 6, 2, 9, 8, 10, 8, 5, 4,
908 10, 11, 10, 10, 13, 12, 14, 13, 10,
909 10, 11, 8, 14, 9, 14, 12, 11, 12,
910 9, 10, 9, 13, 12, 11, 12, 14, 11,
911 8, 10, 7, 13, 10, 12, 8, 12, 12,
912 10, 9, 6, 12, 11, 11, 11, 6, 9,
913 10, 9, 6, 10, 9, 12, 11, 8, 7,
914 ], [
915 6, 8, 6, 12, 11, 11, 10, 10, 9,
916 6, 1, 3, 10, 8, 8, 6, 7, 10,
917 8, 6, 3, 10, 9, 10, 8, 6, 5,
918 11, 10, 10, 12, 13, 12, 14, 13, 12,
919 10, 11, 8, 12, 9, 14, 12, 11, 12,
920 9, 9, 8, 12, 12, 10, 12, 13, 11,
921 7, 8, 6, 13, 9, 11, 7, 11, 11,
922 11, 10, 7, 14, 11, 12, 12, 7, 10,
923 12, 11, 8, 13, 12, 14, 13, 11, 10,
924 ], [
925 7, 10, 7, 13, 13, 13, 11, 11, 10,
926 8, 5, 6, 12, 11, 10, 9, 10, 11,
927 7, 5, 1, 9, 8, 10, 7, 4, 4,
928 9, 11, 9, 11, 12, 11, 13, 13, 10,
929 9, 11, 8, 13, 9, 14, 12, 11, 12,
930 11, 10, 10, 13, 12, 11, 14, 14, 12,
931 9, 10, 8, 13, 10, 14, 9, 12, 12,
932 9, 7, 4, 12, 10, 11, 10, 6, 7,
933 9, 7, 4, 9, 9, 11, 9, 7, 5,
934 ], [
935 7, 9, 7, 14, 11, 12, 10, 9, 9,
936 8, 5, 5, 12, 9, 10, 8, 8, 11,
937 7, 5, 2, 8, 8, 9, 7, 4, 4,
938 10, 11, 10, 12, 14, 11, 12, 13, 12,
939 9, 10, 8, 13, 8, 13, 10, 11, 11,
940 9, 9, 8, 14, 10, 10, 11, 12, 11,
941 10, 11, 9, 14, 10, 14, 9, 12, 14,
942 6, 6, 3, 11, 8, 9, 8, 3, 6,
943 9, 7, 4, 10, 8, 11, 10, 6, 5,
944 ], [
945 6, 8, 7, 13, 12, 12, 10, 9, 9,
946 9, 7, 8, 13, 11, 11, 9, 11, 12,
947 7, 6, 1, 9, 8, 10, 7, 5, 4,
948 10, 12, 10, 12, 13, 13, 14, 13, 11,
949 9, 11, 9, 13, 10, 14, 12, 12, 12,
950 11, 12, 10, 14, 13, 12, 13, 14, 12,
951 8, 9, 7, 13, 10, 13, 8, 11, 12,
952 8, 6, 3, 12, 9, 10, 9, 4, 6,
953 10, 8, 5, 10, 10, 12, 11, 8, 6,
954 ], [
955 7, 10, 7, 12, 9, 12, 10, 10, 12,
956 9, 7, 7, 12, 9, 11, 6, 10, 11,
957 6, 6, 1, 9, 8, 9, 7, 4, 5,
958 11, 12, 9, 12, 10, 14, 13, 13, 11,
959 10, 12, 8, 13, 8, 14, 10, 10, 11,
960 11, 11, 10, 13, 14, 10, 14, 13, 11,
961 11, 10, 7, 13, 8, 12, 7, 10, 12,
962 7, 10, 4, 12, 6, 10, 8, 5, 8,
963 10, 7, 4, 9, 7, 10, 9, 6, 5,
964 ], [
965 7, 9, 7, 13, 12, 13, 10, 10, 8,
966 8, 5, 6, 11, 10, 10, 8, 10, 10,
967 7, 5, 2, 9, 8, 9, 7, 5, 3,
968 8, 9, 7, 9, 11, 11, 13, 11, 9,
969 8, 10, 7, 12, 9, 14, 11, 10, 10,
970 9, 10, 9, 12, 12, 12, 13, 14, 12,
971 10, 10, 9, 13, 11, 13, 9, 13, 12,
972 8, 7, 4, 12, 10, 10, 10, 6, 6,
973 7, 6, 3, 9, 8, 10, 9, 6, 3,
974 ], [
975 7, 10, 7, 13, 13, 13, 11, 11, 9,
976 8, 6, 6, 13, 11, 11, 9, 10, 11,
977 7, 6, 1, 9, 8, 10, 8, 5, 4,
978 8, 9, 8, 9, 12, 12, 12, 12, 8,
979 10, 13, 9, 14, 11, 14, 14, 13, 12,
980 9, 10, 9, 13, 12, 11, 13, 14, 11,
981 9, 11, 8, 13, 11, 13, 10, 13, 13,
982 9, 8, 5, 12, 10, 11, 11, 6, 7,
983 8, 7, 3, 8, 9, 11, 10, 7, 4,
984 ], [
985 8, 9, 7, 11, 11, 12, 11, 14, 9,
986 8, 6, 6, 11, 13, 10, 9, 11, 9,
987 7, 5, 1, 7, 9, 9, 7, 5, 3,
988 13, 11, 9, 10, 12, 11, 12, 12, 9,
989 10, 11, 9, 13, 9, 12, 12, 12, 10,
990 12, 11, 10, 13, 14, 12, 14, 14, 11,
991 11, 8, 8, 13, 11, 12, 9, 13, 11,
992 9, 10, 5, 11, 8, 11, 9, 6, 7,
993 7, 8, 4, 6, 8, 10, 8, 8, 5,
994 ], [
995 8, 10, 8, 13, 13, 13, 12, 11, 10,
996 5, 1, 3, 10, 7, 8, 6, 8, 9,
997 8, 7, 4, 9, 10, 11, 8, 7, 6,
998 8, 9, 7, 9, 12, 11, 12, 10, 8,
999 9, 10, 8, 13, 9, 9, 12, 11, 11,
1000 7, 7, 6, 12, 9, 8, 10, 12, 8,
1001 6, 7, 4, 12, 8, 13, 6, 9, 10,
1002 13, 13, 9, 15, 14, 14, 15, 9, 11,
1003 13, 11, 9, 13, 13, 15, 15, 12, 10,
1004 ], [
1005 10, 8, 9, 11, 12, 10, 8, 13, 13,
1006 9, 2, 5, 7, 5, 4, 3, 8, 9,
1007 11, 5, 5, 9, 8, 8, 6, 8, 8,
1008 12, 7, 8, 10, 10, 9, 8, 12, 10,
1009 9, 10, 9, 12, 7, 11, 7, 12, 12,
1010 9, 5, 8, 9, 9, 6, 6, 11, 10,
1011 6, 4, 7, 9, 5, 9, 3, 9, 10,
1012 13, 11, 9, 13, 10, 13, 10, 9, 13,
1013 14, 11, 10, 12, 12, 13, 11, 14, 11,
1014 ], [
1015 11, 7, 8, 10, 12, 9, 9, 14, 10,
1016 9, 4, 7, 8, 10, 7, 7, 11, 10,
1017 8, 2, 2, 6, 8, 5, 5, 5, 6,
1018 15, 9, 10, 10, 12, 10, 11, 14, 12,
1019 9, 8, 9, 12, 9, 11, 8, 12, 11,
1020 14, 10, 11, 12, 13, 10, 12, 15, 12,
1021 9, 7, 8, 12, 9, 12, 7, 11, 13,
1022 9, 6, 5, 11, 10, 11, 7, 6, 9,
1023 11, 4, 5, 7, 8, 8, 8, 7, 7,
1024 ]
1025];
1026
1027const RV40_PTYPE_CODES: &[[u8; 8]; 7] = &[
1028 [ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00 ],
1029 [ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00 ],
1030 [ 0x0D, 0x05, 0x01, 0x04, 0x01, 0x00, 0x07, 0x0C ],
1031 [ 0x09, 0x11, 0x01, 0x00, 0x05, 0x03, 0x21, 0x20 ],
1032 [ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00 ],
1033 [ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00 ],
1034 [ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00 ]
1035];
1036const RV40_PTYPE_BITS: &[[u8; 8]; 7] = &[
1037 [ 1, 2, 3, 6, 5, 4, 7, 7 ],
1038 [ 3, 1, 2, 7, 6, 5, 4, 7 ],
1039 [ 5, 4, 1, 4, 3, 3, 4, 5 ],
1040 [ 4, 5, 2, 2, 3, 2, 6, 6 ],
1041 [ 5, 6, 1, 4, 2, 3, 7, 7 ],
1042 [ 5, 6, 1, 4, 3, 2, 7, 7 ],
1043 [ 6, 3, 2, 7, 5, 4, 1, 7 ]
1044];
1045const RV40_PTYPE_SYMS: &[MBType; 8] = &[
1046 MBType::MBIntra,
1047 MBType::MBIntra16,
1048 MBType::MBP16x16,
1049 MBType::MBP8x8,
1050 MBType::MBP16x8,
1051 MBType::MBP8x16,
1052 MBType::MBP16x16Mix,
1053 MBType::Invalid,
1054];
1055
1056const RV40_BTYPE_CODES: &[[u8; 7]; 6] = &[
1057 [ 0x01, 0x05, 0x00, 0x03, 0x11, 0x09, 0x10 ],
1058 [ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00 ],
1059 [ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00 ],
1060 [ 0x09, 0x01, 0x00, 0x01, 0x05, 0x03, 0x08 ],
1061 [ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00 ],
1062 [ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00 ]
1063];
1064const RV40_BTYPE_BITS: &[[u8; 7]; 6] = &[
1065 [ 2, 3, 2, 2, 5, 4, 5 ],
1066 [ 4, 1, 3, 2, 6, 5, 6 ],
1067 [ 6, 4, 1, 2, 5, 3, 6 ],
1068 [ 5, 3, 3, 1, 4, 3, 5 ],
1069 [ 6, 5, 3, 2, 4, 1, 6 ],
1070 [ 6, 5, 3, 1, 4, 2, 6 ]
1071];
1072const RV40_BTYPE_SYMS: &[MBType; 7] = &[
1073 MBType::MBIntra,
1074 MBType::MBIntra16,
1075 MBType::MBForward,
1076 MBType::MBBackward,
1077 MBType::MBBidir,
1078 MBType::MBDirect,
1079 MBType::Invalid,
1080];