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