1 use nihav_core::formats;
2 use nihav_core::frame::*;
3 use nihav_core::io::bitreader::*;
4 use nihav_core::io::codebook::*;
5 use nihav_core::io::intcode::*;
6 use nihav_core::codecs::*;
7 use nihav_codec_support::codecs::{MV, ZERO_MV};
11 struct AICCodeReader8 {
12 lengths: &'static [u8],
16 impl 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() }
23 struct AICCodeReader16 {
24 lengths: &'static [u8],
25 codes: &'static [u16],
28 impl 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() }
35 struct TypeCodeReader {
36 lengths: &'static [u8],
38 syms: &'static [MBType],
41 impl 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() }
48 struct RealVideo40BR {
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>>,
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();
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() {
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);
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);
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);
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();
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();
109 fn predict_b_mv_component(&self, sstate: &SState, mvi: &MVInfo, mbinfo: &[RV34MBInfo], mbtype: MBType, fwd: bool) -> MV {
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;
117 if !mbtype.has_mv_dir(fwd) {
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);
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);
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);
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);
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 } },
153 fn 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); }
157 let idx = (-tab[t] as usize) + (br.read(1)? as usize);
158 if tab[idx] != 0 { return Ok(tab[idx] as usize); }
160 let mut size: usize = 0;
162 let t = br.read(8)? as usize;
164 if t != 255 { break; }
169 impl 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 {
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;
185 if (ftype == FrameType::I) || !br.read_bool()? {
186 w = get_dimension(br, &RV40_STANDARD_WIDTHS)?;
187 h = get_dimension(br, &RV40_STANDARD_HEIGHTS)?;
192 let start = br.read(get_slice_start_offset_bits(w, h))? as usize;
194 self.had_skip_run = false;
196 Ok(RV34SliceHeader{ ftype, quant: q, deblock, pts, width: w, height: h, start, end: 0, set_idx })
198 fn decode_intra_pred(&mut self, br: &mut BitReader, types: &mut [i8], mut pos: usize, tstride: usize, has_top: bool) -> DecoderResult<()> {
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;
212 let mut x: usize = 0;
214 let tr = types[pos + x - tstride + 1];
215 let t = types[pos + x - tstride];
216 let l = types[pos + x - 1];
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;
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])?;
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; },
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 };
245 self.had_skip_run = true;
246 return Ok(MBInfo { mbtype: MBType::MBSkip, skip_run: skip_run - 1, dquant: false })
248 self.had_skip_run = false;
251 if ftype == FrameType::P {
252 idx = match mbtype_ref {
253 MBType::MBIntra => 0,
254 MBType::MBIntra16 => 1,
255 MBType::MBP16x16 => 2,
257 MBType::MBP16x8 => 4,
258 MBType::MBP8x16 => 5,
259 MBType::MBP16x16Mix => 6,
262 mbtype = br.read_cb(&self.ptype_cb[idx])?;
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,
273 mbtype = br.read_cb(&self.btype_cb[idx])?;
275 let dquant = mbtype == MBType::Invalid;
277 mbtype = if ftype == FrameType::P { br.read_cb(&self.ptype_cb[idx])? }
278 else { br.read_cb(&self.btype_cb[idx])? };
280 Ok(MBInfo { mbtype, skip_run: 0, dquant })
282 fn predict_b_mv(&self, sstate: &SState, mvi: &MVInfo, mbtype: MBType, mvs: &[MV], mbinfo: &[RV34MBInfo]) -> (MV, MV) {
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);
287 MBType::MBForward => { mv_f += mvs[0]; },
288 MBType::MBBackward => { mv_b += mvs[0]; },
298 fn quant_dc(&self, is_intra: bool, q: u8) -> u8 { RV40_QUANT_DC[if is_intra { 0 } else { 1 }][q as usize] }
301 struct RealVideo40Decoder {
303 info: NACodecInfoRef,
307 impl RealVideo40Decoder {
310 bd: RealVideo40BR::new(),
311 info: NACodecInfoRef::default(),
312 dec: RV34Decoder::new(false, Box::new(RV40DSP::new())),
317 impl NADecoder for RealVideo40Decoder {
318 fn init(&mut self, supp: &mut NADecoderSupport, info: NACodecInfoRef) -> DecoderResult<()> {
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));
322 self.info = NACodecInfo::new_ref(info.get_name(), myinfo, info.get_extradata()).into_ref();
324 let edata = info.get_extradata().unwrap();
325 let src: &[u8] = &edata;
329 for i in 0..src.len() { print!(" {:02X}", src[i]); } println!();
331 if src.len() < 2 { return Err(DecoderError::InvalidData); }
333 self.bd.width = vinfo.get_width();
334 self.bd.height = vinfo.get_height();
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)?;
342 Err(DecoderError::InvalidData)
345 fn decode(&mut self, supp: &mut NADecoderSupport, pkt: &NAPacket) -> DecoderResult<NAFrameRef> {
346 let src = pkt.get_buffer();
348 let (bufinfo, ftype, ts) = self.dec.parse_frame(supp, src.as_slice(), &mut self.bd)?;
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));
356 fn flush(&mut self) {
361 pub fn get_decoder() -> Box<dyn NADecoder + Send> {
362 Box::new(RealVideo40Decoder::new())
367 use nihav_core::codecs::RegisteredDecoders;
368 use nihav_core::demuxers::RegisteredDemuxers;
369 use nihav_codec_support::test::dec_video::*;
370 use crate::realmedia_register_all_codecs;
371 use crate::realmedia_register_all_demuxers;
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);
379 // test_file_decoding("realmedia", "assets/RV/rv40_ralf.rmvb", Some(1000), true, false, /*None*/Some("rv40"));
380 test_file_decoding("realmedia", "assets/RV/rv40_weighted_mc.rmvb", Some(400), true, false, None/*Some("rv40")*/, &dmx_reg, &dec_reg);
381 // test_file_decoding("realmedia", "assets/RV/rv40_weighted_mc_2.rmvb", Some(1000), true, false, /*None*/Some("rv40"));
386 const RV40_STANDARD_WIDTHS: [i16; 8] = [ 160, 172, 240, 320, 352, 640, 704, 0 ];
387 const RV40_STANDARD_HEIGHTS: [i16; 12] = [ 120, 132, 144, 240, 288, 480, -8, -10, 180, 360, 576, 0 ];
389 const RV40_QUANT_DC: [[u8; 32]; 2] = [
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
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
399 const RV40_AIC_PATTERNS: [u16; 20] = [
401 0x011, 0x111, 0x211, 0x511, 0x611,
402 0x022, 0x122, 0x222, 0x722,
408 const RV40_AIC_TOP_CODES: [u8; 16] = [
409 0x01, 0x05, 0x01, 0x00, 0x03, 0x3D, 0x1D, 0x02,
410 0x04, 0x3C, 0x3F, 0x1C, 0x0D, 0x3E, 0x0C, 0x01
412 const RV40_AIC_TOP_BITS: [u8; 16] = [
413 1, 4, 5, 5, 5, 7, 6, 5, 4, 7, 7, 6, 5, 7, 5, 3
416 const RV40_AIC_MODE1_CODES_DUMMY: [u8; 1] = [ 0 ];
417 const RV40_AIC_MODE1_BITS_DUMMY: [u8; 1] = [ 1 ];
419 const 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 ],
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 ],
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 ],
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 ],
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 ],
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 ],
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 ],
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 ],
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 ],
519 static 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 ],
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 ],
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 ],
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 ],
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 ],
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 ],
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 ],
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 ],
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 ],
620 const RV40_AIC_MODE2_CODES: [[u16; 81]; 20] = [
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
823 const RV40_AIC_MODE2_BITS: [[u8; 81]; 20] = [
825 1, 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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
1027 const 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 ]
1036 const 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 ]
1045 const RV40_PTYPE_SYMS: &[MBType; 8] = &[
1052 MBType::MBP16x16Mix,
1056 const 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 ]
1064 const 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 ]
1072 const RV40_BTYPE_SYMS: &[MBType; 7] = &[