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);
39 using Pixel =
const ArgbPixel<a, r, g, 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();
105 for (;
x <
size - (8 * 4 + 1);
x += 8 * 4) {
106 const auto srcData1 = _mm256_loadu_si256(
reinterpret_cast<const __m256i *
>(
src));
107 const auto srcData2 = _mm256_loadu_si256(
reinterpret_cast<const __m256i *
>(
src += 8));
108 const auto srcData3 = _mm256_loadu_si256(
reinterpret_cast<const __m256i *
>(
src += 8));
109 const auto srcData4 = _mm256_loadu_si256(
reinterpret_cast<const __m256i *
>(
src += 8));
111 _mm256_store_si256(
reinterpret_cast<__m256i *
>(
dst), _mm256_or_si256(srcData1, mask256));
112 _mm256_store_si256(
reinterpret_cast<__m256i *
>(
dst += 8), _mm256_or_si256(srcData2, mask256));
113 _mm256_store_si256(
reinterpret_cast<__m256i *
>(
dst += 8), _mm256_or_si256(srcData3, mask256));
114 _mm256_store_si256(
reinterpret_cast<__m256i *
>(
dst += 8), _mm256_or_si256(srcData4, mask256));
121 for (;
x <
size - 7;
x += 8) {
122 const auto srcData = _mm256_loadu_si256(
reinterpret_cast<const __m256i *
>(
src));
123 _mm256_store_si256(
reinterpret_cast<__m256i *
>(
dst), _mm256_or_si256(srcData, mask256));
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]
GLenum GLuint GLintptr GLsizeiptr size
[1]
const void GLsizei GLsizei stride
GLint GLint GLint GLint GLint GLint GLint GLbitfield mask
#define MERGE_LOOPS(width, height, stride, bpp)
#define FETCH_INFO_PACKED(frame)
QT_BEGIN_NAMESPACE typedef uchar * output
#define QT_MEDIA_ALIGN(boundary, ptr, x, length)