dsputil: Move ff_block_permute to mpegvideo_enc

This commit is contained in:
Diego Biurrun 2013-02-07 21:04:32 +01:00
parent a1d3673034
commit 0b016eb99d
4 changed files with 35 additions and 35 deletions

View File

@ -1704,35 +1704,6 @@ static void add_8x8basis_c(int16_t rem[64], int16_t basis[64], int scale){
}
}
/**
* Permute an 8x8 block.
* @param block the block which will be permuted according to the given permutation vector
* @param permutation the permutation vector
* @param last the last non zero coefficient in scantable order, used to speed the permutation up
* @param scantable the used scantable, this is only used to speed the permutation up, the block is not
* (inverse) permutated to scantable order!
*/
void ff_block_permute(int16_t *block, uint8_t *permutation, const uint8_t *scantable, int last)
{
int i;
int16_t temp[64];
if(last<=0) return;
//if(permutation[1]==1) return; //FIXME it is ok but not clean and might fail for some permutations
for(i=0; i<=last; i++){
const int j= scantable[i];
temp[j]= block[j];
block[j]=0;
}
for(i=0; i<=last; i++){
const int j= scantable[i];
const int perm_j= permutation[j];
block[perm_j]= temp[j];
}
}
static int zero_cmp(void *s, uint8_t *a, uint8_t *b, int stride, int h){
return 0;
}

View File

@ -435,12 +435,6 @@ void ff_dsputil_init(DSPContext* p, AVCodecContext *avctx);
int ff_check_alignment(void);
/**
* permute block according to permuatation.
* @param last last non zero element in scantable order
*/
void ff_block_permute(int16_t *block, uint8_t *permutation, const uint8_t *scantable, int last);
void ff_set_cmp(DSPContext* c, me_cmp_func *cmp, int type);
#define BYTE_VEC32(c) ((c)*0x01010101UL)

View File

@ -2499,6 +2499,35 @@ void ff_init_block_index(MpegEncContext *s){ //FIXME maybe rename
}
}
/**
* Permute an 8x8 block.
* @param block the block which will be permuted according to the given permutation vector
* @param permutation the permutation vector
* @param last the last non zero coefficient in scantable order, used to speed the permutation up
* @param scantable the used scantable, this is only used to speed the permutation up, the block is not
* (inverse) permutated to scantable order!
*/
void ff_block_permute(int16_t *block, uint8_t *permutation, const uint8_t *scantable, int last)
{
int i;
int16_t temp[64];
if(last<=0) return;
//if(permutation[1]==1) return; //FIXME it is ok but not clean and might fail for some permutations
for(i=0; i<=last; i++){
const int j= scantable[i];
temp[j]= block[j];
block[j]=0;
}
for(i=0; i<=last; i++){
const int j= scantable[i];
const int perm_j= permutation[j];
block[perm_j]= temp[j];
}
}
void ff_mpeg_flush(AVCodecContext *avctx){
int i;
MpegEncContext *s = avctx->priv_data;

View File

@ -815,6 +815,12 @@ int ff_alloc_picture(MpegEncContext *s, Picture *pic, int shared);
extern const enum AVPixelFormat ff_pixfmt_list_420[];
extern const enum AVPixelFormat ff_hwaccel_pixfmt_list_420[];
/**
* permute block according to permuatation.
* @param last last non zero element in scantable order
*/
void ff_block_permute(int16_t *block, uint8_t *permutation, const uint8_t *scantable, int last);
static inline void ff_update_block_index(MpegEncContext *s){
const int block_size = 8;