| 268 | } |
| 269 | |
| 270 | static inline void asv2_encode_block(ASV1Context *a, DCTELEM block[64]){ |
| 271 | int i; |
| 272 | int count=0; |
| 273 | |
| 274 | for(count=63; count>3; count--){ |
| 275 | const int index= scantab[count]; |
| 276 | |
| 277 | if( (block[index]*a->q_intra_matrix[index] + (1<<15))>>16 ) |
| 278 | break; |
| 279 | } |
| 280 | |
| 281 | count >>= 2; |
| 282 | |
| 283 | asv2_put_bits(&a->pb, 4, count); |
| 284 | asv2_put_bits(&a->pb, 8, (block[0] + 32)>>6); |
| 285 | block[0]= 0; |
| 286 | |
| 287 | for(i=0; i<=count; i++){ |
| 288 | const int index= scantab[4*i]; |
| 289 | int ccp=0; |
| 290 | |
| 291 | if( (block[index + 0] = (block[index + 0]*a->q_intra_matrix[index + 0] + (1<<15))>>16) ) ccp |= 8; |
| 292 | if( (block[index + 8] = (block[index + 8]*a->q_intra_matrix[index + 8] + (1<<15))>>16) ) ccp |= 4; |
| 293 | if( (block[index + 1] = (block[index + 1]*a->q_intra_matrix[index + 1] + (1<<15))>>16) ) ccp |= 2; |
| 294 | if( (block[index + 9] = (block[index + 9]*a->q_intra_matrix[index + 9] + (1<<15))>>16) ) ccp |= 1; |
| 295 | |
| 296 | assert(i || ccp<8); |
| 297 | if(i) put_bits(&a->pb, ac_ccp_tab[ccp][1], ac_ccp_tab[ccp][0]); |
| 298 | else put_bits(&a->pb, dc_ccp_tab[ccp][1], dc_ccp_tab[ccp][0]); |
| 299 | |
| 300 | if(ccp){ |
| 301 | if(ccp&8) asv2_put_level(&a->pb, block[index + 0]); |
| 302 | if(ccp&4) asv2_put_level(&a->pb, block[index + 8]); |
| 303 | if(ccp&2) asv2_put_level(&a->pb, block[index + 1]); |
| 304 | if(ccp&1) asv2_put_level(&a->pb, block[index + 9]); |
| 305 | } |
| 306 | } |
| 307 | } |
| 308 | |
| 309 | static inline int decode_mb(ASV1Context *a, DCTELEM block[6][64]){ |
| 310 | int i; |
no test coverage detected