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