# HG changeset patch # User glantau # Date 997224199 0 # Node ID 2733a4c1c693166cf4472061c5c29d31fdccbd2b # Parent 7cf705a32d1ca7f74ff36b3529dfa267ba7fde54 added block permutation functions diff -r 7cf705a32d1c -r 2733a4c1c693 dsputil.c --- a/dsputil.c Tue Aug 07 22:42:45 2001 +0000 +++ b/dsputil.c Tue Aug 07 22:43:19 2001 +0000 @@ -34,6 +34,42 @@ static UINT8 cropTbl[256 + 2 * MAX_NEG_CROP]; UINT32 squareTbl[512]; +extern UINT16 default_intra_matrix[64]; +extern UINT16 default_non_intra_matrix[64]; + +UINT8 zigzag_direct[64] = { + 0, 1, 8, 16, 9, 2, 3, 10, + 17, 24, 32, 25, 18, 11, 4, 5, + 12, 19, 26, 33, 40, 48, 41, 34, + 27, 20, 13, 6, 7, 14, 21, 28, + 35, 42, 49, 56, 57, 50, 43, 36, + 29, 22, 15, 23, 30, 37, 44, 51, + 58, 59, 52, 45, 38, 31, 39, 46, + 53, 60, 61, 54, 47, 55, 62, 63 +}; + +UINT8 ff_alternate_horizontal_scan[64] = { + 0, 1, 2, 3, 8, 9, 16, 17, + 10, 11, 4, 5, 6, 7, 15, 14, + 13, 12, 19, 18, 24, 25, 32, 33, + 26, 27, 20, 21, 22, 23, 28, 29, + 30, 31, 34, 35, 40, 41, 48, 49, + 42, 43, 36, 37, 38, 39, 44, 45, + 46, 47, 50, 51, 56, 57, 58, 59, + 52, 53, 54, 55, 60, 61, 62, 63, +}; + +UINT8 ff_alternate_vertical_scan[64] = { + 0, 8, 16, 24, 1, 9, 2, 10, + 17, 25, 32, 40, 48, 56, 57, 49, + 41, 33, 26, 18, 3, 11, 4, 12, + 19, 27, 34, 42, 50, 58, 35, 43, + 51, 59, 20, 28, 5, 13, 6, 14, + 21, 29, 36, 44, 52, 60, 37, 45, + 53, 61, 22, 30, 7, 15, 23, 31, + 38, 46, 54, 62, 39, 47, 55, 63, +}; + void get_pixels_c(DCTELEM *block, const UINT8 *pixels, int line_size) { DCTELEM *p; @@ -350,9 +386,33 @@ return s; } +/* permute block according so that it corresponds to the MMX idct + order */ +void block_permute(INT16 *block) +{ + int tmp1, tmp2, tmp3, tmp4, tmp5, tmp6; + int i; + + for(i=0;i<8;i++) { + tmp1 = block[1]; + tmp2 = block[2]; + tmp3 = block[3]; + tmp4 = block[4]; + tmp5 = block[5]; + tmp6 = block[6]; + block[1] = tmp2; + block[2] = tmp4; + block[3] = tmp6; + block[4] = tmp1; + block[5] = tmp3; + block[6] = tmp5; + block += 8; + } +} + void dsputil_init(void) { - int i; + int i, j; for(i=0;i<256;i++) cropTbl[i + MAX_NEG_CROP] = i; for(i=0;i> 1) | ((j & 1) << 2); +} + +void block_permute(INT16 *block); + #ifdef HAVE_MMX #define MM_MMX 0x0001 /* standard MMX */