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