annotate dsputil.c @ 625:bb6a69f9d409 libavcodec

slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG) per context DCT selection
author michaelni
date Thu, 29 Aug 2002 23:55:32 +0000
parents 92e99e506920
children 23a093d6e450
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
1 /*
986e461dc072 Initial revision
glantau
parents:
diff changeset
2 * DSP utils
429
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
3 * Copyright (c) 2000, 2001 Fabrice Bellard.
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
4 *
429
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
5 * This library is free software; you can redistribute it and/or
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
6 * modify it under the terms of the GNU Lesser General Public
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
7 * License as published by the Free Software Foundation; either
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
8 * version 2 of the License, or (at your option) any later version.
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
9 *
429
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
10 * This library is distributed in the hope that it will be useful,
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
429
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
13 * Lesser General Public License for more details.
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
14 *
429
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
15 * You should have received a copy of the GNU Lesser General Public
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
16 * License along with this library; if not, write to the Free Software
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
256
4c1cec7c3c7c q-pel mc fixed
michaelni
parents: 255
diff changeset
18 *
385
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
19 * gmc & q-pel & 32/64 bit based MC by Michael Niedermayer <michaelni@gmx.at>
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
20 */
986e461dc072 Initial revision
glantau
parents:
diff changeset
21 #include "avcodec.h"
986e461dc072 Initial revision
glantau
parents:
diff changeset
22 #include "dsputil.h"
174
ac5075a55488 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents: 88
diff changeset
23 #include "simple_idct.h"
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
24
19
82d4c9be9873 MMX/MMXEXT iDCT support, using external functions currently defined in libmpeg2
arpi_esp
parents: 6
diff changeset
25 void (*ff_idct)(DCTELEM *block);
480
a7cbee351b55 added ff_idct_put/add
bellard
parents: 474
diff changeset
26 void (*ff_idct_put)(UINT8 *dest, int line_size, DCTELEM *block);
a7cbee351b55 added ff_idct_put/add
bellard
parents: 474
diff changeset
27 void (*ff_idct_add)(UINT8 *dest, int line_size, DCTELEM *block);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
28 void (*get_pixels)(DCTELEM *block, const UINT8 *pixels, int line_size);
324
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
29 void (*diff_pixels)(DCTELEM *block, const UINT8 *s1, const UINT8 *s2, int stride);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
30 void (*put_pixels_clamped)(const DCTELEM *block, UINT8 *pixels, int line_size);
986e461dc072 Initial revision
glantau
parents:
diff changeset
31 void (*add_pixels_clamped)(const DCTELEM *block, UINT8 *pixels, int line_size);
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
32 void (*gmc1)(UINT8 *dst, UINT8 *src, int srcStride, int h, int x16, int y16, int rounder);
296
c1a8a1b4a24b sizeof(s->block) isnt 64*6*2 anymore bugfix
michaelni
parents: 294
diff changeset
33 void (*clear_blocks)(DCTELEM *blocks);
612
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
34 int (*pix_sum)(UINT8 * pix, int line_size);
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
35 int (*pix_norm1)(UINT8 * pix, int line_size);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
36
986e461dc072 Initial revision
glantau
parents:
diff changeset
37 op_pixels_abs_func pix_abs16x16;
986e461dc072 Initial revision
glantau
parents:
diff changeset
38 op_pixels_abs_func pix_abs16x16_x2;
986e461dc072 Initial revision
glantau
parents:
diff changeset
39 op_pixels_abs_func pix_abs16x16_y2;
986e461dc072 Initial revision
glantau
parents:
diff changeset
40 op_pixels_abs_func pix_abs16x16_xy2;
986e461dc072 Initial revision
glantau
parents:
diff changeset
41
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
42 op_pixels_abs_func pix_abs8x8;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
43 op_pixels_abs_func pix_abs8x8_x2;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
44 op_pixels_abs_func pix_abs8x8_y2;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
45 op_pixels_abs_func pix_abs8x8_xy2;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
46
50
4ea4c10d03d8 export for imgconvert usage
glantau
parents: 34
diff changeset
47 UINT8 cropTbl[256 + 2 * MAX_NEG_CROP];
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
48 UINT32 squareTbl[512];
986e461dc072 Initial revision
glantau
parents:
diff changeset
49
533
3c07cf9595de adding ff prefix to avoid global name conficts with xvid (patch by Marko Kreen <marko at l-t.ee>)
michaelni
parents: 517
diff changeset
50 extern INT16 ff_mpeg1_default_intra_matrix[64];
3c07cf9595de adding ff prefix to avoid global name conficts with xvid (patch by Marko Kreen <marko at l-t.ee>)
michaelni
parents: 517
diff changeset
51 extern INT16 ff_mpeg1_default_non_intra_matrix[64];
435
9247ad420889 * compatibilized declaration with its original definition
kabi
parents: 429
diff changeset
52 extern INT16 ff_mpeg4_default_intra_matrix[64];
9247ad420889 * compatibilized declaration with its original definition
kabi
parents: 429
diff changeset
53 extern INT16 ff_mpeg4_default_non_intra_matrix[64];
34
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
54
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
55 UINT8 zigzag_direct[64] = {
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
56 0, 1, 8, 16, 9, 2, 3, 10,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
57 17, 24, 32, 25, 18, 11, 4, 5,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
58 12, 19, 26, 33, 40, 48, 41, 34,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
59 27, 20, 13, 6, 7, 14, 21, 28,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
60 35, 42, 49, 56, 57, 50, 43, 36,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
61 29, 22, 15, 23, 30, 37, 44, 51,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
62 58, 59, 52, 45, 38, 31, 39, 46,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
63 53, 60, 61, 54, 47, 55, 62, 63
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
64 };
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
65
220
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
66 /* not permutated inverse zigzag_direct + 1 for MMX quantizer */
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
67 UINT16 __align8 inv_zigzag_direct16[64];
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
68
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
69 /* not permutated zigzag_direct for MMX quantizer */
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
70 UINT8 zigzag_direct_noperm[64];
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
71
34
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
72 UINT8 ff_alternate_horizontal_scan[64] = {
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
73 0, 1, 2, 3, 8, 9, 16, 17,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
74 10, 11, 4, 5, 6, 7, 15, 14,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
75 13, 12, 19, 18, 24, 25, 32, 33,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
76 26, 27, 20, 21, 22, 23, 28, 29,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
77 30, 31, 34, 35, 40, 41, 48, 49,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
78 42, 43, 36, 37, 38, 39, 44, 45,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
79 46, 47, 50, 51, 56, 57, 58, 59,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
80 52, 53, 54, 55, 60, 61, 62, 63,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
81 };
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
82
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
83 UINT8 ff_alternate_vertical_scan[64] = {
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
84 0, 8, 16, 24, 1, 9, 2, 10,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
85 17, 25, 32, 40, 48, 56, 57, 49,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
86 41, 33, 26, 18, 3, 11, 4, 12,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
87 19, 27, 34, 42, 50, 58, 35, 43,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
88 51, 59, 20, 28, 5, 13, 6, 14,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
89 21, 29, 36, 44, 52, 60, 37, 45,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
90 53, 61, 22, 30, 7, 15, 23, 31,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
91 38, 46, 54, 62, 39, 47, 55, 63,
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
92 };
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
93
320
cda7d0857baf - ME setting moved to AVCodecContext/MpegEncContext, no longer a global.
pulento
parents: 312
diff changeset
94 #ifdef SIMPLE_IDCT
cda7d0857baf - ME setting moved to AVCodecContext/MpegEncContext, no longer a global.
pulento
parents: 312
diff changeset
95
209
c0d8ecae7ac5 (commit by michael)
arpi_esp
parents: 200
diff changeset
96 /* Input permutation for the simple_idct_mmx */
190
9e0e56869d05 fix for non-mmx runtimedetect encoding bugs - patch by Michael Niedermayer <michaelni@gmx.at>
uid46427
parents: 174
diff changeset
97 static UINT8 simple_mmx_permutation[64]={
209
c0d8ecae7ac5 (commit by michael)
arpi_esp
parents: 200
diff changeset
98 0x00, 0x08, 0x04, 0x09, 0x01, 0x0C, 0x05, 0x0D,
c0d8ecae7ac5 (commit by michael)
arpi_esp
parents: 200
diff changeset
99 0x10, 0x18, 0x14, 0x19, 0x11, 0x1C, 0x15, 0x1D,
c0d8ecae7ac5 (commit by michael)
arpi_esp
parents: 200
diff changeset
100 0x20, 0x28, 0x24, 0x29, 0x21, 0x2C, 0x25, 0x2D,
c0d8ecae7ac5 (commit by michael)
arpi_esp
parents: 200
diff changeset
101 0x12, 0x1A, 0x16, 0x1B, 0x13, 0x1E, 0x17, 0x1F,
c0d8ecae7ac5 (commit by michael)
arpi_esp
parents: 200
diff changeset
102 0x02, 0x0A, 0x06, 0x0B, 0x03, 0x0E, 0x07, 0x0F,
c0d8ecae7ac5 (commit by michael)
arpi_esp
parents: 200
diff changeset
103 0x30, 0x38, 0x34, 0x39, 0x31, 0x3C, 0x35, 0x3D,
c0d8ecae7ac5 (commit by michael)
arpi_esp
parents: 200
diff changeset
104 0x22, 0x2A, 0x26, 0x2B, 0x23, 0x2E, 0x27, 0x2F,
c0d8ecae7ac5 (commit by michael)
arpi_esp
parents: 200
diff changeset
105 0x32, 0x3A, 0x36, 0x3B, 0x33, 0x3E, 0x37, 0x3F,
190
9e0e56869d05 fix for non-mmx runtimedetect encoding bugs - patch by Michael Niedermayer <michaelni@gmx.at>
uid46427
parents: 174
diff changeset
106 };
320
cda7d0857baf - ME setting moved to AVCodecContext/MpegEncContext, no longer a global.
pulento
parents: 312
diff changeset
107 #endif
190
9e0e56869d05 fix for non-mmx runtimedetect encoding bugs - patch by Michael Niedermayer <michaelni@gmx.at>
uid46427
parents: 174
diff changeset
108
220
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
109 /* a*inverse[b]>>32 == a/b for all 0<=a<=65536 && 2<=b<=255 */
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
110 UINT32 inverse[256]={
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
111 0, 4294967295U,2147483648U,1431655766, 1073741824, 858993460, 715827883, 613566757,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
112 536870912, 477218589, 429496730, 390451573, 357913942, 330382100, 306783379, 286331154,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
113 268435456, 252645136, 238609295, 226050911, 214748365, 204522253, 195225787, 186737709,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
114 178956971, 171798692, 165191050, 159072863, 153391690, 148102321, 143165577, 138547333,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
115 134217728, 130150525, 126322568, 122713352, 119304648, 116080198, 113025456, 110127367,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
116 107374183, 104755300, 102261127, 99882961, 97612894, 95443718, 93368855, 91382283,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
117 89478486, 87652394, 85899346, 84215046, 82595525, 81037119, 79536432, 78090315,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
118 76695845, 75350304, 74051161, 72796056, 71582789, 70409300, 69273667, 68174085,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
119 67108864, 66076420, 65075263, 64103990, 63161284, 62245903, 61356676, 60492498,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
120 59652324, 58835169, 58040099, 57266231, 56512728, 55778797, 55063684, 54366675,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
121 53687092, 53024288, 52377650, 51746594, 51130564, 50529028, 49941481, 49367441,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
122 48806447, 48258060, 47721859, 47197443, 46684428, 46182445, 45691142, 45210183,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
123 44739243, 44278014, 43826197, 43383509, 42949673, 42524429, 42107523, 41698712,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
124 41297763, 40904451, 40518560, 40139882, 39768216, 39403370, 39045158, 38693400,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
125 38347923, 38008561, 37675152, 37347542, 37025581, 36709123, 36398028, 36092163,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
126 35791395, 35495598, 35204650, 34918434, 34636834, 34359739, 34087043, 33818641,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
127 33554432, 33294321, 33038210, 32786010, 32537632, 32292988, 32051995, 31814573,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
128 31580642, 31350127, 31122952, 30899046, 30678338, 30460761, 30246249, 30034737,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
129 29826162, 29620465, 29417585, 29217465, 29020050, 28825284, 28633116, 28443493,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
130 28256364, 28071682, 27889399, 27709467, 27531842, 27356480, 27183338, 27012373,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
131 26843546, 26676816, 26512144, 26349493, 26188825, 26030105, 25873297, 25718368,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
132 25565282, 25414008, 25264514, 25116768, 24970741, 24826401, 24683721, 24542671,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
133 24403224, 24265352, 24129030, 23994231, 23860930, 23729102, 23598722, 23469767,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
134 23342214, 23216040, 23091223, 22967740, 22845571, 22724695, 22605092, 22486740,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
135 22369622, 22253717, 22139007, 22025474, 21913099, 21801865, 21691755, 21582751,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
136 21474837, 21367997, 21262215, 21157475, 21053762, 20951060, 20849356, 20748635,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
137 20648882, 20550083, 20452226, 20355296, 20259280, 20164166, 20069941, 19976593,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
138 19884108, 19792477, 19701685, 19611723, 19522579, 19434242, 19346700, 19259944,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
139 19173962, 19088744, 19004281, 18920561, 18837576, 18755316, 18673771, 18592933,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
140 18512791, 18433337, 18354562, 18276457, 18199014, 18122225, 18046082, 17970575,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
141 17895698, 17821442, 17747799, 17674763, 17602325, 17530479, 17459217, 17388532,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
142 17318417, 17248865, 17179870, 17111424, 17043522, 16976156, 16909321, 16843010,
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
143 };
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
144
200
6ab301aaa652 (commit by michael)
arpi_esp
parents: 190
diff changeset
145 /* used to skip zeros at the end */
6ab301aaa652 (commit by michael)
arpi_esp
parents: 190
diff changeset
146 UINT8 zigzag_end[64];
6ab301aaa652 (commit by michael)
arpi_esp
parents: 190
diff changeset
147
190
9e0e56869d05 fix for non-mmx runtimedetect encoding bugs - patch by Michael Niedermayer <michaelni@gmx.at>
uid46427
parents: 174
diff changeset
148 UINT8 permutation[64];
9e0e56869d05 fix for non-mmx runtimedetect encoding bugs - patch by Michael Niedermayer <michaelni@gmx.at>
uid46427
parents: 174
diff changeset
149 //UINT8 invPermutation[64];
9e0e56869d05 fix for non-mmx runtimedetect encoding bugs - patch by Michael Niedermayer <michaelni@gmx.at>
uid46427
parents: 174
diff changeset
150
468
1e23eae32087 Minor warning cleanup.
mellum
parents: 435
diff changeset
151 static void build_zigzag_end(void)
200
6ab301aaa652 (commit by michael)
arpi_esp
parents: 190
diff changeset
152 {
6ab301aaa652 (commit by michael)
arpi_esp
parents: 190
diff changeset
153 int lastIndex;
6ab301aaa652 (commit by michael)
arpi_esp
parents: 190
diff changeset
154 int lastIndexAfterPerm=0;
6ab301aaa652 (commit by michael)
arpi_esp
parents: 190
diff changeset
155 for(lastIndex=0; lastIndex<64; lastIndex++)
6ab301aaa652 (commit by michael)
arpi_esp
parents: 190
diff changeset
156 {
6ab301aaa652 (commit by michael)
arpi_esp
parents: 190
diff changeset
157 if(zigzag_direct[lastIndex] > lastIndexAfterPerm)
6ab301aaa652 (commit by michael)
arpi_esp
parents: 190
diff changeset
158 lastIndexAfterPerm= zigzag_direct[lastIndex];
6ab301aaa652 (commit by michael)
arpi_esp
parents: 190
diff changeset
159 zigzag_end[lastIndex]= lastIndexAfterPerm + 1;
6ab301aaa652 (commit by michael)
arpi_esp
parents: 190
diff changeset
160 }
6ab301aaa652 (commit by michael)
arpi_esp
parents: 190
diff changeset
161 }
6ab301aaa652 (commit by michael)
arpi_esp
parents: 190
diff changeset
162
612
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
163 int pix_sum_c(UINT8 * pix, int line_size)
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
164 {
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
165 int s, i, j;
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
166
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
167 s = 0;
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
168 for (i = 0; i < 16; i++) {
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
169 for (j = 0; j < 16; j += 8) {
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
170 s += pix[0];
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
171 s += pix[1];
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
172 s += pix[2];
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
173 s += pix[3];
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
174 s += pix[4];
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
175 s += pix[5];
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
176 s += pix[6];
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
177 s += pix[7];
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
178 pix += 8;
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
179 }
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
180 pix += line_size - 16;
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
181 }
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
182 return s;
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
183 }
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
184
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
185 int pix_norm1_c(UINT8 * pix, int line_size)
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
186 {
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
187 int s, i, j;
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
188 UINT32 *sq = squareTbl + 256;
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
189
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
190 s = 0;
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
191 for (i = 0; i < 16; i++) {
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
192 for (j = 0; j < 16; j += 8) {
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
193 s += sq[pix[0]];
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
194 s += sq[pix[1]];
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
195 s += sq[pix[2]];
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
196 s += sq[pix[3]];
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
197 s += sq[pix[4]];
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
198 s += sq[pix[5]];
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
199 s += sq[pix[6]];
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
200 s += sq[pix[7]];
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
201 pix += 8;
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
202 }
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
203 pix += line_size - 16;
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
204 }
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
205 return s;
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
206 }
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
207
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
208
516
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
209 void get_pixels_c(DCTELEM *restrict block, const UINT8 *pixels, int line_size)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
210 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
211 int i;
986e461dc072 Initial revision
glantau
parents:
diff changeset
212
986e461dc072 Initial revision
glantau
parents:
diff changeset
213 /* read the pixels */
986e461dc072 Initial revision
glantau
parents:
diff changeset
214 for(i=0;i<8;i++) {
516
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
215 block[0] = pixels[0];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
216 block[1] = pixels[1];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
217 block[2] = pixels[2];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
218 block[3] = pixels[3];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
219 block[4] = pixels[4];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
220 block[5] = pixels[5];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
221 block[6] = pixels[6];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
222 block[7] = pixels[7];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
223 pixels += line_size;
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
224 block += 8;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
225 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
226 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
227
516
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
228 void diff_pixels_c(DCTELEM *restrict block, const UINT8 *s1, const UINT8 *s2,
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
229 int stride){
324
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
230 int i;
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
231
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
232 /* read the pixels */
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
233 for(i=0;i<8;i++) {
516
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
234 block[0] = s1[0] - s2[0];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
235 block[1] = s1[1] - s2[1];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
236 block[2] = s1[2] - s2[2];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
237 block[3] = s1[3] - s2[3];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
238 block[4] = s1[4] - s2[4];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
239 block[5] = s1[5] - s2[5];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
240 block[6] = s1[6] - s2[6];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
241 block[7] = s1[7] - s2[7];
324
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
242 s1 += stride;
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
243 s2 += stride;
516
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
244 block += 8;
324
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
245 }
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
246 }
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
247
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
248
516
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
249 void put_pixels_clamped_c(const DCTELEM *block, UINT8 *restrict pixels,
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
250 int line_size)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
251 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
252 int i;
986e461dc072 Initial revision
glantau
parents:
diff changeset
253 UINT8 *cm = cropTbl + MAX_NEG_CROP;
986e461dc072 Initial revision
glantau
parents:
diff changeset
254
986e461dc072 Initial revision
glantau
parents:
diff changeset
255 /* read the pixels */
986e461dc072 Initial revision
glantau
parents:
diff changeset
256 for(i=0;i<8;i++) {
516
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
257 pixels[0] = cm[block[0]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
258 pixels[1] = cm[block[1]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
259 pixels[2] = cm[block[2]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
260 pixels[3] = cm[block[3]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
261 pixels[4] = cm[block[4]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
262 pixels[5] = cm[block[5]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
263 pixels[6] = cm[block[6]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
264 pixels[7] = cm[block[7]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
265
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
266 pixels += line_size;
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
267 block += 8;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
268 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
269 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
270
516
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
271 void add_pixels_clamped_c(const DCTELEM *block, UINT8 *restrict pixels,
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
272 int line_size)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
273 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
274 int i;
986e461dc072 Initial revision
glantau
parents:
diff changeset
275 UINT8 *cm = cropTbl + MAX_NEG_CROP;
986e461dc072 Initial revision
glantau
parents:
diff changeset
276
986e461dc072 Initial revision
glantau
parents:
diff changeset
277 /* read the pixels */
986e461dc072 Initial revision
glantau
parents:
diff changeset
278 for(i=0;i<8;i++) {
516
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
279 pixels[0] = cm[pixels[0] + block[0]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
280 pixels[1] = cm[pixels[1] + block[1]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
281 pixels[2] = cm[pixels[2] + block[2]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
282 pixels[3] = cm[pixels[3] + block[3]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
283 pixels[4] = cm[pixels[4] + block[4]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
284 pixels[5] = cm[pixels[5] + block[5]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
285 pixels[6] = cm[pixels[6] + block[6]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
286 pixels[7] = cm[pixels[7] + block[7]];
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
287 pixels += line_size;
0cb7ab35ccb2 * Detect "retrict" keyword
mellum
parents: 493
diff changeset
288 block += 8;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
289 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
290 }
385
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
291 #if 0
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
292
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
293 #define PIXOP2(OPNAME, OP) \
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
294 void OPNAME ## _pixels(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
295 {\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
296 int i;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
297 for(i=0; i<h; i++){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
298 OP(*((uint64_t*)block), LD64(pixels));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
299 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
300 block +=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
301 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
302 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
303 \
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
304 void OPNAME ## _no_rnd_pixels_x2(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
305 {\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
306 int i;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
307 for(i=0; i<h; i++){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
308 const uint64_t a= LD64(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
309 const uint64_t b= LD64(pixels+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
310 OP(*((uint64_t*)block), (a&b) + (((a^b)&0xFEFEFEFEFEFEFEFEULL)>>1));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
311 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
312 block +=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
313 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
314 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
315 \
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
316 void OPNAME ## _pixels_x2(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
317 {\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
318 int i;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
319 for(i=0; i<h; i++){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
320 const uint64_t a= LD64(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
321 const uint64_t b= LD64(pixels+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
322 OP(*((uint64_t*)block), (a|b) - (((a^b)&0xFEFEFEFEFEFEFEFEULL)>>1));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
323 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
324 block +=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
325 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
326 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
327 \
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
328 void OPNAME ## _no_rnd_pixels_y2(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
329 {\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
330 int i;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
331 for(i=0; i<h; i++){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
332 const uint64_t a= LD64(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
333 const uint64_t b= LD64(pixels+line_size);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
334 OP(*((uint64_t*)block), (a&b) + (((a^b)&0xFEFEFEFEFEFEFEFEULL)>>1));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
335 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
336 block +=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
337 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
338 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
339 \
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
340 void OPNAME ## _pixels_y2(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
341 {\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
342 int i;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
343 for(i=0; i<h; i++){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
344 const uint64_t a= LD64(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
345 const uint64_t b= LD64(pixels+line_size);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
346 OP(*((uint64_t*)block), (a|b) - (((a^b)&0xFEFEFEFEFEFEFEFEULL)>>1));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
347 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
348 block +=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
349 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
350 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
351 \
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
352 void OPNAME ## _pixels_xy2(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
353 {\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
354 int i;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
355 const uint64_t a= LD64(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
356 const uint64_t b= LD64(pixels+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
357 uint64_t l0= (a&0x0303030303030303ULL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
358 + (b&0x0303030303030303ULL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
359 + 0x0202020202020202ULL;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
360 uint64_t h0= ((a&0xFCFCFCFCFCFCFCFCULL)>>2)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
361 + ((b&0xFCFCFCFCFCFCFCFCULL)>>2);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
362 uint64_t l1,h1;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
363 \
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
364 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
365 for(i=0; i<h; i+=2){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
366 uint64_t a= LD64(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
367 uint64_t b= LD64(pixels+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
368 l1= (a&0x0303030303030303ULL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
369 + (b&0x0303030303030303ULL);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
370 h1= ((a&0xFCFCFCFCFCFCFCFCULL)>>2)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
371 + ((b&0xFCFCFCFCFCFCFCFCULL)>>2);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
372 OP(*((uint64_t*)block), h0+h1+(((l0+l1)>>2)&0x0F0F0F0F0F0F0F0FULL));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
373 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
374 block +=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
375 a= LD64(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
376 b= LD64(pixels+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
377 l0= (a&0x0303030303030303ULL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
378 + (b&0x0303030303030303ULL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
379 + 0x0202020202020202ULL;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
380 h0= ((a&0xFCFCFCFCFCFCFCFCULL)>>2)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
381 + ((b&0xFCFCFCFCFCFCFCFCULL)>>2);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
382 OP(*((uint64_t*)block), h0+h1+(((l0+l1)>>2)&0x0F0F0F0F0F0F0F0FULL));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
383 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
384 block +=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
385 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
386 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
387 \
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
388 void OPNAME ## _no_rnd_pixels_xy2(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
389 {\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
390 int i;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
391 const uint64_t a= LD64(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
392 const uint64_t b= LD64(pixels+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
393 uint64_t l0= (a&0x0303030303030303ULL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
394 + (b&0x0303030303030303ULL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
395 + 0x0101010101010101ULL;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
396 uint64_t h0= ((a&0xFCFCFCFCFCFCFCFCULL)>>2)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
397 + ((b&0xFCFCFCFCFCFCFCFCULL)>>2);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
398 uint64_t l1,h1;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
399 \
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
400 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
401 for(i=0; i<h; i+=2){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
402 uint64_t a= LD64(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
403 uint64_t b= LD64(pixels+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
404 l1= (a&0x0303030303030303ULL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
405 + (b&0x0303030303030303ULL);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
406 h1= ((a&0xFCFCFCFCFCFCFCFCULL)>>2)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
407 + ((b&0xFCFCFCFCFCFCFCFCULL)>>2);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
408 OP(*((uint64_t*)block), h0+h1+(((l0+l1)>>2)&0x0F0F0F0F0F0F0F0FULL));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
409 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
410 block +=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
411 a= LD64(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
412 b= LD64(pixels+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
413 l0= (a&0x0303030303030303ULL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
414 + (b&0x0303030303030303ULL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
415 + 0x0101010101010101ULL;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
416 h0= ((a&0xFCFCFCFCFCFCFCFCULL)>>2)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
417 + ((b&0xFCFCFCFCFCFCFCFCULL)>>2);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
418 OP(*((uint64_t*)block), h0+h1+(((l0+l1)>>2)&0x0F0F0F0F0F0F0F0FULL));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
419 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
420 block +=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
421 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
422 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
423 \
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
424 void (*OPNAME ## _pixels_tab[4])(uint8_t *block, const uint8_t *pixels, int line_size, int h) = {\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
425 OPNAME ## _pixels,\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
426 OPNAME ## _pixels_x2,\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
427 OPNAME ## _pixels_y2,\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
428 OPNAME ## _pixels_xy2,\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
429 };\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
430 \
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
431 void (*OPNAME ## _no_rnd_pixels_tab[4])(uint8_t *block, const uint8_t *pixels, int line_size, int h) = {\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
432 OPNAME ## _pixels,\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
433 OPNAME ## _no_rnd_pixels_x2,\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
434 OPNAME ## _no_rnd_pixels_y2,\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
435 OPNAME ## _no_rnd_pixels_xy2,\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
436 };
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
437
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
438 #define op_avg(a, b) a = ( ((a)|(b)) - ((((a)^(b))&0xFEFEFEFEFEFEFEFEULL)>>1) )
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
439 #else // 64 bit variant
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
440
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
441 #define PIXOP2(OPNAME, OP) \
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
442 void OPNAME ## _pixels(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
443 {\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
444 int i;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
445 for(i=0; i<h; i++){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
446 OP(*((uint32_t*)(block )), LD32(pixels ));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
447 OP(*((uint32_t*)(block+4)), LD32(pixels+4));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
448 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
449 block +=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
450 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
451 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
452 \
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
453 void OPNAME ## _no_rnd_pixels_x2(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
454 {\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
455 int i;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
456 for(i=0; i<h; i++){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
457 int j;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
458 for(j=0; j<2; j++){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
459 const uint32_t a= LD32(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
460 const uint32_t b= LD32(pixels+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
461 OP(*((uint32_t*)block), (a&b) + (((a^b)&0xFEFEFEFEUL)>>1));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
462 pixels+=4;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
463 block +=4;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
464 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
465 pixels+=line_size-8;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
466 block +=line_size-8;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
467 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
468 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
469 \
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
470 void OPNAME ## _pixels_x2(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
471 {\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
472 int i;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
473 for(i=0; i<h; i++){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
474 int j;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
475 for(j=0; j<2; j++){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
476 const uint32_t a= LD32(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
477 const uint32_t b= LD32(pixels+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
478 OP(*((uint32_t*)block), (a|b) - (((a^b)&0xFEFEFEFEUL)>>1));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
479 pixels+=4;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
480 block +=4;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
481 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
482 pixels+=line_size-8;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
483 block +=line_size-8;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
484 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
485 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
486 \
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
487 void OPNAME ## _no_rnd_pixels_y2(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
488 {\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
489 int i;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
490 for(i=0; i<h; i++){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
491 int j;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
492 for(j=0; j<2; j++){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
493 const uint32_t a= LD32(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
494 const uint32_t b= LD32(pixels+line_size);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
495 OP(*((uint32_t*)block), (a&b) + (((a^b)&0xFEFEFEFEUL)>>1));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
496 pixels+=4;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
497 block +=4;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
498 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
499 pixels+=line_size-8;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
500 block +=line_size-8;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
501 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
502 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
503 \
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
504 void OPNAME ## _pixels_y2(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
505 {\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
506 int i;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
507 for(i=0; i<h; i++){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
508 int j;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
509 for(j=0; j<2; j++){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
510 const uint32_t a= LD32(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
511 const uint32_t b= LD32(pixels+line_size);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
512 OP(*((uint32_t*)block), (a|b) - (((a^b)&0xFEFEFEFEUL)>>1));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
513 pixels+=4;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
514 block +=4;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
515 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
516 pixels+=line_size-8;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
517 block +=line_size-8;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
518 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
519 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
520 \
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
521 void OPNAME ## _pixels_xy2(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
522 {\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
523 int j;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
524 for(j=0; j<2; j++){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
525 int i;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
526 const uint32_t a= LD32(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
527 const uint32_t b= LD32(pixels+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
528 uint32_t l0= (a&0x03030303UL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
529 + (b&0x03030303UL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
530 + 0x02020202UL;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
531 uint32_t h0= ((a&0xFCFCFCFCUL)>>2)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
532 + ((b&0xFCFCFCFCUL)>>2);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
533 uint32_t l1,h1;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
534 \
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
535 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
536 for(i=0; i<h; i+=2){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
537 uint32_t a= LD32(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
538 uint32_t b= LD32(pixels+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
539 l1= (a&0x03030303UL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
540 + (b&0x03030303UL);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
541 h1= ((a&0xFCFCFCFCUL)>>2)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
542 + ((b&0xFCFCFCFCUL)>>2);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
543 OP(*((uint32_t*)block), h0+h1+(((l0+l1)>>2)&0x0F0F0F0FUL));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
544 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
545 block +=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
546 a= LD32(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
547 b= LD32(pixels+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
548 l0= (a&0x03030303UL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
549 + (b&0x03030303UL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
550 + 0x02020202UL;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
551 h0= ((a&0xFCFCFCFCUL)>>2)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
552 + ((b&0xFCFCFCFCUL)>>2);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
553 OP(*((uint32_t*)block), h0+h1+(((l0+l1)>>2)&0x0F0F0F0FUL));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
554 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
555 block +=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
556 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
557 pixels+=4-line_size*(h+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
558 block +=4-line_size*h;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
559 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
560 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
561 \
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
562 void OPNAME ## _no_rnd_pixels_xy2(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
563 {\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
564 int j;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
565 for(j=0; j<2; j++){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
566 int i;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
567 const uint32_t a= LD32(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
568 const uint32_t b= LD32(pixels+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
569 uint32_t l0= (a&0x03030303UL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
570 + (b&0x03030303UL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
571 + 0x01010101UL;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
572 uint32_t h0= ((a&0xFCFCFCFCUL)>>2)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
573 + ((b&0xFCFCFCFCUL)>>2);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
574 uint32_t l1,h1;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
575 \
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
576 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
577 for(i=0; i<h; i+=2){\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
578 uint32_t a= LD32(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
579 uint32_t b= LD32(pixels+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
580 l1= (a&0x03030303UL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
581 + (b&0x03030303UL);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
582 h1= ((a&0xFCFCFCFCUL)>>2)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
583 + ((b&0xFCFCFCFCUL)>>2);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
584 OP(*((uint32_t*)block), h0+h1+(((l0+l1)>>2)&0x0F0F0F0FUL));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
585 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
586 block +=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
587 a= LD32(pixels );\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
588 b= LD32(pixels+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
589 l0= (a&0x03030303UL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
590 + (b&0x03030303UL)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
591 + 0x01010101UL;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
592 h0= ((a&0xFCFCFCFCUL)>>2)\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
593 + ((b&0xFCFCFCFCUL)>>2);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
594 OP(*((uint32_t*)block), h0+h1+(((l0+l1)>>2)&0x0F0F0F0FUL));\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
595 pixels+=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
596 block +=line_size;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
597 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
598 pixels+=4-line_size*(h+1);\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
599 block +=4-line_size*h;\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
600 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
601 }\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
602 \
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
603 void (*OPNAME ## _pixels_tab[4])(uint8_t *block, const uint8_t *pixels, int line_size, int h) = {\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
604 OPNAME ## _pixels,\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
605 OPNAME ## _pixels_x2,\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
606 OPNAME ## _pixels_y2,\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
607 OPNAME ## _pixels_xy2,\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
608 };\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
609 \
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
610 void (*OPNAME ## _no_rnd_pixels_tab[4])(uint8_t *block, const uint8_t *pixels, int line_size, int h) = {\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
611 OPNAME ## _pixels,\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
612 OPNAME ## _no_rnd_pixels_x2,\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
613 OPNAME ## _no_rnd_pixels_y2,\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
614 OPNAME ## _no_rnd_pixels_xy2,\
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
615 };
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
616 #define op_avg(a, b) a = ( ((a)|(b)) - ((((a)^(b))&0xFEFEFEFEUL)>>1) )
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
617 #endif
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
618 #define op_put(a, b) a = b
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
619
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
620 PIXOP2(avg, op_avg)
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
621 PIXOP2(put, op_put)
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
622 #undef op_avg
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
623 #undef op_put
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
624
403
2c3e25f4c496 removed unused stuff - added dsputil_set_bit_exact() support for easier testing
glantau
parents: 398
diff changeset
625 #if 0
385
7ac7a48fbe5e new hopefully faster MC
michaelni
parents: 324
diff changeset
626 /* FIXME this stuff could be removed as its ot really used anymore */
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
627 #define PIXOP(BTYPE, OPNAME, OP, INCR) \
986e461dc072 Initial revision
glantau
parents:
diff changeset
628 \
986e461dc072 Initial revision
glantau
parents:
diff changeset
629 static void OPNAME ## _pixels(BTYPE *block, const UINT8 *pixels, int line_size, int h) \
986e461dc072 Initial revision
glantau
parents:
diff changeset
630 { \
986e461dc072 Initial revision
glantau
parents:
diff changeset
631 BTYPE *p; \
986e461dc072 Initial revision
glantau
parents:
diff changeset
632 const UINT8 *pix; \
986e461dc072 Initial revision
glantau
parents:
diff changeset
633 \
986e461dc072 Initial revision
glantau
parents:
diff changeset
634 p = block; \
986e461dc072 Initial revision
glantau
parents:
diff changeset
635 pix = pixels; \
986e461dc072 Initial revision
glantau
parents:
diff changeset
636 do { \
986e461dc072 Initial revision
glantau
parents:
diff changeset
637 OP(p[0], pix[0]); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
638 OP(p[1], pix[1]); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
639 OP(p[2], pix[2]); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
640 OP(p[3], pix[3]); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
641 OP(p[4], pix[4]); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
642 OP(p[5], pix[5]); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
643 OP(p[6], pix[6]); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
644 OP(p[7], pix[7]); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
645 pix += line_size; \
986e461dc072 Initial revision
glantau
parents:
diff changeset
646 p += INCR; \
986e461dc072 Initial revision
glantau
parents:
diff changeset
647 } while (--h);; \
986e461dc072 Initial revision
glantau
parents:
diff changeset
648 } \
986e461dc072 Initial revision
glantau
parents:
diff changeset
649 \
986e461dc072 Initial revision
glantau
parents:
diff changeset
650 static void OPNAME ## _pixels_x2(BTYPE *block, const UINT8 *pixels, int line_size, int h) \
986e461dc072 Initial revision
glantau
parents:
diff changeset
651 { \
986e461dc072 Initial revision
glantau
parents:
diff changeset
652 BTYPE *p; \
986e461dc072 Initial revision
glantau
parents:
diff changeset
653 const UINT8 *pix; \
986e461dc072 Initial revision
glantau
parents:
diff changeset
654 \
986e461dc072 Initial revision
glantau
parents:
diff changeset
655 p = block; \
986e461dc072 Initial revision
glantau
parents:
diff changeset
656 pix = pixels; \
986e461dc072 Initial revision
glantau
parents:
diff changeset
657 do { \
986e461dc072 Initial revision
glantau
parents:
diff changeset
658 OP(p[0], avg2(pix[0], pix[1])); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
659 OP(p[1], avg2(pix[1], pix[2])); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
660 OP(p[2], avg2(pix[2], pix[3])); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
661 OP(p[3], avg2(pix[3], pix[4])); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
662 OP(p[4], avg2(pix[4], pix[5])); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
663 OP(p[5], avg2(pix[5], pix[6])); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
664 OP(p[6], avg2(pix[6], pix[7])); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
665 OP(p[7], avg2(pix[7], pix[8])); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
666 pix += line_size; \
986e461dc072 Initial revision
glantau
parents:
diff changeset
667 p += INCR; \
986e461dc072 Initial revision
glantau
parents:
diff changeset
668 } while (--h); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
669 } \
986e461dc072 Initial revision
glantau
parents:
diff changeset
670 \
986e461dc072 Initial revision
glantau
parents:
diff changeset
671 static void OPNAME ## _pixels_y2(BTYPE *block, const UINT8 *pixels, int line_size, int h) \
986e461dc072 Initial revision
glantau
parents:
diff changeset
672 { \
986e461dc072 Initial revision
glantau
parents:
diff changeset
673 BTYPE *p; \
986e461dc072 Initial revision
glantau
parents:
diff changeset
674 const UINT8 *pix; \
986e461dc072 Initial revision
glantau
parents:
diff changeset
675 const UINT8 *pix1; \
986e461dc072 Initial revision
glantau
parents:
diff changeset
676 \
986e461dc072 Initial revision
glantau
parents:
diff changeset
677 p = block; \
986e461dc072 Initial revision
glantau
parents:
diff changeset
678 pix = pixels; \
986e461dc072 Initial revision
glantau
parents:
diff changeset
679 pix1 = pixels + line_size; \
986e461dc072 Initial revision
glantau
parents:
diff changeset
680 do { \
986e461dc072 Initial revision
glantau
parents:
diff changeset
681 OP(p[0], avg2(pix[0], pix1[0])); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
682 OP(p[1], avg2(pix[1], pix1[1])); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
683 OP(p[2], avg2(pix[2], pix1[2])); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
684 OP(p[3], avg2(pix[3], pix1[3])); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
685 OP(p[4], avg2(pix[4], pix1[4])); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
686 OP(p[5], avg2(pix[5], pix1[5])); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
687 OP(p[6], avg2(pix[6], pix1[6])); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
688 OP(p[7], avg2(pix[7], pix1[7])); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
689 pix += line_size; \
986e461dc072 Initial revision
glantau
parents:
diff changeset
690 pix1 += line_size; \
986e461dc072 Initial revision
glantau
parents:
diff changeset
691 p += INCR; \
986e461dc072 Initial revision
glantau
parents:
diff changeset
692 } while(--h); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
693 } \
986e461dc072 Initial revision
glantau
parents:
diff changeset
694 \
986e461dc072 Initial revision
glantau
parents:
diff changeset
695 static void OPNAME ## _pixels_xy2(BTYPE *block, const UINT8 *pixels, int line_size, int h) \
986e461dc072 Initial revision
glantau
parents:
diff changeset
696 { \
986e461dc072 Initial revision
glantau
parents:
diff changeset
697 BTYPE *p; \
986e461dc072 Initial revision
glantau
parents:
diff changeset
698 const UINT8 *pix; \
986e461dc072 Initial revision
glantau
parents:
diff changeset
699 const UINT8 *pix1; \
986e461dc072 Initial revision
glantau
parents:
diff changeset
700 \
986e461dc072 Initial revision
glantau
parents:
diff changeset
701 p = block; \
986e461dc072 Initial revision
glantau
parents:
diff changeset
702 pix = pixels; \
986e461dc072 Initial revision
glantau
parents:
diff changeset
703 pix1 = pixels + line_size; \
986e461dc072 Initial revision
glantau
parents:
diff changeset
704 do { \
986e461dc072 Initial revision
glantau
parents:
diff changeset
705 OP(p[0], avg4(pix[0], pix[1], pix1[0], pix1[1])); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
706 OP(p[1], avg4(pix[1], pix[2], pix1[1], pix1[2])); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
707 OP(p[2], avg4(pix[2], pix[3], pix1[2], pix1[3])); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
708 OP(p[3], avg4(pix[3], pix[4], pix1[3], pix1[4])); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
709 OP(p[4], avg4(pix[4], pix[5], pix1[4], pix1[5])); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
710 OP(p[5], avg4(pix[5], pix[6], pix1[5], pix1[6])); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
711 OP(p[6], avg4(pix[6], pix[7], pix1[6], pix1[7])); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
712 OP(p[7], avg4(pix[7], pix[8], pix1[7], pix1[8])); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
713 pix += line_size; \
986e461dc072 Initial revision
glantau
parents:
diff changeset
714 pix1 += line_size; \
986e461dc072 Initial revision
glantau
parents:
diff changeset
715 p += INCR; \
986e461dc072 Initial revision
glantau
parents:
diff changeset
716 } while(--h); \
986e461dc072 Initial revision
glantau
parents:
diff changeset
717 } \
986e461dc072 Initial revision
glantau
parents:
diff changeset
718 \
986e461dc072 Initial revision
glantau
parents:
diff changeset
719 void (*OPNAME ## _pixels_tab[4])(BTYPE *block, const UINT8 *pixels, int line_size, int h) = { \
986e461dc072 Initial revision
glantau
parents:
diff changeset
720 OPNAME ## _pixels, \
986e461dc072 Initial revision
glantau
parents:
diff changeset
721 OPNAME ## _pixels_x2, \
986e461dc072 Initial revision
glantau
parents:
diff changeset
722 OPNAME ## _pixels_y2, \
986e461dc072 Initial revision
glantau
parents:
diff changeset
723 OPNAME ## _pixels_xy2, \
986e461dc072 Initial revision
glantau
parents:
diff changeset
724 };
986e461dc072 Initial revision
glantau
parents:
diff changeset
725
986e461dc072 Initial revision
glantau
parents:
diff changeset
726 /* rounding primitives */
986e461dc072 Initial revision
glantau
parents:
diff changeset
727 #define avg2(a,b) ((a+b+1)>>1)
986e461dc072 Initial revision
glantau
parents:
diff changeset
728 #define avg4(a,b,c,d) ((a+b+c+d+2)>>2)
986e461dc072 Initial revision
glantau
parents:
diff changeset
729
986e461dc072 Initial revision
glantau
parents:
diff changeset
730 #define op_avg(a, b) a = avg2(a, b)
986e461dc072 Initial revision
glantau
parents:
diff changeset
731 #define op_sub(a, b) a -= b
612
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
732 #define op_put(a, b) a = b
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
733
986e461dc072 Initial revision
glantau
parents:
diff changeset
734 PIXOP(DCTELEM, sub, op_sub, 8)
612
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
735 PIXOP(uint8_t, avg, op_avg, line_size)
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
736 PIXOP(uint8_t, put, op_put, line_size)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
737
986e461dc072 Initial revision
glantau
parents:
diff changeset
738 /* not rounding primitives */
986e461dc072 Initial revision
glantau
parents:
diff changeset
739 #undef avg2
986e461dc072 Initial revision
glantau
parents:
diff changeset
740 #undef avg4
986e461dc072 Initial revision
glantau
parents:
diff changeset
741 #define avg2(a,b) ((a+b)>>1)
986e461dc072 Initial revision
glantau
parents:
diff changeset
742 #define avg4(a,b,c,d) ((a+b+c+d+1)>>2)
986e461dc072 Initial revision
glantau
parents:
diff changeset
743
612
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
744 PIXOP(uint8_t, avg_no_rnd, op_avg, line_size)
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
745 PIXOP(uint8_t, put_no_rnd, op_put, line_size)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
746 /* motion estimation */
986e461dc072 Initial revision
glantau
parents:
diff changeset
747
986e461dc072 Initial revision
glantau
parents:
diff changeset
748 #undef avg2
986e461dc072 Initial revision
glantau
parents:
diff changeset
749 #undef avg4
403
2c3e25f4c496 removed unused stuff - added dsputil_set_bit_exact() support for easier testing
glantau
parents: 398
diff changeset
750 #endif
2c3e25f4c496 removed unused stuff - added dsputil_set_bit_exact() support for easier testing
glantau
parents: 398
diff changeset
751
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
752 #define avg2(a,b) ((a+b+1)>>1)
986e461dc072 Initial revision
glantau
parents:
diff changeset
753 #define avg4(a,b,c,d) ((a+b+c+d+2)>>2)
986e461dc072 Initial revision
glantau
parents:
diff changeset
754
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
755 static void gmc1_c(UINT8 *dst, UINT8 *src, int srcStride, int h, int x16, int y16, int rounder)
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
756 {
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
757 const int A=(16-x16)*(16-y16);
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
758 const int B=( x16)*(16-y16);
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
759 const int C=(16-x16)*( y16);
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
760 const int D=( x16)*( y16);
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
761 int i;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
762 rounder= 128 - rounder;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
763
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
764 for(i=0; i<h; i++)
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
765 {
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
766 dst[0]= (A*src[0] + B*src[1] + C*src[srcStride+0] + D*src[srcStride+1] + rounder)>>8;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
767 dst[1]= (A*src[1] + B*src[2] + C*src[srcStride+1] + D*src[srcStride+2] + rounder)>>8;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
768 dst[2]= (A*src[2] + B*src[3] + C*src[srcStride+2] + D*src[srcStride+3] + rounder)>>8;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
769 dst[3]= (A*src[3] + B*src[4] + C*src[srcStride+3] + D*src[srcStride+4] + rounder)>>8;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
770 dst[4]= (A*src[4] + B*src[5] + C*src[srcStride+4] + D*src[srcStride+5] + rounder)>>8;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
771 dst[5]= (A*src[5] + B*src[6] + C*src[srcStride+5] + D*src[srcStride+6] + rounder)>>8;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
772 dst[6]= (A*src[6] + B*src[7] + C*src[srcStride+6] + D*src[srcStride+7] + rounder)>>8;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
773 dst[7]= (A*src[7] + B*src[8] + C*src[srcStride+7] + D*src[srcStride+8] + rounder)>>8;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
774 dst+= srcStride;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
775 src+= srcStride;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
776 }
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
777 }
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
778
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
779 static void qpel_h_lowpass(UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int h, int r)
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
780 {
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
781 UINT8 *cm = cropTbl + MAX_NEG_CROP;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
782 int i;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
783 for(i=0; i<h; i++)
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
784 {
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
785 dst[0]= cm[(((src[0]+src[1])*20 - (src[0]+src[2])*6 + (src[1]+src[3])*3 - (src[2]+src[4]) + r)>>5)];
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
786 dst[1]= cm[(((src[1]+src[2])*20 - (src[0]+src[3])*6 + (src[0]+src[4])*3 - (src[1]+src[5]) + r)>>5)];
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
787 dst[2]= cm[(((src[2]+src[3])*20 - (src[1]+src[4])*6 + (src[0]+src[5])*3 - (src[0]+src[6]) + r)>>5)];
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
788 dst[3]= cm[(((src[3]+src[4])*20 - (src[2]+src[5])*6 + (src[1]+src[6])*3 - (src[0]+src[7]) + r)>>5)];
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
789 dst[4]= cm[(((src[4]+src[5])*20 - (src[3]+src[6])*6 + (src[2]+src[7])*3 - (src[1]+src[8]) + r)>>5)];
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
790 dst[5]= cm[(((src[5]+src[6])*20 - (src[4]+src[7])*6 + (src[3]+src[8])*3 - (src[2]+src[8]) + r)>>5)];
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
791 dst[6]= cm[(((src[6]+src[7])*20 - (src[5]+src[8])*6 + (src[4]+src[8])*3 - (src[3]+src[7]) + r)>>5)];
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
792 dst[7]= cm[(((src[7]+src[8])*20 - (src[6]+src[8])*6 + (src[5]+src[7])*3 - (src[4]+src[6]) + r)>>5)];
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
793 dst+=dstStride;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
794 src+=srcStride;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
795 }
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
796 }
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
797
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
798 static void qpel_v_lowpass(UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int w, int r)
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
799 {
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
800 UINT8 *cm = cropTbl + MAX_NEG_CROP;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
801 int i;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
802 for(i=0; i<w; i++)
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
803 {
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
804 const int src0= src[0*srcStride];
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
805 const int src1= src[1*srcStride];
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
806 const int src2= src[2*srcStride];
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
807 const int src3= src[3*srcStride];
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
808 const int src4= src[4*srcStride];
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
809 const int src5= src[5*srcStride];
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
810 const int src6= src[6*srcStride];
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
811 const int src7= src[7*srcStride];
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
812 const int src8= src[8*srcStride];
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
813 dst[0*dstStride]= cm[(((src0+src1)*20 - (src0+src2)*6 + (src1+src3)*3 - (src2+src4) + r)>>5)];
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
814 dst[1*dstStride]= cm[(((src1+src2)*20 - (src0+src3)*6 + (src0+src4)*3 - (src1+src5) + r)>>5)];
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
815 dst[2*dstStride]= cm[(((src2+src3)*20 - (src1+src4)*6 + (src0+src5)*3 - (src0+src6) + r)>>5)];
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
816 dst[3*dstStride]= cm[(((src3+src4)*20 - (src2+src5)*6 + (src1+src6)*3 - (src0+src7) + r)>>5)];
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
817 dst[4*dstStride]= cm[(((src4+src5)*20 - (src3+src6)*6 + (src2+src7)*3 - (src1+src8) + r)>>5)];
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
818 dst[5*dstStride]= cm[(((src5+src6)*20 - (src4+src7)*6 + (src3+src8)*3 - (src2+src8) + r)>>5)];
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
819 dst[6*dstStride]= cm[(((src6+src7)*20 - (src5+src8)*6 + (src4+src8)*3 - (src3+src7) + r)>>5)];
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
820 dst[7*dstStride]= cm[(((src7+src8)*20 - (src6+src8)*6 + (src5+src7)*3 - (src4+src6) + r)>>5)];
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
821 dst++;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
822 src++;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
823 }
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
824 }
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
825
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
826 static inline void put_block(UINT8 *dst, UINT8 *src, int dstStride, int srcStride)
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
827 {
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
828 int i;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
829 for(i=0; i<8; i++)
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
830 {
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
831 dst[0]= src[0];
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
832 dst[1]= src[1];
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
833 dst[2]= src[2];
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
834 dst[3]= src[3];
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
835 dst[4]= src[4];
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
836 dst[5]= src[5];
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
837 dst[6]= src[6];
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
838 dst[7]= src[7];
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
839 dst+=dstStride;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
840 src+=srcStride;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
841 }
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
842 }
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
843
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
844 static inline void avg2_block(UINT8 *dst, UINT8 *src1, UINT8 *src2, int dstStride, int srcStride, int r)
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
845 {
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
846 int i;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
847 for(i=0; i<8; i++)
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
848 {
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
849 dst[0]= (src1[0] + src2[0] + r)>>1;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
850 dst[1]= (src1[1] + src2[1] + r)>>1;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
851 dst[2]= (src1[2] + src2[2] + r)>>1;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
852 dst[3]= (src1[3] + src2[3] + r)>>1;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
853 dst[4]= (src1[4] + src2[4] + r)>>1;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
854 dst[5]= (src1[5] + src2[5] + r)>>1;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
855 dst[6]= (src1[6] + src2[6] + r)>>1;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
856 dst[7]= (src1[7] + src2[7] + r)>>1;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
857 dst+=dstStride;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
858 src1+=srcStride;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
859 src2+=8;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
860 }
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
861 }
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
862
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
863 static inline void avg4_block(UINT8 *dst, UINT8 *src1, UINT8 *src2, UINT8 *src3, UINT8 *src4, int dstStride, int srcStride, int r)
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
864 {
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
865 int i;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
866 for(i=0; i<8; i++)
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
867 {
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
868 dst[0]= (src1[0] + src2[0] + src3[0] + src4[0] + r)>>2;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
869 dst[1]= (src1[1] + src2[1] + src3[1] + src4[1] + r)>>2;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
870 dst[2]= (src1[2] + src2[2] + src3[2] + src4[2] + r)>>2;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
871 dst[3]= (src1[3] + src2[3] + src3[3] + src4[3] + r)>>2;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
872 dst[4]= (src1[4] + src2[4] + src3[4] + src4[4] + r)>>2;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
873 dst[5]= (src1[5] + src2[5] + src3[5] + src4[5] + r)>>2;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
874 dst[6]= (src1[6] + src2[6] + src3[6] + src4[6] + r)>>2;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
875 dst[7]= (src1[7] + src2[7] + src3[7] + src4[7] + r)>>2;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
876 dst+=dstStride;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
877 src1+=srcStride;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
878 src2+=8;
256
4c1cec7c3c7c q-pel mc fixed
michaelni
parents: 255
diff changeset
879 src3+=8;
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
880 src4+=8;
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
881 }
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
882 }
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
883
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
884 #define QPEL_MC(r, name) \
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
885 static void qpel_mc00_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
886 {\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
887 put_block(dst, src, dstStride, srcStride);\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
888 }\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
889 \
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
890 static void qpel_mc10_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
891 {\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
892 UINT8 half[64];\
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
893 qpel_h_lowpass(half, src, 8, srcStride, 8, 16-r);\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
894 avg2_block(dst, src, half, dstStride, srcStride, 1-r);\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
895 }\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
896 \
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
897 static void qpel_mc20_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
898 {\
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
899 qpel_h_lowpass(dst, src, dstStride, srcStride, 8, 16-r);\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
900 }\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
901 \
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
902 static void qpel_mc30_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
903 {\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
904 UINT8 half[64];\
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
905 qpel_h_lowpass(half, src, 8, srcStride, 8, 16-r);\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
906 avg2_block(dst, src+1, half, dstStride, srcStride, 1-r);\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
907 }\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
908 \
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
909 static void qpel_mc01_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
910 {\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
911 UINT8 half[64];\
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
912 qpel_v_lowpass(half, src, 8, srcStride, 8, 16-r);\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
913 avg2_block(dst, src, half, dstStride, srcStride, 1-r);\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
914 }\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
915 \
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
916 static void qpel_mc02_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
917 {\
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
918 qpel_v_lowpass(dst, src, dstStride, srcStride, 8, 16-r);\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
919 }\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
920 \
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
921 static void qpel_mc03_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
922 {\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
923 UINT8 half[64];\
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
924 qpel_v_lowpass(half, src, 8, srcStride, 8, 16-r);\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
925 avg2_block(dst, src+srcStride, half, dstStride, srcStride, 1-r);\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
926 }\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
927 static void qpel_mc11_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
928 {\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
929 UINT8 halfH[72];\
256
4c1cec7c3c7c q-pel mc fixed
michaelni
parents: 255
diff changeset
930 UINT8 halfV[64];\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
931 UINT8 halfHV[64];\
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
932 qpel_h_lowpass(halfH, src, 8, srcStride, 9, 16-r);\
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
933 qpel_v_lowpass(halfV, src, 8, srcStride, 8, 16-r);\
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
934 qpel_v_lowpass(halfHV, halfH, 8, 8, 8, 16-r);\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
935 avg4_block(dst, src, halfH, halfV, halfHV, dstStride, srcStride, 2-r);\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
936 }\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
937 static void qpel_mc31_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
938 {\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
939 UINT8 halfH[72];\
256
4c1cec7c3c7c q-pel mc fixed
michaelni
parents: 255
diff changeset
940 UINT8 halfV[64];\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
941 UINT8 halfHV[64];\
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
942 qpel_h_lowpass(halfH, src, 8, srcStride, 9, 16-r);\
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
943 qpel_v_lowpass(halfV, src+1, 8, srcStride, 8, 16-r);\
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
944 qpel_v_lowpass(halfHV, halfH, 8, 8, 8, 16-r);\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
945 avg4_block(dst, src+1, halfH, halfV, halfHV, dstStride, srcStride, 2-r);\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
946 }\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
947 static void qpel_mc13_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
948 {\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
949 UINT8 halfH[72];\
256
4c1cec7c3c7c q-pel mc fixed
michaelni
parents: 255
diff changeset
950 UINT8 halfV[64];\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
951 UINT8 halfHV[64];\
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
952 qpel_h_lowpass(halfH, src, 8, srcStride, 9, 16-r);\
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
953 qpel_v_lowpass(halfV, src, 8, srcStride, 8, 16-r);\
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
954 qpel_v_lowpass(halfHV, halfH, 8, 8, 8, 16-r);\
256
4c1cec7c3c7c q-pel mc fixed
michaelni
parents: 255
diff changeset
955 avg4_block(dst, src+srcStride, halfH+8, halfV, halfHV, dstStride, srcStride, 2-r);\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
956 }\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
957 static void qpel_mc33_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
958 {\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
959 UINT8 halfH[72];\
256
4c1cec7c3c7c q-pel mc fixed
michaelni
parents: 255
diff changeset
960 UINT8 halfV[64];\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
961 UINT8 halfHV[64];\
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
962 qpel_h_lowpass(halfH, src, 8, srcStride, 9, 16-r);\
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
963 qpel_v_lowpass(halfV, src+1, 8, srcStride, 8, 16-r);\
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
964 qpel_v_lowpass(halfHV, halfH, 8, 8, 8, 16-r);\
256
4c1cec7c3c7c q-pel mc fixed
michaelni
parents: 255
diff changeset
965 avg4_block(dst, src+srcStride+1, halfH+8, halfV, halfHV, dstStride, srcStride, 2-r);\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
966 }\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
967 static void qpel_mc21_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
968 {\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
969 UINT8 halfH[72];\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
970 UINT8 halfHV[64];\
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
971 qpel_h_lowpass(halfH, src, 8, srcStride, 9, 16-r);\
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
972 qpel_v_lowpass(halfHV, halfH, 8, 8, 8, 16-r);\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
973 avg2_block(dst, halfH, halfHV, dstStride, 8, 1-r);\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
974 }\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
975 static void qpel_mc23_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
976 {\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
977 UINT8 halfH[72];\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
978 UINT8 halfHV[64];\
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
979 qpel_h_lowpass(halfH, src, 8, srcStride, 9, 16-r);\
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
980 qpel_v_lowpass(halfHV, halfH, 8, 8, 8, 16-r);\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
981 avg2_block(dst, halfH+8, halfHV, dstStride, 8, 1-r);\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
982 }\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
983 static void qpel_mc12_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
984 {\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
985 UINT8 halfH[72];\
256
4c1cec7c3c7c q-pel mc fixed
michaelni
parents: 255
diff changeset
986 UINT8 halfV[64];\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
987 UINT8 halfHV[64];\
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
988 qpel_h_lowpass(halfH, src, 8, srcStride, 9, 16-r);\
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
989 qpel_v_lowpass(halfV, src, 8, srcStride, 8, 16-r);\
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
990 qpel_v_lowpass(halfHV, halfH, 8, 8, 8, 16-r);\
256
4c1cec7c3c7c q-pel mc fixed
michaelni
parents: 255
diff changeset
991 avg2_block(dst, halfV, halfHV, dstStride, 8, 1-r);\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
992 }\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
993 static void qpel_mc32_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
994 {\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
995 UINT8 halfH[72];\
256
4c1cec7c3c7c q-pel mc fixed
michaelni
parents: 255
diff changeset
996 UINT8 halfV[64];\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
997 UINT8 halfHV[64];\
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
998 qpel_h_lowpass(halfH, src, 8, srcStride, 9, 16-r);\
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
999 qpel_v_lowpass(halfV, src+1, 8, srcStride, 8, 16-r);\
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1000 qpel_v_lowpass(halfHV, halfH, 8, 8, 8, 16-r);\
256
4c1cec7c3c7c q-pel mc fixed
michaelni
parents: 255
diff changeset
1001 avg2_block(dst, halfV, halfHV, dstStride, 8, 1-r);\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1002 }\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1003 static void qpel_mc22_c ## name (UINT8 *dst, UINT8 *src, int dstStride, int srcStride, int mx, int my)\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1004 {\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1005 UINT8 halfH[72];\
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1006 qpel_h_lowpass(halfH, src, 8, srcStride, 9, 16-r);\
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1007 qpel_v_lowpass(dst, halfH, dstStride, 8, 8, 16-r);\
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1008 }\
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1009 qpel_mc_func qpel_mc ## name ## _tab[16]={ \
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1010 qpel_mc00_c ## name, \
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1011 qpel_mc10_c ## name, \
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1012 qpel_mc20_c ## name, \
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1013 qpel_mc30_c ## name, \
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1014 qpel_mc01_c ## name, \
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1015 qpel_mc11_c ## name, \
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1016 qpel_mc21_c ## name, \
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1017 qpel_mc31_c ## name, \
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1018 qpel_mc02_c ## name, \
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1019 qpel_mc12_c ## name, \
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1020 qpel_mc22_c ## name, \
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1021 qpel_mc32_c ## name, \
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1022 qpel_mc03_c ## name, \
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1023 qpel_mc13_c ## name, \
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1024 qpel_mc23_c ## name, \
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1025 qpel_mc33_c ## name, \
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1026 };
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1027
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1028 QPEL_MC(0, _rnd)
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1029 QPEL_MC(1, _no_rnd)
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1030
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1031 int pix_abs16x16_c(UINT8 *pix1, UINT8 *pix2, int line_size)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
1032 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
1033 int s, i;
986e461dc072 Initial revision
glantau
parents:
diff changeset
1034
986e461dc072 Initial revision
glantau
parents:
diff changeset
1035 s = 0;
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1036 for(i=0;i<16;i++) {
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
1037 s += abs(pix1[0] - pix2[0]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
1038 s += abs(pix1[1] - pix2[1]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
1039 s += abs(pix1[2] - pix2[2]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
1040 s += abs(pix1[3] - pix2[3]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
1041 s += abs(pix1[4] - pix2[4]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
1042 s += abs(pix1[5] - pix2[5]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
1043 s += abs(pix1[6] - pix2[6]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
1044 s += abs(pix1[7] - pix2[7]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
1045 s += abs(pix1[8] - pix2[8]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
1046 s += abs(pix1[9] - pix2[9]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
1047 s += abs(pix1[10] - pix2[10]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
1048 s += abs(pix1[11] - pix2[11]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
1049 s += abs(pix1[12] - pix2[12]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
1050 s += abs(pix1[13] - pix2[13]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
1051 s += abs(pix1[14] - pix2[14]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
1052 s += abs(pix1[15] - pix2[15]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
1053 pix1 += line_size;
986e461dc072 Initial revision
glantau
parents:
diff changeset
1054 pix2 += line_size;
986e461dc072 Initial revision
glantau
parents:
diff changeset
1055 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
1056 return s;
986e461dc072 Initial revision
glantau
parents:
diff changeset
1057 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
1058
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1059 int pix_abs16x16_x2_c(UINT8 *pix1, UINT8 *pix2, int line_size)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
1060 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
1061 int s, i;
986e461dc072 Initial revision
glantau
parents:
diff changeset
1062
986e461dc072 Initial revision
glantau
parents:
diff changeset
1063 s = 0;
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1064 for(i=0;i<16;i++) {
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
1065 s += abs(pix1[0] - avg2(pix2[0], pix2[1]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1066 s += abs(pix1[1] - avg2(pix2[1], pix2[2]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1067 s += abs(pix1[2] - avg2(pix2[2], pix2[3]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1068 s += abs(pix1[3] - avg2(pix2[3], pix2[4]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1069 s += abs(pix1[4] - avg2(pix2[4], pix2[5]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1070 s += abs(pix1[5] - avg2(pix2[5], pix2[6]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1071 s += abs(pix1[6] - avg2(pix2[6], pix2[7]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1072 s += abs(pix1[7] - avg2(pix2[7], pix2[8]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1073 s += abs(pix1[8] - avg2(pix2[8], pix2[9]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1074 s += abs(pix1[9] - avg2(pix2[9], pix2[10]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1075 s += abs(pix1[10] - avg2(pix2[10], pix2[11]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1076 s += abs(pix1[11] - avg2(pix2[11], pix2[12]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1077 s += abs(pix1[12] - avg2(pix2[12], pix2[13]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1078 s += abs(pix1[13] - avg2(pix2[13], pix2[14]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1079 s += abs(pix1[14] - avg2(pix2[14], pix2[15]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1080 s += abs(pix1[15] - avg2(pix2[15], pix2[16]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1081 pix1 += line_size;
986e461dc072 Initial revision
glantau
parents:
diff changeset
1082 pix2 += line_size;
986e461dc072 Initial revision
glantau
parents:
diff changeset
1083 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
1084 return s;
986e461dc072 Initial revision
glantau
parents:
diff changeset
1085 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
1086
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1087 int pix_abs16x16_y2_c(UINT8 *pix1, UINT8 *pix2, int line_size)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
1088 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
1089 int s, i;
986e461dc072 Initial revision
glantau
parents:
diff changeset
1090 UINT8 *pix3 = pix2 + line_size;
986e461dc072 Initial revision
glantau
parents:
diff changeset
1091
986e461dc072 Initial revision
glantau
parents:
diff changeset
1092 s = 0;
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1093 for(i=0;i<16;i++) {
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
1094 s += abs(pix1[0] - avg2(pix2[0], pix3[0]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1095 s += abs(pix1[1] - avg2(pix2[1], pix3[1]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1096 s += abs(pix1[2] - avg2(pix2[2], pix3[2]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1097 s += abs(pix1[3] - avg2(pix2[3], pix3[3]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1098 s += abs(pix1[4] - avg2(pix2[4], pix3[4]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1099 s += abs(pix1[5] - avg2(pix2[5], pix3[5]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1100 s += abs(pix1[6] - avg2(pix2[6], pix3[6]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1101 s += abs(pix1[7] - avg2(pix2[7], pix3[7]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1102 s += abs(pix1[8] - avg2(pix2[8], pix3[8]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1103 s += abs(pix1[9] - avg2(pix2[9], pix3[9]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1104 s += abs(pix1[10] - avg2(pix2[10], pix3[10]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1105 s += abs(pix1[11] - avg2(pix2[11], pix3[11]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1106 s += abs(pix1[12] - avg2(pix2[12], pix3[12]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1107 s += abs(pix1[13] - avg2(pix2[13], pix3[13]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1108 s += abs(pix1[14] - avg2(pix2[14], pix3[14]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1109 s += abs(pix1[15] - avg2(pix2[15], pix3[15]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1110 pix1 += line_size;
986e461dc072 Initial revision
glantau
parents:
diff changeset
1111 pix2 += line_size;
986e461dc072 Initial revision
glantau
parents:
diff changeset
1112 pix3 += line_size;
986e461dc072 Initial revision
glantau
parents:
diff changeset
1113 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
1114 return s;
986e461dc072 Initial revision
glantau
parents:
diff changeset
1115 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
1116
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1117 int pix_abs16x16_xy2_c(UINT8 *pix1, UINT8 *pix2, int line_size)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
1118 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
1119 int s, i;
986e461dc072 Initial revision
glantau
parents:
diff changeset
1120 UINT8 *pix3 = pix2 + line_size;
986e461dc072 Initial revision
glantau
parents:
diff changeset
1121
986e461dc072 Initial revision
glantau
parents:
diff changeset
1122 s = 0;
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1123 for(i=0;i<16;i++) {
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
1124 s += abs(pix1[0] - avg4(pix2[0], pix2[1], pix3[0], pix3[1]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1125 s += abs(pix1[1] - avg4(pix2[1], pix2[2], pix3[1], pix3[2]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1126 s += abs(pix1[2] - avg4(pix2[2], pix2[3], pix3[2], pix3[3]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1127 s += abs(pix1[3] - avg4(pix2[3], pix2[4], pix3[3], pix3[4]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1128 s += abs(pix1[4] - avg4(pix2[4], pix2[5], pix3[4], pix3[5]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1129 s += abs(pix1[5] - avg4(pix2[5], pix2[6], pix3[5], pix3[6]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1130 s += abs(pix1[6] - avg4(pix2[6], pix2[7], pix3[6], pix3[7]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1131 s += abs(pix1[7] - avg4(pix2[7], pix2[8], pix3[7], pix3[8]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1132 s += abs(pix1[8] - avg4(pix2[8], pix2[9], pix3[8], pix3[9]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1133 s += abs(pix1[9] - avg4(pix2[9], pix2[10], pix3[9], pix3[10]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1134 s += abs(pix1[10] - avg4(pix2[10], pix2[11], pix3[10], pix3[11]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1135 s += abs(pix1[11] - avg4(pix2[11], pix2[12], pix3[11], pix3[12]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1136 s += abs(pix1[12] - avg4(pix2[12], pix2[13], pix3[12], pix3[13]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1137 s += abs(pix1[13] - avg4(pix2[13], pix2[14], pix3[13], pix3[14]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1138 s += abs(pix1[14] - avg4(pix2[14], pix2[15], pix3[14], pix3[15]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1139 s += abs(pix1[15] - avg4(pix2[15], pix2[16], pix3[15], pix3[16]));
986e461dc072 Initial revision
glantau
parents:
diff changeset
1140 pix1 += line_size;
986e461dc072 Initial revision
glantau
parents:
diff changeset
1141 pix2 += line_size;
986e461dc072 Initial revision
glantau
parents:
diff changeset
1142 pix3 += line_size;
986e461dc072 Initial revision
glantau
parents:
diff changeset
1143 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
1144 return s;
986e461dc072 Initial revision
glantau
parents:
diff changeset
1145 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
1146
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1147 int pix_abs8x8_c(UINT8 *pix1, UINT8 *pix2, int line_size)
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1148 {
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1149 int s, i;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1150
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1151 s = 0;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1152 for(i=0;i<8;i++) {
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1153 s += abs(pix1[0] - pix2[0]);
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1154 s += abs(pix1[1] - pix2[1]);
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1155 s += abs(pix1[2] - pix2[2]);
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1156 s += abs(pix1[3] - pix2[3]);
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1157 s += abs(pix1[4] - pix2[4]);
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1158 s += abs(pix1[5] - pix2[5]);
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1159 s += abs(pix1[6] - pix2[6]);
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1160 s += abs(pix1[7] - pix2[7]);
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1161 pix1 += line_size;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1162 pix2 += line_size;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1163 }
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1164 return s;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1165 }
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1166
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1167 int pix_abs8x8_x2_c(UINT8 *pix1, UINT8 *pix2, int line_size)
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1168 {
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1169 int s, i;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1170
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1171 s = 0;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1172 for(i=0;i<8;i++) {
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1173 s += abs(pix1[0] - avg2(pix2[0], pix2[1]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1174 s += abs(pix1[1] - avg2(pix2[1], pix2[2]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1175 s += abs(pix1[2] - avg2(pix2[2], pix2[3]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1176 s += abs(pix1[3] - avg2(pix2[3], pix2[4]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1177 s += abs(pix1[4] - avg2(pix2[4], pix2[5]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1178 s += abs(pix1[5] - avg2(pix2[5], pix2[6]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1179 s += abs(pix1[6] - avg2(pix2[6], pix2[7]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1180 s += abs(pix1[7] - avg2(pix2[7], pix2[8]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1181 pix1 += line_size;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1182 pix2 += line_size;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1183 }
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1184 return s;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1185 }
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1186
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1187 int pix_abs8x8_y2_c(UINT8 *pix1, UINT8 *pix2, int line_size)
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1188 {
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1189 int s, i;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1190 UINT8 *pix3 = pix2 + line_size;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1191
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1192 s = 0;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1193 for(i=0;i<8;i++) {
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1194 s += abs(pix1[0] - avg2(pix2[0], pix3[0]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1195 s += abs(pix1[1] - avg2(pix2[1], pix3[1]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1196 s += abs(pix1[2] - avg2(pix2[2], pix3[2]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1197 s += abs(pix1[3] - avg2(pix2[3], pix3[3]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1198 s += abs(pix1[4] - avg2(pix2[4], pix3[4]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1199 s += abs(pix1[5] - avg2(pix2[5], pix3[5]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1200 s += abs(pix1[6] - avg2(pix2[6], pix3[6]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1201 s += abs(pix1[7] - avg2(pix2[7], pix3[7]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1202 pix1 += line_size;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1203 pix2 += line_size;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1204 pix3 += line_size;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1205 }
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1206 return s;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1207 }
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1208
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1209 int pix_abs8x8_xy2_c(UINT8 *pix1, UINT8 *pix2, int line_size)
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1210 {
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1211 int s, i;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1212 UINT8 *pix3 = pix2 + line_size;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1213
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1214 s = 0;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1215 for(i=0;i<8;i++) {
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1216 s += abs(pix1[0] - avg4(pix2[0], pix2[1], pix3[0], pix3[1]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1217 s += abs(pix1[1] - avg4(pix2[1], pix2[2], pix3[1], pix3[2]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1218 s += abs(pix1[2] - avg4(pix2[2], pix2[3], pix3[2], pix3[3]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1219 s += abs(pix1[3] - avg4(pix2[3], pix2[4], pix3[3], pix3[4]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1220 s += abs(pix1[4] - avg4(pix2[4], pix2[5], pix3[4], pix3[5]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1221 s += abs(pix1[5] - avg4(pix2[5], pix2[6], pix3[5], pix3[6]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1222 s += abs(pix1[6] - avg4(pix2[6], pix2[7], pix3[6], pix3[7]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1223 s += abs(pix1[7] - avg4(pix2[7], pix2[8], pix3[7], pix3[8]));
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1224 pix1 += line_size;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1225 pix2 += line_size;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1226 pix3 += line_size;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1227 }
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1228 return s;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1229 }
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1230
34
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
1231 /* permute block according so that it corresponds to the MMX idct
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
1232 order */
174
ac5075a55488 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents: 88
diff changeset
1233 #ifdef SIMPLE_IDCT
190
9e0e56869d05 fix for non-mmx runtimedetect encoding bugs - patch by Michael Niedermayer <michaelni@gmx.at>
uid46427
parents: 174
diff changeset
1234 /* general permutation, but perhaps slightly slower */
174
ac5075a55488 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents: 88
diff changeset
1235 void block_permute(INT16 *block)
ac5075a55488 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents: 88
diff changeset
1236 {
ac5075a55488 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents: 88
diff changeset
1237 int i;
ac5075a55488 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents: 88
diff changeset
1238 INT16 temp[64];
ac5075a55488 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents: 88
diff changeset
1239
ac5075a55488 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents: 88
diff changeset
1240 for(i=0; i<64; i++) temp[ block_permute_op(i) ] = block[i];
ac5075a55488 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents: 88
diff changeset
1241
ac5075a55488 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents: 88
diff changeset
1242 for(i=0; i<64; i++) block[i] = temp[i];
ac5075a55488 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents: 88
diff changeset
1243 }
ac5075a55488 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents: 88
diff changeset
1244 #else
ac5075a55488 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents: 88
diff changeset
1245
34
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
1246 void block_permute(INT16 *block)
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
1247 {
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
1248 int tmp1, tmp2, tmp3, tmp4, tmp5, tmp6;
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
1249 int i;
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
1250
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
1251 for(i=0;i<8;i++) {
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
1252 tmp1 = block[1];
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
1253 tmp2 = block[2];
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
1254 tmp3 = block[3];
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
1255 tmp4 = block[4];
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
1256 tmp5 = block[5];
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
1257 tmp6 = block[6];
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
1258 block[1] = tmp2;
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
1259 block[2] = tmp4;
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
1260 block[3] = tmp6;
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
1261 block[4] = tmp1;
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
1262 block[5] = tmp3;
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
1263 block[6] = tmp5;
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
1264 block += 8;
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
1265 }
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
1266 }
174
ac5075a55488 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents: 88
diff changeset
1267 #endif
34
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
1268
296
c1a8a1b4a24b sizeof(s->block) isnt 64*6*2 anymore bugfix
michaelni
parents: 294
diff changeset
1269 void clear_blocks_c(DCTELEM *blocks)
c1a8a1b4a24b sizeof(s->block) isnt 64*6*2 anymore bugfix
michaelni
parents: 294
diff changeset
1270 {
c1a8a1b4a24b sizeof(s->block) isnt 64*6*2 anymore bugfix
michaelni
parents: 294
diff changeset
1271 memset(blocks, 0, sizeof(DCTELEM)*6*64);
c1a8a1b4a24b sizeof(s->block) isnt 64*6*2 anymore bugfix
michaelni
parents: 294
diff changeset
1272 }
c1a8a1b4a24b sizeof(s->block) isnt 64*6*2 anymore bugfix
michaelni
parents: 294
diff changeset
1273
480
a7cbee351b55 added ff_idct_put/add
bellard
parents: 474
diff changeset
1274 /* XXX: those functions should be suppressed ASAP when all IDCTs are
a7cbee351b55 added ff_idct_put/add
bellard
parents: 474
diff changeset
1275 converted */
a7cbee351b55 added ff_idct_put/add
bellard
parents: 474
diff changeset
1276 void gen_idct_put(UINT8 *dest, int line_size, DCTELEM *block)
a7cbee351b55 added ff_idct_put/add
bellard
parents: 474
diff changeset
1277 {
a7cbee351b55 added ff_idct_put/add
bellard
parents: 474
diff changeset
1278 ff_idct (block);
a7cbee351b55 added ff_idct_put/add
bellard
parents: 474
diff changeset
1279 put_pixels_clamped(block, dest, line_size);
a7cbee351b55 added ff_idct_put/add
bellard
parents: 474
diff changeset
1280 }
a7cbee351b55 added ff_idct_put/add
bellard
parents: 474
diff changeset
1281
a7cbee351b55 added ff_idct_put/add
bellard
parents: 474
diff changeset
1282 void gen_idct_add(UINT8 *dest, int line_size, DCTELEM *block)
a7cbee351b55 added ff_idct_put/add
bellard
parents: 474
diff changeset
1283 {
a7cbee351b55 added ff_idct_put/add
bellard
parents: 474
diff changeset
1284 ff_idct (block);
a7cbee351b55 added ff_idct_put/add
bellard
parents: 474
diff changeset
1285 add_pixels_clamped(block, dest, line_size);
a7cbee351b55 added ff_idct_put/add
bellard
parents: 474
diff changeset
1286 }
a7cbee351b55 added ff_idct_put/add
bellard
parents: 474
diff changeset
1287
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
1288 void dsputil_init(void)
986e461dc072 Initial revision
glantau
parents:
diff changeset
1289 {
34
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
1290 int i, j;
88
06f63b58d2a8 mlib merge
glantau
parents: 62
diff changeset
1291 int use_permuted_idct;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
1292
986e461dc072 Initial revision
glantau
parents:
diff changeset
1293 for(i=0;i<256;i++) cropTbl[i + MAX_NEG_CROP] = i;
986e461dc072 Initial revision
glantau
parents:
diff changeset
1294 for(i=0;i<MAX_NEG_CROP;i++) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
1295 cropTbl[i] = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
1296 cropTbl[i + MAX_NEG_CROP + 256] = 255;
986e461dc072 Initial revision
glantau
parents:
diff changeset
1297 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
1298
986e461dc072 Initial revision
glantau
parents:
diff changeset
1299 for(i=0;i<512;i++) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
1300 squareTbl[i] = (i - 256) * (i - 256);
986e461dc072 Initial revision
glantau
parents:
diff changeset
1301 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
1302
174
ac5075a55488 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents: 88
diff changeset
1303 #ifdef SIMPLE_IDCT
480
a7cbee351b55 added ff_idct_put/add
bellard
parents: 474
diff changeset
1304 ff_idct = NULL;
174
ac5075a55488 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents: 88
diff changeset
1305 #else
19
82d4c9be9873 MMX/MMXEXT iDCT support, using external functions currently defined in libmpeg2
arpi_esp
parents: 6
diff changeset
1306 ff_idct = j_rev_dct;
174
ac5075a55488 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents: 88
diff changeset
1307 #endif
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
1308 get_pixels = get_pixels_c;
324
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
1309 diff_pixels = diff_pixels_c;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
1310 put_pixels_clamped = put_pixels_clamped_c;
986e461dc072 Initial revision
glantau
parents:
diff changeset
1311 add_pixels_clamped = add_pixels_clamped_c;
255
db20b987c32d divx5-gmc support
michaelni
parents: 252
diff changeset
1312 gmc1= gmc1_c;
296
c1a8a1b4a24b sizeof(s->block) isnt 64*6*2 anymore bugfix
michaelni
parents: 294
diff changeset
1313 clear_blocks= clear_blocks_c;
612
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
1314 pix_sum= pix_sum_c;
c0005de2be59 new ratecontrol code
michaelni
parents: 590
diff changeset
1315 pix_norm1= pix_norm1_c;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
1316
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1317 pix_abs16x16 = pix_abs16x16_c;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1318 pix_abs16x16_x2 = pix_abs16x16_x2_c;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1319 pix_abs16x16_y2 = pix_abs16x16_y2_c;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
1320 pix_abs16x16_xy2 = pix_abs16x16_xy2_c;
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1321 pix_abs8x8 = pix_abs8x8_c;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1322 pix_abs8x8_x2 = pix_abs8x8_x2_c;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1323 pix_abs8x8_y2 = pix_abs8x8_y2_c;
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 256
diff changeset
1324 pix_abs8x8_xy2 = pix_abs8x8_xy2_c;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
1325
88
06f63b58d2a8 mlib merge
glantau
parents: 62
diff changeset
1326 use_permuted_idct = 1;
34
2733a4c1c693 added block permutation functions
glantau
parents: 19
diff changeset
1327
2
2e2c46c87460 fixed config for direct mplayer build compatibility
glantau
parents: 0
diff changeset
1328 #ifdef HAVE_MMX
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
1329 dsputil_init_mmx();
986e461dc072 Initial revision
glantau
parents:
diff changeset
1330 #endif
62
4bfc845cdfea arm optimizations
glantau
parents: 50
diff changeset
1331 #ifdef ARCH_ARMV4L
4bfc845cdfea arm optimizations
glantau
parents: 50
diff changeset
1332 dsputil_init_armv4l();
4bfc845cdfea arm optimizations
glantau
parents: 50
diff changeset
1333 #endif
88
06f63b58d2a8 mlib merge
glantau
parents: 62
diff changeset
1334 #ifdef HAVE_MLIB
06f63b58d2a8 mlib merge
glantau
parents: 62
diff changeset
1335 dsputil_init_mlib();
06f63b58d2a8 mlib merge
glantau
parents: 62
diff changeset
1336 use_permuted_idct = 0;
06f63b58d2a8 mlib merge
glantau
parents: 62
diff changeset
1337 #endif
214
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents: 209
diff changeset
1338 #ifdef ARCH_ALPHA
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents: 209
diff changeset
1339 dsputil_init_alpha();
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents: 209
diff changeset
1340 use_permuted_idct = 0;
73df666cacc7 Alpha optimizations by Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
nickols_k
parents: 209
diff changeset
1341 #endif
623
92e99e506920 first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 612
diff changeset
1342 #ifdef ARCH_POWERPC
92e99e506920 first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 612
diff changeset
1343 dsputil_init_altivec();
92e99e506920 first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 612
diff changeset
1344 #endif
88
06f63b58d2a8 mlib merge
glantau
parents: 62
diff changeset
1345
174
ac5075a55488 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents: 88
diff changeset
1346 #ifdef SIMPLE_IDCT
480
a7cbee351b55 added ff_idct_put/add
bellard
parents: 474
diff changeset
1347 if (ff_idct == NULL) {
a7cbee351b55 added ff_idct_put/add
bellard
parents: 474
diff changeset
1348 ff_idct_put = simple_idct_put;
a7cbee351b55 added ff_idct_put/add
bellard
parents: 474
diff changeset
1349 ff_idct_add = simple_idct_add;
a7cbee351b55 added ff_idct_put/add
bellard
parents: 474
diff changeset
1350 use_permuted_idct=0;
590
3f8824eb4690 fixing normal mmx idct
michaelni
parents: 533
diff changeset
1351 }
3f8824eb4690 fixing normal mmx idct
michaelni
parents: 533
diff changeset
1352 #endif
3f8824eb4690 fixing normal mmx idct
michaelni
parents: 533
diff changeset
1353 if(ff_idct != NULL) {
480
a7cbee351b55 added ff_idct_put/add
bellard
parents: 474
diff changeset
1354 ff_idct_put = gen_idct_put;
a7cbee351b55 added ff_idct_put/add
bellard
parents: 474
diff changeset
1355 ff_idct_add = gen_idct_add;
a7cbee351b55 added ff_idct_put/add
bellard
parents: 474
diff changeset
1356 }
174
ac5075a55488 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents: 88
diff changeset
1357
190
9e0e56869d05 fix for non-mmx runtimedetect encoding bugs - patch by Michael Niedermayer <michaelni@gmx.at>
uid46427
parents: 174
diff changeset
1358 if(use_permuted_idct)
9e0e56869d05 fix for non-mmx runtimedetect encoding bugs - patch by Michael Niedermayer <michaelni@gmx.at>
uid46427
parents: 174
diff changeset
1359 #ifdef SIMPLE_IDCT
9e0e56869d05 fix for non-mmx runtimedetect encoding bugs - patch by Michael Niedermayer <michaelni@gmx.at>
uid46427
parents: 174
diff changeset
1360 for(i=0; i<64; i++) permutation[i]= simple_mmx_permutation[i];
9e0e56869d05 fix for non-mmx runtimedetect encoding bugs - patch by Michael Niedermayer <michaelni@gmx.at>
uid46427
parents: 174
diff changeset
1361 #else
9e0e56869d05 fix for non-mmx runtimedetect encoding bugs - patch by Michael Niedermayer <michaelni@gmx.at>
uid46427
parents: 174
diff changeset
1362 for(i=0; i<64; i++) permutation[i]= (i & 0x38) | ((i & 6) >> 1) | ((i & 1) << 2);
9e0e56869d05 fix for non-mmx runtimedetect encoding bugs - patch by Michael Niedermayer <michaelni@gmx.at>
uid46427
parents: 174
diff changeset
1363 #endif
9e0e56869d05 fix for non-mmx runtimedetect encoding bugs - patch by Michael Niedermayer <michaelni@gmx.at>
uid46427
parents: 174
diff changeset
1364 else
9e0e56869d05 fix for non-mmx runtimedetect encoding bugs - patch by Michael Niedermayer <michaelni@gmx.at>
uid46427
parents: 174
diff changeset
1365 for(i=0; i<64; i++) permutation[i]=i;
9e0e56869d05 fix for non-mmx runtimedetect encoding bugs - patch by Michael Niedermayer <michaelni@gmx.at>
uid46427
parents: 174
diff changeset
1366
220
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
1367 for(i=0; i<64; i++) inv_zigzag_direct16[zigzag_direct[i]]= i+1;
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
1368 for(i=0; i<64; i++) zigzag_direct_noperm[i]= zigzag_direct[i];
0b234715e205 (commit by michael)
arpi_esp
parents: 214
diff changeset
1369
88
06f63b58d2a8 mlib merge
glantau
parents: 62
diff changeset
1370 if (use_permuted_idct) {
06f63b58d2a8 mlib merge
glantau
parents: 62
diff changeset
1371 /* permute for IDCT */
06f63b58d2a8 mlib merge
glantau
parents: 62
diff changeset
1372 for(i=0;i<64;i++) {
06f63b58d2a8 mlib merge
glantau
parents: 62
diff changeset
1373 j = zigzag_direct[i];
06f63b58d2a8 mlib merge
glantau
parents: 62
diff changeset
1374 zigzag_direct[i] = block_permute_op(j);
06f63b58d2a8 mlib merge
glantau
parents: 62
diff changeset
1375 j = ff_alternate_horizontal_scan[i];
06f63b58d2a8 mlib merge
glantau
parents: 62
diff changeset
1376 ff_alternate_horizontal_scan[i] = block_permute_op(j);
06f63b58d2a8 mlib merge
glantau
parents: 62
diff changeset
1377 j = ff_alternate_vertical_scan[i];
06f63b58d2a8 mlib merge
glantau
parents: 62
diff changeset
1378 ff_alternate_vertical_scan[i] = block_permute_op(j);
06f63b58d2a8 mlib merge
glantau
parents: 62
diff changeset
1379 }
533
3c07cf9595de adding ff prefix to avoid global name conficts with xvid (patch by Marko Kreen <marko at l-t.ee>)
michaelni
parents: 517
diff changeset
1380 block_permute(ff_mpeg1_default_intra_matrix);
3c07cf9595de adding ff prefix to avoid global name conficts with xvid (patch by Marko Kreen <marko at l-t.ee>)
michaelni
parents: 517
diff changeset
1381 block_permute(ff_mpeg1_default_non_intra_matrix);
312
8cf5507e6ca5 mpeg4 mpeg quantizer support
michaelni
parents: 296
diff changeset
1382 block_permute(ff_mpeg4_default_intra_matrix);
8cf5507e6ca5 mpeg4 mpeg quantizer support
michaelni
parents: 296
diff changeset
1383 block_permute(ff_mpeg4_default_non_intra_matrix);
88
06f63b58d2a8 mlib merge
glantau
parents: 62
diff changeset
1384 }
200
6ab301aaa652 (commit by michael)
arpi_esp
parents: 190
diff changeset
1385
6ab301aaa652 (commit by michael)
arpi_esp
parents: 190
diff changeset
1386 build_zigzag_end();
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
1387 }
252
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1388
403
2c3e25f4c496 removed unused stuff - added dsputil_set_bit_exact() support for easier testing
glantau
parents: 398
diff changeset
1389 /* remove any non bit exact operation (testing purpose) */
2c3e25f4c496 removed unused stuff - added dsputil_set_bit_exact() support for easier testing
glantau
parents: 398
diff changeset
1390 void avcodec_set_bit_exact(void)
2c3e25f4c496 removed unused stuff - added dsputil_set_bit_exact() support for easier testing
glantau
parents: 398
diff changeset
1391 {
2c3e25f4c496 removed unused stuff - added dsputil_set_bit_exact() support for easier testing
glantau
parents: 398
diff changeset
1392 #ifdef HAVE_MMX
2c3e25f4c496 removed unused stuff - added dsputil_set_bit_exact() support for easier testing
glantau
parents: 398
diff changeset
1393 dsputil_set_bit_exact_mmx();
2c3e25f4c496 removed unused stuff - added dsputil_set_bit_exact() support for easier testing
glantau
parents: 398
diff changeset
1394 #endif
2c3e25f4c496 removed unused stuff - added dsputil_set_bit_exact() support for easier testing
glantau
parents: 398
diff changeset
1395 }
2c3e25f4c496 removed unused stuff - added dsputil_set_bit_exact() support for easier testing
glantau
parents: 398
diff changeset
1396
252
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1397 void get_psnr(UINT8 *orig_image[3], UINT8 *coded_image[3],
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1398 int orig_linesize[3], int coded_linesize,
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1399 AVCodecContext *avctx)
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1400 {
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1401 int quad, diff, x, y;
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1402 UINT8 *orig, *coded;
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1403 UINT32 *sq = squareTbl + 256;
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1404
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1405 quad = 0;
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1406 diff = 0;
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1407
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1408 /* Luminance */
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1409 orig = orig_image[0];
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1410 coded = coded_image[0];
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1411
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1412 for (y=0;y<avctx->height;y++) {
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1413 for (x=0;x<avctx->width;x++) {
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1414 diff = *(orig + x) - *(coded + x);
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1415 quad += sq[diff];
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1416 }
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1417 orig += orig_linesize[0];
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1418 coded += coded_linesize;
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1419 }
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1420
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1421 avctx->psnr_y = (float) quad / (float) (avctx->width * avctx->height);
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1422
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1423 if (avctx->psnr_y) {
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1424 avctx->psnr_y = (float) (255 * 255) / avctx->psnr_y;
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1425 avctx->psnr_y = 10 * (float) log10 (avctx->psnr_y);
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1426 } else
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1427 avctx->psnr_y = 99.99;
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1428 }
ddb1a0e94cf4 - Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
pulento
parents: 220
diff changeset
1429