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