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