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