6#ifdef QT_COMPILER_SUPPORTS_SSE2
12template<
int a,
int r,
int b,
int g>
19 const __m128i
zero = _mm_setzero_si128();
20#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
21 const uchar shuffle = _MM_SHUFFLE(
a,
r,
b,
g);
23 const uchar shuffle = _MM_SHUFFLE(3-
a, 3-
r, 3-
b, 3-
g);
26 using Pixel =
const ArgbPixel<a, r, g, b>;
29 auto *pixel =
reinterpret_cast<const Pixel *
>(
src);
33 *argb = pixel->convert();
39 __m128i pixelData = _mm_loadu_si128(
reinterpret_cast<const __m128i*
>(pixel));
41 __m128i lowPixels = _mm_unpacklo_epi8(pixelData,
zero);
42 __m128i highPixels = _mm_unpackhi_epi8(pixelData,
zero);
43 lowPixels = _mm_shufflelo_epi16(_mm_shufflehi_epi16(lowPixels, shuffle), shuffle);
44 highPixels = _mm_shufflelo_epi16(_mm_shufflehi_epi16(highPixels, shuffle), shuffle);
45 pixelData = _mm_packus_epi16(lowPixels, highPixels);
46 _mm_store_si128(
reinterpret_cast<__m128i*
>(argb), pixelData);
52 *argb = pixel->convert();
92 for (;
x <
size - (4 * 4 - 1);
x += 4 * 4) {
93 const auto srcData0 = _mm_loadu_si128(
reinterpret_cast<const __m128i *
>(
src));
94 const auto srcData1 = _mm_loadu_si128(
reinterpret_cast<const __m128i *
>(
src += 4));
95 const auto srcData2 = _mm_loadu_si128(
reinterpret_cast<const __m128i *
>(
src += 4));
96 const auto srcData3 = _mm_loadu_si128(
reinterpret_cast<const __m128i *
>(
src += 4));
98 _mm_store_si128(
reinterpret_cast<__m128i *
>(
dst), _mm_or_si128(srcData0, mask128));
99 _mm_store_si128(
reinterpret_cast<__m128i *
>(
dst += 4), _mm_or_si128(srcData1, mask128));
100 _mm_store_si128(
reinterpret_cast<__m128i *
>(
dst += 4), _mm_or_si128(srcData2, mask128));
101 _mm_store_si128(
reinterpret_cast<__m128i *
>(
dst += 4), _mm_or_si128(srcData3, mask128));
107 for (;
x <
size - 3;
x += 4) {
108 const auto srcData = _mm_loadu_si128(
reinterpret_cast<const __m128i *
>(
src));
110 _mm_store_si128(
reinterpret_cast<__m128i *
>(
dst), _mm_or_si128(srcData, mask128));
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)