6#ifdef QT_COMPILER_SUPPORTS_AVX2
12template<
int a,
int r,
int g,
int b>
19#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
20 __m256i shuffleMask = _mm256_set_epi8(12 +
a, 12 +
r, 12 +
g, 12 +
b,
21 8 +
a, 8 +
r, 8 +
g, 8 +
b,
22 4 +
a, 4 +
r, 4 +
g, 4 +
b,
23 0 +
a, 0 +
r, 0 +
g, 0 +
b,
24 12 +
a, 12 +
r, 12 +
g, 12 +
b,
25 8 +
a, 8 +
r, 8 +
g, 8 +
b,
26 4 +
a, 4 +
r, 4 +
g, 4 +
b,
27 0 +
a, 0 +
r, 0 +
g, 0 +
b);
29 __m256i shuffleMask = _mm256_set_epi8(15 -
a, 15 -
r, 15 -
g, 15 -
b,
30 11 -
a, 11 -
r, 11 -
g, 11 -
b,
31 7 -
a, 7 -
r, 7 -
g, 7 -
b,
32 3 -
a, 3 -
r, 3 -
g, 3 -
b,
33 15 -
a, 15 -
r, 15 -
g, 15 -
b,
34 11 -
a, 11 -
r, 11 -
g, 11 -
b,
35 7 -
a, 7 -
r, 7 -
g, 7 -
b,
36 3 -
a, 3 -
r, 3 -
g, 3 -
b);
42 auto *pixel =
reinterpret_cast<const Pixel *
>(
src);
46 *argb = pixel->convert();
51 for (;
x <
width - 15;
x += 16) {
52 __m256i pixelData = _mm256_loadu_si256(
reinterpret_cast<const __m256i*
>(pixel));
53 __m256i pixelData2 = _mm256_loadu_si256(
reinterpret_cast<const __m256i*
>(pixel + 8));
55 pixelData = _mm256_shuffle_epi8(pixelData, shuffleMask);
56 pixelData2 = _mm256_shuffle_epi8(pixelData2, shuffleMask);
57 _mm256_store_si256(
reinterpret_cast<__m256i*
>(argb), pixelData);
58 _mm256_store_si256(
reinterpret_cast<__m256i*
>(argb + 8), pixelData2);
64 *argb = pixel->convert();
The QVideoFrame class represents a frame of video data.
Combined button and popup list for selecting options.
GLboolean GLboolean GLboolean b
GLint GLint GLint GLint GLint x
[0]
GLint GLsizei GLsizei height
GLboolean GLboolean GLboolean GLboolean a
[7]
const void GLsizei GLsizei stride
#define MERGE_LOOPS(width, height, stride, bpp)
#define FETCH_INFO_PACKED(frame)
QT_BEGIN_NAMESPACE typedef uchar * output