Coverage Report

Created: 2025-07-23 07:53

/src/Simd/src/Simd/SimdBaseYuvToBgra.cpp
Line
Count
Source (jump to first uncovered line)
1
/*
2
* Simd Library (http://ermig1979.github.io/Simd).
3
*
4
* Copyright (c) 2011-2024 Yermalayeu Ihar.
5
*
6
* Permission is hereby granted, free of charge, to any person obtaining a copy
7
* of this software and associated documentation files (the "Software"), to deal
8
* in the Software without restriction, including without limitation the rights
9
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
* copies of the Software, and to permit persons to whom the Software is
11
* furnished to do so, subject to the following conditions:
12
*
13
* The above copyright notice and this permission notice shall be included in
14
* all copies or substantial portions of the Software.
15
*
16
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
* SOFTWARE.
23
*/
24
#include "Simd/SimdYuvToBgr.h"
25
26
namespace Simd
27
{
28
    namespace Base
29
    {
30
        template <class YuvType> SIMD_INLINE void Yuva420pToBgra(const uint8_t* y, int u, int v, const uint8_t* a, uint8_t* bgra)
31
0
        {
32
0
            YuvToBgra<YuvType>(y[0], u, v, a[0], bgra + 0);
33
0
            YuvToBgra<YuvType>(y[1], u, v, a[1], bgra + 4);
34
0
        }
Unexecuted instantiation: void Simd::Base::Yuva420pToBgra<Simd::Base::Bt601>(unsigned char const*, int, int, unsigned char const*, unsigned char*)
Unexecuted instantiation: void Simd::Base::Yuva420pToBgra<Simd::Base::Bt709>(unsigned char const*, int, int, unsigned char const*, unsigned char*)
Unexecuted instantiation: void Simd::Base::Yuva420pToBgra<Simd::Base::Bt2020>(unsigned char const*, int, int, unsigned char const*, unsigned char*)
Unexecuted instantiation: void Simd::Base::Yuva420pToBgra<Simd::Base::Trect871>(unsigned char const*, int, int, unsigned char const*, unsigned char*)
35
36
        template <class YuvType> void Yuva420pToBgraV2(const uint8_t* y, size_t yStride, const uint8_t* u, size_t uStride,
37
            const uint8_t* v, size_t vStride, const uint8_t* a, size_t aStride, size_t width, size_t height, uint8_t* bgra, size_t bgraStride)
38
0
        {
39
0
            assert((width % 2 == 0) && (height % 2 == 0) && (width >= 2) && (height >= 2));
40
41
0
            for (size_t row = 0; row < height; row += 2)
42
0
            {
43
0
                for (size_t colUV = 0, colYA = 0, colBgra = 0; colYA < width; colYA += 2, colUV++, colBgra += 8)
44
0
                {
45
0
                    int u_ = u[colUV];
46
0
                    int v_ = v[colUV];
47
0
                    Yuva420pToBgra<YuvType>(y + colYA, u_, v_, a + colYA, bgra + colBgra);
48
0
                    Yuva420pToBgra<YuvType>(y + yStride + colYA, u_, v_, a + aStride + colYA, bgra + bgraStride + colBgra);
49
0
                }
50
0
                y += 2 * yStride;
51
0
                u += uStride;
52
0
                v += vStride;
53
0
                a += 2 * aStride;
54
0
                bgra += 2 * bgraStride;
55
0
            }
56
0
        }
Unexecuted instantiation: void Simd::Base::Yuva420pToBgraV2<Simd::Base::Bt601>(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned long, unsigned long, unsigned char*, unsigned long)
Unexecuted instantiation: void Simd::Base::Yuva420pToBgraV2<Simd::Base::Bt709>(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned long, unsigned long, unsigned char*, unsigned long)
Unexecuted instantiation: void Simd::Base::Yuva420pToBgraV2<Simd::Base::Bt2020>(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned long, unsigned long, unsigned char*, unsigned long)
Unexecuted instantiation: void Simd::Base::Yuva420pToBgraV2<Simd::Base::Trect871>(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned long, unsigned long, unsigned char*, unsigned long)
57
58
        void Yuva420pToBgraV2(const uint8_t* y, size_t yStride, const uint8_t* u, size_t uStride, const uint8_t* v, size_t vStride,
59
            const uint8_t* a, size_t aStride, size_t width, size_t height, uint8_t* bgra, size_t bgraStride, SimdYuvType yuvType)
60
0
        {
61
0
            switch (yuvType)
62
0
            {
63
0
            case SimdYuvBt601: Yuva420pToBgraV2<Bt601>(y, yStride, u, uStride, v, vStride, a, aStride, width, height, bgra, bgraStride); break;
64
0
            case SimdYuvBt709: Yuva420pToBgraV2<Bt709>(y, yStride, u, uStride, v, vStride, a, aStride, width, height, bgra, bgraStride); break;
65
0
            case SimdYuvBt2020: Yuva420pToBgraV2<Bt2020>(y, yStride, u, uStride, v, vStride, a, aStride, width, height, bgra, bgraStride); break;
66
0
            case SimdYuvTrect871: Yuva420pToBgraV2<Trect871>(y, yStride, u, uStride, v, vStride, a, aStride, width, height, bgra, bgraStride); break;
67
0
            default:
68
0
                assert(0);
69
0
            }
70
0
        }
71
72
        //-------------------------------------------------------------------------------------------------
73
74
        template <class YuvType> SIMD_INLINE void Yuva422pToBgra(const uint8_t* y, int u, int v, const uint8_t * a, uint8_t* bgra)
75
0
        {
76
0
            YuvToBgra<YuvType>(y[0], u, v, a[0], bgra + 0);
77
0
            YuvToBgra<YuvType>(y[1], u, v, a[1], bgra + 4);
78
0
        }
Unexecuted instantiation: void Simd::Base::Yuva422pToBgra<Simd::Base::Bt601>(unsigned char const*, int, int, unsigned char const*, unsigned char*)
Unexecuted instantiation: void Simd::Base::Yuva422pToBgra<Simd::Base::Bt709>(unsigned char const*, int, int, unsigned char const*, unsigned char*)
Unexecuted instantiation: void Simd::Base::Yuva422pToBgra<Simd::Base::Bt2020>(unsigned char const*, int, int, unsigned char const*, unsigned char*)
Unexecuted instantiation: void Simd::Base::Yuva422pToBgra<Simd::Base::Trect871>(unsigned char const*, int, int, unsigned char const*, unsigned char*)
79
80
        template <class YuvType> void Yuva422pToBgraV2(const uint8_t* y, size_t yStride, const uint8_t* u, size_t uStride,
81
            const uint8_t* v, size_t vStride, const uint8_t* a, size_t aStride, size_t width, size_t height, uint8_t* bgra, size_t bgraStride)
82
0
        {
83
0
            assert((width % 2 == 0) && (width >= 2));
84
85
0
            for (size_t row = 0; row < height; ++row)
86
0
            {
87
0
                for (size_t colUV = 0, colYA = 0, colBgra = 0; colYA < width; colYA += 2, colUV++, colBgra += 8)
88
0
                    Yuva422pToBgra<YuvType>(y + colYA, u[colUV], v[colUV], a + colYA, bgra + colBgra);
89
0
                y += yStride;
90
0
                u += uStride;
91
0
                v += vStride;
92
0
                a += aStride;
93
0
                bgra += bgraStride;
94
0
            }
95
0
        }
Unexecuted instantiation: void Simd::Base::Yuva422pToBgraV2<Simd::Base::Bt601>(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned long, unsigned long, unsigned char*, unsigned long)
Unexecuted instantiation: void Simd::Base::Yuva422pToBgraV2<Simd::Base::Bt709>(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned long, unsigned long, unsigned char*, unsigned long)
Unexecuted instantiation: void Simd::Base::Yuva422pToBgraV2<Simd::Base::Bt2020>(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned long, unsigned long, unsigned char*, unsigned long)
Unexecuted instantiation: void Simd::Base::Yuva422pToBgraV2<Simd::Base::Trect871>(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned long, unsigned long, unsigned char*, unsigned long)
96
97
        void Yuva422pToBgraV2(const uint8_t* y, size_t yStride, const uint8_t* u, size_t uStride, const uint8_t* v, size_t vStride,
98
            const uint8_t* a, size_t aStride, size_t width, size_t height, uint8_t* bgra, size_t bgraStride, SimdYuvType yuvType)
99
0
        {
100
0
            switch (yuvType)
101
0
            {
102
0
            case SimdYuvBt601: Yuva422pToBgraV2<Bt601>(y, yStride, u, uStride, v, vStride, a, aStride, width, height, bgra, bgraStride); break;
103
0
            case SimdYuvBt709: Yuva422pToBgraV2<Bt709>(y, yStride, u, uStride, v, vStride, a, aStride, width, height, bgra, bgraStride); break;
104
0
            case SimdYuvBt2020: Yuva422pToBgraV2<Bt2020>(y, yStride, u, uStride, v, vStride, a, aStride, width, height, bgra, bgraStride); break;
105
0
            case SimdYuvTrect871: Yuva422pToBgraV2<Trect871>(y, yStride, u, uStride, v, vStride, a, aStride, width, height, bgra, bgraStride); break;
106
0
            default:
107
0
                assert(0);
108
0
            }
109
0
        }
110
111
        //-------------------------------------------------------------------------------------------------
112
113
        template <class YuvType> void Yuva444pToBgraV2(const uint8_t* y, size_t yStride, const uint8_t* u, size_t uStride, 
114
            const uint8_t* v, size_t vStride, const uint8_t* a, size_t aStride, size_t width, size_t height, uint8_t* bgra, size_t bgraStride)
115
0
        {
116
0
            for (size_t row = 0; row < height; ++row)
117
0
            {
118
0
                for (size_t col = 0; col < width; col++)
119
0
                    YuvToBgra<YuvType>(y[col], u[col], v[col], a[col], bgra + col * 4);
120
0
                y += yStride;
121
0
                u += uStride;
122
0
                v += vStride;
123
0
                a += aStride;
124
0
                bgra += bgraStride;
125
0
            }
126
0
        }
Unexecuted instantiation: void Simd::Base::Yuva444pToBgraV2<Simd::Base::Bt601>(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned long, unsigned long, unsigned char*, unsigned long)
Unexecuted instantiation: void Simd::Base::Yuva444pToBgraV2<Simd::Base::Bt709>(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned long, unsigned long, unsigned char*, unsigned long)
Unexecuted instantiation: void Simd::Base::Yuva444pToBgraV2<Simd::Base::Bt2020>(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned long, unsigned long, unsigned char*, unsigned long)
Unexecuted instantiation: void Simd::Base::Yuva444pToBgraV2<Simd::Base::Trect871>(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned long, unsigned long, unsigned char*, unsigned long)
127
128
        void Yuva444pToBgraV2(const uint8_t* y, size_t yStride, const uint8_t* u, size_t uStride, const uint8_t* v, size_t vStride,
129
            const uint8_t* a, size_t aStride, size_t width, size_t height, uint8_t* bgra, size_t bgraStride, SimdYuvType yuvType)
130
0
        {
131
0
            switch (yuvType)
132
0
            {
133
0
            case SimdYuvBt601: Yuva444pToBgraV2<Bt601>(y, yStride, u, uStride, v, vStride, a, aStride, width, height, bgra, bgraStride); break;
134
0
            case SimdYuvBt709: Yuva444pToBgraV2<Bt709>(y, yStride, u, uStride, v, vStride, a, aStride, width, height, bgra, bgraStride); break;
135
0
            case SimdYuvBt2020: Yuva444pToBgraV2<Bt2020>(y, yStride, u, uStride, v, vStride, a, aStride, width, height, bgra, bgraStride); break;
136
0
            case SimdYuvTrect871: Yuva444pToBgraV2<Trect871>(y, yStride, u, uStride, v, vStride, a, aStride, width, height, bgra, bgraStride); break;
137
0
            default:
138
0
                assert(0);
139
0
            }
140
0
        }
141
142
        //-------------------------------------------------------------------------------------------------
143
144
        template <class YuvType> SIMD_INLINE void Yuv422pToBgra(const uint8_t* y, int u, int v, int alpha, uint8_t* bgra)
145
0
        {
146
0
            YuvToBgra<YuvType>(y[0], u, v, alpha, bgra + 0);
147
0
            YuvToBgra<YuvType>(y[1], u, v, alpha, bgra + 4);
148
0
        }
Unexecuted instantiation: void Simd::Base::Yuv422pToBgra<Simd::Base::Bt601>(unsigned char const*, int, int, int, unsigned char*)
Unexecuted instantiation: void Simd::Base::Yuv422pToBgra<Simd::Base::Bt709>(unsigned char const*, int, int, int, unsigned char*)
Unexecuted instantiation: void Simd::Base::Yuv422pToBgra<Simd::Base::Bt2020>(unsigned char const*, int, int, int, unsigned char*)
Unexecuted instantiation: void Simd::Base::Yuv422pToBgra<Simd::Base::Trect871>(unsigned char const*, int, int, int, unsigned char*)
149
150
        template <class YuvType> void Yuv420pToBgraV2(const uint8_t* y, size_t yStride, const uint8_t* u, size_t uStride, const uint8_t* v, size_t vStride,
151
            size_t width, size_t height, uint8_t* bgra, size_t bgraStride, uint8_t alpha)
152
0
        {
153
0
            assert((width % 2 == 0) && (height % 2 == 0) && (width >= 2) && (height >= 2));
154
155
0
            for (size_t row = 0; row < height; row += 2)
156
0
            {
157
0
                for (size_t colUV = 0, colY = 0, colBgra = 0; colY < width; colY += 2, colUV++, colBgra += 8)
158
0
                {
159
0
                    int _u = u[colUV];
160
0
                    int _v = v[colUV];
161
0
                    Yuv422pToBgra<YuvType>(y + colY, _u, _v, alpha, bgra + colBgra);
162
0
                    Yuv422pToBgra<YuvType>(y + yStride + colY, _u, _v, alpha, bgra + bgraStride + colBgra);
163
0
                }
164
0
                y += 2 * yStride;
165
0
                u += uStride;
166
0
                v += vStride;
167
0
                bgra += 2 * bgraStride;
168
0
            }
169
0
        }
Unexecuted instantiation: void Simd::Base::Yuv420pToBgraV2<Simd::Base::Bt601>(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned long, unsigned long, unsigned char*, unsigned long, unsigned char)
Unexecuted instantiation: void Simd::Base::Yuv420pToBgraV2<Simd::Base::Bt709>(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned long, unsigned long, unsigned char*, unsigned long, unsigned char)
Unexecuted instantiation: void Simd::Base::Yuv420pToBgraV2<Simd::Base::Bt2020>(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned long, unsigned long, unsigned char*, unsigned long, unsigned char)
Unexecuted instantiation: void Simd::Base::Yuv420pToBgraV2<Simd::Base::Trect871>(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned long, unsigned long, unsigned char*, unsigned long, unsigned char)
170
171
        void Yuv420pToBgraV2(const uint8_t* y, size_t yStride, const uint8_t* u, size_t uStride, const uint8_t* v, size_t vStride,
172
            size_t width, size_t height, uint8_t* bgra, size_t bgraStride, uint8_t alpha, SimdYuvType yuvType)
173
0
        {
174
0
            switch (yuvType)
175
0
            {
176
0
            case SimdYuvBt601: Yuv420pToBgraV2<Bt601>(y, yStride, u, uStride, v, vStride, width, height, bgra, bgraStride, alpha); break;
177
0
            case SimdYuvBt709: Yuv420pToBgraV2<Bt709>(y, yStride, u, uStride, v, vStride, width, height, bgra, bgraStride, alpha); break;
178
0
            case SimdYuvBt2020: Yuv420pToBgraV2<Bt2020>(y, yStride, u, uStride, v, vStride, width, height, bgra, bgraStride, alpha); break;
179
0
            case SimdYuvTrect871: Yuv420pToBgraV2<Trect871>(y, yStride, u, uStride, v, vStride, width, height, bgra, bgraStride, alpha); break;
180
0
            default:
181
0
                assert(0);
182
0
            }
183
0
        }
184
185
        //-------------------------------------------------------------------------------------------------
186
187
        template <class YuvType> void Yuv422pToBgraV2(const uint8_t* y, size_t yStride, const uint8_t* u, size_t uStride, const uint8_t* v, size_t vStride,
188
            size_t width, size_t height, uint8_t* bgra, size_t bgraStride, uint8_t alpha)
189
0
        {
190
0
            assert((width % 2 == 0) && (width >= 2));
191
192
0
            for (size_t row = 0; row < height; row += 1)
193
0
            {
194
0
                for (size_t colUV = 0, colY = 0, colBgra = 0; colY < width; colY += 2, colUV++, colBgra += 8)
195
0
                    Yuv422pToBgra<YuvType>(y + colY, u[colUV], v[colUV], alpha, bgra + colBgra);
196
0
                y += yStride;
197
0
                u += uStride;
198
0
                v += vStride;
199
0
                bgra += bgraStride;
200
0
            }
201
0
        }
Unexecuted instantiation: void Simd::Base::Yuv422pToBgraV2<Simd::Base::Bt601>(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned long, unsigned long, unsigned char*, unsigned long, unsigned char)
Unexecuted instantiation: void Simd::Base::Yuv422pToBgraV2<Simd::Base::Bt709>(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned long, unsigned long, unsigned char*, unsigned long, unsigned char)
Unexecuted instantiation: void Simd::Base::Yuv422pToBgraV2<Simd::Base::Bt2020>(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned long, unsigned long, unsigned char*, unsigned long, unsigned char)
Unexecuted instantiation: void Simd::Base::Yuv422pToBgraV2<Simd::Base::Trect871>(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned long, unsigned long, unsigned char*, unsigned long, unsigned char)
202
203
        void Yuv422pToBgraV2(const uint8_t* y, size_t yStride, const uint8_t* u, size_t uStride, const uint8_t* v, size_t vStride,
204
            size_t width, size_t height, uint8_t* bgra, size_t bgraStride, uint8_t alpha, SimdYuvType yuvType)
205
0
        {
206
0
            switch (yuvType)
207
0
            {
208
0
            case SimdYuvBt601: Yuv422pToBgraV2<Bt601>(y, yStride, u, uStride, v, vStride, width, height, bgra, bgraStride, alpha); break;
209
0
            case SimdYuvBt709: Yuv422pToBgraV2<Bt709>(y, yStride, u, uStride, v, vStride, width, height, bgra, bgraStride, alpha); break;
210
0
            case SimdYuvBt2020: Yuv422pToBgraV2<Bt2020>(y, yStride, u, uStride, v, vStride, width, height, bgra, bgraStride, alpha); break;
211
0
            case SimdYuvTrect871: Yuv422pToBgraV2<Trect871>(y, yStride, u, uStride, v, vStride, width, height, bgra, bgraStride, alpha); break;
212
0
            default:
213
0
                assert(0);
214
0
            }
215
0
        }
216
217
        //-------------------------------------------------------------------------------------------------
218
219
        template <class YuvType> void Yuv444pToBgraV2(const uint8_t* y, size_t yStride, const uint8_t* u, size_t uStride, const uint8_t* v, size_t vStride,
220
            size_t width, size_t height, uint8_t* bgra, size_t bgraStride, uint8_t alpha)
221
0
        {
222
0
            for (size_t row = 0; row < height; ++row)
223
0
            {
224
0
                for (size_t col = 0, colBgra = 0; col < width; col++, colBgra += 4)
225
0
                    YuvToBgra<YuvType>(y[col], u[col], v[col], alpha, bgra + colBgra);
226
0
                y += yStride;
227
0
                u += uStride;
228
0
                v += vStride;
229
0
                bgra += bgraStride;
230
0
            }
231
0
        }
Unexecuted instantiation: void Simd::Base::Yuv444pToBgraV2<Simd::Base::Bt601>(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned long, unsigned long, unsigned char*, unsigned long, unsigned char)
Unexecuted instantiation: void Simd::Base::Yuv444pToBgraV2<Simd::Base::Bt709>(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned long, unsigned long, unsigned char*, unsigned long, unsigned char)
Unexecuted instantiation: void Simd::Base::Yuv444pToBgraV2<Simd::Base::Bt2020>(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned long, unsigned long, unsigned char*, unsigned long, unsigned char)
Unexecuted instantiation: void Simd::Base::Yuv444pToBgraV2<Simd::Base::Trect871>(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned long, unsigned long, unsigned char*, unsigned long, unsigned char)
232
233
        void Yuv444pToBgraV2(const uint8_t* y, size_t yStride, const uint8_t* u, size_t uStride, const uint8_t* v, size_t vStride,
234
            size_t width, size_t height, uint8_t* bgra, size_t bgraStride, uint8_t alpha, SimdYuvType yuvType)
235
0
        {
236
0
            switch (yuvType)
237
0
            {
238
0
            case SimdYuvBt601: Yuv444pToBgraV2<Bt601>(y, yStride, u, uStride, v, vStride, width, height, bgra, bgraStride, alpha); break;
239
0
            case SimdYuvBt709: Yuv444pToBgraV2<Bt709>(y, yStride, u, uStride, v, vStride, width, height, bgra, bgraStride, alpha); break;
240
0
            case SimdYuvBt2020: Yuv444pToBgraV2<Bt2020>(y, yStride, u, uStride, v, vStride, width, height, bgra, bgraStride, alpha); break;
241
0
            case SimdYuvTrect871: Yuv444pToBgraV2<Trect871>(y, yStride, u, uStride, v, vStride, width, height, bgra, bgraStride, alpha); break;
242
0
            default:
243
0
                assert(0);
244
0
            }
245
0
        }
246
247
        //-------------------------------------------------------------------------------------------------
248
249
        template <class YuvType> void Yuv444pToRgbaV2(const uint8_t* y, size_t yStride, const uint8_t* u, size_t uStride, const uint8_t* v, size_t vStride,
250
            size_t width, size_t height, uint8_t* rgba, size_t rgbaStride, uint8_t alpha)
251
0
        {
252
0
            for (size_t row = 0; row < height; ++row)
253
0
            {
254
0
                for (size_t col = 0, colRgba = 0; col < width; col++, colRgba += 4)
255
0
                    YuvToRgba<YuvType>(y[col], u[col], v[col], alpha, rgba + colRgba);
256
0
                y += yStride;
257
0
                u += uStride;
258
0
                v += vStride;
259
0
                rgba += rgbaStride;
260
0
            }
261
0
        }
Unexecuted instantiation: void Simd::Base::Yuv444pToRgbaV2<Simd::Base::Bt601>(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned long, unsigned long, unsigned char*, unsigned long, unsigned char)
Unexecuted instantiation: void Simd::Base::Yuv444pToRgbaV2<Simd::Base::Bt709>(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned long, unsigned long, unsigned char*, unsigned long, unsigned char)
Unexecuted instantiation: void Simd::Base::Yuv444pToRgbaV2<Simd::Base::Bt2020>(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned long, unsigned long, unsigned char*, unsigned long, unsigned char)
Unexecuted instantiation: void Simd::Base::Yuv444pToRgbaV2<Simd::Base::Trect871>(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned long, unsigned long, unsigned char*, unsigned long, unsigned char)
262
263
        void Yuv444pToRgbaV2(const uint8_t* y, size_t yStride, const uint8_t* u, size_t uStride, const uint8_t* v, size_t vStride,
264
            size_t width, size_t height, uint8_t* rgba, size_t rgbaStride, uint8_t alpha, SimdYuvType yuvType)
265
0
        {
266
0
            switch (yuvType)
267
0
            {
268
0
            case SimdYuvBt601: Yuv444pToRgbaV2<Bt601>(y, yStride, u, uStride, v, vStride, width, height, rgba, rgbaStride, alpha); break;
269
0
            case SimdYuvBt709: Yuv444pToRgbaV2<Bt709>(y, yStride, u, uStride, v, vStride, width, height, rgba, rgbaStride, alpha); break;
270
0
            case SimdYuvBt2020: Yuv444pToRgbaV2<Bt2020>(y, yStride, u, uStride, v, vStride, width, height, rgba, rgbaStride, alpha); break;
271
0
            case SimdYuvTrect871: Yuv444pToRgbaV2<Trect871>(y, yStride, u, uStride, v, vStride, width, height, rgba, rgbaStride, alpha); break;
272
0
            default:
273
0
                assert(0);
274
0
            }
275
0
        }
276
    }
277
}