- let cbs = if coef_no == 0 {
- [&self.codes.dc_cb[table_y], &self.codes.dc_cb[table_c]]
- } else if coef_no < 6 {
- [&self.codes.ac0_cb[table_y], &self.codes.ac0_cb[table_c]]
- } else if coef_no < 15 {
- [&self.codes.ac1_cb[table_y], &self.codes.ac1_cb[table_c]]
- } else if coef_no < 28 {
- [&self.codes.ac2_cb[table_y], &self.codes.ac2_cb[table_c]]
- } else {
- [&self.codes.ac3_cb[table_y], &self.codes.ac3_cb[table_c]]
- };
- for blkaddr in self.blk_addr.iter() {
- let blk: &mut Block = &mut self.blocks[blkaddr >> 2];
- if !blk.coded || blk.idx != coef_no { continue; }
- if self.eob_run > 0 {
- blk.idx = 64;
- self.eob_run -= 1;
- continue;
+ if let Codes::VP31(ref codes) = self.codes {
+ let cbs = if coef_no == 0 {
+ [&codes.dc_cb[table_y], &codes.dc_cb[table_c]]
+ } else if coef_no < 6 {
+ [&codes.ac0_cb[table_y], &codes.ac0_cb[table_c]]
+ } else if coef_no < 15 {
+ [&codes.ac1_cb[table_y], &codes.ac1_cb[table_c]]
+ } else if coef_no < 28 {
+ [&codes.ac2_cb[table_y], &codes.ac2_cb[table_c]]
+ } else {
+ [&codes.ac3_cb[table_y], &codes.ac3_cb[table_c]]
+ };
+ for blkaddr in self.blk_addr.iter() {
+ let blk: &mut Block = &mut self.blocks[blkaddr >> 2];
+ if !blk.coded || blk.idx != coef_no { continue; }
+ if self.eob_run > 0 {
+ blk.idx = 64;
+ self.eob_run -= 1;
+ continue;
+ }
+ let cb = if (blkaddr & 3) == 0 { cbs[0] } else { cbs[1] };
+ let token = br.read_cb(cb)?;
+ expand_token(blk, br, &mut self.eob_run, coef_no, token)?;