38 |
TRANSFER_16TO8ADD_PTR transfer_16to8add; |
TRANSFER_16TO8ADD_PTR transfer_16to8add; |
39 |
|
|
40 |
TRANSFER8X8_COPY_PTR transfer8x8_copy; |
TRANSFER8X8_COPY_PTR transfer8x8_copy; |
41 |
|
TRANSFER8X4_COPY_PTR transfer8x4_copy; |
42 |
|
|
43 |
|
#define USE_REFERENCE_C |
44 |
|
|
45 |
/***************************************************************************** |
/***************************************************************************** |
46 |
* |
* |
67 |
const uint8_t * const src, |
const uint8_t * const src, |
68 |
uint32_t stride) |
uint32_t stride) |
69 |
{ |
{ |
70 |
uint32_t i, j; |
int i, j; |
|
|
|
71 |
for (j = 0; j < 8; j++) { |
for (j = 0; j < 8; j++) { |
72 |
for (i = 0; i < 8; i++) { |
for (i = 0; i < 8; i++) { |
73 |
dst[j * 8 + i] = (int16_t) src[j * stride + i]; |
dst[j * 8 + i] = (int16_t) src[j * stride + i]; |
89 |
const int16_t * const src, |
const int16_t * const src, |
90 |
uint32_t stride) |
uint32_t stride) |
91 |
{ |
{ |
92 |
uint32_t i, j; |
int i, j; |
93 |
|
|
94 |
for (j = 0; j < 8; j++) { |
for (j = 0; j < 8; j++) { |
95 |
for (i = 0; i < 8; i++) { |
for (i = 0; i < 8; i++) { |
96 |
|
#ifdef USE_REFERENCE_C |
97 |
int16_t pixel = src[j * 8 + i]; |
int16_t pixel = src[j * 8 + i]; |
98 |
|
|
99 |
if (pixel < 0) { |
if (pixel < 0) { |
102 |
pixel = 255; |
pixel = 255; |
103 |
} |
} |
104 |
dst[j * stride + i] = (uint8_t) pixel; |
dst[j * stride + i] = (uint8_t) pixel; |
105 |
|
#else |
106 |
|
const int16_t pixel = src[j * 8 + i]; |
107 |
|
const uint8_t value = (uint8_t)( (pixel&~255) ? (-pixel)>>(8*sizeof(pixel)-1) : pixel ); |
108 |
|
dst[j*stride + i] = value; |
109 |
|
#endif |
110 |
} |
} |
111 |
} |
} |
112 |
} |
} |
131 |
const uint8_t * ref, |
const uint8_t * ref, |
132 |
const uint32_t stride) |
const uint32_t stride) |
133 |
{ |
{ |
134 |
uint32_t i, j; |
int i, j; |
135 |
|
|
136 |
for (j = 0; j < 8; j++) { |
for (j = 0; j < 8; j++) { |
137 |
for (i = 0; i < 8; i++) { |
for (i = 0; i < 8; i++) { |
138 |
uint8_t c = cur[j * stride + i]; |
const uint8_t c = cur[j * stride + i]; |
139 |
uint8_t r = ref[j * stride + i]; |
const uint8_t r = ref[j * stride + i]; |
140 |
|
|
141 |
cur[j * stride + i] = r; |
cur[j * stride + i] = r; |
142 |
dct[j * 8 + i] = (int16_t) c - (int16_t) r; |
dct[j * 8 + i] = (int16_t) c - (int16_t) r; |
151 |
const uint8_t * ref, |
const uint8_t * ref, |
152 |
const uint32_t stride) |
const uint32_t stride) |
153 |
{ |
{ |
154 |
uint32_t i, j; |
int i, j; |
155 |
|
|
156 |
for (j = 0; j < 8; j++) { |
for (j = 0; j < 8; j++) { |
157 |
for (i = 0; i < 8; i++) { |
for (i = 0; i < 8; i++) { |
158 |
uint8_t c = cur[j * stride + i]; |
const uint8_t c = cur[j * stride + i]; |
159 |
uint8_t r = ref[j * stride + i]; |
const uint8_t r = ref[j * stride + i]; |
160 |
dct[j * 8 + i] = (int16_t) c - (int16_t) r; |
dct[j * 8 + i] = (int16_t) c - (int16_t) r; |
161 |
} |
} |
162 |
} |
} |
189 |
|
|
190 |
for (j = 0; j < 8; j++) { |
for (j = 0; j < 8; j++) { |
191 |
for (i = 0; i < 8; i++) { |
for (i = 0; i < 8; i++) { |
192 |
uint8_t c = cur[j * stride + i]; |
const uint8_t c = cur[j * stride + i]; |
193 |
int r = (ref1[j * stride + i] + ref2[j * stride + i] + 1) / 2; |
const uint8_t r = (ref1[j * stride + i] + ref2[j * stride + i] + 1) >> 1; |
|
|
|
|
if (r > 255) { |
|
|
r = 255; |
|
|
} |
|
194 |
cur[j * stride + i] = r; |
cur[j * stride + i] = r; |
195 |
dct[j * 8 + i] = (int16_t) c - (int16_t) r; |
dct[j * 8 + i] = (int16_t) c - (int16_t) r; |
196 |
} |
} |
208 |
|
|
209 |
for (j = 0; j < 8; j++) { |
for (j = 0; j < 8; j++) { |
210 |
for (i = 0; i < 8; i++) { |
for (i = 0; i < 8; i++) { |
211 |
uint8_t c = cur[j * stride + i]; |
const uint8_t c = cur[j * stride + i]; |
212 |
int r = (ref1[j * stride + i] + ref2[j * stride + i] + 1) / 2; |
const uint8_t r = (ref1[j * stride + i] + ref2[j * stride + i] + 1) >> 1; |
213 |
dct[j * 8 + i] = (int16_t) c - (int16_t) r; |
dct[j * 8 + i] = (int16_t) c - (int16_t) r; |
214 |
} |
} |
215 |
} |
} |
230 |
const int16_t * const src, |
const int16_t * const src, |
231 |
uint32_t stride) |
uint32_t stride) |
232 |
{ |
{ |
233 |
uint32_t i, j; |
int i, j; |
234 |
|
|
235 |
for (j = 0; j < 8; j++) { |
for (j = 0; j < 8; j++) { |
236 |
for (i = 0; i < 8; i++) { |
for (i = 0; i < 8; i++) { |
237 |
|
#ifdef USE_REFERENCE_C |
238 |
int16_t pixel = (int16_t) dst[j * stride + i] + src[j * 8 + i]; |
int16_t pixel = (int16_t) dst[j * stride + i] + src[j * 8 + i]; |
239 |
|
|
240 |
if (pixel < 0) { |
if (pixel < 0) { |
243 |
pixel = 255; |
pixel = 255; |
244 |
} |
} |
245 |
dst[j * stride + i] = (uint8_t) pixel; |
dst[j * stride + i] = (uint8_t) pixel; |
246 |
|
#else |
247 |
|
const int16_t pixel = (int16_t) dst[j * stride + i] + src[j * 8 + i]; |
248 |
|
const uint8_t value = (uint8_t)( (pixel&~255) ? (-pixel)>>(8*sizeof(pixel)-1) : pixel ); |
249 |
|
dst[j*stride + i] = value; |
250 |
|
#endif |
251 |
|
|
252 |
} |
} |
253 |
} |
} |
254 |
} |
} |
267 |
const uint8_t * const src, |
const uint8_t * const src, |
268 |
const uint32_t stride) |
const uint32_t stride) |
269 |
{ |
{ |
270 |
uint32_t j, i; |
int j, i; |
271 |
|
|
272 |
for (j = 0; j < 8; ++j) { |
for (j = 0; j < 8; ++j) { |
273 |
uint8_t *d = dst + j*stride; |
uint8_t *d = dst + j*stride; |
279 |
} |
} |
280 |
} |
} |
281 |
} |
} |
282 |
|
|
283 |
|
/* |
284 |
|
* SRC - the source buffer |
285 |
|
* DST - the destination buffer |
286 |
|
* |
287 |
|
* Then the function does the 8->8 bit transfer and this serie of operations : |
288 |
|
* |
289 |
|
* SRC (8bit) = SRC |
290 |
|
* DST (8bit) = SRC |
291 |
|
*/ |
292 |
|
void |
293 |
|
transfer8x4_copy_c(uint8_t * const dst, |
294 |
|
const uint8_t * const src, |
295 |
|
const uint32_t stride) |
296 |
|
{ |
297 |
|
uint32_t j; |
298 |
|
|
299 |
|
for (j = 0; j < 4; j++) { |
300 |
|
uint32_t *d= (uint32_t*)(dst + j*stride); |
301 |
|
const uint32_t *s = (const uint32_t*)(src + j*stride); |
302 |
|
*(d+0) = *(s+0); |
303 |
|
*(d+1) = *(s+1); |
304 |
|
} |
305 |
|
} |