Originally committed as revision 1286 to svn://svn.ffmpeg.org/ffmpeg/trunk
| ... | ... |
@@ -21,11 +21,15 @@ |
| 21 | 21 |
#include "../dsputil.h" |
| 22 | 22 |
|
| 23 | 23 |
void put_pixels_axp_asm(uint8_t *block, const uint8_t *pixels, |
| 24 |
- int line_size, int h); |
|
| 24 |
+ int line_size, int h); |
|
| 25 | 25 |
void put_pixels_clamped_mvi_asm(const DCTELEM *block, uint8_t *pixels, |
| 26 |
- int line_size); |
|
| 26 |
+ int line_size); |
|
| 27 | 27 |
void add_pixels_clamped_mvi_asm(const DCTELEM *block, uint8_t *pixels, |
| 28 |
- int line_size); |
|
| 28 |
+ int line_size); |
|
| 29 |
+void (*put_pixels_clamped_axp_p)(const DCTELEM *block, uint8_t *pixels, |
|
| 30 |
+ int line_size); |
|
| 31 |
+void (*add_pixels_clamped_axp_p)(const DCTELEM *block, uint8_t *pixels, |
|
| 32 |
+ int line_size); |
|
| 29 | 33 |
|
| 30 | 34 |
void get_pixels_mvi(DCTELEM *restrict block, |
| 31 | 35 |
const uint8_t *restrict pixels, int line_size); |
| ... | ... |
@@ -147,14 +151,14 @@ static inline uint64_t avg2(uint64_t a, uint64_t b) |
| 147 | 147 |
static inline uint64_t avg4(uint64_t l1, uint64_t l2, uint64_t l3, uint64_t l4) |
| 148 | 148 |
{
|
| 149 | 149 |
uint64_t r1 = ((l1 & ~BYTE_VEC(0x03)) >> 2) |
| 150 |
- + ((l2 & ~BYTE_VEC(0x03)) >> 2) |
|
| 151 |
- + ((l3 & ~BYTE_VEC(0x03)) >> 2) |
|
| 152 |
- + ((l4 & ~BYTE_VEC(0x03)) >> 2); |
|
| 150 |
+ + ((l2 & ~BYTE_VEC(0x03)) >> 2) |
|
| 151 |
+ + ((l3 & ~BYTE_VEC(0x03)) >> 2) |
|
| 152 |
+ + ((l4 & ~BYTE_VEC(0x03)) >> 2); |
|
| 153 | 153 |
uint64_t r2 = (( (l1 & BYTE_VEC(0x03)) |
| 154 |
- + (l2 & BYTE_VEC(0x03)) |
|
| 155 |
- + (l3 & BYTE_VEC(0x03)) |
|
| 156 |
- + (l4 & BYTE_VEC(0x03)) |
|
| 157 |
- + BYTE_VEC(0x02)) >> 2) & BYTE_VEC(0x03); |
|
| 154 |
+ + (l2 & BYTE_VEC(0x03)) |
|
| 155 |
+ + (l3 & BYTE_VEC(0x03)) |
|
| 156 |
+ + (l4 & BYTE_VEC(0x03)) |
|
| 157 |
+ + BYTE_VEC(0x02)) >> 2) & BYTE_VEC(0x03); |
|
| 158 | 158 |
return r1 + r2; |
| 159 | 159 |
} |
| 160 | 160 |
#endif |
| ... | ... |
@@ -338,4 +342,7 @@ void dsputil_init_alpha(DSPContext* c, unsigned mask) |
| 338 | 338 |
c->pix_abs16x16_y2 = pix_abs16x16_y2_mvi; |
| 339 | 339 |
c->pix_abs16x16_xy2 = pix_abs16x16_xy2_mvi; |
| 340 | 340 |
} |
| 341 |
+ |
|
| 342 |
+ put_pixels_clamped_axp_p = c->put_pixels_clamped; |
|
| 343 |
+ add_pixels_clamped_axp_p = c->add_pixels_clamped; |
|
| 341 | 344 |
} |
| ... | ... |
@@ -27,6 +27,11 @@ |
| 27 | 27 |
#include "asm.h" |
| 28 | 28 |
#include "../dsputil.h" |
| 29 | 29 |
|
| 30 |
+extern void (*put_pixels_clamped_axp_p)(const DCTELEM *block, uint8_t *pixels, |
|
| 31 |
+ int line_size); |
|
| 32 |
+extern void (*add_pixels_clamped_axp_p)(const DCTELEM *block, uint8_t *pixels, |
|
| 33 |
+ int line_size); |
|
| 34 |
+ |
|
| 30 | 35 |
// cos(i * M_PI / 16) * sqrt(2) * (1 << 14) |
| 31 | 36 |
// W4 is actually exactly 16384, but using 16383 works around |
| 32 | 37 |
// accumulating rounding errors for some encoders |
| ... | ... |
@@ -296,11 +301,11 @@ void simple_idct_axp(DCTELEM *block) |
| 296 | 296 |
void simple_idct_put_axp(uint8_t *dest, int line_size, DCTELEM *block) |
| 297 | 297 |
{
|
| 298 | 298 |
simple_idct_axp(block); |
| 299 |
- put_pixels_clamped(block, dest, line_size); |
|
| 299 |
+ put_pixels_clamped_axp_p(block, dest, line_size); |
|
| 300 | 300 |
} |
| 301 | 301 |
|
| 302 | 302 |
void simple_idct_add_axp(uint8_t *dest, int line_size, DCTELEM *block) |
| 303 | 303 |
{
|
| 304 | 304 |
simple_idct_axp(block); |
| 305 |
- add_pixels_clamped(block, dest, line_size); |
|
| 305 |
+ add_pixels_clamped_axp_p(block, dest, line_size); |
|
| 306 | 306 |
} |