mirror of
https://chromium.googlesource.com/libyuv/libyuv
synced 2025-12-07 17:26:49 +08:00
replace static const with static to avoid internal compiler error with gcc
BUG=258 TEST=try bots R=johannkoenig@google.com Review URL: https://webrtc-codereview.appspot.com/1944004 git-svn-id: http://libyuv.googlecode.com/svn/trunk@743 16f28f9a-4ce2-e073-06de-1de4eb20be90
This commit is contained in:
parent
465a5583ef
commit
f2aa91a1ac
@ -1,6 +1,6 @@
|
||||
Name: libyuv
|
||||
URL: http://code.google.com/p/libyuv/
|
||||
Version: 741
|
||||
Version: 743
|
||||
License: BSD
|
||||
License File: LICENSE
|
||||
|
||||
|
||||
@ -11,6 +11,6 @@
|
||||
#ifndef INCLUDE_LIBYUV_VERSION_H_ // NOLINT
|
||||
#define INCLUDE_LIBYUV_VERSION_H_
|
||||
|
||||
#define LIBYUV_VERSION 741
|
||||
#define LIBYUV_VERSION 743
|
||||
|
||||
#endif // INCLUDE_LIBYUV_VERSION_H_ NOLINT
|
||||
|
||||
@ -66,34 +66,27 @@ uint32 SumSquareError_SSE2(const uint8* src_a, const uint8* src_b, int count) {
|
||||
|
||||
#if !defined(LIBYUV_DISABLE_X86) && \
|
||||
(defined(__x86_64__) || (defined(__i386__) && !defined(__pic__)))
|
||||
// GCC 4.2 on OSX has link error when passing static or const to inline.
|
||||
// TODO(fbarchard): Use static const when gcc 4.2 support is dropped.
|
||||
#ifdef __APPLE__
|
||||
#define CONST
|
||||
#else
|
||||
#define CONST static const
|
||||
#endif
|
||||
#define HAS_HASHDJB2_SSE41
|
||||
CONST uvec32 kHash16x33 = { 0x92d9e201, 0, 0, 0 }; // 33 ^ 16
|
||||
CONST uvec32 kHashMul0 = {
|
||||
static uvec32 kHash16x33 = { 0x92d9e201, 0, 0, 0 }; // 33 ^ 16
|
||||
static uvec32 kHashMul0 = {
|
||||
0x0c3525e1, // 33 ^ 15
|
||||
0xa3476dc1, // 33 ^ 14
|
||||
0x3b4039a1, // 33 ^ 13
|
||||
0x4f5f0981, // 33 ^ 12
|
||||
};
|
||||
CONST uvec32 kHashMul1 = {
|
||||
static uvec32 kHashMul1 = {
|
||||
0x30f35d61, // 33 ^ 11
|
||||
0x855cb541, // 33 ^ 10
|
||||
0x040a9121, // 33 ^ 9
|
||||
0x747c7101, // 33 ^ 8
|
||||
};
|
||||
CONST uvec32 kHashMul2 = {
|
||||
static uvec32 kHashMul2 = {
|
||||
0xec41d4e1, // 33 ^ 7
|
||||
0x4cfa3cc1, // 33 ^ 6
|
||||
0x025528a1, // 33 ^ 5
|
||||
0x00121881, // 33 ^ 4
|
||||
};
|
||||
CONST uvec32 kHashMul3 = {
|
||||
static uvec32 kHashMul3 = {
|
||||
0x00008c61, // 33 ^ 3
|
||||
0x00000441, // 33 ^ 2
|
||||
0x00000021, // 33 ^ 1
|
||||
|
||||
@ -101,26 +101,26 @@ uint32 SumSquareError_AVX2(const uint8* src_a, const uint8* src_b, int count) {
|
||||
#endif // _MSC_VER >= 1700
|
||||
|
||||
#define HAS_HASHDJB2_SSE41
|
||||
static const uvec32 kHash16x33 = { 0x92d9e201, 0, 0, 0 }; // 33 ^ 16
|
||||
static const uvec32 kHashMul0 = {
|
||||
static uvec32 kHash16x33 = { 0x92d9e201, 0, 0, 0 }; // 33 ^ 16
|
||||
static uvec32 kHashMul0 = {
|
||||
0x0c3525e1, // 33 ^ 15
|
||||
0xa3476dc1, // 33 ^ 14
|
||||
0x3b4039a1, // 33 ^ 13
|
||||
0x4f5f0981, // 33 ^ 12
|
||||
};
|
||||
static const uvec32 kHashMul1 = {
|
||||
static uvec32 kHashMul1 = {
|
||||
0x30f35d61, // 33 ^ 11
|
||||
0x855cb541, // 33 ^ 10
|
||||
0x040a9121, // 33 ^ 9
|
||||
0x747c7101, // 33 ^ 8
|
||||
};
|
||||
static const uvec32 kHashMul2 = {
|
||||
static uvec32 kHashMul2 = {
|
||||
0xec41d4e1, // 33 ^ 7
|
||||
0x4cfa3cc1, // 33 ^ 6
|
||||
0x025528a1, // 33 ^ 5
|
||||
0x00121881, // 33 ^ 4
|
||||
};
|
||||
static const uvec32 kHashMul3 = {
|
||||
static uvec32 kHashMul3 = {
|
||||
0x00008c61, // 33 ^ 3
|
||||
0x00000441, // 33 ^ 2
|
||||
0x00000021, // 33 ^ 1
|
||||
|
||||
@ -352,26 +352,18 @@ int I400ToARGB(const uint8* src_y, int src_stride_y,
|
||||
return 0;
|
||||
}
|
||||
|
||||
// GCC 4.2 on OSX has link error when passing static or const to inline.
|
||||
// TODO(fbarchard): Use static const when gcc 4.2 support is dropped.
|
||||
#ifdef __APPLE__
|
||||
#define CONST
|
||||
#else
|
||||
#define CONST static const
|
||||
#endif
|
||||
|
||||
// Shuffle table for converting BGRA to ARGB.
|
||||
CONST uvec8 kShuffleMaskBGRAToARGB = {
|
||||
static uvec8 kShuffleMaskBGRAToARGB = {
|
||||
3u, 2u, 1u, 0u, 7u, 6u, 5u, 4u, 11u, 10u, 9u, 8u, 15u, 14u, 13u, 12u
|
||||
};
|
||||
|
||||
// Shuffle table for converting ABGR to ARGB.
|
||||
CONST uvec8 kShuffleMaskABGRToARGB = {
|
||||
static uvec8 kShuffleMaskABGRToARGB = {
|
||||
2u, 1u, 0u, 3u, 6u, 5u, 4u, 7u, 10u, 9u, 8u, 11u, 14u, 13u, 12u, 15u
|
||||
};
|
||||
|
||||
// Shuffle table for converting RGBA to ARGB.
|
||||
CONST uvec8 kShuffleMaskRGBAToARGB = {
|
||||
static uvec8 kShuffleMaskRGBAToARGB = {
|
||||
1u, 2u, 3u, 0u, 5u, 6u, 7u, 4u, 9u, 10u, 11u, 8u, 13u, 14u, 15u, 12u
|
||||
};
|
||||
|
||||
|
||||
@ -706,7 +706,7 @@ int ARGBToI400(const uint8* src_argb, int src_stride_argb,
|
||||
}
|
||||
|
||||
// Shuffle table for converting ARGB to RGBA.
|
||||
static const uvec8 kShuffleMaskARGBToRGBA = {
|
||||
static uvec8 kShuffleMaskARGBToRGBA = {
|
||||
3u, 0u, 1u, 2u, 7u, 4u, 5u, 6u, 11u, 8u, 9u, 10u, 15u, 12u, 13u, 14u
|
||||
};
|
||||
|
||||
|
||||
@ -18,7 +18,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
#if !defined(LIBYUV_DISABLE_NEON) && defined(__ARM_NEON__)
|
||||
static const uvec8 kVTbl4x4Transpose =
|
||||
static uvec8 kVTbl4x4Transpose =
|
||||
{ 0, 4, 8, 12, 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15 };
|
||||
|
||||
void TransposeWx8_NEON(const uint8* src, int src_stride,
|
||||
@ -184,7 +184,7 @@ void TransposeWx8_NEON(const uint8* src, int src_stride,
|
||||
);
|
||||
}
|
||||
|
||||
static const uvec8 kVTbl4x4TransposeDi =
|
||||
static uvec8 kVTbl4x4TransposeDi =
|
||||
{ 0, 8, 1, 9, 2, 10, 3, 11, 4, 12, 5, 13, 6, 14, 7, 15 };
|
||||
|
||||
void TransposeUVWx8_NEON(const uint8* src, int src_stride,
|
||||
|
||||
@ -102,10 +102,10 @@ extern "C" {
|
||||
"vtrn.u8 d16, d17 \n" \
|
||||
"vmov.u8 d21, d16 \n"
|
||||
|
||||
static const vec8 kUVToRB = { 127, 127, 127, 127, 102, 102, 102, 102,
|
||||
0, 0, 0, 0, 0, 0, 0, 0 };
|
||||
static const vec8 kUVToG = { -25, -25, -25, -25, -52, -52, -52, -52,
|
||||
0, 0, 0, 0, 0, 0, 0, 0 };
|
||||
static vec8 kUVToRB = { 127, 127, 127, 127, 102, 102, 102, 102,
|
||||
0, 0, 0, 0, 0, 0, 0, 0 };
|
||||
static vec8 kUVToG = { -25, -25, -25, -25, -52, -52, -52, -52,
|
||||
0, 0, 0, 0, 0, 0, 0, 0 };
|
||||
|
||||
void I444ToARGBRow_NEON(const uint8* src_y,
|
||||
const uint8* src_u,
|
||||
|
||||
@ -20,125 +20,117 @@ extern "C" {
|
||||
// This module is for GCC x86 and x64
|
||||
#if !defined(LIBYUV_DISABLE_X86) && (defined(__x86_64__) || defined(__i386__))
|
||||
|
||||
// GCC 4.2 on OSX has link error when passing static or const to inline.
|
||||
// TODO(fbarchard): Use static const when gcc 4.2 support is dropped.
|
||||
#ifdef __APPLE__
|
||||
#define CONST
|
||||
#else
|
||||
#define CONST static const
|
||||
#endif
|
||||
|
||||
#ifdef HAS_ARGBTOYROW_SSSE3
|
||||
|
||||
// Constants for ARGB
|
||||
CONST vec8 kARGBToY = {
|
||||
static vec8 kARGBToY = {
|
||||
13, 65, 33, 0, 13, 65, 33, 0, 13, 65, 33, 0, 13, 65, 33, 0
|
||||
};
|
||||
|
||||
// JPeg full range.
|
||||
CONST vec8 kARGBToYJ = {
|
||||
static vec8 kARGBToYJ = {
|
||||
15, 75, 38, 0, 15, 75, 38, 0, 15, 75, 38, 0, 15, 75, 38, 0
|
||||
};
|
||||
|
||||
CONST vec8 kARGBToU = {
|
||||
static vec8 kARGBToU = {
|
||||
112, -74, -38, 0, 112, -74, -38, 0, 112, -74, -38, 0, 112, -74, -38, 0
|
||||
};
|
||||
|
||||
CONST vec8 kARGBToUJ = {
|
||||
static vec8 kARGBToUJ = {
|
||||
127, -84, -43, 0, 127, -84, -43, 0, 127, -84, -43, 0, 127, -84, -43, 0
|
||||
};
|
||||
|
||||
CONST vec8 kARGBToV = {
|
||||
static vec8 kARGBToV = {
|
||||
-18, -94, 112, 0, -18, -94, 112, 0, -18, -94, 112, 0, -18, -94, 112, 0,
|
||||
};
|
||||
|
||||
CONST vec8 kARGBToVJ = {
|
||||
static vec8 kARGBToVJ = {
|
||||
-20, -107, 127, 0, -20, -107, 127, 0, -20, -107, 127, 0, -20, -107, 127, 0
|
||||
};
|
||||
|
||||
// Constants for BGRA
|
||||
CONST vec8 kBGRAToY = {
|
||||
static vec8 kBGRAToY = {
|
||||
0, 33, 65, 13, 0, 33, 65, 13, 0, 33, 65, 13, 0, 33, 65, 13
|
||||
};
|
||||
|
||||
CONST vec8 kBGRAToU = {
|
||||
static vec8 kBGRAToU = {
|
||||
0, -38, -74, 112, 0, -38, -74, 112, 0, -38, -74, 112, 0, -38, -74, 112
|
||||
};
|
||||
|
||||
CONST vec8 kBGRAToV = {
|
||||
static vec8 kBGRAToV = {
|
||||
0, 112, -94, -18, 0, 112, -94, -18, 0, 112, -94, -18, 0, 112, -94, -18
|
||||
};
|
||||
|
||||
// Constants for ABGR
|
||||
CONST vec8 kABGRToY = {
|
||||
static vec8 kABGRToY = {
|
||||
33, 65, 13, 0, 33, 65, 13, 0, 33, 65, 13, 0, 33, 65, 13, 0
|
||||
};
|
||||
|
||||
CONST vec8 kABGRToU = {
|
||||
static vec8 kABGRToU = {
|
||||
-38, -74, 112, 0, -38, -74, 112, 0, -38, -74, 112, 0, -38, -74, 112, 0
|
||||
};
|
||||
|
||||
CONST vec8 kABGRToV = {
|
||||
static vec8 kABGRToV = {
|
||||
112, -94, -18, 0, 112, -94, -18, 0, 112, -94, -18, 0, 112, -94, -18, 0
|
||||
};
|
||||
|
||||
// Constants for RGBA.
|
||||
CONST vec8 kRGBAToY = {
|
||||
static vec8 kRGBAToY = {
|
||||
0, 13, 65, 33, 0, 13, 65, 33, 0, 13, 65, 33, 0, 13, 65, 33
|
||||
};
|
||||
|
||||
CONST vec8 kRGBAToU = {
|
||||
static vec8 kRGBAToU = {
|
||||
0, 112, -74, -38, 0, 112, -74, -38, 0, 112, -74, -38, 0, 112, -74, -38
|
||||
};
|
||||
|
||||
CONST vec8 kRGBAToV = {
|
||||
static vec8 kRGBAToV = {
|
||||
0, -18, -94, 112, 0, -18, -94, 112, 0, -18, -94, 112, 0, -18, -94, 112
|
||||
};
|
||||
|
||||
CONST uvec8 kAddY16 = {
|
||||
static uvec8 kAddY16 = {
|
||||
16u, 16u, 16u, 16u, 16u, 16u, 16u, 16u, 16u, 16u, 16u, 16u, 16u, 16u, 16u, 16u
|
||||
};
|
||||
|
||||
CONST vec16 kAddYJ64 = {
|
||||
static vec16 kAddYJ64 = {
|
||||
64, 64, 64, 64, 64, 64, 64, 64
|
||||
};
|
||||
|
||||
CONST uvec8 kAddUV128 = {
|
||||
static uvec8 kAddUV128 = {
|
||||
128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u,
|
||||
128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u
|
||||
};
|
||||
|
||||
CONST uvec16 kAddUVJ128 = {
|
||||
static uvec16 kAddUVJ128 = {
|
||||
0x8080u, 0x8080u, 0x8080u, 0x8080u, 0x8080u, 0x8080u, 0x8080u, 0x8080u
|
||||
};
|
||||
|
||||
// Shuffle table for converting RGB24 to ARGB.
|
||||
CONST uvec8 kShuffleMaskRGB24ToARGB = {
|
||||
static uvec8 kShuffleMaskRGB24ToARGB = {
|
||||
0u, 1u, 2u, 12u, 3u, 4u, 5u, 13u, 6u, 7u, 8u, 14u, 9u, 10u, 11u, 15u
|
||||
};
|
||||
|
||||
// Shuffle table for converting RAW to ARGB.
|
||||
CONST uvec8 kShuffleMaskRAWToARGB = {
|
||||
static uvec8 kShuffleMaskRAWToARGB = {
|
||||
2u, 1u, 0u, 12u, 5u, 4u, 3u, 13u, 8u, 7u, 6u, 14u, 11u, 10u, 9u, 15u
|
||||
};
|
||||
|
||||
// Shuffle table for converting ARGB to RGB24.
|
||||
CONST uvec8 kShuffleMaskARGBToRGB24 = {
|
||||
static uvec8 kShuffleMaskARGBToRGB24 = {
|
||||
0u, 1u, 2u, 4u, 5u, 6u, 8u, 9u, 10u, 12u, 13u, 14u, 128u, 128u, 128u, 128u
|
||||
};
|
||||
|
||||
// Shuffle table for converting ARGB to RAW.
|
||||
CONST uvec8 kShuffleMaskARGBToRAW = {
|
||||
static uvec8 kShuffleMaskARGBToRAW = {
|
||||
2u, 1u, 0u, 6u, 5u, 4u, 10u, 9u, 8u, 14u, 13u, 12u, 128u, 128u, 128u, 128u
|
||||
};
|
||||
|
||||
// Shuffle table for converting ARGBToRGB24 for I422ToRGB24. First 8 + next 4
|
||||
CONST uvec8 kShuffleMaskARGBToRGB24_0 = {
|
||||
static uvec8 kShuffleMaskARGBToRGB24_0 = {
|
||||
0u, 1u, 2u, 4u, 5u, 6u, 8u, 9u, 128u, 128u, 128u, 128u, 10u, 12u, 13u, 14u
|
||||
};
|
||||
|
||||
// Shuffle table for converting ARGB to RAW.
|
||||
CONST uvec8 kShuffleMaskARGBToRAW_0 = {
|
||||
static uvec8 kShuffleMaskARGBToRAW_0 = {
|
||||
2u, 1u, 0u, 6u, 5u, 4u, 10u, 9u, 128u, 128u, 128u, 128u, 8u, 14u, 13u, 12u
|
||||
};
|
||||
|
||||
@ -1901,7 +1893,7 @@ struct {
|
||||
vec8 kVUToB; // 128
|
||||
vec8 kVUToG; // 144
|
||||
vec8 kVUToR; // 160
|
||||
} CONST SIMD_ALIGNED(kYuvConstants) = {
|
||||
} static SIMD_ALIGNED(kYuvConstants) = {
|
||||
{ UB, VB, UB, VB, UB, VB, UB, VB, UB, VB, UB, VB, UB, VB, UB, VB },
|
||||
{ UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG },
|
||||
{ UR, VR, UR, VR, UR, VR, UR, VR, UR, VR, UR, VR, UR, VR, UR, VR },
|
||||
@ -2728,7 +2720,7 @@ void YToARGBRow_SSE2(const uint8* y_buf,
|
||||
|
||||
#ifdef HAS_MIRRORROW_SSSE3
|
||||
// Shuffle table for reversing the bytes.
|
||||
CONST uvec8 kShuffleMirror = {
|
||||
static uvec8 kShuffleMirror = {
|
||||
15u, 14u, 13u, 12u, 11u, 10u, 9u, 8u, 7u, 6u, 5u, 4u, 3u, 2u, 1u, 0u
|
||||
};
|
||||
|
||||
@ -2790,7 +2782,7 @@ void MirrorRow_SSE2(const uint8* src, uint8* dst, int width) {
|
||||
|
||||
#ifdef HAS_MIRRORROW_UV_SSSE3
|
||||
// Shuffle table for reversing the bytes of UV channels.
|
||||
CONST uvec8 kShuffleMirrorUV = {
|
||||
static uvec8 kShuffleMirrorUV = {
|
||||
14u, 12u, 10u, 8u, 6u, 4u, 2u, 0u, 15u, 13u, 11u, 9u, 7u, 5u, 3u, 1u
|
||||
};
|
||||
void MirrorUVRow_SSSE3(const uint8* src, uint8* dst_u, uint8* dst_v,
|
||||
@ -2825,7 +2817,7 @@ void MirrorUVRow_SSSE3(const uint8* src, uint8* dst_u, uint8* dst_v,
|
||||
|
||||
#ifdef HAS_ARGBMIRRORROW_SSSE3
|
||||
// Shuffle table for reversing the bytes.
|
||||
CONST uvec8 kARGBShuffleMirror = {
|
||||
static uvec8 kARGBShuffleMirror = {
|
||||
12u, 13u, 14u, 15u, 8u, 9u, 10u, 11u, 4u, 5u, 6u, 7u, 0u, 1u, 2u, 3u
|
||||
};
|
||||
|
||||
@ -3605,7 +3597,7 @@ void ARGBBlendRow_SSE2(const uint8* src_argb0, const uint8* src_argb1,
|
||||
|
||||
#ifdef HAS_ARGBBLENDROW_SSSE3
|
||||
// Shuffle table for isolating alpha.
|
||||
CONST uvec8 kShuffleAlpha = {
|
||||
static uvec8 kShuffleAlpha = {
|
||||
3u, 0x80, 3u, 0x80, 7u, 0x80, 7u, 0x80,
|
||||
11u, 0x80, 11u, 0x80, 15u, 0x80, 15u, 0x80
|
||||
};
|
||||
@ -3814,10 +3806,10 @@ void ARGBAttenuateRow_SSE2(const uint8* src_argb, uint8* dst_argb, int width) {
|
||||
|
||||
#ifdef HAS_ARGBATTENUATEROW_SSSE3
|
||||
// Shuffle table duplicating alpha
|
||||
CONST uvec8 kShuffleAlpha0 = {
|
||||
static uvec8 kShuffleAlpha0 = {
|
||||
3u, 3u, 3u, 3u, 3u, 3u, 128u, 128u, 7u, 7u, 7u, 7u, 7u, 7u, 128u, 128u,
|
||||
};
|
||||
CONST uvec8 kShuffleAlpha1 = {
|
||||
static uvec8 kShuffleAlpha1 = {
|
||||
11u, 11u, 11u, 11u, 11u, 11u, 128u, 128u,
|
||||
15u, 15u, 15u, 15u, 15u, 15u, 128u, 128u,
|
||||
};
|
||||
@ -3971,15 +3963,15 @@ void ARGBGrayRow_SSSE3(const uint8* src_argb, uint8* dst_argb, int width) {
|
||||
// g = (r * 45 + g * 88 + b * 22) >> 7
|
||||
// r = (r * 50 + g * 98 + b * 24) >> 7
|
||||
// Constant for ARGB color to sepia tone
|
||||
CONST vec8 kARGBToSepiaB = {
|
||||
static vec8 kARGBToSepiaB = {
|
||||
17, 68, 35, 0, 17, 68, 35, 0, 17, 68, 35, 0, 17, 68, 35, 0
|
||||
};
|
||||
|
||||
CONST vec8 kARGBToSepiaG = {
|
||||
static vec8 kARGBToSepiaG = {
|
||||
22, 88, 45, 0, 22, 88, 45, 0, 22, 88, 45, 0, 22, 88, 45, 0
|
||||
};
|
||||
|
||||
CONST vec8 kARGBToSepiaR = {
|
||||
static vec8 kARGBToSepiaR = {
|
||||
24, 98, 50, 0, 24, 98, 50, 0, 24, 98, 50, 0, 24, 98, 50, 0
|
||||
};
|
||||
|
||||
|
||||
@ -21,130 +21,130 @@ extern "C" {
|
||||
#ifdef HAS_ARGBTOYROW_SSSE3
|
||||
|
||||
// Constants for ARGB.
|
||||
static const vec8 kARGBToY = {
|
||||
static vec8 kARGBToY = {
|
||||
13, 65, 33, 0, 13, 65, 33, 0, 13, 65, 33, 0, 13, 65, 33, 0
|
||||
};
|
||||
|
||||
// JPeg full range.
|
||||
static const vec8 kARGBToYJ = {
|
||||
static vec8 kARGBToYJ = {
|
||||
15, 75, 38, 0, 15, 75, 38, 0, 15, 75, 38, 0, 15, 75, 38, 0
|
||||
};
|
||||
|
||||
static const lvec8 kARGBToY_AVX = {
|
||||
static lvec8 kARGBToY_AVX = {
|
||||
13, 65, 33, 0, 13, 65, 33, 0, 13, 65, 33, 0, 13, 65, 33, 0,
|
||||
13, 65, 33, 0, 13, 65, 33, 0, 13, 65, 33, 0, 13, 65, 33, 0
|
||||
};
|
||||
|
||||
static const lvec8 kARGBToYJ_AVX = {
|
||||
static lvec8 kARGBToYJ_AVX = {
|
||||
15, 75, 38, 0, 15, 75, 38, 0, 15, 75, 38, 0, 15, 75, 38, 0,
|
||||
15, 75, 38, 0, 15, 75, 38, 0, 15, 75, 38, 0, 15, 75, 38, 0
|
||||
};
|
||||
|
||||
static const vec8 kARGBToU = {
|
||||
static vec8 kARGBToU = {
|
||||
112, -74, -38, 0, 112, -74, -38, 0, 112, -74, -38, 0, 112, -74, -38, 0
|
||||
};
|
||||
|
||||
static const vec8 kARGBToUJ = {
|
||||
static vec8 kARGBToUJ = {
|
||||
127, -84, -43, 0, 127, -84, -43, 0, 127, -84, -43, 0, 127, -84, -43, 0
|
||||
};
|
||||
|
||||
// TODO(fbarchard): Rename kARGBToU_AVX to kARGBToU and use for SSSE3 version.
|
||||
static const lvec8 kARGBToU_AVX = {
|
||||
static lvec8 kARGBToU_AVX = {
|
||||
112, -74, -38, 0, 112, -74, -38, 0, 112, -74, -38, 0, 112, -74, -38, 0,
|
||||
112, -74, -38, 0, 112, -74, -38, 0, 112, -74, -38, 0, 112, -74, -38, 0
|
||||
};
|
||||
|
||||
static const vec8 kARGBToV = {
|
||||
static vec8 kARGBToV = {
|
||||
-18, -94, 112, 0, -18, -94, 112, 0, -18, -94, 112, 0, -18, -94, 112, 0,
|
||||
};
|
||||
|
||||
static const vec8 kARGBToVJ = {
|
||||
static vec8 kARGBToVJ = {
|
||||
-20, -107, 127, 0, -20, -107, 127, 0, -20, -107, 127, 0, -20, -107, 127, 0
|
||||
};
|
||||
|
||||
static const lvec8 kARGBToV_AVX = {
|
||||
static lvec8 kARGBToV_AVX = {
|
||||
-18, -94, 112, 0, -18, -94, 112, 0, -18, -94, 112, 0, -18, -94, 112, 0,
|
||||
-18, -94, 112, 0, -18, -94, 112, 0, -18, -94, 112, 0, -18, -94, 112, 0
|
||||
};
|
||||
|
||||
// vpermd for vphaddw + vpackuswb vpermd.
|
||||
static const lvec32 kShufARGBToY_AVX = {
|
||||
static lvec32 kShufARGBToY_AVX = {
|
||||
0, 4, 1, 5, 2, 6, 3, 7
|
||||
};
|
||||
|
||||
// vpshufb for vphaddw + vpackuswb packed to shorts.
|
||||
static const lvec8 kShufARGBToUV_AVX = {
|
||||
static lvec8 kShufARGBToUV_AVX = {
|
||||
0, 1, 8, 9, 2, 3, 10, 11, 4, 5, 12, 13, 6, 7, 14, 15,
|
||||
0, 1, 8, 9, 2, 3, 10, 11, 4, 5, 12, 13, 6, 7, 14, 15,
|
||||
};
|
||||
|
||||
// Constants for BGRA.
|
||||
static const vec8 kBGRAToY = {
|
||||
static vec8 kBGRAToY = {
|
||||
0, 33, 65, 13, 0, 33, 65, 13, 0, 33, 65, 13, 0, 33, 65, 13
|
||||
};
|
||||
|
||||
static const vec8 kBGRAToU = {
|
||||
static vec8 kBGRAToU = {
|
||||
0, -38, -74, 112, 0, -38, -74, 112, 0, -38, -74, 112, 0, -38, -74, 112
|
||||
};
|
||||
|
||||
static const vec8 kBGRAToV = {
|
||||
static vec8 kBGRAToV = {
|
||||
0, 112, -94, -18, 0, 112, -94, -18, 0, 112, -94, -18, 0, 112, -94, -18
|
||||
};
|
||||
|
||||
// Constants for ABGR.
|
||||
static const vec8 kABGRToY = {
|
||||
static vec8 kABGRToY = {
|
||||
33, 65, 13, 0, 33, 65, 13, 0, 33, 65, 13, 0, 33, 65, 13, 0
|
||||
};
|
||||
|
||||
static const vec8 kABGRToU = {
|
||||
static vec8 kABGRToU = {
|
||||
-38, -74, 112, 0, -38, -74, 112, 0, -38, -74, 112, 0, -38, -74, 112, 0
|
||||
};
|
||||
|
||||
static const vec8 kABGRToV = {
|
||||
static vec8 kABGRToV = {
|
||||
112, -94, -18, 0, 112, -94, -18, 0, 112, -94, -18, 0, 112, -94, -18, 0
|
||||
};
|
||||
|
||||
// Constants for RGBA.
|
||||
static const vec8 kRGBAToY = {
|
||||
static vec8 kRGBAToY = {
|
||||
0, 13, 65, 33, 0, 13, 65, 33, 0, 13, 65, 33, 0, 13, 65, 33
|
||||
};
|
||||
|
||||
static const vec8 kRGBAToU = {
|
||||
static vec8 kRGBAToU = {
|
||||
0, 112, -74, -38, 0, 112, -74, -38, 0, 112, -74, -38, 0, 112, -74, -38
|
||||
};
|
||||
|
||||
static const vec8 kRGBAToV = {
|
||||
static vec8 kRGBAToV = {
|
||||
0, -18, -94, 112, 0, -18, -94, 112, 0, -18, -94, 112, 0, -18, -94, 112
|
||||
};
|
||||
|
||||
static const uvec8 kAddY16 = {
|
||||
static uvec8 kAddY16 = {
|
||||
16u, 16u, 16u, 16u, 16u, 16u, 16u, 16u, 16u, 16u, 16u, 16u, 16u, 16u, 16u, 16u
|
||||
};
|
||||
|
||||
static const vec16 kAddYJ64 = {
|
||||
static vec16 kAddYJ64 = {
|
||||
64, 64, 64, 64, 64, 64, 64, 64
|
||||
};
|
||||
static const lvec16 kAddYJ64_AVX = {
|
||||
static lvec16 kAddYJ64_AVX = {
|
||||
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64
|
||||
};
|
||||
|
||||
static const ulvec8 kAddY16_AVX = {
|
||||
static ulvec8 kAddY16_AVX = {
|
||||
16u, 16u, 16u, 16u, 16u, 16u, 16u, 16u,
|
||||
16u, 16u, 16u, 16u, 16u, 16u, 16u, 16u,
|
||||
16u, 16u, 16u, 16u, 16u, 16u, 16u, 16u,
|
||||
16u, 16u, 16u, 16u, 16u, 16u, 16u, 16u
|
||||
};
|
||||
|
||||
static const uvec8 kAddUV128 = {
|
||||
static uvec8 kAddUV128 = {
|
||||
128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u,
|
||||
128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u
|
||||
};
|
||||
|
||||
static const uvec16 kAddUVJ128 = {
|
||||
static uvec16 kAddUVJ128 = {
|
||||
0x8080u, 0x8080u, 0x8080u, 0x8080u, 0x8080u, 0x8080u, 0x8080u, 0x8080u
|
||||
};
|
||||
|
||||
static const ulvec8 kAddUV128_AVX = {
|
||||
static ulvec8 kAddUV128_AVX = {
|
||||
128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u,
|
||||
128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u,
|
||||
128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u,
|
||||
@ -152,32 +152,32 @@ static const ulvec8 kAddUV128_AVX = {
|
||||
};
|
||||
|
||||
// Shuffle table for converting RGB24 to ARGB.
|
||||
static const uvec8 kShuffleMaskRGB24ToARGB = {
|
||||
static uvec8 kShuffleMaskRGB24ToARGB = {
|
||||
0u, 1u, 2u, 12u, 3u, 4u, 5u, 13u, 6u, 7u, 8u, 14u, 9u, 10u, 11u, 15u
|
||||
};
|
||||
|
||||
// Shuffle table for converting RAW to ARGB.
|
||||
static const uvec8 kShuffleMaskRAWToARGB = {
|
||||
static uvec8 kShuffleMaskRAWToARGB = {
|
||||
2u, 1u, 0u, 12u, 5u, 4u, 3u, 13u, 8u, 7u, 6u, 14u, 11u, 10u, 9u, 15u
|
||||
};
|
||||
|
||||
// Shuffle table for converting ARGB to RGB24.
|
||||
static const uvec8 kShuffleMaskARGBToRGB24 = {
|
||||
static uvec8 kShuffleMaskARGBToRGB24 = {
|
||||
0u, 1u, 2u, 4u, 5u, 6u, 8u, 9u, 10u, 12u, 13u, 14u, 128u, 128u, 128u, 128u
|
||||
};
|
||||
|
||||
// Shuffle table for converting ARGB to RAW.
|
||||
static const uvec8 kShuffleMaskARGBToRAW = {
|
||||
static uvec8 kShuffleMaskARGBToRAW = {
|
||||
2u, 1u, 0u, 6u, 5u, 4u, 10u, 9u, 8u, 14u, 13u, 12u, 128u, 128u, 128u, 128u
|
||||
};
|
||||
|
||||
// Shuffle table for converting ARGBToRGB24 for I422ToRGB24. First 8 + next 4
|
||||
static const uvec8 kShuffleMaskARGBToRGB24_0 = {
|
||||
static uvec8 kShuffleMaskARGBToRGB24_0 = {
|
||||
0u, 1u, 2u, 4u, 5u, 6u, 8u, 9u, 128u, 128u, 128u, 128u, 10u, 12u, 13u, 14u
|
||||
};
|
||||
|
||||
// Shuffle table for converting ARGB to RAW.
|
||||
static const uvec8 kShuffleMaskARGBToRAW_0 = {
|
||||
static uvec8 kShuffleMaskARGBToRAW_0 = {
|
||||
2u, 1u, 0u, 6u, 5u, 4u, 10u, 9u, 128u, 128u, 128u, 128u, 8u, 14u, 13u, 12u
|
||||
};
|
||||
|
||||
@ -2085,31 +2085,31 @@ void RGBAToUVRow_Unaligned_SSSE3(const uint8* src_argb0, int src_stride_argb,
|
||||
|
||||
#ifdef HAS_I422TOARGBROW_AVX2
|
||||
|
||||
static const lvec8 kUVToB_AVX = {
|
||||
static lvec8 kUVToB_AVX = {
|
||||
UB, VB, UB, VB, UB, VB, UB, VB, UB, VB, UB, VB, UB, VB, UB, VB,
|
||||
UB, VB, UB, VB, UB, VB, UB, VB, UB, VB, UB, VB, UB, VB, UB, VB
|
||||
};
|
||||
static const lvec8 kUVToR_AVX = {
|
||||
static lvec8 kUVToR_AVX = {
|
||||
UR, VR, UR, VR, UR, VR, UR, VR, UR, VR, UR, VR, UR, VR, UR, VR,
|
||||
UR, VR, UR, VR, UR, VR, UR, VR, UR, VR, UR, VR, UR, VR, UR, VR
|
||||
};
|
||||
static const lvec8 kUVToG_AVX = {
|
||||
static lvec8 kUVToG_AVX = {
|
||||
UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG,
|
||||
UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG
|
||||
};
|
||||
static const lvec16 kYToRgb_AVX = {
|
||||
static lvec16 kYToRgb_AVX = {
|
||||
YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG
|
||||
};
|
||||
static const lvec16 kYSub16_AVX = {
|
||||
static lvec16 kYSub16_AVX = {
|
||||
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16
|
||||
};
|
||||
static const lvec16 kUVBiasB_AVX = {
|
||||
static lvec16 kUVBiasB_AVX = {
|
||||
BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB
|
||||
};
|
||||
static const lvec16 kUVBiasG_AVX = {
|
||||
static lvec16 kUVBiasG_AVX = {
|
||||
BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG
|
||||
};
|
||||
static const lvec16 kUVBiasR_AVX = {
|
||||
static lvec16 kUVBiasR_AVX = {
|
||||
BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR
|
||||
};
|
||||
|
||||
@ -2188,35 +2188,35 @@ void I422ToARGBRow_AVX2(const uint8* y_buf,
|
||||
|
||||
#ifdef HAS_I422TOARGBROW_SSSE3
|
||||
|
||||
static const vec8 kUVToB = {
|
||||
static vec8 kUVToB = {
|
||||
UB, VB, UB, VB, UB, VB, UB, VB, UB, VB, UB, VB, UB, VB, UB, VB
|
||||
};
|
||||
|
||||
static const vec8 kUVToR = {
|
||||
static vec8 kUVToR = {
|
||||
UR, VR, UR, VR, UR, VR, UR, VR, UR, VR, UR, VR, UR, VR, UR, VR
|
||||
};
|
||||
|
||||
static const vec8 kUVToG = {
|
||||
static vec8 kUVToG = {
|
||||
UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG
|
||||
};
|
||||
|
||||
static const vec8 kVUToB = {
|
||||
static vec8 kVUToB = {
|
||||
VB, UB, VB, UB, VB, UB, VB, UB, VB, UB, VB, UB, VB, UB, VB, UB,
|
||||
};
|
||||
|
||||
static const vec8 kVUToR = {
|
||||
static vec8 kVUToR = {
|
||||
VR, UR, VR, UR, VR, UR, VR, UR, VR, UR, VR, UR, VR, UR, VR, UR,
|
||||
};
|
||||
|
||||
static const vec8 kVUToG = {
|
||||
static vec8 kVUToG = {
|
||||
VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG,
|
||||
};
|
||||
|
||||
static const vec16 kYToRgb = { YG, YG, YG, YG, YG, YG, YG, YG };
|
||||
static const vec16 kYSub16 = { 16, 16, 16, 16, 16, 16, 16, 16 };
|
||||
static const vec16 kUVBiasB = { BB, BB, BB, BB, BB, BB, BB, BB };
|
||||
static const vec16 kUVBiasG = { BG, BG, BG, BG, BG, BG, BG, BG };
|
||||
static const vec16 kUVBiasR = { BR, BR, BR, BR, BR, BR, BR, BR };
|
||||
static vec16 kYToRgb = { YG, YG, YG, YG, YG, YG, YG, YG };
|
||||
static vec16 kYSub16 = { 16, 16, 16, 16, 16, 16, 16, 16 };
|
||||
static vec16 kUVBiasB = { BB, BB, BB, BB, BB, BB, BB, BB };
|
||||
static vec16 kUVBiasG = { BG, BG, BG, BG, BG, BG, BG, BG };
|
||||
static vec16 kUVBiasR = { BR, BR, BR, BR, BR, BR, BR, BR };
|
||||
|
||||
// TODO(fbarchard): Read that does half size on Y and treats 420 as 444.
|
||||
|
||||
@ -3187,7 +3187,7 @@ void YToARGBRow_SSE2(const uint8* y_buf,
|
||||
|
||||
#ifdef HAS_MIRRORROW_SSSE3
|
||||
// Shuffle table for reversing the bytes.
|
||||
static const uvec8 kShuffleMirror = {
|
||||
static uvec8 kShuffleMirror = {
|
||||
15u, 14u, 13u, 12u, 11u, 10u, 9u, 8u, 7u, 6u, 5u, 4u, 3u, 2u, 1u, 0u
|
||||
};
|
||||
|
||||
@ -3215,7 +3215,7 @@ void MirrorRow_SSSE3(const uint8* src, uint8* dst, int width) {
|
||||
|
||||
#ifdef HAS_MIRRORROW_AVX2
|
||||
// Shuffle table for reversing the bytes.
|
||||
static const ulvec8 kShuffleMirror_AVX2 = {
|
||||
static ulvec8 kShuffleMirror_AVX2 = {
|
||||
15u, 14u, 13u, 12u, 11u, 10u, 9u, 8u, 7u, 6u, 5u, 4u, 3u, 2u, 1u, 0u,
|
||||
15u, 14u, 13u, 12u, 11u, 10u, 9u, 8u, 7u, 6u, 5u, 4u, 3u, 2u, 1u, 0u
|
||||
};
|
||||
@ -3276,7 +3276,7 @@ void MirrorRow_SSE2(const uint8* src, uint8* dst, int width) {
|
||||
|
||||
#ifdef HAS_MIRRORROW_UV_SSSE3
|
||||
// Shuffle table for reversing the bytes of UV channels.
|
||||
static const uvec8 kShuffleMirrorUV = {
|
||||
static uvec8 kShuffleMirrorUV = {
|
||||
14u, 12u, 10u, 8u, 6u, 4u, 2u, 0u, 15u, 13u, 11u, 9u, 7u, 5u, 3u, 1u
|
||||
};
|
||||
|
||||
@ -3312,7 +3312,7 @@ void MirrorUVRow_SSSE3(const uint8* src, uint8* dst_u, uint8* dst_v,
|
||||
|
||||
#ifdef HAS_ARGBMIRRORROW_SSSE3
|
||||
// Shuffle table for reversing the bytes.
|
||||
static const uvec8 kARGBShuffleMirror = {
|
||||
static uvec8 kARGBShuffleMirror = {
|
||||
12u, 13u, 14u, 15u, 8u, 9u, 10u, 11u, 4u, 5u, 6u, 7u, 0u, 1u, 2u, 3u
|
||||
};
|
||||
|
||||
@ -3340,7 +3340,7 @@ void ARGBMirrorRow_SSSE3(const uint8* src, uint8* dst, int width) {
|
||||
|
||||
#ifdef HAS_ARGBMIRRORROW_AVX2
|
||||
// Shuffle table for reversing the bytes.
|
||||
static const ulvec32 kARGBShuffleMirror_AVX2 = {
|
||||
static ulvec32 kARGBShuffleMirror_AVX2 = {
|
||||
7u, 6u, 5u, 4u, 3u, 2u, 1u, 0u
|
||||
};
|
||||
|
||||
@ -4458,7 +4458,7 @@ void ARGBBlendRow_SSE2(const uint8* src_argb0, const uint8* src_argb1,
|
||||
|
||||
#ifdef HAS_ARGBBLENDROW_SSSE3
|
||||
// Shuffle table for isolating alpha.
|
||||
static const uvec8 kShuffleAlpha = {
|
||||
static uvec8 kShuffleAlpha = {
|
||||
3u, 0x80, 3u, 0x80, 7u, 0x80, 7u, 0x80,
|
||||
11u, 0x80, 11u, 0x80, 15u, 0x80, 15u, 0x80
|
||||
};
|
||||
@ -4661,10 +4661,10 @@ void ARGBAttenuateRow_SSE2(const uint8* src_argb, uint8* dst_argb, int width) {
|
||||
|
||||
#ifdef HAS_ARGBATTENUATEROW_SSSE3
|
||||
// Shuffle table duplicating alpha.
|
||||
static const uvec8 kShuffleAlpha0 = {
|
||||
static uvec8 kShuffleAlpha0 = {
|
||||
3u, 3u, 3u, 3u, 3u, 3u, 128u, 128u, 7u, 7u, 7u, 7u, 7u, 7u, 128u, 128u,
|
||||
};
|
||||
static const uvec8 kShuffleAlpha1 = {
|
||||
static uvec8 kShuffleAlpha1 = {
|
||||
11u, 11u, 11u, 11u, 11u, 11u, 128u, 128u,
|
||||
15u, 15u, 15u, 15u, 15u, 15u, 128u, 128u,
|
||||
};
|
||||
@ -4710,7 +4710,7 @@ void ARGBAttenuateRow_SSSE3(const uint8* src_argb, uint8* dst_argb, int width) {
|
||||
|
||||
#ifdef HAS_ARGBATTENUATEROW_AVX2
|
||||
// Shuffle table duplicating alpha.
|
||||
static const ulvec8 kShuffleAlpha_AVX2 = {
|
||||
static ulvec8 kShuffleAlpha_AVX2 = {
|
||||
6u, 7u, 6u, 7u, 6u, 7u, 128u, 128u,
|
||||
14u, 15u, 14u, 15u, 14u, 15u, 128u, 128u,
|
||||
6u, 7u, 6u, 7u, 6u, 7u, 128u, 128u,
|
||||
@ -4804,7 +4804,7 @@ void ARGBUnattenuateRow_SSE2(const uint8* src_argb, uint8* dst_argb,
|
||||
|
||||
#ifdef HAS_ARGBUNATTENUATEROW_AVX2
|
||||
// Shuffle table duplicating alpha.
|
||||
static const ulvec8 kUnattenShuffleAlpha_AVX2 = {
|
||||
static ulvec8 kUnattenShuffleAlpha_AVX2 = {
|
||||
0u, 1u, 0u, 1u, 0u, 1u, 6u, 7u, 8u, 9u, 8u, 9u, 8u, 9u, 14u, 15,
|
||||
0u, 1u, 0u, 1u, 0u, 1u, 6u, 7u, 8u, 9u, 8u, 9u, 8u, 9u, 14u, 15,
|
||||
};
|
||||
@ -4961,15 +4961,15 @@ void ARGBGrayRow_SSSE3(const uint8* src_argb, uint8* dst_argb, int width) {
|
||||
// g = (r * 45 + g * 88 + b * 22) >> 7
|
||||
// r = (r * 50 + g * 98 + b * 24) >> 7
|
||||
// Constant for ARGB color to sepia tone.
|
||||
static const vec8 kARGBToSepiaB = {
|
||||
static vec8 kARGBToSepiaB = {
|
||||
17, 68, 35, 0, 17, 68, 35, 0, 17, 68, 35, 0, 17, 68, 35, 0
|
||||
};
|
||||
|
||||
static const vec8 kARGBToSepiaG = {
|
||||
static vec8 kARGBToSepiaG = {
|
||||
22, 88, 45, 0, 22, 88, 45, 0, 22, 88, 45, 0, 22, 88, 45, 0
|
||||
};
|
||||
|
||||
static const vec8 kARGBToSepiaR = {
|
||||
static vec8 kARGBToSepiaR = {
|
||||
24, 98, 50, 0, 24, 98, 50, 0, 24, 98, 50, 0, 24, 98, 50, 0
|
||||
};
|
||||
|
||||
|
||||
@ -96,86 +96,79 @@ void ScaleRowDown38_2_Box_NEON(const uint8* src_ptr,
|
||||
// Constants for SSSE3 code
|
||||
#elif !defined(LIBYUV_DISABLE_X86) && \
|
||||
(defined(_M_IX86) || defined(__i386__) || defined(__x86_64__))
|
||||
// GCC 4.2 on OSX has link error when passing static or const to inline.
|
||||
// TODO(fbarchard): Use static const when gcc 4.2 support is dropped.
|
||||
#ifdef __APPLE__
|
||||
#define CONST
|
||||
#else
|
||||
#define CONST static const
|
||||
#endif
|
||||
|
||||
// Offsets for source bytes 0 to 9
|
||||
CONST uvec8 kShuf0 =
|
||||
static uvec8 kShuf0 =
|
||||
{ 0, 1, 3, 4, 5, 7, 8, 9, 128, 128, 128, 128, 128, 128, 128, 128 };
|
||||
|
||||
// Offsets for source bytes 11 to 20 with 8 subtracted = 3 to 12.
|
||||
CONST uvec8 kShuf1 =
|
||||
static uvec8 kShuf1 =
|
||||
{ 3, 4, 5, 7, 8, 9, 11, 12, 128, 128, 128, 128, 128, 128, 128, 128 };
|
||||
|
||||
// Offsets for source bytes 21 to 31 with 16 subtracted = 5 to 31.
|
||||
CONST uvec8 kShuf2 =
|
||||
static uvec8 kShuf2 =
|
||||
{ 5, 7, 8, 9, 11, 12, 13, 15, 128, 128, 128, 128, 128, 128, 128, 128 };
|
||||
|
||||
// Offsets for source bytes 0 to 10
|
||||
CONST uvec8 kShuf01 =
|
||||
static uvec8 kShuf01 =
|
||||
{ 0, 1, 1, 2, 2, 3, 4, 5, 5, 6, 6, 7, 8, 9, 9, 10 };
|
||||
|
||||
// Offsets for source bytes 10 to 21 with 8 subtracted = 3 to 13.
|
||||
CONST uvec8 kShuf11 =
|
||||
static uvec8 kShuf11 =
|
||||
{ 2, 3, 4, 5, 5, 6, 6, 7, 8, 9, 9, 10, 10, 11, 12, 13 };
|
||||
|
||||
// Offsets for source bytes 21 to 31 with 16 subtracted = 5 to 31.
|
||||
CONST uvec8 kShuf21 =
|
||||
static uvec8 kShuf21 =
|
||||
{ 5, 6, 6, 7, 8, 9, 9, 10, 10, 11, 12, 13, 13, 14, 14, 15 };
|
||||
|
||||
// Coefficients for source bytes 0 to 10
|
||||
CONST uvec8 kMadd01 =
|
||||
static uvec8 kMadd01 =
|
||||
{ 3, 1, 2, 2, 1, 3, 3, 1, 2, 2, 1, 3, 3, 1, 2, 2 };
|
||||
|
||||
// Coefficients for source bytes 10 to 21
|
||||
CONST uvec8 kMadd11 =
|
||||
static uvec8 kMadd11 =
|
||||
{ 1, 3, 3, 1, 2, 2, 1, 3, 3, 1, 2, 2, 1, 3, 3, 1 };
|
||||
|
||||
// Coefficients for source bytes 21 to 31
|
||||
CONST uvec8 kMadd21 =
|
||||
static uvec8 kMadd21 =
|
||||
{ 2, 2, 1, 3, 3, 1, 2, 2, 1, 3, 3, 1, 2, 2, 1, 3 };
|
||||
|
||||
// Coefficients for source bytes 21 to 31
|
||||
CONST vec16 kRound34 =
|
||||
static vec16 kRound34 =
|
||||
{ 2, 2, 2, 2, 2, 2, 2, 2 };
|
||||
|
||||
CONST uvec8 kShuf38a =
|
||||
static uvec8 kShuf38a =
|
||||
{ 0, 3, 6, 8, 11, 14, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 };
|
||||
|
||||
CONST uvec8 kShuf38b =
|
||||
static uvec8 kShuf38b =
|
||||
{ 128, 128, 128, 128, 128, 128, 0, 3, 6, 8, 11, 14, 128, 128, 128, 128 };
|
||||
|
||||
// Arrange words 0,3,6 into 0,1,2
|
||||
CONST uvec8 kShufAc =
|
||||
static uvec8 kShufAc =
|
||||
{ 0, 1, 6, 7, 12, 13, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 };
|
||||
|
||||
// Arrange words 0,3,6 into 3,4,5
|
||||
CONST uvec8 kShufAc3 =
|
||||
static uvec8 kShufAc3 =
|
||||
{ 128, 128, 128, 128, 128, 128, 0, 1, 6, 7, 12, 13, 128, 128, 128, 128 };
|
||||
|
||||
// Scaling values for boxes of 3x3 and 2x3
|
||||
CONST uvec16 kScaleAc33 =
|
||||
static uvec16 kScaleAc33 =
|
||||
{ 65536 / 9, 65536 / 9, 65536 / 6, 65536 / 9, 65536 / 9, 65536 / 6, 0, 0 };
|
||||
|
||||
// Arrange first value for pixels 0,1,2,3,4,5
|
||||
CONST uvec8 kShufAb0 =
|
||||
static uvec8 kShufAb0 =
|
||||
{ 0, 128, 3, 128, 6, 128, 8, 128, 11, 128, 14, 128, 128, 128, 128, 128 };
|
||||
|
||||
// Arrange second value for pixels 0,1,2,3,4,5
|
||||
CONST uvec8 kShufAb1 =
|
||||
static uvec8 kShufAb1 =
|
||||
{ 1, 128, 4, 128, 7, 128, 9, 128, 12, 128, 15, 128, 128, 128, 128, 128 };
|
||||
|
||||
// Arrange third value for pixels 0,1,2,3,4,5
|
||||
CONST uvec8 kShufAb2 =
|
||||
static uvec8 kShufAb2 =
|
||||
{ 2, 128, 5, 128, 128, 128, 10, 128, 13, 128, 128, 128, 128, 128, 128, 128 };
|
||||
|
||||
// Scaling values for boxes of 3x2 and 2x2
|
||||
CONST uvec16 kScaleAb2 =
|
||||
static uvec16 kScaleAb2 =
|
||||
{ 65536 / 3, 65536 / 3, 65536 / 2, 65536 / 3, 65536 / 3, 65536 / 2, 0, 0 };
|
||||
#endif
|
||||
|
||||
|
||||
@ -256,13 +256,13 @@ static void ScaleARGBCols_SSE2(uint8* dst_argb, const uint8* src_argb,
|
||||
// TODO(fbarchard): Port to Neon
|
||||
|
||||
// Shuffle table for arranging 2 pixels into pairs for pmaddubsw
|
||||
static const uvec8 kShuffleColARGB = {
|
||||
static uvec8 kShuffleColARGB = {
|
||||
0u, 4u, 1u, 5u, 2u, 6u, 3u, 7u, // bbggrraa 1st pixel
|
||||
8u, 12u, 9u, 13u, 10u, 14u, 11u, 15u // bbggrraa 2nd pixel
|
||||
};
|
||||
|
||||
// Shuffle table for duplicating 2 fractions into 8 bytes each
|
||||
static const uvec8 kShuffleFractions = {
|
||||
static uvec8 kShuffleFractions = {
|
||||
0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u,
|
||||
};
|
||||
|
||||
@ -534,20 +534,14 @@ static void ScaleARGBCols_SSE2(uint8* dst_argb, const uint8* src_argb,
|
||||
);
|
||||
}
|
||||
|
||||
#ifdef __APPLE__
|
||||
#define CONST
|
||||
#else
|
||||
#define CONST static const
|
||||
#endif
|
||||
|
||||
// Shuffle table for arranging 2 pixels into pairs for pmaddubsw
|
||||
CONST uvec8 kShuffleColARGB = {
|
||||
static uvec8 kShuffleColARGB = {
|
||||
0u, 4u, 1u, 5u, 2u, 6u, 3u, 7u, // bbggrraa 1st pixel
|
||||
8u, 12u, 9u, 13u, 10u, 14u, 11u, 15u // bbggrraa 2nd pixel
|
||||
};
|
||||
|
||||
// Shuffle table for duplicating 2 fractions into 8 bytes each
|
||||
CONST uvec8 kShuffleFractions = {
|
||||
static uvec8 kShuffleFractions = {
|
||||
0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u,
|
||||
};
|
||||
|
||||
|
||||
@ -176,7 +176,7 @@ void ScaleRowDown2Box_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,
|
||||
}
|
||||
|
||||
void ScaleRowDown4_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t /* src_stride */,
|
||||
uint8* dst, int dst_width) {
|
||||
uint8* dst, int dst_width) {
|
||||
__asm__ __volatile__ (
|
||||
".set push \n"
|
||||
".set noreorder \n"
|
||||
@ -231,7 +231,7 @@ void ScaleRowDown4_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t /* src_stride */,
|
||||
}
|
||||
|
||||
void ScaleRowDown4Box_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,
|
||||
uint8* dst, int dst_width) {
|
||||
uint8* dst, int dst_width) {
|
||||
intptr_t stride = src_stride;
|
||||
const uint8* s1 = src_ptr + stride;
|
||||
const uint8* s2 = s1 + stride;
|
||||
|
||||
@ -226,14 +226,14 @@ void ScaleRowDown34_1_Box_NEON(const uint8* src_ptr,
|
||||
}
|
||||
|
||||
#define HAS_SCALEROWDOWN38_NEON
|
||||
const uvec8 kShuf38 =
|
||||
static uvec8 kShuf38 =
|
||||
{ 0, 3, 6, 8, 11, 14, 16, 19, 22, 24, 27, 30, 0, 0, 0, 0 };
|
||||
const uvec8 kShuf38_2 =
|
||||
static uvec8 kShuf38_2 =
|
||||
{ 0, 8, 16, 2, 10, 17, 4, 12, 18, 6, 14, 19, 0, 0, 0, 0 };
|
||||
const vec16 kMult38_Div6 =
|
||||
static vec16 kMult38_Div6 =
|
||||
{ 65536 / 12, 65536 / 12, 65536 / 12, 65536 / 12,
|
||||
65536 / 12, 65536 / 12, 65536 / 12, 65536 / 12 };
|
||||
const vec16 kMult38_Div9 =
|
||||
static vec16 kMult38_Div9 =
|
||||
{ 65536 / 18, 65536 / 18, 65536 / 18, 65536 / 18,
|
||||
65536 / 18, 65536 / 18, 65536 / 18, 65536 / 18 };
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user