summaryrefslogtreecommitdiff
path: root/libavcodec/mpegvideo.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2013-02-09 11:43:23 +0100
committerMichael Niedermayer <michaelni@gmx.at>2013-02-09 11:44:46 +0100
commit55151aa1013b6bf83b82b5535a7d085202fe49b3 (patch)
tree57a0bbf0c5bb7be975aad8c4d90cdefca4011ed4 /libavcodec/mpegvideo.c
parenta35f5c22339c87b1f1cb71201a5c886715a3dc8a (diff)
parent0b016eb99d38738e2c53e36549a4732a0f863b2e (diff)
Merge commit '0b016eb99d38738e2c53e36549a4732a0f863b2e'
* commit '0b016eb99d38738e2c53e36549a4732a0f863b2e': dsputil: Move ff_block_permute to mpegvideo_enc Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/mpegvideo.c')
-rw-r--r--libavcodec/mpegvideo.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c
index 00388dfdfa..8ab0e68398 100644
--- a/libavcodec/mpegvideo.c
+++ b/libavcodec/mpegvideo.c
@@ -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){
int i;
MpegEncContext *s = avctx->priv_data;