* commit '0b016eb99d38738e2c53e36549a4732a0f863b2e': dsputil: Move ff_block_permute to mpegvideo_enc Merged-by: Michael Niedermayer <michaelni@gmx.at>tags/n1.2
| @@ -1819,35 +1819,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){ | static int zero_cmp(void *s, uint8_t *a, uint8_t *b, int stride, int h){ | ||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -454,12 +454,6 @@ attribute_deprecated void dsputil_init(DSPContext* c, AVCodecContext *avctx); | |||||
| int ff_check_alignment(void); | 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); | void ff_set_cmp(DSPContext* c, me_cmp_func *cmp, int type); | ||||
| #define BYTE_VEC32(c) ((c)*0x01010101UL) | #define BYTE_VEC32(c) ((c)*0x01010101UL) | ||||
| @@ -2881,6 +2881,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){ | void ff_mpeg_flush(AVCodecContext *avctx){ | ||||
| int i; | int i; | ||||
| MpegEncContext *s = avctx->priv_data; | MpegEncContext *s = avctx->priv_data; | ||||
| @@ -830,6 +830,12 @@ int ff_alloc_picture(MpegEncContext *s, Picture *pic, int shared); | |||||
| extern const enum AVPixelFormat ff_pixfmt_list_420[]; | extern const enum AVPixelFormat ff_pixfmt_list_420[]; | ||||
| extern const enum AVPixelFormat ff_hwaccel_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){ | static inline void ff_update_block_index(MpegEncContext *s){ | ||||
| const int block_size= 8 >> s->avctx->lowres; | const int block_size= 8 >> s->avctx->lowres; | ||||