1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-12-28 20:53:54 +02:00

swscale/swscale_internal: Hoist branch out of loop

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
Andreas Rheinhardt 2024-03-28 16:53:53 +01:00
parent c8549d480f
commit ad1cef04a9

View File

@ -1021,28 +1021,20 @@ int ff_sws_alphablendaway(SwsContext *c, const uint8_t *src[],
static inline void fillPlane16(uint8_t *plane, int stride, int width, int height, int y, static inline void fillPlane16(uint8_t *plane, int stride, int width, int height, int y,
int alpha, int bits, const int big_endian) int alpha, int bits, const int big_endian)
{ {
int i, j;
uint8_t *ptr = plane + stride * y; uint8_t *ptr = plane + stride * y;
int v = alpha ? 0xFFFF>>(16-bits) : (1<<(bits-1)); int v = alpha ? 0xFFFF>>(16-bits) : (1<<(bits-1));
for (i = 0; i < height; i++) { if (big_endian != HAVE_BIGENDIAN)
#define FILL(wfunc) \ v = av_bswap16(v);
for (j = 0; j < width; j++) {\ for (int i = 0; i < height; i++) {
wfunc(ptr+2*j, v);\ for (int j = 0; j < width; j++)
} AV_WN16(ptr + 2 * j, v);
if (big_endian) {
FILL(AV_WB16);
} else {
FILL(AV_WL16);
}
ptr += stride; ptr += stride;
} }
#undef FILL
} }
static inline void fillPlane32(uint8_t *plane, int stride, int width, int height, int y, static inline void fillPlane32(uint8_t *plane, int stride, int width, int height, int y,
int alpha, int bits, const int big_endian, int is_float) int alpha, int bits, const int big_endian, int is_float)
{ {
int i, j;
uint8_t *ptr = plane + stride * y; uint8_t *ptr = plane + stride * y;
uint32_t v; uint32_t v;
uint32_t onef32 = 0x3f800000; uint32_t onef32 = 0x3f800000;
@ -1050,20 +1042,14 @@ static inline void fillPlane32(uint8_t *plane, int stride, int width, int height
v = alpha ? onef32 : 0; v = alpha ? onef32 : 0;
else else
v = alpha ? 0xFFFFFFFF>>(32-bits) : (1<<(bits-1)); v = alpha ? 0xFFFFFFFF>>(32-bits) : (1<<(bits-1));
if (big_endian != HAVE_BIGENDIAN)
v = av_bswap32(v);
for (i = 0; i < height; i++) { for (int i = 0; i < height; i++) {
#define FILL(wfunc) \ for (int j = 0; j < width; j++)
for (j = 0; j < width; j++) {\ AV_WN32(ptr + 4 * j, v);
wfunc(ptr+4*j, v);\
}
if (big_endian) {
FILL(AV_WB32);
} else {
FILL(AV_WL32);
}
ptr += stride; ptr += stride;
} }
#undef FILL
} }