From: Vittorio Giovara Date: Mon, 8 Jun 2015 12:00:51 +0000 (+0100) Subject: mpegvideo: Move block permutation function where is used X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=d1dd0d404c085f4fce7b8358b4aea677761c5d88;hp=c6aa0554b0c3e31fec4580b68ea85b66966cd381;p=ffmpeg mpegvideo: Move block permutation function where is used Mark it as static. --- diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c index 1ea2b6530fd..68f95685d1e 100644 --- a/libavcodec/mpegvideo.c +++ b/libavcodec/mpegvideo.c @@ -1840,35 +1840,6 @@ 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; diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index b2b2f6df79a..1a6857dd425 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -638,12 +638,6 @@ void ff_mpv_motion(MpegEncContext *s, op_pixels_func (*pix_op)[4], qpel_mc_func (*qpix_op)[16]); -/** - * 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; diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index a2061532aef..6fe34b57f89 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -4196,6 +4196,42 @@ STOP_TIMER("iterative search") return last_non_zero; } +/** + * Permute an 8x8 block according to permuatation. + * @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! + */ +static void block_permute(int16_t *block, uint8_t *permutation, + const uint8_t *scantable, int last) +{ + int i; + int16_t temp[64]; + + if (last <= 0) + return; + //FIXME it is ok but not clean and might fail for some permutations + // if (permutation[1] == 1) + // return; + + 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]; + } +} + int ff_dct_quantize_c(MpegEncContext *s, int16_t *block, int n, int qscale, int *overflow) @@ -4271,8 +4307,8 @@ int ff_dct_quantize_c(MpegEncContext *s, /* we need this permutation so that we correct the IDCT, we only permute the !=0 elements */ if (s->idsp.perm_type != FF_IDCT_PERM_NONE) - ff_block_permute(block, s->idsp.idct_permutation, - scantable, last_non_zero); + block_permute(block, s->idsp.idct_permutation, + scantable, last_non_zero); return last_non_zero; }