Mercurial > libavcodec.hg
comparison dsputil.c @ 764:d4726182dfd2 libavcodec
optimize block_permute()
optimize dct_quantize_c()
dont permute s->q_inter/intra_matrix
author | michaelni |
---|---|
date | Wed, 23 Oct 2002 15:11:07 +0000 |
parents | 8e1f0939d15d |
children | eacc2dd8fd9d |
comparison
equal
deleted
inserted
replaced
763:339db642859d | 764:d4726182dfd2 |
---|---|
1551 pix3 += line_size; | 1551 pix3 += line_size; |
1552 } | 1552 } |
1553 return s; | 1553 return s; |
1554 } | 1554 } |
1555 | 1555 |
1556 /* permute block according so that it corresponds to the MMX idct | 1556 void ff_block_permute(INT16 *block, UINT8 *permutation, const UINT8 *scantable, int last) |
1557 order */ | 1557 { |
1558 void block_permute(INT16 *block, UINT8 *permutation) | 1558 int i; |
1559 { | 1559 INT16 temp[64]; |
1560 int i; | 1560 |
1561 INT16 temp[64]; | 1561 if(last<=0) return; |
1562 | 1562 if(permutation[1]==1) return; //FIXME its ok but not clean and might fail for some perms |
1563 for(i=0; i<64; i++) temp[ permutation[i] ] = block[i]; | 1563 |
1564 | 1564 for(i=0; i<=last; i++){ |
1565 for(i=0; i<64; i++) block[i] = temp[i]; | 1565 const int j= scantable[i]; |
1566 temp[j]= block[j]; | |
1567 block[j]=0; | |
1568 } | |
1569 | |
1570 for(i=0; i<=last; i++){ | |
1571 const int j= scantable[i]; | |
1572 const int perm_j= permutation[j]; | |
1573 block[perm_j]= temp[j]; | |
1574 } | |
1566 } | 1575 } |
1567 | 1576 |
1568 void clear_blocks_c(DCTELEM *blocks) | 1577 void clear_blocks_c(DCTELEM *blocks) |
1569 { | 1578 { |
1570 memset(blocks, 0, sizeof(DCTELEM)*6*64); | 1579 memset(blocks, 0, sizeof(DCTELEM)*6*64); |