mirror of
https://github.com/webmproject/libwebp.git
synced 2024-12-27 06:08:21 +01:00
add missing ()s to macro parameters
BUG=webp:355 Change-Id: I616c6d3540d6551edd1b1cfdb5bffcf0a044c90f
This commit is contained in:
parent
6473d20b3e
commit
7beed2807b
@ -233,20 +233,20 @@ static int GetSignedBits(const uint8_t* const data, size_t data_size, size_t nb,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define GET_BITS(v, n) \
|
#define GET_BITS(v, n) \
|
||||||
do { \
|
do { \
|
||||||
if (!GetBits(data, data_size, n, &v, bit_pos)) { \
|
if (!GetBits(data, data_size, n, &(v), bit_pos)) { \
|
||||||
LOG_ERROR("Truncated lossy bitstream."); \
|
LOG_ERROR("Truncated lossy bitstream."); \
|
||||||
return WEBP_INFO_TRUNCATED_DATA; \
|
return WEBP_INFO_TRUNCATED_DATA; \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define GET_SIGNED_BITS(v, n) \
|
#define GET_SIGNED_BITS(v, n) \
|
||||||
do { \
|
do { \
|
||||||
if (!GetSignedBits(data, data_size, n, &v, bit_pos)) { \
|
if (!GetSignedBits(data, data_size, n, &(v), bit_pos)) { \
|
||||||
LOG_ERROR("Truncated lossy bitstream."); \
|
LOG_ERROR("Truncated lossy bitstream."); \
|
||||||
return WEBP_INFO_TRUNCATED_DATA; \
|
return WEBP_INFO_TRUNCATED_DATA; \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
static WebPInfoStatus ParseLossySegmentHeader(const WebPInfo* const webp_info,
|
static WebPInfoStatus ParseLossySegmentHeader(const WebPInfo* const webp_info,
|
||||||
@ -462,12 +462,12 @@ static int LLGetBits(const uint8_t* const data, size_t data_size, size_t nb,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define LL_GET_BITS(v, n) \
|
#define LL_GET_BITS(v, n) \
|
||||||
do { \
|
do { \
|
||||||
if (!LLGetBits(data, data_size, n, &v, bit_pos)) { \
|
if (!LLGetBits(data, data_size, n, &(v), bit_pos)) { \
|
||||||
LOG_ERROR("Truncated lossless bitstream."); \
|
LOG_ERROR("Truncated lossless bitstream."); \
|
||||||
return WEBP_INFO_TRUNCATED_DATA; \
|
return WEBP_INFO_TRUNCATED_DATA; \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
static WebPInfoStatus ParseLosslessTransform(WebPInfo* const webp_info,
|
static WebPInfoStatus ParseLosslessTransform(WebPInfo* const webp_info,
|
||||||
|
@ -36,7 +36,7 @@ static int IsValidColorspace(int webp_csp_mode) {
|
|||||||
// strictly speaking, the very last (or first, if flipped) row
|
// strictly speaking, the very last (or first, if flipped) row
|
||||||
// doesn't require padding.
|
// doesn't require padding.
|
||||||
#define MIN_BUFFER_SIZE(WIDTH, HEIGHT, STRIDE) \
|
#define MIN_BUFFER_SIZE(WIDTH, HEIGHT, STRIDE) \
|
||||||
(uint64_t)(STRIDE) * ((HEIGHT) - 1) + (WIDTH)
|
((uint64_t)(STRIDE) * ((HEIGHT) - 1) + (WIDTH))
|
||||||
|
|
||||||
static VP8StatusCode CheckDecBuffer(const WebPDecBuffer* const buffer) {
|
static VP8StatusCode CheckDecBuffer(const WebPDecBuffer* const buffer) {
|
||||||
int ok = 1;
|
int ok = 1;
|
||||||
|
@ -25,7 +25,7 @@ static WEBP_INLINE uint8_t clip_8b(int v) {
|
|||||||
// Transforms (Paragraph 14.4)
|
// Transforms (Paragraph 14.4)
|
||||||
|
|
||||||
#define STORE(x, y, v) \
|
#define STORE(x, y, v) \
|
||||||
dst[x + y * BPS] = clip_8b(dst[x + y * BPS] + ((v) >> 3))
|
dst[(x) + (y) * BPS] = clip_8b(dst[(x) + (y) * BPS] + ((v) >> 3))
|
||||||
|
|
||||||
#define STORE2(y, dc, d, c) do { \
|
#define STORE2(y, dc, d, c) do { \
|
||||||
const int DC = (dc); \
|
const int DC = (dc); \
|
||||||
|
@ -260,8 +260,8 @@ static WEBP_INLINE void SignedShift8b(__m128i* const x) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define FLIP_SIGN_BIT2(a, b) { \
|
#define FLIP_SIGN_BIT2(a, b) { \
|
||||||
a = _mm_xor_si128(a, sign_bit); \
|
(a) = _mm_xor_si128(a, sign_bit); \
|
||||||
b = _mm_xor_si128(b, sign_bit); \
|
(b) = _mm_xor_si128(b, sign_bit); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define FLIP_SIGN_BIT4(a, b, c, d) { \
|
#define FLIP_SIGN_BIT4(a, b, c, d) { \
|
||||||
@ -630,41 +630,41 @@ static void SimpleHFilter16i(uint8_t* p, int stride, int thresh) {
|
|||||||
// Complex In-loop filtering (Paragraph 15.3)
|
// Complex In-loop filtering (Paragraph 15.3)
|
||||||
|
|
||||||
#define MAX_DIFF1(p3, p2, p1, p0, m) do { \
|
#define MAX_DIFF1(p3, p2, p1, p0, m) do { \
|
||||||
m = MM_ABS(p1, p0); \
|
(m) = MM_ABS(p1, p0); \
|
||||||
m = _mm_max_epu8(m, MM_ABS(p3, p2)); \
|
(m) = _mm_max_epu8(m, MM_ABS(p3, p2)); \
|
||||||
m = _mm_max_epu8(m, MM_ABS(p2, p1)); \
|
(m) = _mm_max_epu8(m, MM_ABS(p2, p1)); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define MAX_DIFF2(p3, p2, p1, p0, m) do { \
|
#define MAX_DIFF2(p3, p2, p1, p0, m) do { \
|
||||||
m = _mm_max_epu8(m, MM_ABS(p1, p0)); \
|
(m) = _mm_max_epu8(m, MM_ABS(p1, p0)); \
|
||||||
m = _mm_max_epu8(m, MM_ABS(p3, p2)); \
|
(m) = _mm_max_epu8(m, MM_ABS(p3, p2)); \
|
||||||
m = _mm_max_epu8(m, MM_ABS(p2, p1)); \
|
(m) = _mm_max_epu8(m, MM_ABS(p2, p1)); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define LOAD_H_EDGES4(p, stride, e1, e2, e3, e4) { \
|
#define LOAD_H_EDGES4(p, stride, e1, e2, e3, e4) { \
|
||||||
e1 = _mm_loadu_si128((__m128i*)&(p)[0 * stride]); \
|
(e1) = _mm_loadu_si128((__m128i*)&(p)[0 * (stride)]); \
|
||||||
e2 = _mm_loadu_si128((__m128i*)&(p)[1 * stride]); \
|
(e2) = _mm_loadu_si128((__m128i*)&(p)[1 * (stride)]); \
|
||||||
e3 = _mm_loadu_si128((__m128i*)&(p)[2 * stride]); \
|
(e3) = _mm_loadu_si128((__m128i*)&(p)[2 * (stride)]); \
|
||||||
e4 = _mm_loadu_si128((__m128i*)&(p)[3 * stride]); \
|
(e4) = _mm_loadu_si128((__m128i*)&(p)[3 * (stride)]); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define LOADUV_H_EDGE(p, u, v, stride) do { \
|
#define LOADUV_H_EDGE(p, u, v, stride) do { \
|
||||||
const __m128i U = _mm_loadl_epi64((__m128i*)&(u)[(stride)]); \
|
const __m128i U = _mm_loadl_epi64((__m128i*)&(u)[(stride)]); \
|
||||||
const __m128i V = _mm_loadl_epi64((__m128i*)&(v)[(stride)]); \
|
const __m128i V = _mm_loadl_epi64((__m128i*)&(v)[(stride)]); \
|
||||||
p = _mm_unpacklo_epi64(U, V); \
|
(p) = _mm_unpacklo_epi64(U, V); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define LOADUV_H_EDGES4(u, v, stride, e1, e2, e3, e4) { \
|
#define LOADUV_H_EDGES4(u, v, stride, e1, e2, e3, e4) { \
|
||||||
LOADUV_H_EDGE(e1, u, v, 0 * stride); \
|
LOADUV_H_EDGE(e1, u, v, 0 * (stride)); \
|
||||||
LOADUV_H_EDGE(e2, u, v, 1 * stride); \
|
LOADUV_H_EDGE(e2, u, v, 1 * (stride)); \
|
||||||
LOADUV_H_EDGE(e3, u, v, 2 * stride); \
|
LOADUV_H_EDGE(e3, u, v, 2 * (stride)); \
|
||||||
LOADUV_H_EDGE(e4, u, v, 3 * stride); \
|
LOADUV_H_EDGE(e4, u, v, 3 * (stride)); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define STOREUV(p, u, v, stride) { \
|
#define STOREUV(p, u, v, stride) { \
|
||||||
_mm_storel_epi64((__m128i*)&u[(stride)], p); \
|
_mm_storel_epi64((__m128i*)&(u)[(stride)], p); \
|
||||||
p = _mm_srli_si128(p, 8); \
|
(p) = _mm_srli_si128(p, 8); \
|
||||||
_mm_storel_epi64((__m128i*)&v[(stride)], p); \
|
_mm_storel_epi64((__m128i*)&(v)[(stride)], p); \
|
||||||
}
|
}
|
||||||
|
|
||||||
static WEBP_INLINE void ComplexMask(const __m128i* const p1,
|
static WEBP_INLINE void ComplexMask(const __m128i* const p1,
|
||||||
|
@ -20,8 +20,8 @@
|
|||||||
// Helpful macro.
|
// Helpful macro.
|
||||||
|
|
||||||
# define SANITY_CHECK(in, out) \
|
# define SANITY_CHECK(in, out) \
|
||||||
assert(in != NULL); \
|
assert((in) != NULL); \
|
||||||
assert(out != NULL); \
|
assert((out) != NULL); \
|
||||||
assert(width > 0); \
|
assert(width > 0); \
|
||||||
assert(height > 0); \
|
assert(height > 0); \
|
||||||
assert(stride >= width); \
|
assert(stride >= width); \
|
||||||
|
@ -24,8 +24,8 @@
|
|||||||
// Helpful macro.
|
// Helpful macro.
|
||||||
|
|
||||||
# define SANITY_CHECK(in, out) \
|
# define SANITY_CHECK(in, out) \
|
||||||
assert(in != NULL); \
|
assert((in) != NULL); \
|
||||||
assert(out != NULL); \
|
assert((out) != NULL); \
|
||||||
assert(width > 0); \
|
assert(width > 0); \
|
||||||
assert(height > 0); \
|
assert(height > 0); \
|
||||||
assert(stride >= width); \
|
assert(stride >= width); \
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
#include "./lossless_common.h"
|
#include "./lossless_common.h"
|
||||||
|
|
||||||
// For sign-extended multiplying constants, pre-shifted by 5:
|
// For sign-extended multiplying constants, pre-shifted by 5:
|
||||||
#define CST_5b(X) (((int16_t)((uint16_t)X << 8)) >> 5)
|
#define CST_5b(X) (((int16_t)((uint16_t)(X) << 8)) >> 5)
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// Subtract-Green Transform
|
// Subtract-Green Transform
|
||||||
@ -261,9 +261,9 @@ static void HistogramAdd(const VP8LHistogram* const a,
|
|||||||
|
|
||||||
// Checks whether the X or Y contribution is worth computing and adding.
|
// Checks whether the X or Y contribution is worth computing and adding.
|
||||||
// Used in loop unrolling.
|
// Used in loop unrolling.
|
||||||
#define ANALYZE_X_OR_Y(x_or_y, j) \
|
#define ANALYZE_X_OR_Y(x_or_y, j) \
|
||||||
do { \
|
do { \
|
||||||
if (x_or_y[i + j] != 0) retval -= VP8LFastSLog2(x_or_y[i + j]); \
|
if ((x_or_y)[i + (j)] != 0) retval -= VP8LFastSLog2((x_or_y)[i + (j)]); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
// Checks whether the X + Y contribution is worth computing and adding.
|
// Checks whether the X + Y contribution is worth computing and adding.
|
||||||
|
@ -381,7 +381,7 @@ static void PredictorAdd11_SSE2(const uint32_t* in, const uint32_t* upper,
|
|||||||
|
|
||||||
#define DO_PRED12_SHIFT(DIFF, LANE) do { \
|
#define DO_PRED12_SHIFT(DIFF, LANE) do { \
|
||||||
/* Shift the pre-computed value for the next iteration.*/ \
|
/* Shift the pre-computed value for the next iteration.*/ \
|
||||||
if (LANE == 0) (DIFF) = _mm_srli_si128((DIFF), 8); \
|
if ((LANE) == 0) (DIFF) = _mm_srli_si128((DIFF), 8); \
|
||||||
src = _mm_srli_si128(src, 4); \
|
src = _mm_srli_si128(src, 4); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
@ -63,17 +63,17 @@ static void FUNC_NAME(const uint8_t* top_y, const uint8_t* bottom_y, \
|
|||||||
const uint32_t uv0 = (diag_12 + tl_uv) >> 1; \
|
const uint32_t uv0 = (diag_12 + tl_uv) >> 1; \
|
||||||
const uint32_t uv1 = (diag_03 + t_uv) >> 1; \
|
const uint32_t uv1 = (diag_03 + t_uv) >> 1; \
|
||||||
FUNC(top_y[2 * x - 1], uv0 & 0xff, (uv0 >> 16), \
|
FUNC(top_y[2 * x - 1], uv0 & 0xff, (uv0 >> 16), \
|
||||||
top_dst + (2 * x - 1) * XSTEP); \
|
top_dst + (2 * x - 1) * (XSTEP)); \
|
||||||
FUNC(top_y[2 * x - 0], uv1 & 0xff, (uv1 >> 16), \
|
FUNC(top_y[2 * x - 0], uv1 & 0xff, (uv1 >> 16), \
|
||||||
top_dst + (2 * x - 0) * XSTEP); \
|
top_dst + (2 * x - 0) * (XSTEP)); \
|
||||||
} \
|
} \
|
||||||
if (bottom_y != NULL) { \
|
if (bottom_y != NULL) { \
|
||||||
const uint32_t uv0 = (diag_03 + l_uv) >> 1; \
|
const uint32_t uv0 = (diag_03 + l_uv) >> 1; \
|
||||||
const uint32_t uv1 = (diag_12 + uv) >> 1; \
|
const uint32_t uv1 = (diag_12 + uv) >> 1; \
|
||||||
FUNC(bottom_y[2 * x - 1], uv0 & 0xff, (uv0 >> 16), \
|
FUNC(bottom_y[2 * x - 1], uv0 & 0xff, (uv0 >> 16), \
|
||||||
bottom_dst + (2 * x - 1) * XSTEP); \
|
bottom_dst + (2 * x - 1) * (XSTEP)); \
|
||||||
FUNC(bottom_y[2 * x + 0], uv1 & 0xff, (uv1 >> 16), \
|
FUNC(bottom_y[2 * x + 0], uv1 & 0xff, (uv1 >> 16), \
|
||||||
bottom_dst + (2 * x + 0) * XSTEP); \
|
bottom_dst + (2 * x + 0) * (XSTEP)); \
|
||||||
} \
|
} \
|
||||||
tl_uv = t_uv; \
|
tl_uv = t_uv; \
|
||||||
l_uv = uv; \
|
l_uv = uv; \
|
||||||
@ -82,12 +82,12 @@ static void FUNC_NAME(const uint8_t* top_y, const uint8_t* bottom_y, \
|
|||||||
{ \
|
{ \
|
||||||
const uint32_t uv0 = (3 * tl_uv + l_uv + 0x00020002u) >> 2; \
|
const uint32_t uv0 = (3 * tl_uv + l_uv + 0x00020002u) >> 2; \
|
||||||
FUNC(top_y[len - 1], uv0 & 0xff, (uv0 >> 16), \
|
FUNC(top_y[len - 1], uv0 & 0xff, (uv0 >> 16), \
|
||||||
top_dst + (len - 1) * XSTEP); \
|
top_dst + (len - 1) * (XSTEP)); \
|
||||||
} \
|
} \
|
||||||
if (bottom_y != NULL) { \
|
if (bottom_y != NULL) { \
|
||||||
const uint32_t uv0 = (3 * l_uv + tl_uv + 0x00020002u) >> 2; \
|
const uint32_t uv0 = (3 * l_uv + tl_uv + 0x00020002u) >> 2; \
|
||||||
FUNC(bottom_y[len - 1], uv0 & 0xff, (uv0 >> 16), \
|
FUNC(bottom_y[len - 1], uv0 & 0xff, (uv0 >> 16), \
|
||||||
bottom_dst + (len - 1) * XSTEP); \
|
bottom_dst + (len - 1) * (XSTEP)); \
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
@ -157,7 +157,7 @@ extern void FUNC_NAME(const uint8_t* y, const uint8_t* u, const uint8_t* v, \
|
|||||||
void FUNC_NAME(const uint8_t* y, const uint8_t* u, const uint8_t* v, \
|
void FUNC_NAME(const uint8_t* y, const uint8_t* u, const uint8_t* v, \
|
||||||
uint8_t* dst, int len) { \
|
uint8_t* dst, int len) { \
|
||||||
int i; \
|
int i; \
|
||||||
for (i = 0; i < len; ++i) FUNC(y[i], u[i], v[i], &dst[i * XSTEP]); \
|
for (i = 0; i < len; ++i) FUNC(y[i], u[i], v[i], &dst[i * (XSTEP)]); \
|
||||||
}
|
}
|
||||||
|
|
||||||
YUV444_FUNC(WebPYuv444ToRgb_C, VP8YuvToRgb, 3)
|
YUV444_FUNC(WebPYuv444ToRgb_C, VP8YuvToRgb, 3)
|
||||||
|
@ -83,8 +83,8 @@
|
|||||||
GET_M(ad, s, diag2); /* diag2 = (3a + b + c + 3d) / 8 */ \
|
GET_M(ad, s, diag2); /* diag2 = (3a + b + c + 3d) / 8 */ \
|
||||||
\
|
\
|
||||||
/* pack the alternate pixels */ \
|
/* pack the alternate pixels */ \
|
||||||
PACK_AND_STORE(a, b, diag1, diag2, out + 0); /* store top */ \
|
PACK_AND_STORE(a, b, diag1, diag2, (out) + 0); /* store top */ \
|
||||||
PACK_AND_STORE(c, d, diag2, diag1, out + 2 * 32); /* store bottom */ \
|
PACK_AND_STORE(c, d, diag2, diag1, (out) + 2 * 32); /* store bottom */ \
|
||||||
}
|
}
|
||||||
|
|
||||||
// Turn the macro into a function for reducing code-size when non-critical
|
// Turn the macro into a function for reducing code-size when non-critical
|
||||||
@ -108,23 +108,23 @@ static void Upsample32Pixels(const uint8_t r1[], const uint8_t r2[],
|
|||||||
top_dst, bottom_dst, cur_x, num_pixels) { \
|
top_dst, bottom_dst, cur_x, num_pixels) { \
|
||||||
int n; \
|
int n; \
|
||||||
for (n = 0; n < (num_pixels); ++n) { \
|
for (n = 0; n < (num_pixels); ++n) { \
|
||||||
FUNC(top_y[(cur_x) + n], r_u[n], r_v[n], \
|
FUNC((top_y)[(cur_x) + n], r_u[n], r_v[n], \
|
||||||
top_dst + ((cur_x) + n) * XSTEP); \
|
(top_dst) + ((cur_x) + n) * (XSTEP)); \
|
||||||
} \
|
} \
|
||||||
if (bottom_y != NULL) { \
|
if ((bottom_y) != NULL) { \
|
||||||
for (n = 0; n < (num_pixels); ++n) { \
|
for (n = 0; n < (num_pixels); ++n) { \
|
||||||
FUNC(bottom_y[(cur_x) + n], r_u[64 + n], r_v[64 + n], \
|
FUNC((bottom_y)[(cur_x) + n], r_u[64 + n], r_v[64 + n], \
|
||||||
bottom_dst + ((cur_x) + n) * XSTEP); \
|
(bottom_dst) + ((cur_x) + n) * (XSTEP)); \
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define CONVERT2RGB_32(FUNC, XSTEP, top_y, bottom_y, \
|
#define CONVERT2RGB_32(FUNC, XSTEP, top_y, bottom_y, \
|
||||||
top_dst, bottom_dst, cur_x) do { \
|
top_dst, bottom_dst, cur_x) do { \
|
||||||
FUNC##32_SSE2(top_y + (cur_x), r_u, r_v, top_dst + (cur_x) * XSTEP); \
|
FUNC##32_SSE2((top_y) + (cur_x), r_u, r_v, (top_dst) + (cur_x) * (XSTEP)); \
|
||||||
if (bottom_y != NULL) { \
|
if ((bottom_y) != NULL) { \
|
||||||
FUNC##32_SSE2(bottom_y + (cur_x), r_u + 64, r_v + 64, \
|
FUNC##32_SSE2((bottom_y) + (cur_x), r_u + 64, r_v + 64, \
|
||||||
bottom_dst + (cur_x) * XSTEP); \
|
(bottom_dst) + (cur_x) * (XSTEP)); \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
@ -220,9 +220,11 @@ static void FUNC_NAME(const uint8_t* y, const uint8_t* u, const uint8_t* v, \
|
|||||||
uint8_t* dst, int len) { \
|
uint8_t* dst, int len) { \
|
||||||
int i; \
|
int i; \
|
||||||
const int max_len = len & ~31; \
|
const int max_len = len & ~31; \
|
||||||
for (i = 0; i < max_len; i += 32) CALL(y + i, u + i, v + i, dst + i * XSTEP);\
|
for (i = 0; i < max_len; i += 32) { \
|
||||||
|
CALL(y + i, u + i, v + i, dst + i * (XSTEP)); \
|
||||||
|
} \
|
||||||
if (i < len) { /* C-fallback */ \
|
if (i < len) { /* C-fallback */ \
|
||||||
CALL_C(y + i, u + i, v + i, dst + i * XSTEP, len - i); \
|
CALL_C(y + i, u + i, v + i, dst + i * (XSTEP), len - i); \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,14 +22,14 @@
|
|||||||
static void FUNC_NAME(const uint8_t* y, \
|
static void FUNC_NAME(const uint8_t* y, \
|
||||||
const uint8_t* u, const uint8_t* v, \
|
const uint8_t* u, const uint8_t* v, \
|
||||||
uint8_t* dst, int len) { \
|
uint8_t* dst, int len) { \
|
||||||
const uint8_t* const end = dst + (len & ~1) * XSTEP; \
|
const uint8_t* const end = dst + (len & ~1) * (XSTEP); \
|
||||||
while (dst != end) { \
|
while (dst != end) { \
|
||||||
FUNC(y[0], u[0], v[0], dst); \
|
FUNC(y[0], u[0], v[0], dst); \
|
||||||
FUNC(y[1], u[0], v[0], dst + XSTEP); \
|
FUNC(y[1], u[0], v[0], dst + (XSTEP)); \
|
||||||
y += 2; \
|
y += 2; \
|
||||||
++u; \
|
++u; \
|
||||||
++v; \
|
++v; \
|
||||||
dst += 2 * XSTEP; \
|
dst += 2 * (XSTEP); \
|
||||||
} \
|
} \
|
||||||
if (len & 1) { \
|
if (len & 1) { \
|
||||||
FUNC(y[0], u[0], v[0], dst); \
|
FUNC(y[0], u[0], v[0], dst); \
|
||||||
|
Loading…
Reference in New Issue
Block a user