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