Results of IDCT can by far outreach the range of ff_cropTbl[], leading
to overreads and potentially crashes.
Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
CC: libav-stable@libav.org
... | ... |
@@ -366,18 +366,17 @@ void ff_put_pixels_clamped_c(const DCTELEM *block, uint8_t *restrict pixels, |
366 | 366 |
int line_size) |
367 | 367 |
{ |
368 | 368 |
int i; |
369 |
- uint8_t *cm = ff_cropTbl + MAX_NEG_CROP; |
|
370 | 369 |
|
371 | 370 |
/* read the pixels */ |
372 | 371 |
for(i=0;i<8;i++) { |
373 |
- pixels[0] = cm[block[0]]; |
|
374 |
- pixels[1] = cm[block[1]]; |
|
375 |
- pixels[2] = cm[block[2]]; |
|
376 |
- pixels[3] = cm[block[3]]; |
|
377 |
- pixels[4] = cm[block[4]]; |
|
378 |
- pixels[5] = cm[block[5]]; |
|
379 |
- pixels[6] = cm[block[6]]; |
|
380 |
- pixels[7] = cm[block[7]]; |
|
372 |
+ pixels[0] = av_clip_uint8(block[0]); |
|
373 |
+ pixels[1] = av_clip_uint8(block[1]); |
|
374 |
+ pixels[2] = av_clip_uint8(block[2]); |
|
375 |
+ pixels[3] = av_clip_uint8(block[3]); |
|
376 |
+ pixels[4] = av_clip_uint8(block[4]); |
|
377 |
+ pixels[5] = av_clip_uint8(block[5]); |
|
378 |
+ pixels[6] = av_clip_uint8(block[6]); |
|
379 |
+ pixels[7] = av_clip_uint8(block[7]); |
|
381 | 380 |
|
382 | 381 |
pixels += line_size; |
383 | 382 |
block += 8; |
... | ... |
@@ -388,14 +387,13 @@ static void put_pixels_clamped4_c(const DCTELEM *block, uint8_t *restrict pixels |
388 | 388 |
int line_size) |
389 | 389 |
{ |
390 | 390 |
int i; |
391 |
- uint8_t *cm = ff_cropTbl + MAX_NEG_CROP; |
|
392 | 391 |
|
393 | 392 |
/* read the pixels */ |
394 | 393 |
for(i=0;i<4;i++) { |
395 |
- pixels[0] = cm[block[0]]; |
|
396 |
- pixels[1] = cm[block[1]]; |
|
397 |
- pixels[2] = cm[block[2]]; |
|
398 |
- pixels[3] = cm[block[3]]; |
|
394 |
+ pixels[0] = av_clip_uint8(block[0]); |
|
395 |
+ pixels[1] = av_clip_uint8(block[1]); |
|
396 |
+ pixels[2] = av_clip_uint8(block[2]); |
|
397 |
+ pixels[3] = av_clip_uint8(block[3]); |
|
399 | 398 |
|
400 | 399 |
pixels += line_size; |
401 | 400 |
block += 8; |
... | ... |
@@ -406,12 +404,11 @@ static void put_pixels_clamped2_c(const DCTELEM *block, uint8_t *restrict pixels |
406 | 406 |
int line_size) |
407 | 407 |
{ |
408 | 408 |
int i; |
409 |
- uint8_t *cm = ff_cropTbl + MAX_NEG_CROP; |
|
410 | 409 |
|
411 | 410 |
/* read the pixels */ |
412 | 411 |
for(i=0;i<2;i++) { |
413 |
- pixels[0] = cm[block[0]]; |
|
414 |
- pixels[1] = cm[block[1]]; |
|
412 |
+ pixels[0] = av_clip_uint8(block[0]); |
|
413 |
+ pixels[1] = av_clip_uint8(block[1]); |
|
415 | 414 |
|
416 | 415 |
pixels += line_size; |
417 | 416 |
block += 8; |
... | ... |
@@ -443,18 +440,17 @@ void ff_add_pixels_clamped_c(const DCTELEM *block, uint8_t *restrict pixels, |
443 | 443 |
int line_size) |
444 | 444 |
{ |
445 | 445 |
int i; |
446 |
- uint8_t *cm = ff_cropTbl + MAX_NEG_CROP; |
|
447 | 446 |
|
448 | 447 |
/* read the pixels */ |
449 | 448 |
for(i=0;i<8;i++) { |
450 |
- pixels[0] = cm[pixels[0] + block[0]]; |
|
451 |
- pixels[1] = cm[pixels[1] + block[1]]; |
|
452 |
- pixels[2] = cm[pixels[2] + block[2]]; |
|
453 |
- pixels[3] = cm[pixels[3] + block[3]]; |
|
454 |
- pixels[4] = cm[pixels[4] + block[4]]; |
|
455 |
- pixels[5] = cm[pixels[5] + block[5]]; |
|
456 |
- pixels[6] = cm[pixels[6] + block[6]]; |
|
457 |
- pixels[7] = cm[pixels[7] + block[7]]; |
|
449 |
+ pixels[0] = av_clip_uint8(pixels[0] + block[0]); |
|
450 |
+ pixels[1] = av_clip_uint8(pixels[1] + block[1]); |
|
451 |
+ pixels[2] = av_clip_uint8(pixels[2] + block[2]); |
|
452 |
+ pixels[3] = av_clip_uint8(pixels[3] + block[3]); |
|
453 |
+ pixels[4] = av_clip_uint8(pixels[4] + block[4]); |
|
454 |
+ pixels[5] = av_clip_uint8(pixels[5] + block[5]); |
|
455 |
+ pixels[6] = av_clip_uint8(pixels[6] + block[6]); |
|
456 |
+ pixels[7] = av_clip_uint8(pixels[7] + block[7]); |
|
458 | 457 |
pixels += line_size; |
459 | 458 |
block += 8; |
460 | 459 |
} |
... | ... |
@@ -464,14 +460,13 @@ static void add_pixels_clamped4_c(const DCTELEM *block, uint8_t *restrict pixels |
464 | 464 |
int line_size) |
465 | 465 |
{ |
466 | 466 |
int i; |
467 |
- uint8_t *cm = ff_cropTbl + MAX_NEG_CROP; |
|
468 | 467 |
|
469 | 468 |
/* read the pixels */ |
470 | 469 |
for(i=0;i<4;i++) { |
471 |
- pixels[0] = cm[pixels[0] + block[0]]; |
|
472 |
- pixels[1] = cm[pixels[1] + block[1]]; |
|
473 |
- pixels[2] = cm[pixels[2] + block[2]]; |
|
474 |
- pixels[3] = cm[pixels[3] + block[3]]; |
|
470 |
+ pixels[0] = av_clip_uint8(pixels[0] + block[0]); |
|
471 |
+ pixels[1] = av_clip_uint8(pixels[1] + block[1]); |
|
472 |
+ pixels[2] = av_clip_uint8(pixels[2] + block[2]); |
|
473 |
+ pixels[3] = av_clip_uint8(pixels[3] + block[3]); |
|
475 | 474 |
pixels += line_size; |
476 | 475 |
block += 8; |
477 | 476 |
} |
... | ... |
@@ -481,12 +476,11 @@ static void add_pixels_clamped2_c(const DCTELEM *block, uint8_t *restrict pixels |
481 | 481 |
int line_size) |
482 | 482 |
{ |
483 | 483 |
int i; |
484 |
- uint8_t *cm = ff_cropTbl + MAX_NEG_CROP; |
|
485 | 484 |
|
486 | 485 |
/* read the pixels */ |
487 | 486 |
for(i=0;i<2;i++) { |
488 |
- pixels[0] = cm[pixels[0] + block[0]]; |
|
489 |
- pixels[1] = cm[pixels[1] + block[1]]; |
|
487 |
+ pixels[0] = av_clip_uint8(pixels[0] + block[0]); |
|
488 |
+ pixels[1] = av_clip_uint8(pixels[1] + block[1]); |
|
490 | 489 |
pixels += line_size; |
491 | 490 |
block += 8; |
492 | 491 |
} |
... | ... |
@@ -2733,15 +2727,11 @@ static void ff_jref_idct2_add(uint8_t *dest, int line_size, DCTELEM *block) |
2733 | 2733 |
|
2734 | 2734 |
static void ff_jref_idct1_put(uint8_t *dest, int line_size, DCTELEM *block) |
2735 | 2735 |
{ |
2736 |
- uint8_t *cm = ff_cropTbl + MAX_NEG_CROP; |
|
2737 |
- |
|
2738 |
- dest[0] = cm[(block[0] + 4)>>3]; |
|
2736 |
+ dest[0] = av_clip_uint8((block[0] + 4)>>3); |
|
2739 | 2737 |
} |
2740 | 2738 |
static void ff_jref_idct1_add(uint8_t *dest, int line_size, DCTELEM *block) |
2741 | 2739 |
{ |
2742 |
- uint8_t *cm = ff_cropTbl + MAX_NEG_CROP; |
|
2743 |
- |
|
2744 |
- dest[0] = cm[dest[0] + ((block[0] + 4)>>3)]; |
|
2740 |
+ dest[0] = av_clip_uint8(dest[0] + ((block[0] + 4)>>3)); |
|
2745 | 2741 |
} |
2746 | 2742 |
|
2747 | 2743 |
static void just_return(void *mem av_unused, int stride av_unused, int h av_unused) { return; } |
... | ... |
@@ -49,7 +49,6 @@ static const uint8_t scan8[16*3]={ |
49 | 49 |
void FUNCC(ff_h264_idct_add)(uint8_t *_dst, DCTELEM *_block, int stride) |
50 | 50 |
{ |
51 | 51 |
int i; |
52 |
- INIT_CLIP |
|
53 | 52 |
pixel *dst = (pixel*)_dst; |
54 | 53 |
dctcoef *block = (dctcoef*)_block; |
55 | 54 |
stride /= sizeof(pixel); |
... | ... |
@@ -74,16 +73,15 @@ void FUNCC(ff_h264_idct_add)(uint8_t *_dst, DCTELEM *_block, int stride) |
74 | 74 |
const int z2= (block[1 + 4*i]>>1) - block[3 + 4*i]; |
75 | 75 |
const int z3= block[1 + 4*i] + (block[3 + 4*i]>>1); |
76 | 76 |
|
77 |
- dst[i + 0*stride]= CLIP(dst[i + 0*stride] + ((z0 + z3) >> 6)); |
|
78 |
- dst[i + 1*stride]= CLIP(dst[i + 1*stride] + ((z1 + z2) >> 6)); |
|
79 |
- dst[i + 2*stride]= CLIP(dst[i + 2*stride] + ((z1 - z2) >> 6)); |
|
80 |
- dst[i + 3*stride]= CLIP(dst[i + 3*stride] + ((z0 - z3) >> 6)); |
|
77 |
+ dst[i + 0*stride]= av_clip_pixel(dst[i + 0*stride] + ((z0 + z3) >> 6)); |
|
78 |
+ dst[i + 1*stride]= av_clip_pixel(dst[i + 1*stride] + ((z1 + z2) >> 6)); |
|
79 |
+ dst[i + 2*stride]= av_clip_pixel(dst[i + 2*stride] + ((z1 - z2) >> 6)); |
|
80 |
+ dst[i + 3*stride]= av_clip_pixel(dst[i + 3*stride] + ((z0 - z3) >> 6)); |
|
81 | 81 |
} |
82 | 82 |
} |
83 | 83 |
|
84 | 84 |
void FUNCC(ff_h264_idct8_add)(uint8_t *_dst, DCTELEM *_block, int stride){ |
85 | 85 |
int i; |
86 |
- INIT_CLIP |
|
87 | 86 |
pixel *dst = (pixel*)_dst; |
88 | 87 |
dctcoef *block = (dctcoef*)_block; |
89 | 88 |
stride /= sizeof(pixel); |
... | ... |
@@ -143,14 +141,14 @@ void FUNCC(ff_h264_idct8_add)(uint8_t *_dst, DCTELEM *_block, int stride){ |
143 | 143 |
const int b5 = (a3>>2) - a5; |
144 | 144 |
const int b7 = a7 - (a1>>2); |
145 | 145 |
|
146 |
- dst[i + 0*stride] = CLIP( dst[i + 0*stride] + ((b0 + b7) >> 6) ); |
|
147 |
- dst[i + 1*stride] = CLIP( dst[i + 1*stride] + ((b2 + b5) >> 6) ); |
|
148 |
- dst[i + 2*stride] = CLIP( dst[i + 2*stride] + ((b4 + b3) >> 6) ); |
|
149 |
- dst[i + 3*stride] = CLIP( dst[i + 3*stride] + ((b6 + b1) >> 6) ); |
|
150 |
- dst[i + 4*stride] = CLIP( dst[i + 4*stride] + ((b6 - b1) >> 6) ); |
|
151 |
- dst[i + 5*stride] = CLIP( dst[i + 5*stride] + ((b4 - b3) >> 6) ); |
|
152 |
- dst[i + 6*stride] = CLIP( dst[i + 6*stride] + ((b2 - b5) >> 6) ); |
|
153 |
- dst[i + 7*stride] = CLIP( dst[i + 7*stride] + ((b0 - b7) >> 6) ); |
|
146 |
+ dst[i + 0*stride] = av_clip_pixel( dst[i + 0*stride] + ((b0 + b7) >> 6) ); |
|
147 |
+ dst[i + 1*stride] = av_clip_pixel( dst[i + 1*stride] + ((b2 + b5) >> 6) ); |
|
148 |
+ dst[i + 2*stride] = av_clip_pixel( dst[i + 2*stride] + ((b4 + b3) >> 6) ); |
|
149 |
+ dst[i + 3*stride] = av_clip_pixel( dst[i + 3*stride] + ((b6 + b1) >> 6) ); |
|
150 |
+ dst[i + 4*stride] = av_clip_pixel( dst[i + 4*stride] + ((b6 - b1) >> 6) ); |
|
151 |
+ dst[i + 5*stride] = av_clip_pixel( dst[i + 5*stride] + ((b4 - b3) >> 6) ); |
|
152 |
+ dst[i + 6*stride] = av_clip_pixel( dst[i + 6*stride] + ((b2 - b5) >> 6) ); |
|
153 |
+ dst[i + 7*stride] = av_clip_pixel( dst[i + 7*stride] + ((b0 - b7) >> 6) ); |
|
154 | 154 |
} |
155 | 155 |
} |
156 | 156 |
|
... | ... |
@@ -158,13 +156,12 @@ void FUNCC(ff_h264_idct8_add)(uint8_t *_dst, DCTELEM *_block, int stride){ |
158 | 158 |
void FUNCC(ff_h264_idct_dc_add)(uint8_t *_dst, DCTELEM *block, int stride){ |
159 | 159 |
int i, j; |
160 | 160 |
int dc = (((dctcoef*)block)[0] + 32) >> 6; |
161 |
- INIT_CLIP |
|
162 | 161 |
pixel *dst = (pixel*)_dst; |
163 | 162 |
stride /= sizeof(pixel); |
164 | 163 |
for( j = 0; j < 4; j++ ) |
165 | 164 |
{ |
166 | 165 |
for( i = 0; i < 4; i++ ) |
167 |
- dst[i] = CLIP( dst[i] + dc ); |
|
166 |
+ dst[i] = av_clip_pixel( dst[i] + dc ); |
|
168 | 167 |
dst += stride; |
169 | 168 |
} |
170 | 169 |
} |
... | ... |
@@ -172,13 +169,12 @@ void FUNCC(ff_h264_idct_dc_add)(uint8_t *_dst, DCTELEM *block, int stride){ |
172 | 172 |
void FUNCC(ff_h264_idct8_dc_add)(uint8_t *_dst, DCTELEM *block, int stride){ |
173 | 173 |
int i, j; |
174 | 174 |
int dc = (((dctcoef*)block)[0] + 32) >> 6; |
175 |
- INIT_CLIP |
|
176 | 175 |
pixel *dst = (pixel*)_dst; |
177 | 176 |
stride /= sizeof(pixel); |
178 | 177 |
for( j = 0; j < 8; j++ ) |
179 | 178 |
{ |
180 | 179 |
for( i = 0; i < 8; i++ ) |
181 |
- dst[i] = CLIP( dst[i] + dc ); |
|
180 |
+ dst[i] = av_clip_pixel( dst[i] + dc ); |
|
182 | 181 |
dst += stride; |
183 | 182 |
} |
184 | 183 |
} |
... | ... |
@@ -55,7 +55,6 @@ static av_always_inline void rv34_row_transform(int temp[16], DCTELEM *block) |
55 | 55 |
*/ |
56 | 56 |
static void rv34_idct_add_c(uint8_t *dst, ptrdiff_t stride, DCTELEM *block){ |
57 | 57 |
int temp[16]; |
58 |
- uint8_t *cm = ff_cropTbl + MAX_NEG_CROP; |
|
59 | 58 |
int i; |
60 | 59 |
|
61 | 60 |
rv34_row_transform(temp, block); |
... | ... |
@@ -67,10 +66,10 @@ static void rv34_idct_add_c(uint8_t *dst, ptrdiff_t stride, DCTELEM *block){ |
67 | 67 |
const int z2 = 7* temp[4*1+i] - 17*temp[4*3+i]; |
68 | 68 |
const int z3 = 17* temp[4*1+i] + 7*temp[4*3+i]; |
69 | 69 |
|
70 |
- dst[0] = cm[ dst[0] + ( (z0 + z3) >> 10 ) ]; |
|
71 |
- dst[1] = cm[ dst[1] + ( (z1 + z2) >> 10 ) ]; |
|
72 |
- dst[2] = cm[ dst[2] + ( (z1 - z2) >> 10 ) ]; |
|
73 |
- dst[3] = cm[ dst[3] + ( (z0 - z3) >> 10 ) ]; |
|
70 |
+ dst[0] = av_clip_uint8( dst[0] + ( (z0 + z3) >> 10 ) ); |
|
71 |
+ dst[1] = av_clip_uint8( dst[1] + ( (z1 + z2) >> 10 ) ); |
|
72 |
+ dst[2] = av_clip_uint8( dst[2] + ( (z1 - z2) >> 10 ) ); |
|
73 |
+ dst[3] = av_clip_uint8( dst[3] + ( (z0 - z3) >> 10 ) ); |
|
74 | 74 |
|
75 | 75 |
dst += stride; |
76 | 76 |
} |
... | ... |
@@ -103,15 +102,13 @@ static void rv34_inv_transform_noround_c(DCTELEM *block){ |
103 | 103 |
|
104 | 104 |
static void rv34_idct_dc_add_c(uint8_t *dst, ptrdiff_t stride, int dc) |
105 | 105 |
{ |
106 |
- const uint8_t *cm = ff_cropTbl + MAX_NEG_CROP; |
|
107 | 106 |
int i, j; |
108 | 107 |
|
109 |
- cm += (13*13*dc + 0x200) >> 10; |
|
110 |
- |
|
108 |
+ dc = (13*13*dc + 0x200) >> 10; |
|
111 | 109 |
for (i = 0; i < 4; i++) |
112 | 110 |
{ |
113 | 111 |
for (j = 0; j < 4; j++) |
114 |
- dst[j] = cm[ dst[j] ]; |
|
112 |
+ dst[j] = av_clip_uint8( dst[j] + dc ); |
|
115 | 113 |
|
116 | 114 |
dst += stride; |
117 | 115 |
} |
... | ... |
@@ -53,7 +53,6 @@ |
53 | 53 |
static inline void idct4col_put(uint8_t *dest, int line_size, const DCTELEM *col) |
54 | 54 |
{ |
55 | 55 |
int c0, c1, c2, c3, a0, a1, a2, a3; |
56 |
- const uint8_t *cm = ff_cropTbl + MAX_NEG_CROP; |
|
57 | 56 |
|
58 | 57 |
a0 = col[8*0]; |
59 | 58 |
a1 = col[8*2]; |
... | ... |
@@ -63,13 +62,13 @@ static inline void idct4col_put(uint8_t *dest, int line_size, const DCTELEM *col |
63 | 63 |
c2 = ((a0 - a2) << (CN_SHIFT - 1)) + (1 << (C_SHIFT - 1)); |
64 | 64 |
c1 = a1 * C1 + a3 * C2; |
65 | 65 |
c3 = a1 * C2 - a3 * C1; |
66 |
- dest[0] = cm[(c0 + c1) >> C_SHIFT]; |
|
66 |
+ dest[0] = av_clip_uint8((c0 + c1) >> C_SHIFT); |
|
67 | 67 |
dest += line_size; |
68 |
- dest[0] = cm[(c2 + c3) >> C_SHIFT]; |
|
68 |
+ dest[0] = av_clip_uint8((c2 + c3) >> C_SHIFT); |
|
69 | 69 |
dest += line_size; |
70 |
- dest[0] = cm[(c2 - c3) >> C_SHIFT]; |
|
70 |
+ dest[0] = av_clip_uint8((c2 - c3) >> C_SHIFT); |
|
71 | 71 |
dest += line_size; |
72 |
- dest[0] = cm[(c0 - c1) >> C_SHIFT]; |
|
72 |
+ dest[0] = av_clip_uint8((c0 - c1) >> C_SHIFT); |
|
73 | 73 |
} |
74 | 74 |
|
75 | 75 |
#define BF(k) \ |
... | ... |
@@ -133,7 +132,6 @@ void ff_simple_idct248_put(uint8_t *dest, int line_size, DCTELEM *block) |
133 | 133 |
static inline void idct4col_add(uint8_t *dest, int line_size, const DCTELEM *col) |
134 | 134 |
{ |
135 | 135 |
int c0, c1, c2, c3, a0, a1, a2, a3; |
136 |
- const uint8_t *cm = ff_cropTbl + MAX_NEG_CROP; |
|
137 | 136 |
|
138 | 137 |
a0 = col[8*0]; |
139 | 138 |
a1 = col[8*1]; |
... | ... |
@@ -143,13 +141,13 @@ static inline void idct4col_add(uint8_t *dest, int line_size, const DCTELEM *col |
143 | 143 |
c2 = (a0 - a2)*C3 + (1 << (C_SHIFT - 1)); |
144 | 144 |
c1 = a1 * C1 + a3 * C2; |
145 | 145 |
c3 = a1 * C2 - a3 * C1; |
146 |
- dest[0] = cm[dest[0] + ((c0 + c1) >> C_SHIFT)]; |
|
146 |
+ dest[0] = av_clip_uint8(dest[0] + ((c0 + c1) >> C_SHIFT)); |
|
147 | 147 |
dest += line_size; |
148 |
- dest[0] = cm[dest[0] + ((c2 + c3) >> C_SHIFT)]; |
|
148 |
+ dest[0] = av_clip_uint8(dest[0] + ((c2 + c3) >> C_SHIFT)); |
|
149 | 149 |
dest += line_size; |
150 |
- dest[0] = cm[dest[0] + ((c2 - c3) >> C_SHIFT)]; |
|
150 |
+ dest[0] = av_clip_uint8(dest[0] + ((c2 - c3) >> C_SHIFT)); |
|
151 | 151 |
dest += line_size; |
152 |
- dest[0] = cm[dest[0] + ((c0 - c1) >> C_SHIFT)]; |
|
152 |
+ dest[0] = av_clip_uint8(dest[0] + ((c0 - c1) >> C_SHIFT)); |
|
153 | 153 |
} |
154 | 154 |
|
155 | 155 |
#define RN_SHIFT 15 |
... | ... |
@@ -161,7 +159,6 @@ static inline void idct4col_add(uint8_t *dest, int line_size, const DCTELEM *col |
161 | 161 |
static inline void idct4row(DCTELEM *row) |
162 | 162 |
{ |
163 | 163 |
int c0, c1, c2, c3, a0, a1, a2, a3; |
164 |
- //const uint8_t *cm = ff_cropTbl + MAX_NEG_CROP; |
|
165 | 164 |
|
166 | 165 |
a0 = row[0]; |
167 | 166 |
a1 = row[1]; |
... | ... |
@@ -224,50 +224,48 @@ static inline void FUNC(idctSparseColPut)(pixel *dest, int line_size, |
224 | 224 |
DCTELEM *col) |
225 | 225 |
{ |
226 | 226 |
int a0, a1, a2, a3, b0, b1, b2, b3; |
227 |
- INIT_CLIP; |
|
228 | 227 |
|
229 | 228 |
IDCT_COLS; |
230 | 229 |
|
231 |
- dest[0] = CLIP((a0 + b0) >> COL_SHIFT); |
|
230 |
+ dest[0] = av_clip_pixel((a0 + b0) >> COL_SHIFT); |
|
232 | 231 |
dest += line_size; |
233 |
- dest[0] = CLIP((a1 + b1) >> COL_SHIFT); |
|
232 |
+ dest[0] = av_clip_pixel((a1 + b1) >> COL_SHIFT); |
|
234 | 233 |
dest += line_size; |
235 |
- dest[0] = CLIP((a2 + b2) >> COL_SHIFT); |
|
234 |
+ dest[0] = av_clip_pixel((a2 + b2) >> COL_SHIFT); |
|
236 | 235 |
dest += line_size; |
237 |
- dest[0] = CLIP((a3 + b3) >> COL_SHIFT); |
|
236 |
+ dest[0] = av_clip_pixel((a3 + b3) >> COL_SHIFT); |
|
238 | 237 |
dest += line_size; |
239 |
- dest[0] = CLIP((a3 - b3) >> COL_SHIFT); |
|
238 |
+ dest[0] = av_clip_pixel((a3 - b3) >> COL_SHIFT); |
|
240 | 239 |
dest += line_size; |
241 |
- dest[0] = CLIP((a2 - b2) >> COL_SHIFT); |
|
240 |
+ dest[0] = av_clip_pixel((a2 - b2) >> COL_SHIFT); |
|
242 | 241 |
dest += line_size; |
243 |
- dest[0] = CLIP((a1 - b1) >> COL_SHIFT); |
|
242 |
+ dest[0] = av_clip_pixel((a1 - b1) >> COL_SHIFT); |
|
244 | 243 |
dest += line_size; |
245 |
- dest[0] = CLIP((a0 - b0) >> COL_SHIFT); |
|
244 |
+ dest[0] = av_clip_pixel((a0 - b0) >> COL_SHIFT); |
|
246 | 245 |
} |
247 | 246 |
|
248 | 247 |
static inline void FUNC(idctSparseColAdd)(pixel *dest, int line_size, |
249 | 248 |
DCTELEM *col) |
250 | 249 |
{ |
251 | 250 |
int a0, a1, a2, a3, b0, b1, b2, b3; |
252 |
- INIT_CLIP; |
|
253 | 251 |
|
254 | 252 |
IDCT_COLS; |
255 | 253 |
|
256 |
- dest[0] = CLIP(dest[0] + ((a0 + b0) >> COL_SHIFT)); |
|
254 |
+ dest[0] = av_clip_pixel(dest[0] + ((a0 + b0) >> COL_SHIFT)); |
|
257 | 255 |
dest += line_size; |
258 |
- dest[0] = CLIP(dest[0] + ((a1 + b1) >> COL_SHIFT)); |
|
256 |
+ dest[0] = av_clip_pixel(dest[0] + ((a1 + b1) >> COL_SHIFT)); |
|
259 | 257 |
dest += line_size; |
260 |
- dest[0] = CLIP(dest[0] + ((a2 + b2) >> COL_SHIFT)); |
|
258 |
+ dest[0] = av_clip_pixel(dest[0] + ((a2 + b2) >> COL_SHIFT)); |
|
261 | 259 |
dest += line_size; |
262 |
- dest[0] = CLIP(dest[0] + ((a3 + b3) >> COL_SHIFT)); |
|
260 |
+ dest[0] = av_clip_pixel(dest[0] + ((a3 + b3) >> COL_SHIFT)); |
|
263 | 261 |
dest += line_size; |
264 |
- dest[0] = CLIP(dest[0] + ((a3 - b3) >> COL_SHIFT)); |
|
262 |
+ dest[0] = av_clip_pixel(dest[0] + ((a3 - b3) >> COL_SHIFT)); |
|
265 | 263 |
dest += line_size; |
266 |
- dest[0] = CLIP(dest[0] + ((a2 - b2) >> COL_SHIFT)); |
|
264 |
+ dest[0] = av_clip_pixel(dest[0] + ((a2 - b2) >> COL_SHIFT)); |
|
267 | 265 |
dest += line_size; |
268 |
- dest[0] = CLIP(dest[0] + ((a1 - b1) >> COL_SHIFT)); |
|
266 |
+ dest[0] = av_clip_pixel(dest[0] + ((a1 - b1) >> COL_SHIFT)); |
|
269 | 267 |
dest += line_size; |
270 |
- dest[0] = CLIP(dest[0] + ((a0 - b0) >> COL_SHIFT)); |
|
268 |
+ dest[0] = av_clip_pixel(dest[0] + ((a0 - b0) >> COL_SHIFT)); |
|
271 | 269 |
} |
272 | 270 |
|
273 | 271 |
static inline void FUNC(idctSparseCol)(DCTELEM *col) |
... | ... |
@@ -173,7 +173,6 @@ void ff_svq3_add_idct_c(uint8_t *dst, DCTELEM *block, int stride, int qp, |
173 | 173 |
{ |
174 | 174 |
const int qmul = svq3_dequant_coeff[qp]; |
175 | 175 |
int i; |
176 |
- uint8_t *cm = ff_cropTbl + MAX_NEG_CROP; |
|
177 | 176 |
|
178 | 177 |
if (dc) { |
179 | 178 |
dc = 13*13*((dc == 1) ? 1538*block[0] : ((qmul*(block[0] >> 3)) / 2)); |
... | ... |
@@ -199,10 +198,10 @@ void ff_svq3_add_idct_c(uint8_t *dst, DCTELEM *block, int stride, int qp, |
199 | 199 |
const int z3 = 17* block[i + 4*1] + 7*block[i + 4*3]; |
200 | 200 |
const int rr = (dc + 0x80000); |
201 | 201 |
|
202 |
- dst[i + stride*0] = cm[ dst[i + stride*0] + (((z0 + z3)*qmul + rr) >> 20) ]; |
|
203 |
- dst[i + stride*1] = cm[ dst[i + stride*1] + (((z1 + z2)*qmul + rr) >> 20) ]; |
|
204 |
- dst[i + stride*2] = cm[ dst[i + stride*2] + (((z1 - z2)*qmul + rr) >> 20) ]; |
|
205 |
- dst[i + stride*3] = cm[ dst[i + stride*3] + (((z0 - z3)*qmul + rr) >> 20) ]; |
|
202 |
+ dst[i + stride*0] = av_clip_uint8( dst[i + stride*0] + (((z0 + z3)*qmul + rr) >> 20) ); |
|
203 |
+ dst[i + stride*1] = av_clip_uint8( dst[i + stride*1] + (((z1 + z2)*qmul + rr) >> 20) ); |
|
204 |
+ dst[i + stride*2] = av_clip_uint8( dst[i + stride*2] + (((z1 - z2)*qmul + rr) >> 20) ); |
|
205 |
+ dst[i + stride*3] = av_clip_uint8( dst[i + stride*3] + (((z0 - z3)*qmul + rr) >> 20) ); |
|
206 | 206 |
} |
207 | 207 |
} |
208 | 208 |
|
... | ... |
@@ -139,8 +139,6 @@ static void vc1_h_s_overlap_c(DCTELEM *left, DCTELEM *right) |
139 | 139 |
* @see 8.6 |
140 | 140 |
*/ |
141 | 141 |
static av_always_inline int vc1_filter_line(uint8_t* src, int stride, int pq){ |
142 |
- uint8_t *cm = ff_cropTbl + MAX_NEG_CROP; |
|
143 |
- |
|
144 | 142 |
int a0 = (2*(src[-2*stride] - src[ 1*stride]) - 5*(src[-1*stride] - src[ 0*stride]) + 4) >> 3; |
145 | 143 |
int a0_sign = a0 >> 31; /* Store sign */ |
146 | 144 |
a0 = (a0 ^ a0_sign) - a0_sign; /* a0 = FFABS(a0); */ |
... | ... |
@@ -163,8 +161,8 @@ static av_always_inline int vc1_filter_line(uint8_t* src, int stride, int pq){ |
163 | 163 |
else{ |
164 | 164 |
d = FFMIN(d, clip); |
165 | 165 |
d = (d ^ d_sign) - d_sign; /* Restore sign */ |
166 |
- src[-1*stride] = cm[src[-1*stride] - d]; |
|
167 |
- src[ 0*stride] = cm[src[ 0*stride] + d]; |
|
166 |
+ src[-1*stride] = av_clip_uint8(src[-1*stride] - d); |
|
167 |
+ src[ 0*stride] = av_clip_uint8(src[ 0*stride] + d); |
|
168 | 168 |
} |
169 | 169 |
return 1; |
170 | 170 |
} |
... | ... |
@@ -234,19 +232,17 @@ static void vc1_inv_trans_8x8_dc_c(uint8_t *dest, int linesize, DCTELEM *block) |
234 | 234 |
{ |
235 | 235 |
int i; |
236 | 236 |
int dc = block[0]; |
237 |
- const uint8_t *cm; |
|
238 | 237 |
dc = (3 * dc + 1) >> 1; |
239 | 238 |
dc = (3 * dc + 16) >> 5; |
240 |
- cm = ff_cropTbl + MAX_NEG_CROP + dc; |
|
241 | 239 |
for(i = 0; i < 8; i++){ |
242 |
- dest[0] = cm[dest[0]]; |
|
243 |
- dest[1] = cm[dest[1]]; |
|
244 |
- dest[2] = cm[dest[2]]; |
|
245 |
- dest[3] = cm[dest[3]]; |
|
246 |
- dest[4] = cm[dest[4]]; |
|
247 |
- dest[5] = cm[dest[5]]; |
|
248 |
- dest[6] = cm[dest[6]]; |
|
249 |
- dest[7] = cm[dest[7]]; |
|
240 |
+ dest[0] = av_clip_uint8(dest[0] + dc); |
|
241 |
+ dest[1] = av_clip_uint8(dest[1] + dc); |
|
242 |
+ dest[2] = av_clip_uint8(dest[2] + dc); |
|
243 |
+ dest[3] = av_clip_uint8(dest[3] + dc); |
|
244 |
+ dest[4] = av_clip_uint8(dest[4] + dc); |
|
245 |
+ dest[5] = av_clip_uint8(dest[5] + dc); |
|
246 |
+ dest[6] = av_clip_uint8(dest[6] + dc); |
|
247 |
+ dest[7] = av_clip_uint8(dest[7] + dc); |
|
250 | 248 |
dest += linesize; |
251 | 249 |
} |
252 | 250 |
} |
... | ... |
@@ -326,19 +322,17 @@ static void vc1_inv_trans_8x4_dc_c(uint8_t *dest, int linesize, DCTELEM *block) |
326 | 326 |
{ |
327 | 327 |
int i; |
328 | 328 |
int dc = block[0]; |
329 |
- const uint8_t *cm; |
|
330 | 329 |
dc = ( 3 * dc + 1) >> 1; |
331 | 330 |
dc = (17 * dc + 64) >> 7; |
332 |
- cm = ff_cropTbl + MAX_NEG_CROP + dc; |
|
333 | 331 |
for(i = 0; i < 4; i++){ |
334 |
- dest[0] = cm[dest[0]]; |
|
335 |
- dest[1] = cm[dest[1]]; |
|
336 |
- dest[2] = cm[dest[2]]; |
|
337 |
- dest[3] = cm[dest[3]]; |
|
338 |
- dest[4] = cm[dest[4]]; |
|
339 |
- dest[5] = cm[dest[5]]; |
|
340 |
- dest[6] = cm[dest[6]]; |
|
341 |
- dest[7] = cm[dest[7]]; |
|
332 |
+ dest[0] = av_clip_uint8(dest[0] + dc); |
|
333 |
+ dest[1] = av_clip_uint8(dest[1] + dc); |
|
334 |
+ dest[2] = av_clip_uint8(dest[2] + dc); |
|
335 |
+ dest[3] = av_clip_uint8(dest[3] + dc); |
|
336 |
+ dest[4] = av_clip_uint8(dest[4] + dc); |
|
337 |
+ dest[5] = av_clip_uint8(dest[5] + dc); |
|
338 |
+ dest[6] = av_clip_uint8(dest[6] + dc); |
|
339 |
+ dest[7] = av_clip_uint8(dest[7] + dc); |
|
342 | 340 |
dest += linesize; |
343 | 341 |
} |
344 | 342 |
} |
... | ... |
@@ -348,7 +342,6 @@ static void vc1_inv_trans_8x4_c(uint8_t *dest, int linesize, DCTELEM *block) |
348 | 348 |
int i; |
349 | 349 |
register int t1,t2,t3,t4,t5,t6,t7,t8; |
350 | 350 |
DCTELEM *src, *dst; |
351 |
- const uint8_t *cm = ff_cropTbl + MAX_NEG_CROP; |
|
352 | 351 |
|
353 | 352 |
src = block; |
354 | 353 |
dst = block; |
... | ... |
@@ -388,10 +381,10 @@ static void vc1_inv_trans_8x4_c(uint8_t *dest, int linesize, DCTELEM *block) |
388 | 388 |
t3 = 22 * src[ 8] + 10 * src[24]; |
389 | 389 |
t4 = 22 * src[24] - 10 * src[ 8]; |
390 | 390 |
|
391 |
- dest[0*linesize] = cm[dest[0*linesize] + ((t1 + t3) >> 7)]; |
|
392 |
- dest[1*linesize] = cm[dest[1*linesize] + ((t2 - t4) >> 7)]; |
|
393 |
- dest[2*linesize] = cm[dest[2*linesize] + ((t2 + t4) >> 7)]; |
|
394 |
- dest[3*linesize] = cm[dest[3*linesize] + ((t1 - t3) >> 7)]; |
|
391 |
+ dest[0*linesize] = av_clip_uint8(dest[0*linesize] + ((t1 + t3) >> 7)); |
|
392 |
+ dest[1*linesize] = av_clip_uint8(dest[1*linesize] + ((t2 - t4) >> 7)); |
|
393 |
+ dest[2*linesize] = av_clip_uint8(dest[2*linesize] + ((t2 + t4) >> 7)); |
|
394 |
+ dest[3*linesize] = av_clip_uint8(dest[3*linesize] + ((t1 - t3) >> 7)); |
|
395 | 395 |
|
396 | 396 |
src ++; |
397 | 397 |
dest++; |
... | ... |
@@ -404,15 +397,13 @@ static void vc1_inv_trans_4x8_dc_c(uint8_t *dest, int linesize, DCTELEM *block) |
404 | 404 |
{ |
405 | 405 |
int i; |
406 | 406 |
int dc = block[0]; |
407 |
- const uint8_t *cm; |
|
408 | 407 |
dc = (17 * dc + 4) >> 3; |
409 | 408 |
dc = (12 * dc + 64) >> 7; |
410 |
- cm = ff_cropTbl + MAX_NEG_CROP + dc; |
|
411 | 409 |
for(i = 0; i < 8; i++){ |
412 |
- dest[0] = cm[dest[0]]; |
|
413 |
- dest[1] = cm[dest[1]]; |
|
414 |
- dest[2] = cm[dest[2]]; |
|
415 |
- dest[3] = cm[dest[3]]; |
|
410 |
+ dest[0] = av_clip_uint8(dest[0] + dc); |
|
411 |
+ dest[1] = av_clip_uint8(dest[1] + dc); |
|
412 |
+ dest[2] = av_clip_uint8(dest[2] + dc); |
|
413 |
+ dest[3] = av_clip_uint8(dest[3] + dc); |
|
416 | 414 |
dest += linesize; |
417 | 415 |
} |
418 | 416 |
} |
... | ... |
@@ -422,7 +413,6 @@ static void vc1_inv_trans_4x8_c(uint8_t *dest, int linesize, DCTELEM *block) |
422 | 422 |
int i; |
423 | 423 |
register int t1,t2,t3,t4,t5,t6,t7,t8; |
424 | 424 |
DCTELEM *src, *dst; |
425 |
- const uint8_t *cm = ff_cropTbl + MAX_NEG_CROP; |
|
426 | 425 |
|
427 | 426 |
src = block; |
428 | 427 |
dst = block; |
... | ... |
@@ -458,14 +448,14 @@ static void vc1_inv_trans_4x8_c(uint8_t *dest, int linesize, DCTELEM *block) |
458 | 458 |
t3 = 9 * src[ 8] - 16 * src[24] + 4 * src[40] + 15 * src[56]; |
459 | 459 |
t4 = 4 * src[ 8] - 9 * src[24] + 15 * src[40] - 16 * src[56]; |
460 | 460 |
|
461 |
- dest[0*linesize] = cm[dest[0*linesize] + ((t5 + t1) >> 7)]; |
|
462 |
- dest[1*linesize] = cm[dest[1*linesize] + ((t6 + t2) >> 7)]; |
|
463 |
- dest[2*linesize] = cm[dest[2*linesize] + ((t7 + t3) >> 7)]; |
|
464 |
- dest[3*linesize] = cm[dest[3*linesize] + ((t8 + t4) >> 7)]; |
|
465 |
- dest[4*linesize] = cm[dest[4*linesize] + ((t8 - t4 + 1) >> 7)]; |
|
466 |
- dest[5*linesize] = cm[dest[5*linesize] + ((t7 - t3 + 1) >> 7)]; |
|
467 |
- dest[6*linesize] = cm[dest[6*linesize] + ((t6 - t2 + 1) >> 7)]; |
|
468 |
- dest[7*linesize] = cm[dest[7*linesize] + ((t5 - t1 + 1) >> 7)]; |
|
461 |
+ dest[0*linesize] = av_clip_uint8(dest[0*linesize] + ((t5 + t1) >> 7)); |
|
462 |
+ dest[1*linesize] = av_clip_uint8(dest[1*linesize] + ((t6 + t2) >> 7)); |
|
463 |
+ dest[2*linesize] = av_clip_uint8(dest[2*linesize] + ((t7 + t3) >> 7)); |
|
464 |
+ dest[3*linesize] = av_clip_uint8(dest[3*linesize] + ((t8 + t4) >> 7)); |
|
465 |
+ dest[4*linesize] = av_clip_uint8(dest[4*linesize] + ((t8 - t4 + 1) >> 7)); |
|
466 |
+ dest[5*linesize] = av_clip_uint8(dest[5*linesize] + ((t7 - t3 + 1) >> 7)); |
|
467 |
+ dest[6*linesize] = av_clip_uint8(dest[6*linesize] + ((t6 - t2 + 1) >> 7)); |
|
468 |
+ dest[7*linesize] = av_clip_uint8(dest[7*linesize] + ((t5 - t1 + 1) >> 7)); |
|
469 | 469 |
|
470 | 470 |
src ++; |
471 | 471 |
dest++; |
... | ... |
@@ -478,15 +468,13 @@ static void vc1_inv_trans_4x4_dc_c(uint8_t *dest, int linesize, DCTELEM *block) |
478 | 478 |
{ |
479 | 479 |
int i; |
480 | 480 |
int dc = block[0]; |
481 |
- const uint8_t *cm; |
|
482 | 481 |
dc = (17 * dc + 4) >> 3; |
483 | 482 |
dc = (17 * dc + 64) >> 7; |
484 |
- cm = ff_cropTbl + MAX_NEG_CROP + dc; |
|
485 | 483 |
for(i = 0; i < 4; i++){ |
486 |
- dest[0] = cm[dest[0]]; |
|
487 |
- dest[1] = cm[dest[1]]; |
|
488 |
- dest[2] = cm[dest[2]]; |
|
489 |
- dest[3] = cm[dest[3]]; |
|
484 |
+ dest[0] = av_clip_uint8(dest[0] + dc); |
|
485 |
+ dest[1] = av_clip_uint8(dest[1] + dc); |
|
486 |
+ dest[2] = av_clip_uint8(dest[2] + dc); |
|
487 |
+ dest[3] = av_clip_uint8(dest[3] + dc); |
|
490 | 488 |
dest += linesize; |
491 | 489 |
} |
492 | 490 |
} |
... | ... |
@@ -496,7 +484,6 @@ static void vc1_inv_trans_4x4_c(uint8_t *dest, int linesize, DCTELEM *block) |
496 | 496 |
int i; |
497 | 497 |
register int t1,t2,t3,t4; |
498 | 498 |
DCTELEM *src, *dst; |
499 |
- const uint8_t *cm = ff_cropTbl + MAX_NEG_CROP; |
|
500 | 499 |
|
501 | 500 |
src = block; |
502 | 501 |
dst = block; |
... | ... |
@@ -522,10 +509,10 @@ static void vc1_inv_trans_4x4_c(uint8_t *dest, int linesize, DCTELEM *block) |
522 | 522 |
t3 = 22 * src[ 8] + 10 * src[24]; |
523 | 523 |
t4 = 22 * src[24] - 10 * src[ 8]; |
524 | 524 |
|
525 |
- dest[0*linesize] = cm[dest[0*linesize] + ((t1 + t3) >> 7)]; |
|
526 |
- dest[1*linesize] = cm[dest[1*linesize] + ((t2 - t4) >> 7)]; |
|
527 |
- dest[2*linesize] = cm[dest[2*linesize] + ((t2 + t4) >> 7)]; |
|
528 |
- dest[3*linesize] = cm[dest[3*linesize] + ((t1 - t3) >> 7)]; |
|
525 |
+ dest[0*linesize] = av_clip_uint8(dest[0*linesize] + ((t1 + t3) >> 7)); |
|
526 |
+ dest[1*linesize] = av_clip_uint8(dest[1*linesize] + ((t2 - t4) >> 7)); |
|
527 |
+ dest[2*linesize] = av_clip_uint8(dest[2*linesize] + ((t2 + t4) >> 7)); |
|
528 |
+ dest[3*linesize] = av_clip_uint8(dest[3*linesize] + ((t1 - t3) >> 7)); |
|
529 | 529 |
|
530 | 530 |
src ++; |
531 | 531 |
dest++; |
... | ... |
@@ -41,7 +41,6 @@ |
41 | 41 |
static av_always_inline void idct(uint8_t *dst, int stride, int16_t *input, int type) |
42 | 42 |
{ |
43 | 43 |
int16_t *ip = input; |
44 |
- uint8_t *cm = ff_cropTbl + MAX_NEG_CROP; |
|
45 | 44 |
|
46 | 45 |
int A, B, C, D, Ad, Bd, Cd, Dd, E, F, G, H; |
47 | 46 |
int Ed, Gd, Add, Bdd, Fd, Hd; |
... | ... |
@@ -147,29 +146,29 @@ static av_always_inline void idct(uint8_t *dst, int stride, int16_t *input, int |
147 | 147 |
ip[5*8] = (Fd + Bdd ) >> 4; |
148 | 148 |
ip[6*8] = (Fd - Bdd ) >> 4; |
149 | 149 |
}else if(type==1){ |
150 |
- dst[0*stride] = cm[(Gd + Cd ) >> 4]; |
|
151 |
- dst[7*stride] = cm[(Gd - Cd ) >> 4]; |
|
150 |
+ dst[0*stride] = av_clip_uint8((Gd + Cd ) >> 4); |
|
151 |
+ dst[7*stride] = av_clip_uint8((Gd - Cd ) >> 4); |
|
152 | 152 |
|
153 |
- dst[1*stride] = cm[(Add + Hd ) >> 4]; |
|
154 |
- dst[2*stride] = cm[(Add - Hd ) >> 4]; |
|
153 |
+ dst[1*stride] = av_clip_uint8((Add + Hd ) >> 4); |
|
154 |
+ dst[2*stride] = av_clip_uint8((Add - Hd ) >> 4); |
|
155 | 155 |
|
156 |
- dst[3*stride] = cm[(Ed + Dd ) >> 4]; |
|
157 |
- dst[4*stride] = cm[(Ed - Dd ) >> 4]; |
|
156 |
+ dst[3*stride] = av_clip_uint8((Ed + Dd ) >> 4); |
|
157 |
+ dst[4*stride] = av_clip_uint8((Ed - Dd ) >> 4); |
|
158 | 158 |
|
159 |
- dst[5*stride] = cm[(Fd + Bdd ) >> 4]; |
|
160 |
- dst[6*stride] = cm[(Fd - Bdd ) >> 4]; |
|
159 |
+ dst[5*stride] = av_clip_uint8((Fd + Bdd ) >> 4); |
|
160 |
+ dst[6*stride] = av_clip_uint8((Fd - Bdd ) >> 4); |
|
161 | 161 |
}else{ |
162 |
- dst[0*stride] = cm[dst[0*stride] + ((Gd + Cd ) >> 4)]; |
|
163 |
- dst[7*stride] = cm[dst[7*stride] + ((Gd - Cd ) >> 4)]; |
|
162 |
+ dst[0*stride] = av_clip_uint8(dst[0*stride] + ((Gd + Cd ) >> 4)); |
|
163 |
+ dst[7*stride] = av_clip_uint8(dst[7*stride] + ((Gd - Cd ) >> 4)); |
|
164 | 164 |
|
165 |
- dst[1*stride] = cm[dst[1*stride] + ((Add + Hd ) >> 4)]; |
|
166 |
- dst[2*stride] = cm[dst[2*stride] + ((Add - Hd ) >> 4)]; |
|
165 |
+ dst[1*stride] = av_clip_uint8(dst[1*stride] + ((Add + Hd ) >> 4)); |
|
166 |
+ dst[2*stride] = av_clip_uint8(dst[2*stride] + ((Add - Hd ) >> 4)); |
|
167 | 167 |
|
168 |
- dst[3*stride] = cm[dst[3*stride] + ((Ed + Dd ) >> 4)]; |
|
169 |
- dst[4*stride] = cm[dst[4*stride] + ((Ed - Dd ) >> 4)]; |
|
168 |
+ dst[3*stride] = av_clip_uint8(dst[3*stride] + ((Ed + Dd ) >> 4)); |
|
169 |
+ dst[4*stride] = av_clip_uint8(dst[4*stride] + ((Ed - Dd ) >> 4)); |
|
170 | 170 |
|
171 |
- dst[5*stride] = cm[dst[5*stride] + ((Fd + Bdd ) >> 4)]; |
|
172 |
- dst[6*stride] = cm[dst[6*stride] + ((Fd - Bdd ) >> 4)]; |
|
171 |
+ dst[5*stride] = av_clip_uint8(dst[5*stride] + ((Fd + Bdd ) >> 4)); |
|
172 |
+ dst[6*stride] = av_clip_uint8(dst[6*stride] + ((Fd - Bdd ) >> 4)); |
|
173 | 173 |
} |
174 | 174 |
|
175 | 175 |
} else { |
... | ... |
@@ -190,18 +189,18 @@ static av_always_inline void idct(uint8_t *dst, int stride, int16_t *input, int |
190 | 190 |
dst[4*stride]= |
191 | 191 |
dst[5*stride]= |
192 | 192 |
dst[6*stride]= |
193 |
- dst[7*stride]= cm[128 + ((xC4S4 * ip[0*8] + (IdctAdjustBeforeShift<<16))>>20)]; |
|
193 |
+ dst[7*stride]= av_clip_uint8(128 + ((xC4S4 * ip[0*8] + (IdctAdjustBeforeShift<<16))>>20)); |
|
194 | 194 |
}else{ |
195 | 195 |
if(ip[0*8]){ |
196 | 196 |
int v= ((xC4S4 * ip[0*8] + (IdctAdjustBeforeShift<<16))>>20); |
197 |
- dst[0*stride] = cm[dst[0*stride] + v]; |
|
198 |
- dst[1*stride] = cm[dst[1*stride] + v]; |
|
199 |
- dst[2*stride] = cm[dst[2*stride] + v]; |
|
200 |
- dst[3*stride] = cm[dst[3*stride] + v]; |
|
201 |
- dst[4*stride] = cm[dst[4*stride] + v]; |
|
202 |
- dst[5*stride] = cm[dst[5*stride] + v]; |
|
203 |
- dst[6*stride] = cm[dst[6*stride] + v]; |
|
204 |
- dst[7*stride] = cm[dst[7*stride] + v]; |
|
197 |
+ dst[0*stride] = av_clip_uint8(dst[0*stride] + v); |
|
198 |
+ dst[1*stride] = av_clip_uint8(dst[1*stride] + v); |
|
199 |
+ dst[2*stride] = av_clip_uint8(dst[2*stride] + v); |
|
200 |
+ dst[3*stride] = av_clip_uint8(dst[3*stride] + v); |
|
201 |
+ dst[4*stride] = av_clip_uint8(dst[4*stride] + v); |
|
202 |
+ dst[5*stride] = av_clip_uint8(dst[5*stride] + v); |
|
203 |
+ dst[6*stride] = av_clip_uint8(dst[6*stride] + v); |
|
204 |
+ dst[7*stride] = av_clip_uint8(dst[7*stride] + v); |
|
205 | 205 |
} |
206 | 206 |
} |
207 | 207 |
} |
... | ... |
@@ -225,17 +224,16 @@ void ff_vp3_idct_add_c(uint8_t *dest/*align 8*/, int line_size, DCTELEM *block/* |
225 | 225 |
|
226 | 226 |
void ff_vp3_idct_dc_add_c(uint8_t *dest/*align 8*/, int line_size, const DCTELEM *block/*align 16*/){ |
227 | 227 |
int i, dc = (block[0] + 15) >> 5; |
228 |
- const uint8_t *cm = ff_cropTbl + MAX_NEG_CROP + dc; |
|
229 | 228 |
|
230 | 229 |
for(i = 0; i < 8; i++){ |
231 |
- dest[0] = cm[dest[0]]; |
|
232 |
- dest[1] = cm[dest[1]]; |
|
233 |
- dest[2] = cm[dest[2]]; |
|
234 |
- dest[3] = cm[dest[3]]; |
|
235 |
- dest[4] = cm[dest[4]]; |
|
236 |
- dest[5] = cm[dest[5]]; |
|
237 |
- dest[6] = cm[dest[6]]; |
|
238 |
- dest[7] = cm[dest[7]]; |
|
230 |
+ dest[0] = av_clip_uint8(dest[0] + dc); |
|
231 |
+ dest[1] = av_clip_uint8(dest[1] + dc); |
|
232 |
+ dest[2] = av_clip_uint8(dest[2] + dc); |
|
233 |
+ dest[3] = av_clip_uint8(dest[3] + dc); |
|
234 |
+ dest[4] = av_clip_uint8(dest[4] + dc); |
|
235 |
+ dest[5] = av_clip_uint8(dest[5] + dc); |
|
236 |
+ dest[6] = av_clip_uint8(dest[6] + dc); |
|
237 |
+ dest[7] = av_clip_uint8(dest[7] + dc); |
|
239 | 238 |
dest += line_size; |
240 | 239 |
} |
241 | 240 |
} |
... | ... |
@@ -80,7 +80,6 @@ static void vp8_luma_dc_wht_dc_c(DCTELEM block[4][4][16], DCTELEM dc[16]) |
80 | 80 |
static void vp8_idct_add_c(uint8_t *dst, DCTELEM block[16], ptrdiff_t stride) |
81 | 81 |
{ |
82 | 82 |
int i, t0, t1, t2, t3; |
83 |
- uint8_t *cm = ff_cropTbl + MAX_NEG_CROP; |
|
84 | 83 |
DCTELEM tmp[16]; |
85 | 84 |
|
86 | 85 |
for (i = 0; i < 4; i++) { |
... | ... |
@@ -105,10 +104,10 @@ static void vp8_idct_add_c(uint8_t *dst, DCTELEM block[16], ptrdiff_t stride) |
105 | 105 |
t2 = MUL_35468(tmp[1*4+i]) - MUL_20091(tmp[3*4+i]); |
106 | 106 |
t3 = MUL_20091(tmp[1*4+i]) + MUL_35468(tmp[3*4+i]); |
107 | 107 |
|
108 |
- dst[0] = cm[dst[0] + ((t0 + t3 + 4) >> 3)]; |
|
109 |
- dst[1] = cm[dst[1] + ((t1 + t2 + 4) >> 3)]; |
|
110 |
- dst[2] = cm[dst[2] + ((t1 - t2 + 4) >> 3)]; |
|
111 |
- dst[3] = cm[dst[3] + ((t0 - t3 + 4) >> 3)]; |
|
108 |
+ dst[0] = av_clip_uint8(dst[0] + ((t0 + t3 + 4) >> 3)); |
|
109 |
+ dst[1] = av_clip_uint8(dst[1] + ((t1 + t2 + 4) >> 3)); |
|
110 |
+ dst[2] = av_clip_uint8(dst[2] + ((t1 - t2 + 4) >> 3)); |
|
111 |
+ dst[3] = av_clip_uint8(dst[3] + ((t0 - t3 + 4) >> 3)); |
|
112 | 112 |
dst += stride; |
113 | 113 |
} |
114 | 114 |
} |
... | ... |
@@ -116,14 +115,13 @@ static void vp8_idct_add_c(uint8_t *dst, DCTELEM block[16], ptrdiff_t stride) |
116 | 116 |
static void vp8_idct_dc_add_c(uint8_t *dst, DCTELEM block[16], ptrdiff_t stride) |
117 | 117 |
{ |
118 | 118 |
int i, dc = (block[0] + 4) >> 3; |
119 |
- uint8_t *cm = ff_cropTbl + MAX_NEG_CROP + dc; |
|
120 | 119 |
block[0] = 0; |
121 | 120 |
|
122 | 121 |
for (i = 0; i < 4; i++) { |
123 |
- dst[0] = cm[dst[0]]; |
|
124 |
- dst[1] = cm[dst[1]]; |
|
125 |
- dst[2] = cm[dst[2]]; |
|
126 |
- dst[3] = cm[dst[3]]; |
|
122 |
+ dst[0] = av_clip_uint8(dst[0] + dc); |
|
123 |
+ dst[1] = av_clip_uint8(dst[1] + dc); |
|
124 |
+ dst[2] = av_clip_uint8(dst[2] + dc); |
|
125 |
+ dst[3] = av_clip_uint8(dst[3] + dc); |
|
127 | 126 |
dst += stride; |
128 | 127 |
} |
129 | 128 |
} |