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