GCC Code Coverage Report


Directory: avs_core/
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 16.2% 1743 / 0 / 10727
Functions: 25.6% 54 / 0 / 211
Branches: 15.3% 710 / 0 / 4644

convert/convert_planar.cpp
Line Branch Exec Source
1 // Avisynth v2.5. Copyright 2002 Ben Rudiak-Gould et al.
2 // http://avisynth.nl
3
4 // This program is free software; you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation; either version 2 of the License, or
7 // (at your option) any later version.
8 //
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with this program; if not, write to the Free Software
16 // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA, or visit
17 // http://www.gnu.org/copyleft/gpl.html .
18 //
19 // Linking Avisynth statically or dynamically with other modules is making a
20 // combined work based on Avisynth. Thus, the terms and conditions of the GNU
21 // General Public License cover the whole combination.
22 //
23 // As a special exception, the copyright holders of Avisynth give you
24 // permission to link Avisynth with independent modules that communicate with
25 // Avisynth solely through the interfaces defined in avisynth.h, regardless of the license
26 // terms of these independent modules, and to copy and distribute the
27 // resulting combined work under terms of your choice, provided that
28 // every copy of the combined work is accompanied by a complete copy of
29 // the source code of Avisynth (the version of Avisynth used to produce the
30 // combined work), being distributed under the terms of the GNU General
31 // Public License plus this exception. An independent module is a module
32 // which is not derived from or based on Avisynth, such as 3rd-party filters,
33 // import and export plugins, or graphical user interfaces.
34
35 // ConvertPlanar (c) 2005 by Klaus Post
36
37
38 #include "convert.h"
39 #include "convert_matrix.h"
40 #include "convert_helper.h"
41 #include "convert_planar.h"
42 #ifdef INTEL_INTRINSICS
43 #include "intel/convert_planar_sse.h"
44 #include "intel/convert_planar_avx2.h"
45 #endif
46 #include "convert_bits.h"
47 #include "../filters/resample.h"
48 #include "../filters/planeswap.h"
49 #include "../filters/field.h"
50
51 #ifdef AVS_WINDOWS
52 #include <avs/win.h>
53 #else
54 #include <avs/posix.h>
55 #endif
56
57 #include <avs/alignment.h>
58 #include <algorithm>
59 #include <string>
60 #include <vector>
61
62 DISABLE_WARNING_PUSH
63 DISABLE_WARNING_UNREFERENCED_LOCAL_VARIABLE
64
65 template <typename pixel_t>
66 8 void fill_chroma(uint8_t * dstp_u, uint8_t * dstp_v, int height, int row_size, int pitch, pixel_t val)
67 {
68
3/6
void fill_chroma<float>(unsigned char*, unsigned char*, int, int, int, float):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 22 taken 1 time.
void fill_chroma<unsigned char>(unsigned char*, unsigned char*, int, int, int, unsigned char):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 22 taken 6 times.
void fill_chroma<unsigned short>(unsigned char*, unsigned char*, int, int, int, unsigned short):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 22 taken 1 time.
8 if (pitch == row_size) {
69 size_t size = height * pitch / sizeof(pixel_t);
70 std::fill_n(reinterpret_cast<pixel_t*>(dstp_u), size, val);
71 std::fill_n(reinterpret_cast<pixel_t*>(dstp_v), size, val);
72 }
73 else {
74 8 size_t size = row_size / sizeof(pixel_t);
75
6/6
void fill_chroma<float>(unsigned char*, unsigned char*, int, int, int, float):
✓ Branch 42 → 23 taken 3 times.
✓ Branch 42 → 43 taken 1 time.
void fill_chroma<unsigned char>(unsigned char*, unsigned char*, int, int, int, unsigned char):
✓ Branch 42 → 23 taken 15 times.
✓ Branch 42 → 43 taken 6 times.
void fill_chroma<unsigned short>(unsigned char*, unsigned char*, int, int, int, unsigned short):
✓ Branch 42 → 23 taken 2 times.
✓ Branch 42 → 43 taken 1 time.
28 for (int i = 0; i < height; i++) {
76 20 std::fill_n(reinterpret_cast<pixel_t*>(dstp_u), size, val);
77 20 std::fill_n(reinterpret_cast<pixel_t*>(dstp_v), size, val);
78 20 dstp_u += pitch;
79 20 dstp_v += pitch;
80 }
81 }
82 8 }
83
84 template <typename pixel_t>
85 5 void fill_plane(uint8_t * dstp, int height, int row_size, int pitch, pixel_t val)
86 {
87
2/6
void fill_plane<float>(unsigned char*, int, int, int, float):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 13 taken 2 times.
void fill_plane<unsigned char>(unsigned char*, int, int, int, unsigned char):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 13 taken 3 times.
void fill_plane<unsigned short>(unsigned char*, int, int, int, unsigned short):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 13 not taken.
5 if (pitch == row_size) {
88 size_t size = height * pitch / sizeof(pixel_t);
89 std::fill_n(reinterpret_cast<pixel_t*>(dstp), size, val);
90 }
91 else {
92 5 size_t size = row_size / sizeof(pixel_t);
93
4/6
void fill_plane<float>(unsigned char*, int, int, int, float):
✓ Branch 24 → 14 taken 4 times.
✓ Branch 24 → 25 taken 2 times.
void fill_plane<unsigned char>(unsigned char*, int, int, int, unsigned char):
✓ Branch 24 → 14 taken 12 times.
✓ Branch 24 → 25 taken 3 times.
void fill_plane<unsigned short>(unsigned char*, int, int, int, unsigned short):
✗ Branch 24 → 14 not taken.
✗ Branch 24 → 25 not taken.
21 for (int i = 0; i < height; i++) {
94 16 std::fill_n(reinterpret_cast<pixel_t*>(dstp), size, val);
95 16 dstp += pitch;
96 }
97 }
98 5 }
99
100 // specialize it
101 template void fill_plane<uint8_t>(uint8_t * dstp, int height, int row_size, int pitch, uint8_t val);
102 template void fill_plane<uint16_t>(uint8_t * dstp, int height, int row_size, int pitch, uint16_t val);
103 template void fill_plane<float>(uint8_t * dstp, int height, int row_size, int pitch, float val);
104 template void fill_chroma<uint8_t>(uint8_t * dstp_u, uint8_t * dstp_v, int height, int row_size, int pitch, uint8_t val);
105 template void fill_chroma<uint16_t>(uint8_t * dstp_u, uint8_t * dstp_v, int height, int row_size, int pitch, uint16_t val);
106 template void fill_chroma<float>(uint8_t * dstp_u, uint8_t * dstp_v, int height, int row_size, int pitch, float val);
107
108
109 // ConvertToY::ConvertToY moved into ConvertPlanarToGeneric, since the conversion logic and parameters overlap with -->444 Conversion, we just need only Y.
110 // Legacy formats (packed RGB/YUY2) are handled uniformly inside.
111 3 AVSValue __cdecl ConvertToPlanarGeneric::CreateY(AVSValue args, void* user_data, IScriptEnvironment* env) {
112 3 bool only_8bit = reinterpret_cast<intptr_t>(user_data) == 0;
113
2/4
✓ Branch 2 → 3 taken 3 times.
✗ Branch 2 → 56 not taken.
✓ Branch 3 → 4 taken 3 times.
✗ Branch 3 → 56 not taken.
3 PClip clip = args[0].AsClip();
114
115 // 0 1 2 3
116 // c[matrix]s[bits]i[quality]b
117
1/2
✗ Branch 4 → 5 not taken.
✓ Branch 4 → 15 taken 3 times.
3 if (only_8bit) {
118 // ConvertToY8() syntax
119 if (args[2].Defined() && args[2].AsInt() != 8)
120 env->ThrowError("ConvertToY8: only 8 bit output supported. "
121 "Use ConvertToY for higher bit depth.");
122 }
123
124 // 1.) One single route: planar constructor, where YUY2 is converted to Y8 if needed
125 // 2.) If Y, reason to not return it right now:
126 // - possible bit-depth conversion,
127 // - optional Y-Y future matrix (auto:full->auto:limited) syntax conversion)
128
129 // We use the very same logic as for ConvertToYV24/YUV444, ConvertToYV16/YUV422, ConvertToYV12/YUV420
130
1/2
✗ Branch 15 → 16 not taken.
✓ Branch 15 → 34 taken 3 times.
3 if (only_8bit) {
131 // ConvertToY8() syntax, force 8 bit output}
132 AVSValue new_args[4] = {
133 args[0], args[1], AVSValue(8), args[3]
134 };
135 AVSValue new_args_val(new_args, 4);
136 return Create(new_args_val, "ConvertToY", only_8bit, false /*to_yuva*/, env);
137 }
138 else {
139
1/2
✓ Branch 34 → 35 taken 3 times.
✗ Branch 34 → 54 not taken.
3 return Create(args, "ConvertToY", only_8bit, false /*to_yuva*/, env);
140 }
141 3 }
142
143 /*****************************************************
144 * ConvertRGBToYUV444 or simply Y only (when to_y=true)
145 ******************************************************/
146
147 10 ConvertRGBToYUV444::ConvertRGBToYUV444(PClip src, const char *matrix_name, bool keep_packedrgb_alpha, int _target_bit_depth, bool _quality, bool& bitdepthConverted, bool _to_y, IScriptEnvironment* env)
148
2/4
✓ Branch 2 → 3 taken 10 times.
✗ Branch 2 → 102 not taken.
✓ Branch 3 → 4 taken 10 times.
✗ Branch 3 → 100 not taken.
10 : GenericVideoFilter(src), target_bit_depth(_target_bit_depth), quality(_quality), conv_function(nullptr), conv_function_chroma(nullptr), conv_function_a(nullptr), to_y(_to_y)
149 {
150
2/4
✓ Branch 5 → 6 taken 10 times.
✗ Branch 5 → 105 not taken.
✗ Branch 6 → 7 not taken.
✓ Branch 6 → 8 taken 10 times.
10 if (!vi.IsRGB())
151 env->ThrowError("ConvertRGBToYV24/YUV444: Only RGB data input accepted");
152
153
5/10
✓ Branch 8 → 9 taken 10 times.
✗ Branch 8 → 105 not taken.
✓ Branch 9 → 10 taken 10 times.
✗ Branch 9 → 12 not taken.
✓ Branch 10 → 11 taken 10 times.
✗ Branch 10 → 105 not taken.
✗ Branch 11 → 12 not taken.
✓ Branch 11 → 13 taken 10 times.
✗ Branch 14 → 15 not taken.
✓ Branch 14 → 16 taken 10 times.
10 if (vi.IsRGB48() || vi.IsRGB64())
154 env->ThrowError("ConvertRGBToYV24/YUV444: internal error: packed 16 bit not supported, must be converted to RGBP(A)16");
155
156 // ChromaInPlacement parameter exists, (default none/-1) + input frame properties; 'left'-ish _ChromaLocation is allowed, checked later
157
1/2
✓ Branch 17 → 18 taken 10 times.
✗ Branch 17 → 105 not taken.
10 auto frame0 = src->GetFrame(0, env);
158
1/2
✓ Branch 18 → 19 taken 10 times.
✗ Branch 18 → 103 not taken.
10 const AVSMap* props = env->getFramePropsRO(frame0);
159
160 // input _ColorRange frame property can appear for RGB source (studio range limited rgb)
161
1/2
✓ Branch 19 → 20 taken 10 times.
✗ Branch 19 → 103 not taken.
10 matrix_parse_merge_with_props(true /*in rgb*/, false /*out yuv*/, matrix_name, props, theMatrix, theColorRange, theOutColorRange, env);
162
163 10 const int shift = 15; // internally 15 bits precision, still no overflow in calculations
164
1/2
✓ Branch 20 → 21 taken 10 times.
✗ Branch 20 → 103 not taken.
10 int bits_per_pixel = vi.BitsPerComponent();
165 10 source_bit_depth = bits_per_pixel;
166
167
2/4
✓ Branch 21 → 22 taken 10 times.
✗ Branch 21 → 103 not taken.
✗ Branch 22 → 23 not taken.
✓ Branch 22 → 24 taken 10 times.
10 if (!do_BuildMatrix_Rgb2Yuv(theMatrix, theColorRange, theOutColorRange, shift, source_bit_depth, /*ref*/matrix))
168 env->ThrowError("ConvertRGBToYV24/YUV444: Unknown matrix.");
169
170 10 theColorRange = theOutColorRange; // final frame property
171
172 // target_bit_depth == -1: no conversion required
173 10 const bool need_bitdepth_conversion = (target_bit_depth != -1);
174
175 // get alpha converter, GetFrame is using that if alpha must be depth-converterd and not only copied
176
2/2
✓ Branch 24 → 25 taken 8 times.
✓ Branch 24 → 30 taken 2 times.
10 if (need_bitdepth_conversion)
177 {
178 // supported conversions:
179 // 8-16-bits any range to 8-16, 32 bits any range
180 8 bitdepthConverted = true;
181
182
2/2
✓ Branch 25 → 26 taken 3 times.
✓ Branch 25 → 31 taken 5 times.
8 if (!to_y) { // single plane Y only has no alpha
183 #ifdef INTEL_INTRINSICS
184
1/2
✓ Branch 26 → 27 taken 3 times.
✗ Branch 26 → 103 not taken.
3 const bool sse2 = !!(env->GetCPUFlags() & CPUF_SSE2);
185
1/2
✓ Branch 27 → 28 taken 3 times.
✗ Branch 27 → 103 not taken.
3 const bool sse4 = !!(env->GetCPUFlags() & CPUF_SSE4_1);
186
1/2
✓ Branch 28 → 29 taken 3 times.
✗ Branch 28 → 103 not taken.
3 const bool avx2 = !!(env->GetCPUFlags() & CPUF_AVX2);
187 #endif
188 // we really need only alpha conversion function
189 3 const bool fulls = true; // alpha is always full range
190 3 const bool fulld = true; // alpha is always full range
191 3 const int dither_mode = -1;
192 #ifdef INTEL_INTRINSICS
193
1/2
✓ Branch 29 → 31 taken 3 times.
✗ Branch 29 → 103 not taken.
3 get_convert_any_bits_functions(dither_mode, source_bit_depth, target_bit_depth, fulls, fulld, sse2, sse4, avx2, conv_function, conv_function_chroma, conv_function_a);
194 #else
195 get_convert_any_bits_functions(dither_mode, source_bit_depth, target_bit_depth, fulls, fulld, conv_function, conv_function_chroma, conv_function_a);
196 #endif
197 }
198 }
199 else {
200 2 bitdepthConverted = false;
201 2 target_bit_depth = source_bit_depth;
202 }
203
204
5/8
✓ Branch 31 → 32 taken 10 times.
✗ Branch 31 → 103 not taken.
✓ Branch 32 → 33 taken 1 time.
✓ Branch 32 → 35 taken 9 times.
✓ Branch 33 → 34 taken 1 time.
✗ Branch 33 → 103 not taken.
✓ Branch 34 → 35 taken 1 time.
✗ Branch 34 → 36 not taken.
10 isPlanarRGBfamily = vi.IsPlanarRGB() || vi.IsPlanarRGBA();
205
4/14
✓ Branch 37 → 38 taken 10 times.
✗ Branch 37 → 103 not taken.
✓ Branch 38 → 39 taken 9 times.
✓ Branch 38 → 44 taken 1 time.
✗ Branch 39 → 40 not taken.
✓ Branch 39 → 45 taken 9 times.
✗ Branch 40 → 41 not taken.
✗ Branch 40 → 103 not taken.
✗ Branch 41 → 42 not taken.
✗ Branch 41 → 44 not taken.
✗ Branch 42 → 43 not taken.
✗ Branch 42 → 103 not taken.
✗ Branch 43 → 44 not taken.
✗ Branch 43 → 45 not taken.
10 targetHasAlpha = vi.IsPlanarRGBA() || (keep_packedrgb_alpha && (vi.IsRGB32() || vi.IsRGB64()));
206 // for packed RGB it depends: ConvertToYUVAxxx() can force YUVA target option
207
1/2
✓ Branch 46 → 47 taken 10 times.
✗ Branch 46 → 85 not taken.
10 if (isPlanarRGBfamily)
208 {
209
2/2
✓ Branch 47 → 48 taken 5 times.
✓ Branch 47 → 56 taken 5 times.
10 if (to_y) {
210 // --> Y
211 5 pixel_step = -1;
212
4/7
✓ Branch 48 → 49 taken 2 times.
✓ Branch 48 → 50 taken 1 time.
✗ Branch 48 → 51 not taken.
✗ Branch 48 → 52 not taken.
✓ Branch 48 → 53 taken 1 time.
✓ Branch 48 → 54 taken 1 time.
✗ Branch 48 → 55 not taken.
5 switch (target_bit_depth)
213 {
214 2 case 8: vi.pixel_type = VideoInfo::CS_Y8; break;
215 1 case 10: vi.pixel_type = VideoInfo::CS_Y10; break;
216 case 12: vi.pixel_type = VideoInfo::CS_Y12; break;
217 case 14: vi.pixel_type = VideoInfo::CS_Y14; break;
218 1 case 16: vi.pixel_type = VideoInfo::CS_Y16; break;
219 1 case 32: vi.pixel_type = VideoInfo::CS_Y32; break;
220 }
221 }
222 else {
223 // --> 444(4)
224
2/2
✓ Branch 56 → 57 taken 1 time.
✓ Branch 56 → 58 taken 4 times.
5 pixel_step = targetHasAlpha ? -2 : -1;
225
4/7
✓ Branch 59 → 60 taken 1 time.
✓ Branch 59 → 64 taken 2 times.
✗ Branch 59 → 68 not taken.
✗ Branch 59 → 72 not taken.
✓ Branch 59 → 76 taken 1 time.
✓ Branch 59 → 80 taken 1 time.
✗ Branch 59 → 84 not taken.
5 switch (target_bit_depth)
226 {
227
1/2
✗ Branch 60 → 61 not taken.
✓ Branch 60 → 62 taken 1 time.
1 case 8: vi.pixel_type = targetHasAlpha ? VideoInfo::CS_YUVA444 : VideoInfo::CS_YV24; break;
228
1/2
✗ Branch 64 → 65 not taken.
✓ Branch 64 → 66 taken 2 times.
2 case 10: vi.pixel_type = targetHasAlpha ? VideoInfo::CS_YUVA444P10 : VideoInfo::CS_YUV444P10; break;
229 case 12: vi.pixel_type = targetHasAlpha ? VideoInfo::CS_YUVA444P12 : VideoInfo::CS_YUV444P12; break;
230 case 14: vi.pixel_type = targetHasAlpha ? VideoInfo::CS_YUVA444P14 : VideoInfo::CS_YUV444P14; break;
231
1/2
✓ Branch 76 → 77 taken 1 time.
✗ Branch 76 → 78 not taken.
1 case 16: vi.pixel_type = targetHasAlpha ? VideoInfo::CS_YUVA444P16 : VideoInfo::CS_YUV444P16; break;
232
1/2
✗ Branch 80 → 81 not taken.
✓ Branch 80 → 82 taken 1 time.
1 case 32: vi.pixel_type = targetHasAlpha ? VideoInfo::CS_YUVA444PS : VideoInfo::CS_YUV444PS; break;
233 }
234 }
235 } else { // packed RGB24/32/48/64
236 // for compatibility reasons ConvertToYUVxxx target is not YUVA even
237 // if original has alpha, such as RGB32.
238 // Unlike ConvertToYUVA which can force keeping RGB32's or RGB64's alpha
239
240 // must be the same, bit depth change is supported only from planar rgb
241 if (bits_per_pixel != target_bit_depth)
242 env->ThrowError("ConvertRGBToYV24/YUV444: bit depth change is only supported from planar RGB input");
243
244 pixel_step = vi.BytesFromPixels(1); // 3,4 for packed 8 bit, 6,8 for
245 switch(vi.ComponentSize())
246 {
247 case 1: vi.pixel_type = targetHasAlpha ? VideoInfo::CS_YUVA444 : VideoInfo::CS_YV24; break;
248 case 2: vi.pixel_type = targetHasAlpha ? VideoInfo::CS_YUVA444P16 : VideoInfo::CS_YUV444P16; break;
249 }
250 }
251
252 10 }
253
254 #if 0
255 // Kept for reference
256 template<int pixel_step, bool copyalpha>
257 static void convert_rgb24or32_to_yuv444_c(BYTE* dstY, BYTE* dstU, BYTE* dstV, BYTE* dstA, const BYTE* srcp, size_t Ypitch, size_t UVpitch, size_t Apitch, size_t Spitch, size_t width, size_t height, const ConversionMatrix& m)
258 {
259 const bool has_offset_rgb = 0 != m.offset_rgb;
260
261 // RGB24 (pixel_step=3)
262 // RGB32 (pixel_step=4) optional copyalpha
263 srcp += Spitch * (height - 1); // We start at last line
264 const size_t Sstep = Spitch + width * pixel_step;
265 for (size_t y = 0; y < height; y++) {
266 for (size_t x = 0; x < width; x++) {
267 int b = srcp[0];
268 int g = srcp[1];
269 int r = srcp[2];
270 if (has_offset_rgb) {
271 b = b + m.offset_rgb;
272 g = g + m.offset_rgb;
273 r = r + m.offset_rgb;
274 }
275 int Y = m.offset_y + (((int)m.y_b * b + (int)m.y_g * g + (int)m.y_r * r + 16384) >> 15);
276 int U = 128 + (((int)m.u_b * b + (int)m.u_g * g + (int)m.u_r * r + 16384) >> 15);
277 int V = 128 + (((int)m.v_b * b + (int)m.v_g * g + (int)m.v_r * r + 16384) >> 15);
278 dstY[x] = PixelClip(Y); // All the safety we can wish for.
279 dstU[x] = PixelClip(U);
280 dstV[x] = PixelClip(V);
281 if constexpr (copyalpha) {
282 dstA[x] = srcp[3];
283 }
284 srcp += pixel_step;
285 }
286 srcp -= Sstep; // packed RGBs are upside down
287 dstY += Ypitch;
288 dstU += UVpitch;
289 dstV += UVpitch;
290 if constexpr (copyalpha) {
291 dstA += Apitch;
292 }
293 }
294 }
295 #endif
296
297
298 12 PVideoFrame __stdcall ConvertRGBToYUV444::GetFrame(int n, IScriptEnvironment* env)
299 {
300
1/2
✓ Branch 3 → 4 taken 12 times.
✗ Branch 3 → 147 not taken.
12 PVideoFrame src = child->GetFrame(n, env);
301
1/2
✓ Branch 4 → 5 taken 12 times.
✗ Branch 4 → 145 not taken.
12 PVideoFrame dst = env->NewVideoFrameP(vi, &src);
302
303
1/2
✓ Branch 5 → 6 taken 12 times.
✗ Branch 5 → 143 not taken.
12 auto props = env->getFramePropsRW(dst);
304
1/2
✓ Branch 6 → 7 taken 12 times.
✗ Branch 6 → 143 not taken.
12 update_Matrix_and_ColorRange(props, theMatrix, theColorRange, env);
305
306
1/2
✓ Branch 8 → 9 taken 12 times.
✗ Branch 8 → 143 not taken.
12 BYTE* dstY = dst->GetWritePtr(PLANAR_Y);
307
3/4
✓ Branch 9 → 10 taken 5 times.
✓ Branch 9 → 11 taken 7 times.
✓ Branch 12 → 13 taken 7 times.
✗ Branch 12 → 143 not taken.
12 BYTE* dstU = to_y ? nullptr : dst->GetWritePtr(PLANAR_U);
308
3/4
✓ Branch 14 → 15 taken 5 times.
✓ Branch 14 → 16 taken 7 times.
✓ Branch 17 → 18 taken 7 times.
✗ Branch 17 → 143 not taken.
12 BYTE* dstV = to_y ? nullptr : dst->GetWritePtr(PLANAR_V);
309
310
1/2
✓ Branch 20 → 21 taken 12 times.
✗ Branch 20 → 143 not taken.
12 const int Ypitch = dst->GetPitch(PLANAR_Y);
311
3/4
✓ Branch 21 → 22 taken 5 times.
✓ Branch 21 → 23 taken 7 times.
✓ Branch 24 → 25 taken 7 times.
✗ Branch 24 → 143 not taken.
12 const int UVpitch = to_y ? 0 : dst->GetPitch(PLANAR_U);
312
313 12 const bool packedRGBsource = pixel_step > 0;
314
315
1/2
✗ Branch 26 → 27 not taken.
✓ Branch 26 → 28 taken 12 times.
12 if (packedRGBsource) {
316 env->ThrowError("Packed RGB is no more allowed here, already preconverted to planar RGB. This is a bug.");
317 }
318
319 // here we do planar RGB only
320 12 const int bits_per_pixel = source_bit_depth;
321
322 // copy or fill alpha
323 // Two places, at YUV444toPlanarRGB as well
324 BYTE* dstpA;
325
2/2
✓ Branch 28 → 29 taken 1 time.
✓ Branch 28 → 65 taken 11 times.
12 if (targetHasAlpha) {
326
1/2
✓ Branch 30 → 31 taken 1 time.
✗ Branch 30 → 143 not taken.
1 dstpA = dst->GetWritePtr(PLANAR_A);
327
1/2
✓ Branch 32 → 33 taken 1 time.
✗ Branch 32 → 143 not taken.
1 int heightA = dst->GetHeight(PLANAR_A);
328
1/2
✓ Branch 34 → 35 taken 1 time.
✗ Branch 34 → 143 not taken.
1 int rowsizeA = dst->GetRowSize(PLANAR_A);
329
1/2
✓ Branch 36 → 37 taken 1 time.
✗ Branch 36 → 143 not taken.
1 int dst_pitchA = dst->GetPitch(PLANAR_A);
330 // simple copy
331
2/4
✓ Branch 38 → 39 taken 1 time.
✗ Branch 38 → 143 not taken.
✓ Branch 39 → 40 taken 1 time.
✗ Branch 39 → 57 not taken.
1 if (src->GetRowSize(PLANAR_A)) {
332
333
1/2
✓ Branch 40 → 41 taken 1 time.
✗ Branch 40 → 50 not taken.
1 if (source_bit_depth == target_bit_depth) {
334 // vi.IsYUVA() no-no! vi is already the target video type
335
5/10
✓ Branch 42 → 43 taken 1 time.
✗ Branch 42 → 143 not taken.
✓ Branch 44 → 45 taken 1 time.
✗ Branch 44 → 143 not taken.
✓ Branch 46 → 47 taken 1 time.
✗ Branch 46 → 143 not taken.
✓ Branch 48 → 49 taken 1 time.
✗ Branch 48 → 143 not taken.
✓ Branch 49 → 64 taken 1 time.
✗ Branch 49 → 143 not taken.
1 env->BitBlt(dstpA, dst_pitchA, src->GetReadPtr(PLANAR_A), src->GetPitch(PLANAR_A), src->GetRowSize(PLANAR_A_ALIGNED), src->GetHeight(PLANAR_A));
336 }
337 else {
338 // RGBPA target + different bit-depth
339 // Alpha bit depth conversion needed, normal planes are done in-process.
340 // we need only conv_function_a, proper dispatching from ConvertBits
341 conv_function_a(src->GetReadPtr(PLANAR_A), dstpA, src->GetRowSize(PLANAR_A), heightA, src->GetPitch(PLANAR_A), dst_pitchA, source_bit_depth, target_bit_depth, -1);
342 }
343 }
344 else {
345 // fill default transparency
346 switch (target_bit_depth)
347 {
348 case 1:
349 fill_plane<BYTE>(dstpA, heightA, rowsizeA, dst_pitchA, 255);
350 break;
351 case 2:
352 fill_plane<uint16_t>(dstpA, heightA, rowsizeA, dst_pitchA, (1 << target_bit_depth) - 1);
353 break;
354 case 4:
355 fill_plane<float>(dstpA, heightA, rowsizeA, dst_pitchA, 1.0f);
356 break;
357 }
358 }
359 }
360
361
3/6
✓ Branch 66 → 67 taken 12 times.
✗ Branch 66 → 143 not taken.
✓ Branch 68 → 69 taken 12 times.
✗ Branch 68 → 143 not taken.
✓ Branch 70 → 71 taken 12 times.
✗ Branch 70 → 143 not taken.
12 const BYTE* srcp[3] = { src->GetReadPtr(PLANAR_G), src->GetReadPtr(PLANAR_B), src->GetReadPtr(PLANAR_R) };
362
3/6
✓ Branch 72 → 73 taken 12 times.
✗ Branch 72 → 143 not taken.
✓ Branch 74 → 75 taken 12 times.
✗ Branch 74 → 143 not taken.
✓ Branch 76 → 77 taken 12 times.
✗ Branch 76 → 143 not taken.
12 const int srcPitch[3] = { src->GetPitch(PLANAR_G), src->GetPitch(PLANAR_B), src->GetPitch(PLANAR_R) };
363
364 12 BYTE* dstp[3] = { dstY, dstU, dstV };
365 12 int dstPitch[3] = { Ypitch, UVpitch, UVpitch };
366
367 12 const bool force_float = quality;
368
369 // to Y
370
371
2/2
✓ Branch 77 → 78 taken 5 times.
✓ Branch 77 → 109 taken 7 times.
12 if (to_y) {
372 #ifdef INTEL_INTRINSICS
373
2/4
✓ Branch 78 → 79 taken 5 times.
✗ Branch 78 → 143 not taken.
✓ Branch 79 → 80 taken 5 times.
✗ Branch 79 → 89 not taken.
5 if (env->GetCPUFlags() & CPUF_AVX2) {
374
2/2
✓ Branch 80 → 81 taken 2 times.
✓ Branch 80 → 82 taken 3 times.
5 if (bits_per_pixel == 8)
375
1/2
✓ Branch 81 → 88 taken 2 times.
✗ Branch 81 → 143 not taken.
2 convert_yuv_to_planarrgb_avx2<ConversionDirection::RGB_TO_Y, uint8_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
376
2/2
✓ Branch 82 → 83 taken 1 time.
✓ Branch 82 → 84 taken 2 times.
3 else if (bits_per_pixel < 16)
377
1/2
✓ Branch 83 → 88 taken 1 time.
✗ Branch 83 → 143 not taken.
1 convert_yuv_to_planarrgb_avx2<ConversionDirection::RGB_TO_Y, uint16_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
378
2/2
✓ Branch 84 → 85 taken 1 time.
✓ Branch 84 → 86 taken 1 time.
2 else if (bits_per_pixel == 16)
379
1/2
✓ Branch 85 → 88 taken 1 time.
✗ Branch 85 → 143 not taken.
1 convert_yuv_to_planarrgb_avx2<ConversionDirection::RGB_TO_Y, uint16_t, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
380
1/2
✓ Branch 86 → 87 taken 1 time.
✗ Branch 86 → 88 not taken.
1 else if (bits_per_pixel == 32)
381
1/2
✓ Branch 87 → 88 taken 1 time.
✗ Branch 87 → 143 not taken.
1 convert_yuv_to_planarrgb_avx2<ConversionDirection::RGB_TO_Y, float, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
382 5 return dst;
383 }
384
385 if (env->GetCPUFlags() & CPUF_SSE2) {
386 if (bits_per_pixel == 8)
387 convert_yuv_to_planarrgb_sse2<ConversionDirection::RGB_TO_Y, uint8_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
388 else if (bits_per_pixel < 16)
389 convert_yuv_to_planarrgb_sse2<ConversionDirection::RGB_TO_Y, uint16_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
390 else if (bits_per_pixel == 16)
391 convert_yuv_to_planarrgb_sse2<ConversionDirection::RGB_TO_Y, uint16_t, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
392 else if (bits_per_pixel == 32)
393 convert_yuv_to_planarrgb_sse2<ConversionDirection::RGB_TO_Y, float, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
394 return dst;
395 }
396
397 #endif
398
399 if (bits_per_pixel == 8)
400 convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_Y, uint8_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
401 else if (bits_per_pixel < 16)
402 convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_Y, uint16_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
403 else if (bits_per_pixel == 16)
404 convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_Y, uint16_t, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
405 else if (bits_per_pixel == 32)
406 convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_Y, float, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
407 return dst;
408 }
409
410 // to YUV
411
412 #ifdef INTEL_INTRINSICS
413
2/4
✓ Branch 109 → 110 taken 7 times.
✗ Branch 109 → 143 not taken.
✓ Branch 110 → 111 taken 7 times.
✗ Branch 110 → 120 not taken.
7 if (env->GetCPUFlags() & CPUF_AVX2) {
414
2/2
✓ Branch 111 → 112 taken 3 times.
✓ Branch 111 → 113 taken 4 times.
7 if (bits_per_pixel == 8)
415
1/2
✓ Branch 112 → 119 taken 3 times.
✗ Branch 112 → 143 not taken.
3 convert_yuv_to_planarrgb_avx2<ConversionDirection::RGB_TO_YUV, uint8_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
416
1/2
✗ Branch 113 → 114 not taken.
✓ Branch 113 → 115 taken 4 times.
4 else if (bits_per_pixel < 16)
417 convert_yuv_to_planarrgb_avx2<ConversionDirection::RGB_TO_YUV, uint16_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
418
2/2
✓ Branch 115 → 116 taken 1 time.
✓ Branch 115 → 117 taken 3 times.
4 else if (bits_per_pixel == 16)
419
1/2
✓ Branch 116 → 119 taken 1 time.
✗ Branch 116 → 143 not taken.
1 convert_yuv_to_planarrgb_avx2<ConversionDirection::RGB_TO_YUV, uint16_t, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
420
1/2
✓ Branch 117 → 118 taken 3 times.
✗ Branch 117 → 119 not taken.
3 else if (bits_per_pixel == 32)
421
1/2
✓ Branch 118 → 119 taken 3 times.
✗ Branch 118 → 143 not taken.
3 convert_yuv_to_planarrgb_avx2<ConversionDirection::RGB_TO_YUV, float, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
422 7 return dst;
423 }
424
425 if (env->GetCPUFlags() & CPUF_SSE2) {
426 if (bits_per_pixel == 8)
427 convert_yuv_to_planarrgb_sse2<ConversionDirection::RGB_TO_YUV, uint8_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
428 else if (bits_per_pixel < 16)
429 convert_yuv_to_planarrgb_sse2<ConversionDirection::RGB_TO_YUV, uint16_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
430 else if (bits_per_pixel == 16)
431 convert_yuv_to_planarrgb_sse2<ConversionDirection::RGB_TO_YUV, uint16_t, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
432 else if (bits_per_pixel == 32)
433 convert_yuv_to_planarrgb_sse2<ConversionDirection::RGB_TO_YUV, float, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
434 return dst;
435 }
436
437 #endif
438
439 if (bits_per_pixel == 8)
440 convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_YUV, uint8_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
441 else if (bits_per_pixel < 16)
442 convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_YUV, uint16_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
443 else if (bits_per_pixel == 16)
444 convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_YUV, uint16_t, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
445 else if (bits_per_pixel == 32)
446 convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_YUV, float, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
447 return dst;
448
449 12 }
450
451
452
453 /*****************************************************
454 * ConvertYV24ToRGB
455 *
456 * (c) Klaus Post, 2005
457 * Generic 4:4:4(:4), 16 bit and Planar RGB(A) support 2016 by PF
458 ******************************************************/
459
460
461 8 ConvertYUV444ToRGB::ConvertYUV444ToRGB(PClip src, const char *matrix_name, int _pixel_step, int _target_bit_depth, bool _quality, bool& bitdepthConverted, IScriptEnvironment* env)
462
2/4
✓ Branch 2 → 3 taken 8 times.
✗ Branch 2 → 60 not taken.
✓ Branch 3 → 4 taken 8 times.
✗ Branch 3 → 58 not taken.
8 : GenericVideoFilter(src), pixel_step(_pixel_step), target_bit_depth(_target_bit_depth), quality(_quality), conv_function(nullptr), conv_function_chroma(nullptr), conv_function_a(nullptr)
463 {
464
465
2/4
✓ Branch 5 → 6 taken 8 times.
✗ Branch 5 → 63 not taken.
✗ Branch 6 → 7 not taken.
✓ Branch 6 → 8 taken 8 times.
8 if (!vi.Is444())
466 env->ThrowError("ConvertYUV444ToRGB: Only 4:4:4 data input accepted");
467
468
1/2
✓ Branch 9 → 10 taken 8 times.
✗ Branch 9 → 63 not taken.
8 auto frame0 = child->GetFrame(0, env);
469
1/2
✓ Branch 10 → 11 taken 8 times.
✗ Branch 10 → 61 not taken.
8 const AVSMap* props = env->getFramePropsRO(frame0);
470
1/2
✓ Branch 11 → 12 taken 8 times.
✗ Branch 11 → 61 not taken.
8 matrix_parse_merge_with_props(false /*in yuv*/, true /*out rgb*/, matrix_name, props, theMatrix, theColorRange, theOutColorRange, env);
471 // Good to know:
472 // - When frame property "_ColorRange" exists, it overrides the default output RGB color range.
473 // - PC.xxx old-style matrix names leave the color range unchanged, whether they exist or not.
474 // - When using PC.xxx and YUV is limited => output RGB is narrow range (limited)
475 // - Other non PC.xxx old matrix names:
476 // - input range is defined by the matrix name, even if _ColorRange frame property exists
477 // - output range is default Full for RGB, unless _ColorRange exists, when its value defines the output RGB range (full or limited/narrow)
478 // - new style matrix definitions: see docs. Preserve what is not set, distinct :f or :l suffixes may tell the color range, not part of matrix name.
479 // - Matrix coefficients still need to know input and output color range (full or limited/narrow) so by this time we have these two.
480
481 8 const int shift = 13; // for integer arithmetic, over 13 bits would overflow the matrix elements/internal calculation
482
1/2
✓ Branch 12 → 13 taken 8 times.
✗ Branch 12 → 61 not taken.
8 const int bits_per_pixel = vi.BitsPerComponent();
483 8 source_bit_depth = bits_per_pixel;
484
485
2/4
✓ Branch 13 → 14 taken 8 times.
✗ Branch 13 → 61 not taken.
✗ Branch 14 → 15 not taken.
✓ Branch 14 → 16 taken 8 times.
8 if (!do_BuildMatrix_Yuv2Rgb(theMatrix, theColorRange, theOutColorRange, shift, source_bit_depth, /*ref*/matrix))
486 env->ThrowError("ConvertYUV444ToRGB: Unknown matrix.");
487
488 // Old comment: what is not implemented in-process, we do the conversion with invoked ConvertBits()
489 // Now all source-target combinations are supported.
490
491 // target_bit_depth == -1: no conversion required
492 8 const bool need_bitdepth_conversion = (target_bit_depth != -1);
493
494 // get alpha converter, GetFrame is using that if alpha must be depth-converterd and not only copied
495
2/2
✓ Branch 16 → 17 taken 1 time.
✓ Branch 16 → 21 taken 7 times.
8 if (need_bitdepth_conversion)
496 {
497 // supported conversions:
498 // 8-16-bits any range to 8-16, 32 bits any range
499 1 bitdepthConverted = true;
500 #ifdef INTEL_INTRINSICS
501
1/2
✓ Branch 17 → 18 taken 1 time.
✗ Branch 17 → 61 not taken.
1 const bool sse2 = !!(env->GetCPUFlags() & CPUF_SSE2);
502
1/2
✓ Branch 18 → 19 taken 1 time.
✗ Branch 18 → 61 not taken.
1 const bool sse4 = !!(env->GetCPUFlags() & CPUF_SSE4_1);
503
1/2
✓ Branch 19 → 20 taken 1 time.
✗ Branch 19 → 61 not taken.
1 const bool avx2 = !!(env->GetCPUFlags() & CPUF_AVX2);
504 // we really need only alpha conversion function
505 1 const bool fulls = true; // alpha is always full range
506 1 const bool fulld = true; // alpha is always full range
507 1 const int dither_mode = -1;
508 #ifdef INTEL_INTRINSICS
509
1/2
✓ Branch 20 → 22 taken 1 time.
✗ Branch 20 → 61 not taken.
1 get_convert_any_bits_functions(dither_mode, source_bit_depth, target_bit_depth, fulls, fulld, sse2, sse4, avx2, conv_function, conv_function_chroma, conv_function_a);
510 #else
511 get_convert_any_bits_functions(dither_mode, source_bit_depth, target_bit_depth, fulls, fulld, conv_function, conv_function_chroma, conv_function_a);
512 #endif
513
514 #endif
515
516 }
517 else {
518 7 bitdepthConverted = false;
519 7 target_bit_depth = source_bit_depth;
520 }
521
522 8 theOutMatrix = Matrix_e::AVS_MATRIX_RGB;
523
524
1/6
✓ Branch 22 → 23 taken 8 times.
✗ Branch 22 → 51 not taken.
✗ Branch 22 → 52 not taken.
✗ Branch 22 → 53 not taken.
✗ Branch 22 → 54 not taken.
✗ Branch 22 → 55 not taken.
8 switch (pixel_step)
525 {
526 8 case -1: case -2: // target is planar RGB(A): all bit depths supported
527 {
528 8 const bool hasAlpha = (pixel_step == -2);
529
4/7
✓ Branch 23 → 24 taken 2 times.
✓ Branch 23 → 28 taken 1 time.
✗ Branch 23 → 32 not taken.
✗ Branch 23 → 36 not taken.
✓ Branch 23 → 40 taken 2 times.
✓ Branch 23 → 44 taken 3 times.
✗ Branch 23 → 48 not taken.
8 switch (target_bit_depth)
530 {
531
2/2
✓ Branch 24 → 25 taken 1 time.
✓ Branch 24 → 26 taken 1 time.
2 case 8: vi.pixel_type = hasAlpha ? VideoInfo::CS_RGBAP : VideoInfo::CS_RGBP; break;
532
1/2
✗ Branch 28 → 29 not taken.
✓ Branch 28 → 30 taken 1 time.
1 case 10: vi.pixel_type = hasAlpha ? VideoInfo::CS_RGBAP10 : VideoInfo::CS_RGBP10; break;
533 case 12: vi.pixel_type = hasAlpha ? VideoInfo::CS_RGBAP12 : VideoInfo::CS_RGBP12; break;
534 case 14: vi.pixel_type = hasAlpha ? VideoInfo::CS_RGBAP14 : VideoInfo::CS_RGBP14; break;
535
1/2
✓ Branch 40 → 41 taken 2 times.
✗ Branch 40 → 42 not taken.
2 case 16: vi.pixel_type = hasAlpha ? VideoInfo::CS_RGBAP16 : VideoInfo::CS_RGBP16; break;
536
2/2
✓ Branch 44 → 45 taken 1 time.
✓ Branch 44 → 46 taken 2 times.
3 case 32: vi.pixel_type = hasAlpha ? VideoInfo::CS_RGBAPS : VideoInfo::CS_RGBPS; break;
537 default:
538 env->ThrowError("ConvertYUV444ToRGB: invalid vi.BitsPerComponent(): %d", vi.BitsPerComponent());
539 }
540 }
541 8 break;
542 case 3: vi.pixel_type = VideoInfo::CS_BGR24; break;
543 case 4: vi.pixel_type = VideoInfo::CS_BGR32; break;
544 case 6: vi.pixel_type = VideoInfo::CS_BGR48; break;
545 case 8: vi.pixel_type = VideoInfo::CS_BGR64; break;
546 default:
547 env->ThrowError("ConvertYUV444ToRGB: invalid pixel step: %d", pixel_step);
548 }
549
550 8 }
551
552 template<int pixel_step, bool source_has_alpha>
553 static void convert_yv24_to_rgb_c(BYTE* dstp, const BYTE* srcY, const BYTE* srcU, const BYTE* srcV, const BYTE* srcA, int dst_pitch, int src_pitch_y, int src_pitch_uv, int src_pitch_a, int width, int height, const ConversionMatrix& matrix)
554 {
555 dstp += dst_pitch * (height - 1); // We start at last line. Packed RGB is bottom-up.
556 auto round_mask_plus_rgb_offset_i = 4096 + (matrix.offset_rgb << 13);
557 if constexpr (pixel_step == 4) { // RGB32
558 for (int y = 0; y < height; y++) {
559 for (int x = 0; x < width; x++) {
560 int Y = srcY[x] + matrix.offset_y;
561 int U = srcU[x] - 128;
562 int V = srcV[x] - 128;
563 uint8_t a = source_has_alpha ? srcA[x] : 255; // YUVA aware
564 int b = (((int)matrix.y_b * Y + (int)matrix.u_b * U + (int)matrix.v_b * V + round_mask_plus_rgb_offset_i) >> 13);
565 int g = (((int)matrix.y_g * Y + (int)matrix.u_g * U + (int)matrix.v_g * V + round_mask_plus_rgb_offset_i) >> 13);
566 int r = (((int)matrix.y_r * Y + (int)matrix.u_r * U + (int)matrix.v_r * V + round_mask_plus_rgb_offset_i) >> 13);
567 dstp[x * 4 + 0] = PixelClip(b); // All the safety we can wish for.
568 dstp[x * 4 + 1] = PixelClip(g); // Probably needed here.
569 dstp[x * 4 + 2] = PixelClip(r);
570 dstp[x * 4 + 3] = a; // alpha
571 }
572 dstp -= dst_pitch;
573 srcY += src_pitch_y;
574 srcU += src_pitch_uv;
575 srcV += src_pitch_uv;
576 srcA += src_pitch_a;
577 }
578 }
579 else if constexpr (pixel_step == 3) { // RGB24
580 const int Dstep = dst_pitch + (width * pixel_step);
581 for (int y = 0; y < height; y++) {
582 for (int x = 0; x < width; x++) {
583 int Y = srcY[x] + matrix.offset_y;
584 int U = srcU[x] - 128;
585 int V = srcV[x] - 128;
586 int b = (((int)matrix.y_b * Y + (int)matrix.u_b * U + (int)matrix.v_b * V + round_mask_plus_rgb_offset_i) >> 13);
587 int g = (((int)matrix.y_g * Y + (int)matrix.u_g * U + (int)matrix.v_g * V + round_mask_plus_rgb_offset_i) >> 13);
588 int r = (((int)matrix.y_r * Y + (int)matrix.u_r * U + (int)matrix.v_r * V + round_mask_plus_rgb_offset_i) >> 13);
589 dstp[0] = PixelClip(b); // All the safety we can wish for.
590 dstp[1] = PixelClip(g); // Probably needed here.
591 dstp[2] = PixelClip(r);
592 dstp += pixel_step;
593 }
594 dstp -= Dstep;
595 srcY += src_pitch_y;
596 srcU += src_pitch_uv;
597 srcV += src_pitch_uv;
598 }
599 }
600 }
601
602
603 // C reference implementation matching AVX2/SSE2 logic with all conversion directions
604 template<ConversionDirection direction, typename pixel_t, bool lessthan16bit, bool lessthan16bit_target, typename pixel_t_dst, YuvRgbConversionType conv_type>
605 35 static void convert_yuv_to_planarrgb_c_internal(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m,
606 int bits_per_pixel, int bits_per_pixel_target)
607 {
608 // int64_t needed for exact 16 bit pixels in integer workflow
609 // float input always uses float workflow
610 typedef typename std::conditional<sizeof(pixel_t) == 1 || lessthan16bit, int, int64_t>::type safe_int_t;
611
612 // Remark: for RGB->YUV and RGB->Y 16 bit original, we later redirect the constexpr values to a full-float-workflow.
613 // Though int64_t would work here in C just fine, but has serious performance issues at Intel SIMD,
614 // so we make it identical to the SIMD path and use float path which is simple and much quicker in this case.)
615
616 35 constexpr int INT_ARITH_SHIFT =
617 (direction == ConversionDirection::YUV_TO_RGB) ? 13 :
618 (direction == ConversionDirection::RGB_TO_YUV || direction == ConversionDirection::RGB_TO_Y) ? 15 :
619 (direction == ConversionDirection::YUV_TO_YUV) ? 14 : 13;
620
621 // Validate: float input requires FORCE_FLOAT conversion type
622 static_assert(!(std::is_floating_point<pixel_t>::value && conv_type != YuvRgbConversionType::FORCE_FLOAT),
623 "FORCE_FLOAT conversion type is required for float input pixel type");
624
625 35 constexpr bool final_is_float = std::is_floating_point<pixel_t_dst>::value;
626 35 constexpr bool would_need_64bit_v_patch = !lessthan16bit && !final_is_float && (INT_ARITH_SHIFT == 15);
627 // RGB_TO_YUV, RGB_TO_Y 16 bit origin case needs 64 bit extension at one point to avoid overflow
628 // but it makes it much slower than the full-float path, so we force float path for that case as well
629
630 // effectively full-float-inside for int full range conversion, but with the same output rules as other float conversions
631 35 constexpr bool force_float = (conv_type == YuvRgbConversionType::FORCE_FLOAT) || would_need_64bit_v_patch;
632
633 35 constexpr bool need_int_conversion_narrow_range = conv_type == YuvRgbConversionType::BITCONV_INT_LIMITED;
634 35 constexpr bool need_int_conversion_full_range = conv_type == YuvRgbConversionType::BITCONV_INT_FULL;
635 35 constexpr bool need_int_conversion = conv_type == YuvRgbConversionType::BITCONV_INT_FULL ||
636 conv_type == YuvRgbConversionType::BITCONV_INT_LIMITED ||
637 (conv_type == YuvRgbConversionType::FORCE_FLOAT && !final_is_float);
638 35 const bool float_matrix_workflow = force_float || need_int_conversion_full_range;
639
640 // quasi-constexpr, may help optimizer
641 14 if constexpr (std::is_same<pixel_t, uint8_t>::value) bits_per_pixel = 8;
642 14 if constexpr (std::is_same<pixel_t_dst, uint8_t>::value) bits_per_pixel_target = 8;
643 10 if constexpr (std::is_same<pixel_t, uint16_t>::value && !lessthan16bit) bits_per_pixel = 16;
644 8 if constexpr (std::is_same<pixel_t_dst, uint16_t>::value && !lessthan16bit_target) bits_per_pixel_target = 16;
645 22 if constexpr (conv_type == YuvRgbConversionType::NATIVE_INT) bits_per_pixel_target = bits_per_pixel;
646
647 35 const int bit_diff = need_int_conversion ? bits_per_pixel_target - bits_per_pixel : 0;
648 35 const int target_shift = need_int_conversion_narrow_range ? INT_ARITH_SHIFT - bit_diff : INT_ARITH_SHIFT;
649 35 const int ROUNDER = (final_is_float || float_matrix_workflow) ? 0 : (1 << (target_shift - 1));
650
651 35 const float out_offset_f = m.offset_out_f_32;
652 35 const int half_pixel_offset = 1 << (bits_per_pixel - 1);
653 35 const int half_pixel_offset_target = 1 << (bits_per_pixel_target - 1);
654 35 const int max_pixel_value_target = (1 << bits_per_pixel_target) - 1;
655
656 35 bits_conv_constants conversion_ranges;
657 35 const bool full_scale_d = m.offset_out == 0;
658
22/320
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 6 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 2 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 4 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 2 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 3 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, float, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 2 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
35 get_bits_conv_constants(conversion_ranges, false, full_scale_d, full_scale_d, bits_per_pixel, bits_per_pixel_target);
659
660 35 constexpr int int_arithmetic_shift = 1 << INT_ARITH_SHIFT;
661 35 float scale_f = conversion_ranges.mul_factor;
662 if (final_is_float && !float_matrix_workflow)
663 1 scale_f = scale_f / int_arithmetic_shift;
664
665 35 const int offset_in_scalar = m.offset_in;
666 35 const int offset_out_scalar = m.offset_out;
667
668 int round_mask_plus_offset_out_i;
669 int round_mask_plus_offset_out_chroma_i;
670
671 if constexpr (!float_matrix_workflow) {
672 22 round_mask_plus_offset_out_i = final_is_float ? 0 : ROUNDER + (offset_out_scalar << INT_ARITH_SHIFT);
673 22 round_mask_plus_offset_out_chroma_i = final_is_float ? 0 : ROUNDER + (half_pixel_offset << INT_ARITH_SHIFT);
674 }
675
676
44/320
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 60 → 56 taken 5 times.
✓ Branch 60 → 61 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 60 → 56 not taken.
✗ Branch 60 → 61 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 55 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 63 → 56 taken 30 times.
✓ Branch 63 → 64 taken 6 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 60 → 56 not taken.
✗ Branch 60 → 61 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 55 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 63 → 56 taken 5 times.
✓ Branch 63 → 64 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 60 → 56 not taken.
✗ Branch 60 → 61 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 55 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 63 → 56 taken 10 times.
✓ Branch 63 → 64 taken 2 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 60 → 56 taken 5 times.
✓ Branch 60 → 61 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 60 → 56 not taken.
✗ Branch 60 → 61 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 55 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 63 → 56 taken 20 times.
✓ Branch 63 → 64 taken 4 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 60 → 56 taken 2 times.
✓ Branch 60 → 61 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 55 taken 2 times.
✓ Branch 59 → 60 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 63 → 56 taken 10 times.
✓ Branch 63 → 64 taken 2 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 60 → 56 not taken.
✗ Branch 60 → 61 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 55 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 63 → 56 taken 5 times.
✓ Branch 63 → 64 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 60 → 56 taken 3 times.
✓ Branch 60 → 61 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 60 → 56 not taken.
✗ Branch 60 → 61 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 55 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 63 → 56 taken 3 times.
✓ Branch 63 → 64 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 60 → 56 not taken.
✗ Branch 60 → 61 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 55 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 63 → 56 taken 9 times.
✓ Branch 63 → 64 taken 3 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 60 → 56 not taken.
✗ Branch 60 → 61 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 55 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, float, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 60 → 56 taken 6 times.
✓ Branch 60 → 61 taken 2 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 60 → 56 not taken.
✗ Branch 60 → 61 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 55 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 56 taken 3 times.
✓ Branch 61 → 62 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 56 taken 3 times.
✓ Branch 61 → 62 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 56 taken 3 times.
✓ Branch 61 → 62 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 60 → 56 not taken.
✗ Branch 60 → 61 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 55 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 56 taken 3 times.
✓ Branch 61 → 62 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 56 taken 3 times.
✓ Branch 61 → 62 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 60 → 56 not taken.
✗ Branch 60 → 61 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 55 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 56 taken 3 times.
✓ Branch 61 → 62 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 56 taken 3 times.
✓ Branch 61 → 62 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 56 taken 3 times.
✓ Branch 61 → 62 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
174 for (int y = 0; y < height; y++) {
677 139 const pixel_t* src0 = reinterpret_cast<const pixel_t*>(srcp[0]); // Y or G
678 139 const pixel_t* src1 = reinterpret_cast<const pixel_t*>(srcp[1]); // U or B
679 139 const pixel_t* src2 = reinterpret_cast<const pixel_t*>(srcp[2]); // V or R
680 139 pixel_t_dst* d0 = reinterpret_cast<pixel_t_dst*>(dstp[0]); // G or Y
681 139 pixel_t_dst* d1 = reinterpret_cast<pixel_t_dst*>(dstp[1]); // B or U
682 139 pixel_t_dst* d2 = reinterpret_cast<pixel_t_dst*>(dstp[2]); // R or V
683
684
44/320
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 58 → 57 taken 85 times.
✓ Branch 58 → 59 taken 5 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 57 not taken.
✗ Branch 58 → 59 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 56 not taken.
✗ Branch 57 → 58 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 57 taken 960 times.
✓ Branch 61 → 62 taken 30 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 57 not taken.
✗ Branch 58 → 59 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 56 not taken.
✗ Branch 57 → 58 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 57 taken 160 times.
✓ Branch 61 → 62 taken 5 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 57 not taken.
✗ Branch 58 → 59 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 56 not taken.
✗ Branch 57 → 58 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 57 taken 320 times.
✓ Branch 61 → 62 taken 10 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 58 → 57 taken 95 times.
✓ Branch 58 → 59 taken 5 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 57 not taken.
✗ Branch 58 → 59 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 56 not taken.
✗ Branch 57 → 58 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 57 taken 505 times.
✓ Branch 61 → 62 taken 20 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 58 → 57 taken 10 times.
✓ Branch 58 → 59 taken 2 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 56 taken 10 times.
✓ Branch 57 → 58 taken 2 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 57 taken 245 times.
✓ Branch 61 → 62 taken 10 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 57 not taken.
✗ Branch 58 → 59 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 56 not taken.
✗ Branch 57 → 58 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 57 taken 85 times.
✓ Branch 61 → 62 taken 5 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 58 → 57 taken 27 times.
✓ Branch 58 → 59 taken 3 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 57 not taken.
✗ Branch 58 → 59 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 56 not taken.
✗ Branch 57 → 58 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 57 taken 51 times.
✓ Branch 61 → 62 taken 3 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 57 not taken.
✗ Branch 58 → 59 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 56 not taken.
✗ Branch 57 → 58 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 57 taken 123 times.
✓ Branch 61 → 62 taken 9 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 57 not taken.
✗ Branch 58 → 59 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 56 not taken.
✗ Branch 57 → 58 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, float, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 58 → 57 taken 192 times.
✓ Branch 58 → 59 taken 6 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 57 not taken.
✗ Branch 58 → 59 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 56 not taken.
✗ Branch 57 → 58 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 57 taken 96 times.
✓ Branch 59 → 60 taken 3 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 57 taken 96 times.
✓ Branch 59 → 60 taken 3 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 57 taken 96 times.
✓ Branch 59 → 60 taken 3 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 57 not taken.
✗ Branch 58 → 59 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 56 not taken.
✗ Branch 57 → 58 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 57 taken 96 times.
✓ Branch 59 → 60 taken 3 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 57 taken 96 times.
✓ Branch 59 → 60 taken 3 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 57 not taken.
✗ Branch 58 → 59 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 56 not taken.
✗ Branch 57 → 58 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 57 taken 96 times.
✓ Branch 59 → 60 taken 3 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 57 taken 96 times.
✓ Branch 59 → 60 taken 3 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 57 taken 96 times.
✓ Branch 59 → 60 taken 3 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
3775 for (int x = 0; x < width; x++) {
685 float in0_f, in1_f, in2_f;
686 int in0_i, in1_i, in2_i;
687
688 // Load inputs
689 if constexpr (std::is_floating_point<pixel_t>::value) {
690 399 in0_f = src0[x];
691 399 in1_f = src1[x];
692 399 in2_f = src2[x];
693 }
694 else {
695 3237 in0_i = static_cast<int>(src0[x]);
696 3237 in1_i = static_cast<int>(src1[x]);
697 3237 in2_i = static_cast<int>(src2[x]);
698 }
699
700 float out0_f, out1_f, out2_f;
701 safe_int_t out0_raw, out1_raw, out2_raw; // Keep as int64_t for 16-bit (see would_need_64bit_v_patch remarks above)
702
703 if constexpr (float_matrix_workflow) {
704 // Float workflow
705 if constexpr (!std::is_floating_point<pixel_t>::value) {
706 // Convert integer to float and apply input offset
707 if constexpr (direction == ConversionDirection::YUV_TO_RGB || direction == ConversionDirection::YUV_TO_YUV) {
708 // YUV input
709 in0_f = static_cast<float>(in0_i + offset_in_scalar); // Y
710 in1_f = static_cast<float>(in1_i - half_pixel_offset); // U
711 in2_f = static_cast<float>(in2_i - half_pixel_offset); // V
712 }
713 else if constexpr (direction == ConversionDirection::RGB_TO_YUV || direction == ConversionDirection::RGB_TO_Y || direction == ConversionDirection::RGB_TO_RGB) {
714 // RGB input
715 735 in0_f = static_cast<float>(in0_i + offset_in_scalar); // G
716 735 in1_f = static_cast<float>(in1_i + offset_in_scalar); // B
717 735 in2_f = static_cast<float>(in2_i + offset_in_scalar); // R
718 }
719 }
720 else {
721 // Float input - apply offset
722 if constexpr (direction == ConversionDirection::YUV_TO_RGB || direction == ConversionDirection::YUV_TO_YUV) {
723 112 in0_f += m.offset_in_f; // Y only
724 }
725 else {
726 287 in0_f += m.offset_in_f; // G
727 287 in1_f += m.offset_in_f; // B
728 287 in2_f += m.offset_in_f; // R
729 }
730 }
731
732 // Matrix multiply - coefficient order depends on direction
733 if constexpr (direction == ConversionDirection::YUV_TO_RGB || direction == ConversionDirection::YUV_TO_YUV) {
734 // YUV input: in0=Y, in1=U, in2=V
735 112 out0_f = (m.y_g_f * in0_f + m.u_g_f * in1_f + m.v_g_f * in2_f) * scale_f; // G or Y
736 112 out1_f = (m.y_b_f * in0_f + m.u_b_f * in1_f + m.v_b_f * in2_f) * scale_f; // B or U
737 112 out2_f = (m.y_r_f * in0_f + m.u_r_f * in1_f + m.v_r_f * in2_f) * scale_f; // R or V
738 }
739 else if constexpr (direction == ConversionDirection::RGB_TO_YUV || direction == ConversionDirection::RGB_TO_RGB) {
740 // RGB input: in0=G, in1=B, in2=R
741 350 out0_f = (m.y_g_f * in0_f + m.y_b_f * in1_f + m.y_r_f * in2_f) * scale_f; // Y or G
742 350 out1_f = (m.u_g_f * in0_f + m.u_b_f * in1_f + m.u_r_f * in2_f) * scale_f; // U or B
743 350 out2_f = (m.v_g_f * in0_f + m.v_b_f * in1_f + m.v_r_f * in2_f) * scale_f; // V or R
744 }
745 else if constexpr (direction == ConversionDirection::RGB_TO_Y) {
746 // RGB input: in0=G, in1=B, in2=R
747 672 out0_f = (m.y_g_f * in0_f + m.y_b_f * in1_f + m.y_r_f * in2_f) * scale_f; // Y or G
748 }
749
750 // Add output offset
751 if constexpr (direction == ConversionDirection::YUV_TO_RGB || direction == ConversionDirection::RGB_TO_RGB) {
752 // RGB output: same offset for all
753 85 float rgb_offset_scaled = m.offset_out_f * scale_f;
754 85 out0_f += rgb_offset_scaled;
755 85 out1_f += rgb_offset_scaled;
756 85 out2_f += rgb_offset_scaled;
757 }
758 else if constexpr (direction == ConversionDirection::RGB_TO_YUV || direction == ConversionDirection::YUV_TO_YUV) {
759 // YUV output: different offsets
760 377 float y_offset_scaled = m.offset_out_f * scale_f;
761 377 float uv_center = final_is_float ? 0.0f : (float)half_pixel_offset_target;
762 377 out0_f += y_offset_scaled; // Y
763 377 out1_f += uv_center; // U
764 377 out2_f += uv_center; // V
765 }
766 else if constexpr (direction == ConversionDirection::RGB_TO_Y) {
767 // Y output: single Y offsets
768 672 float y_offset_scaled = m.offset_out_f * scale_f;
769 672 out0_f += y_offset_scaled; // Y
770 }
771
772 if constexpr (final_is_float) {
773 409 d0[x] = static_cast<pixel_t_dst>(out0_f);
774 if constexpr (direction != ConversionDirection::RGB_TO_Y) {
775 217 d1[x] = static_cast<pixel_t_dst>(out1_f);
776 217 d2[x] = static_cast<pixel_t_dst>(out2_f);
777 }
778 }
779 else {
780 // Convert to integer with rounding
781 725 int out0_i = static_cast<int>(out0_f + 0.5f);
782
6/184
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 245 times.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 96 times.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 96 times.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 96 times.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 96 times.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 96 times.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
725 out0_i = std::clamp(out0_i, 0, max_pixel_value_target);
783 725 d0[x] = static_cast<pixel_t_dst>(out0_i);
784
785 if constexpr (direction != ConversionDirection::RGB_TO_Y) {
786 245 int out1_i = static_cast<int>(out1_f + 0.5f);
787 245 int out2_i = static_cast<int>(out2_f + 0.5f);
788
1/134
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 58 → 59 taken 245 times.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
245 out1_i = std::clamp(out1_i, 0, max_pixel_value_target);
789
1/134
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 60 taken 245 times.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
245 out2_i = std::clamp(out2_i, 0, max_pixel_value_target);
790 245 d1[x] = static_cast<pixel_t_dst>(out1_i);
791 245 d2[x] = static_cast<pixel_t_dst>(out2_i);
792 }
793 }
794 }
795 else {
796 // Integer workflow
797 // Apply input offset and centering
798 if constexpr (direction == ConversionDirection::YUV_TO_RGB || direction == ConversionDirection::YUV_TO_YUV) {
799 // YUV input
800 1614 in0_i = in0_i + offset_in_scalar; // Y
801 1614 in1_i = in1_i - half_pixel_offset; // U (centered)
802 1614 in2_i = in2_i - half_pixel_offset; // V (centered)
803 }
804 else if constexpr (direction == ConversionDirection::RGB_TO_YUV || direction == ConversionDirection::RGB_TO_RGB || direction == ConversionDirection::RGB_TO_Y) {
805 // RGB input
806 888 in0_i = in0_i + offset_in_scalar; // G
807 888 in1_i = in1_i + offset_in_scalar; // B
808 888 in2_i = in2_i + offset_in_scalar; // R
809 }
810
811 // Matrix multiply with appropriate rounding/offset
812 int round_and_offset_0, round_and_offset_1, round_and_offset_2;
813
814 if constexpr (direction == ConversionDirection::YUV_TO_RGB || direction == ConversionDirection::RGB_TO_RGB) {
815 // RGB output: same offset for all
816 1440 round_and_offset_0 = round_mask_plus_offset_out_i;
817 1440 round_and_offset_1 = round_mask_plus_offset_out_i;
818 1440 round_and_offset_2 = round_mask_plus_offset_out_i;
819 }
820 else if constexpr (direction == ConversionDirection::RGB_TO_YUV || direction == ConversionDirection::YUV_TO_YUV) {
821 // YUV output: different offsets
822 774 round_and_offset_0 = round_mask_plus_offset_out_i; // Y
823 774 round_and_offset_1 = round_mask_plus_offset_out_chroma_i; // U
824 774 round_and_offset_2 = round_mask_plus_offset_out_chroma_i; // V
825 }
826 else if constexpr (direction == ConversionDirection::RGB_TO_Y) {
827 // Y output: single Y offset
828 288 round_and_offset_0 = round_mask_plus_offset_out_i; // Y
829 }
830
831 if constexpr (direction == ConversionDirection::YUV_TO_RGB || direction == ConversionDirection::YUV_TO_YUV) {
832 // YUV input: in0=Y, in1=U, in2=V
833 1614 out0_raw = (safe_int_t)m.y_g * in0_i + (safe_int_t)m.u_g * in1_i + (safe_int_t)m.v_g * in2_i + round_and_offset_0;
834 1614 out1_raw = (safe_int_t)m.y_b * in0_i + (safe_int_t)m.u_b * in1_i + (safe_int_t)m.v_b * in2_i + round_and_offset_1;
835 1614 out2_raw = (safe_int_t)m.y_r * in0_i + (safe_int_t)m.u_r * in1_i + (safe_int_t)m.v_r * in2_i + round_and_offset_2;
836 }
837 else if constexpr (direction == ConversionDirection::RGB_TO_YUV || direction == ConversionDirection::RGB_TO_RGB) {
838 // RGB input: in0=G, in1=B, in2=R
839 600 out0_raw = (safe_int_t)m.y_g * in0_i + (safe_int_t)m.y_b * in1_i + (safe_int_t)m.y_r * in2_i + round_and_offset_0;
840 600 out1_raw = (safe_int_t)m.u_g * in0_i + (safe_int_t)m.u_b * in1_i + (safe_int_t)m.u_r * in2_i + round_and_offset_1;
841 600 out2_raw = (safe_int_t)m.v_g * in0_i + (safe_int_t)m.v_b * in1_i + (safe_int_t)m.v_r * in2_i + round_and_offset_2;
842 }
843 else if constexpr (direction == ConversionDirection::RGB_TO_Y) {
844 // RGB input: in0=G, in1=B, in2=R
845 288 out0_raw = (safe_int_t)m.y_g * in0_i + (safe_int_t)m.y_b * in1_i + (safe_int_t)m.y_r * in2_i + round_and_offset_0;
846 }
847
848 if constexpr (final_is_float) {
849 // Integer workflow + float output
850 10 out0_f = static_cast<float>(out0_raw) * scale_f + out_offset_f;
851 if constexpr (direction == ConversionDirection::YUV_TO_RGB || direction == ConversionDirection::RGB_TO_RGB) {
852 // offset for the rest two only RGB output
853 out1_f = static_cast<float>(out1_raw) * scale_f + out_offset_f;
854 out2_f = static_cast<float>(out2_raw) * scale_f + out_offset_f;
855 }
856 else if constexpr (direction == ConversionDirection::RGB_TO_YUV || direction == ConversionDirection::YUV_TO_YUV) {
857 // for YUV the U and V float offset is different : 0.0f
858 10 out1_f = static_cast<float>(out1_raw) * scale_f; // U
859 10 out2_f = static_cast<float>(out2_raw) * scale_f; // V
860 }
861
862 10 d0[x] = static_cast<pixel_t_dst>(out0_f);
863 if constexpr (direction != ConversionDirection::RGB_TO_Y) {
864 10 d1[x] = static_cast<pixel_t_dst>(out1_f);
865 10 d2[x] = static_cast<pixel_t_dst>(out2_f);
866 }
867 }
868 else {
869 // Integer workflow + integer output
870 2492 int out0_i = static_cast<int>(out0_raw >> target_shift);
871
10/80
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 960 times.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 160 times.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 320 times.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 505 times.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 85 times.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 51 times.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 123 times.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 96 times.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 96 times.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 96 times.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
2492 out0_i = std::clamp(out0_i, 0, max_pixel_value_target);
872 2492 d0[x] = static_cast<pixel_t_dst>(out0_i);
873
874 if constexpr (direction != ConversionDirection::RGB_TO_Y) {
875 2204 int out1_i = static_cast<int>(out1_raw >> target_shift);
876 2204 int out2_i = static_cast<int>(out2_raw >> target_shift);
877
878 // We are in integer domain, no convenient SIMD packus! We cannot spare min-max clamp to constexpr (lessthan16bit_target) {
879 // We need to do it always
880
7/64
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 58 → 59 taken 960 times.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 58 → 59 taken 160 times.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 58 → 59 taken 320 times.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 58 → 59 taken 505 times.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 58 → 59 taken 85 times.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 58 → 59 taken 51 times.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 58 → 59 taken 123 times.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
2204 out1_i = std::clamp(out1_i, 0, max_pixel_value_target);
881
7/64
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 60 taken 960 times.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 60 taken 160 times.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 60 taken 320 times.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 60 taken 505 times.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 60 taken 85 times.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 60 taken 51 times.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 60 taken 123 times.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
2204 out2_i = std::clamp(out2_i, 0, max_pixel_value_target);
882
883 2204 d1[x] = static_cast<pixel_t_dst>(out1_i);
884 2204 d2[x] = static_cast<pixel_t_dst>(out2_i);
885 }
886 }
887 }
888 }
889
890 139 dstp[0] += dstPitch[0];
891 if constexpr (direction != ConversionDirection::RGB_TO_Y) {
892 109 dstp[1] += dstPitch[1];
893 109 dstp[2] += dstPitch[2];
894 }
895 139 srcp[0] += srcPitch[0];
896 139 srcp[1] += srcPitch[1];
897 139 srcp[2] += srcPitch[2];
898 }
899 35 }
900
901 // Dispatcher matching AVX2/SSE2 structure
902 template<ConversionDirection direction, typename pixel_t_src, bool lessthan16bit>
903 35 void convert_yuv_to_planarrgb_c(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m,
904 int bits_per_pixel, int bits_per_pixel_target, bool force_float)
905 {
906 // Handle forced float or float input
907
15/24
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 11 taken 6 times.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 11 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 11 taken 2 times.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 11 taken 4 times.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 2 → 3 taken 1 time.
✓ Branch 2 → 11 taken 3 times.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 11 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 11 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 11 taken 3 times.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 11 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 2 → 3 taken 1 time.
✓ Branch 2 → 11 taken 2 times.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 2 → 3 taken 1 time.
✓ Branch 2 → 11 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 2 → 3 taken 1 time.
✓ Branch 2 → 11 taken 2 times.
30 if (force_float || std::is_floating_point<pixel_t_src>::value) {
908
8/32
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, float, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, float, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, float, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, float, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 2 times.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 3 → 4 taken 1 time.
✗ Branch 3 → 5 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 1 time.
9 if (bits_per_pixel_target == 8) {
909 1 convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, lessthan16bit, true, uint8_t, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
910 }
911
7/32
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, float, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 4 → 5 not taken.
✓ Branch 4 → 6 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 5 → 6 not taken.
✗ Branch 5 → 7 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 5 → 6 not taken.
✗ Branch 5 → 7 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 5 → 6 not taken.
✗ Branch 5 → 7 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, float, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 4 → 5 not taken.
✓ Branch 4 → 6 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 5 → 6 not taken.
✗ Branch 5 → 7 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 5 → 6 not taken.
✗ Branch 5 → 7 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, float, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 4 → 5 not taken.
✓ Branch 4 → 6 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 5 → 6 not taken.
✗ Branch 5 → 7 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 5 → 6 not taken.
✗ Branch 5 → 7 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 5 → 6 not taken.
✗ Branch 5 → 7 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, float, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 4 → 5 not taken.
✓ Branch 4 → 6 taken 2 times.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 5 → 6 not taken.
✗ Branch 5 → 7 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 5 → 6 taken 1 time.
✗ Branch 5 → 7 not taken.
8 else if (bits_per_pixel_target < 16) {
912 1 convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, lessthan16bit, true, uint16_t, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
913 }
914
6/32
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, float, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 6 → 7 not taken.
✓ Branch 6 → 8 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, float, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 6 → 7 not taken.
✓ Branch 6 → 8 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 7 → 8 not taken.
✓ Branch 7 → 9 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, float, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 6 → 7 not taken.
✓ Branch 6 → 8 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, float, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 6 → 7 not taken.
✓ Branch 6 → 8 taken 2 times.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 7 → 8 taken 1 time.
✗ Branch 7 → 9 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
7 else if (bits_per_pixel_target == 16) {
915 1 convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, lessthan16bit, false, uint16_t, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
916 }
917 else {
918 6 convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, lessthan16bit, false, float, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
919 }
920 9 return;
921 }
922
923 if constexpr (!std::is_floating_point<pixel_t_src>::value) {
924 26 const bool need_conversion = bits_per_pixel_target != bits_per_pixel;
925
14/24
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 11 → 12 taken 6 times.
✗ Branch 11 → 14 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 11 → 12 taken 1 time.
✗ Branch 11 → 14 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 11 → 12 taken 2 times.
✗ Branch 11 → 14 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 11 → 12 taken 4 times.
✗ Branch 11 → 14 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 11 → 12 taken 2 times.
✓ Branch 11 → 14 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 11 → 12 taken 1 time.
✗ Branch 11 → 14 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 11 → 12 taken 1 time.
✗ Branch 11 → 14 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 11 → 12 taken 3 times.
✗ Branch 11 → 14 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 14 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 11 → 12 taken 1 time.
✓ Branch 11 → 14 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 11 → 12 not taken.
✓ Branch 11 → 14 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 11 → 12 taken 1 time.
✓ Branch 11 → 14 taken 1 time.
26 if (!need_conversion) {
926 22 convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, lessthan16bit, lessthan16bit, pixel_t_src, YuvRgbConversionType::NATIVE_INT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
927 22 return;
928 }
929
930 4 const bool full_d = m.offset_out == 0;
931
8/48
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 14 → 15 not taken.
✗ Branch 14 → 29 not taken.
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 29 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 14 → 15 not taken.
✗ Branch 14 → 29 not taken.
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 29 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 14 → 15 not taken.
✗ Branch 14 → 29 not taken.
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 29 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 14 → 15 not taken.
✗ Branch 14 → 29 not taken.
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 29 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 14 → 15 taken 1 time.
✗ Branch 14 → 29 not taken.
✓ Branch 15 → 16 taken 1 time.
✗ Branch 15 → 29 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 14 → 15 not taken.
✗ Branch 14 → 29 not taken.
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 29 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 14 → 15 not taken.
✗ Branch 14 → 29 not taken.
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 29 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 14 → 15 not taken.
✗ Branch 14 → 29 not taken.
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 29 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 14 → 15 not taken.
✗ Branch 14 → 29 not taken.
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 29 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 14 → 15 taken 1 time.
✗ Branch 14 → 29 not taken.
✓ Branch 15 → 16 taken 1 time.
✗ Branch 15 → 29 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 14 → 15 taken 1 time.
✗ Branch 14 → 29 not taken.
✓ Branch 15 → 16 taken 1 time.
✗ Branch 15 → 29 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 14 → 15 taken 1 time.
✗ Branch 14 → 29 not taken.
✓ Branch 15 → 16 taken 1 time.
✗ Branch 15 → 29 not taken.
4 if (bits_per_pixel_target >= 8 && bits_per_pixel <= 16) {
932
4/24
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 20 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 20 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 20 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 20 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 16 → 17 not taken.
✓ Branch 16 → 20 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 20 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 20 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 20 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 20 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 16 → 17 not taken.
✓ Branch 16 → 20 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 16 → 17 taken 1 time.
✗ Branch 16 → 20 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 16 → 17 not taken.
✓ Branch 16 → 20 taken 1 time.
4 if (bits_per_pixel_target == 8) {
933
1/24
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 17 → 18 not taken.
✗ Branch 17 → 19 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 17 → 18 not taken.
✗ Branch 17 → 19 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 17 → 18 not taken.
✗ Branch 17 → 19 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 17 → 18 not taken.
✗ Branch 17 → 19 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 17 → 18 not taken.
✗ Branch 17 → 19 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 17 → 18 not taken.
✗ Branch 17 → 19 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 17 → 18 not taken.
✗ Branch 17 → 19 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 17 → 18 not taken.
✗ Branch 17 → 19 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 17 → 18 not taken.
✗ Branch 17 → 19 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 17 → 18 not taken.
✗ Branch 17 → 19 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 17 → 18 not taken.
✓ Branch 17 → 19 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 17 → 18 not taken.
✗ Branch 17 → 19 not taken.
1 if (full_d)
934 convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, lessthan16bit, true, uint8_t, YuvRgbConversionType::BITCONV_INT_FULL>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
935 else
936 1 convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, lessthan16bit, true, uint8_t, YuvRgbConversionType::BITCONV_INT_LIMITED>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
937 }
938
3/24
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 24 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 24 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 24 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 24 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 20 → 21 not taken.
✓ Branch 20 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 24 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 24 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 24 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 24 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 20 → 21 taken 1 time.
✗ Branch 20 → 24 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 24 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 20 → 21 not taken.
✓ Branch 20 → 24 taken 1 time.
3 else if (bits_per_pixel_target < 16) {
939
1/24
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 21 → 22 not taken.
✓ Branch 21 → 23 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
1 if (full_d)
940 convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, lessthan16bit, true, uint16_t, YuvRgbConversionType::BITCONV_INT_FULL>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
941 else
942 1 convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, lessthan16bit, true, uint16_t, YuvRgbConversionType::BITCONV_INT_LIMITED>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
943 }
944
2/24
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 28 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 28 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 28 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 28 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 24 → 25 not taken.
✓ Branch 24 → 28 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 28 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 28 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 28 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 28 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 28 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 28 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 24 → 25 taken 1 time.
✗ Branch 24 → 28 not taken.
2 else if (bits_per_pixel_target == 16) {
945
1/24
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 27 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 27 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 27 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 27 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 27 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 27 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 27 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 27 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 27 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 27 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 27 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 25 → 26 taken 1 time.
✗ Branch 25 → 27 not taken.
1 if (full_d)
946 1 convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, lessthan16bit, false, uint16_t, YuvRgbConversionType::BITCONV_INT_FULL>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
947 else
948 convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, lessthan16bit, false, uint16_t, YuvRgbConversionType::BITCONV_INT_LIMITED>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
949 }
950 else {
951 1 convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, lessthan16bit, false, float, YuvRgbConversionType::FLOAT_OUTPUT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
952 }
953 }
954 }
955 }
956
957 // Template instantiations for C version - all 4 directions
958 // YUV_TO_RGB
959 template void convert_yuv_to_planarrgb_c<ConversionDirection::YUV_TO_RGB, uint8_t, true>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float);
960 template void convert_yuv_to_planarrgb_c<ConversionDirection::YUV_TO_RGB, uint16_t, true>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float);
961 template void convert_yuv_to_planarrgb_c<ConversionDirection::YUV_TO_RGB, uint16_t, false>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float);
962 template void convert_yuv_to_planarrgb_c<ConversionDirection::YUV_TO_RGB, float, false>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float);
963
964 // RGB_TO_YUV
965 template void convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_YUV, uint8_t, true>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float);
966 template void convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_YUV, uint16_t, true>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float);
967 template void convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_YUV, uint16_t, false>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float);
968 template void convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_YUV, float, false>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float);
969
970 // RGB_TO_Y
971 template void convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_Y, uint8_t, true>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float);
972 template void convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_Y, uint16_t, true>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float);
973 template void convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_Y, uint16_t, false>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float);
974 template void convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_Y, float, false>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float);
975
976 // YUV_TO_YUV
977 template void convert_yuv_to_planarrgb_c<ConversionDirection::YUV_TO_YUV, uint8_t, true>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float);
978 template void convert_yuv_to_planarrgb_c<ConversionDirection::YUV_TO_YUV, uint16_t, true>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float);
979 template void convert_yuv_to_planarrgb_c<ConversionDirection::YUV_TO_YUV, uint16_t, false>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float);
980 template void convert_yuv_to_planarrgb_c<ConversionDirection::YUV_TO_YUV, float, false>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float);
981
982 8 PVideoFrame __stdcall ConvertYUV444ToRGB::GetFrame(int n, IScriptEnvironment* env)
983 {
984
1/2
✓ Branch 3 → 4 taken 8 times.
✗ Branch 3 → 161 not taken.
8 PVideoFrame src = child->GetFrame(n, env);
985
1/2
✓ Branch 4 → 5 taken 8 times.
✗ Branch 4 → 159 not taken.
8 PVideoFrame dst = env->NewVideoFrameP(vi, &src);
986
987
1/2
✓ Branch 5 → 6 taken 8 times.
✗ Branch 5 → 157 not taken.
8 auto props = env->getFramePropsRW(dst);
988
1/2
✓ Branch 6 → 7 taken 8 times.
✗ Branch 6 → 157 not taken.
8 update_Matrix_and_ColorRange(props, theOutMatrix, theOutColorRange, env);
989
1/2
✓ Branch 7 → 8 taken 8 times.
✗ Branch 7 → 157 not taken.
8 update_ChromaLocation(props, -1, env); // RGB target: delete _ChromaLocation
990
991
1/2
✓ Branch 9 → 10 taken 8 times.
✗ Branch 9 → 157 not taken.
8 const BYTE* srcY = src->GetReadPtr(PLANAR_Y);
992
1/2
✓ Branch 11 → 12 taken 8 times.
✗ Branch 11 → 157 not taken.
8 const BYTE* srcU = src->GetReadPtr(PLANAR_U);
993
1/2
✓ Branch 13 → 14 taken 8 times.
✗ Branch 13 → 157 not taken.
8 const BYTE* srcV = src->GetReadPtr(PLANAR_V);
994
1/2
✓ Branch 15 → 16 taken 8 times.
✗ Branch 15 → 157 not taken.
8 const BYTE* srcA = src->GetReadPtr(PLANAR_A);
995
996
1/2
✓ Branch 17 → 18 taken 8 times.
✗ Branch 17 → 157 not taken.
8 BYTE* dstp = dst->GetWritePtr();
997
998
1/2
✓ Branch 19 → 20 taken 8 times.
✗ Branch 19 → 157 not taken.
8 const int src_pitch_y = src->GetPitch(PLANAR_Y);
999
1/2
✓ Branch 21 → 22 taken 8 times.
✗ Branch 21 → 157 not taken.
8 const int src_pitch_uv = src->GetPitch(PLANAR_U);
1000
1/2
✓ Branch 23 → 24 taken 8 times.
✗ Branch 23 → 157 not taken.
8 const int src_pitch_a = src->GetPitch(PLANAR_A); // zero if no Alpha
1001
1002
1/2
✓ Branch 25 → 26 taken 8 times.
✗ Branch 25 → 157 not taken.
8 const int dst_pitch = dst->GetPitch();
1003
1004 // Legacy direct YV24 -> packed 8 bit RGB24/RGB32
1005 // quality=true float-inside or bit-depth changing transformation is handled through planar RGB intermediate.
1006
1007
2/4
✓ Branch 26 → 27 taken 8 times.
✗ Branch 26 → 28 not taken.
✗ Branch 27 → 28 not taken.
✓ Branch 27 → 55 taken 8 times.
8 if (pixel_step == 3 || pixel_step == 4) {
1008 #ifdef INTEL_INTRINSICS
1009 if (env->GetCPUFlags() & CPUF_AVX2) {
1010 if (pixel_step == 4) {
1011 // RGB32
1012 if (src_pitch_a) // move alpha channel from YUVA
1013 convert_yv24_to_rgb_avx2<4, true>(dstp, srcY, srcU, srcV, srcA, dst_pitch, src_pitch_y, src_pitch_uv, src_pitch_a, vi.width, vi.height, matrix);
1014 else
1015 convert_yv24_to_rgb_avx2<4, false>(dstp, srcY, srcU, srcV, srcA, dst_pitch, src_pitch_y, src_pitch_uv, src_pitch_a, vi.width, vi.height, matrix);
1016 }
1017 else {
1018 // RGB24
1019 convert_yv24_to_rgb_avx2<3, false>(dstp, srcY, srcU, srcV, srcA, dst_pitch, src_pitch_y, src_pitch_uv, src_pitch_a, vi.width, vi.height, matrix);
1020 }
1021 return dst;
1022 }
1023 else if (env->GetCPUFlags() & CPUF_SSE2) {
1024 if (pixel_step == 4) {
1025 if (src_pitch_a) // move alpha channel from YUVA
1026 convert_yv24_to_rgb_sse2<4, true>(dstp, srcY, srcU, srcV, srcA, dst_pitch, src_pitch_y, src_pitch_uv, src_pitch_a, vi.width, vi.height, matrix);
1027 else
1028 convert_yv24_to_rgb_sse2<4, false>(dstp, srcY, srcU, srcV, srcA, dst_pitch, src_pitch_y, src_pitch_uv, src_pitch_a, vi.width, vi.height, matrix);
1029 }
1030 else {
1031 if (env->GetCPUFlags() & CPUF_SSSE3) {
1032 convert_yv24_to_rgb_ssse3<3, false>(dstp, srcY, srcU, srcV, srcA, dst_pitch, src_pitch_y, src_pitch_uv, src_pitch_a, vi.width, vi.height, matrix);
1033 }
1034 else {
1035 convert_yv24_to_rgb_sse2<3, false>(dstp, srcY, srcU, srcV, srcA, dst_pitch, src_pitch_y, src_pitch_uv, src_pitch_a, vi.width, vi.height, matrix);
1036 }
1037 }
1038 return dst;
1039 }
1040
1041 #ifdef X86_32
1042 // packed RGB24 and RGB32
1043 if ((src_pitch_a == 0) && (env->GetCPUFlags() & CPUF_MMX)) {
1044 if (pixel_step == 4) {
1045 convert_yv24_to_rgb_mmx<4>(dstp, srcY, srcU, srcV, dst_pitch, src_pitch_y, src_pitch_uv, vi.width, vi.height, matrix);
1046 }
1047 else {
1048 convert_yv24_to_rgb_mmx<3>(dstp, srcY, srcU, srcV, dst_pitch, src_pitch_y, src_pitch_uv, vi.width, vi.height, matrix);
1049 }
1050 return dst;
1051 }
1052 #endif
1053 #endif
1054
1055 // Unoptimized C-code.
1056 // rgb24 or rgb32, packed RGB
1057 if (pixel_step == 3 || pixel_step == 4) {
1058 if (pixel_step == 4) {
1059 if (src_pitch_a) // move alpha channel from YUVA
1060 convert_yv24_to_rgb_c<4, true>(dstp, srcY, srcU, srcV, srcA, dst_pitch, src_pitch_y, src_pitch_uv, src_pitch_a, vi.width, vi.height, matrix);
1061 else
1062 convert_yv24_to_rgb_c<4, false>(dstp, srcY, srcU, srcV, srcA, dst_pitch, src_pitch_y, src_pitch_uv, src_pitch_a, vi.width, vi.height, matrix);
1063 }
1064 else { // 3 RGB24
1065 convert_yv24_to_rgb_c<3, false>(dstp, srcY, srcU, srcV, srcA, dst_pitch, src_pitch_y, src_pitch_uv, src_pitch_a, vi.width, vi.height, matrix);
1066 }
1067 return dst;
1068 }
1069 } // YV24->RGB24/RGB32
1070
1071 // rgb48 or rgb64, packed RGB
1072
2/4
✓ Branch 55 → 56 taken 8 times.
✗ Branch 55 → 57 not taken.
✗ Branch 56 → 57 not taken.
✓ Branch 56 → 58 taken 8 times.
8 if (pixel_step == 6 || pixel_step == 8) {
1073 // cannot happen, handled earlier, RGB48/64 are post converted from RGB(A)P16
1074 env->ThrowError("ConvertFrom 444: RGB48/64 conversion should have been handled earlier through planar RGB intermediate");
1075 }
1076
1077
1/2
✓ Branch 58 → 59 taken 8 times.
✗ Branch 58 → 152 not taken.
8 if (pixel_step < 0) {
1078 // -1: RGBP -2:RGBAP
1079 // Common task: copy or fill alpha channel
1080
1081 // YUV444 -> PlanarRGB
1082 // YUVA444 -> PlanarRGBA
1083 8 bool targetHasAlpha = pixel_step == -2;
1084
1085
1/2
✓ Branch 60 → 61 taken 8 times.
✗ Branch 60 → 156 not taken.
8 BYTE *dstpG = dst->GetWritePtr(PLANAR_G);
1086
1/2
✓ Branch 62 → 63 taken 8 times.
✗ Branch 62 → 156 not taken.
8 BYTE *dstpB = dst->GetWritePtr(PLANAR_B);
1087
1/2
✓ Branch 64 → 65 taken 8 times.
✗ Branch 64 → 156 not taken.
8 BYTE *dstpR = dst->GetWritePtr(PLANAR_R);
1088
1089 // copy or fill alpha
1090 BYTE *dstpA;
1091
2/2
✓ Branch 65 → 66 taken 4 times.
✓ Branch 65 → 102 taken 4 times.
8 if (targetHasAlpha) {
1092
1/2
✓ Branch 67 → 68 taken 4 times.
✗ Branch 67 → 156 not taken.
4 dstpA = dst->GetWritePtr(PLANAR_A);
1093
1/2
✓ Branch 69 → 70 taken 4 times.
✗ Branch 69 → 156 not taken.
4 int heightA = dst->GetHeight(PLANAR_A);
1094
1/2
✓ Branch 71 → 72 taken 4 times.
✗ Branch 71 → 156 not taken.
4 int rowsizeA = dst->GetRowSize(PLANAR_A);
1095
1/2
✓ Branch 73 → 74 taken 4 times.
✗ Branch 73 → 156 not taken.
4 int dst_pitchA = dst->GetPitch(PLANAR_A);
1096 // simple copy
1097
3/4
✓ Branch 75 → 76 taken 4 times.
✗ Branch 75 → 156 not taken.
✓ Branch 76 → 77 taken 1 time.
✓ Branch 76 → 94 taken 3 times.
4 if (src->GetRowSize(PLANAR_A)) {
1098
1099
1/2
✓ Branch 77 → 78 taken 1 time.
✗ Branch 77 → 87 not taken.
1 if (source_bit_depth == target_bit_depth) {
1100 // vi.IsYUVA() no-no! vi is already the target video type
1101
5/10
✓ Branch 79 → 80 taken 1 time.
✗ Branch 79 → 156 not taken.
✓ Branch 81 → 82 taken 1 time.
✗ Branch 81 → 156 not taken.
✓ Branch 83 → 84 taken 1 time.
✗ Branch 83 → 156 not taken.
✓ Branch 85 → 86 taken 1 time.
✗ Branch 85 → 156 not taken.
✓ Branch 86 → 101 taken 1 time.
✗ Branch 86 → 156 not taken.
1 env->BitBlt(dstpA, dst_pitchA, src->GetReadPtr(PLANAR_A), src->GetPitch(PLANAR_A), src->GetRowSize(PLANAR_A_ALIGNED), src->GetHeight(PLANAR_A));
1102 }
1103 else {
1104 // RGBPA target + different bit-depth
1105 // Alpha bit depth conversion needed, normal planes are done in-process.
1106 // we need only conv_function_a, proper dispatching from ConvertBits
1107 conv_function_a(src->GetReadPtr(PLANAR_A), dstpA, src->GetRowSize(PLANAR_A), heightA, src->GetPitch(PLANAR_A), dst_pitchA, source_bit_depth, target_bit_depth, -1);
1108 }
1109 }
1110 else {
1111 // fill default transparency
1112
1/4
✗ Branch 94 → 95 not taken.
✗ Branch 94 → 97 not taken.
✗ Branch 94 → 99 not taken.
✓ Branch 94 → 101 taken 3 times.
3 switch (target_bit_depth)
1113 {
1114 case 1:
1115 fill_plane<BYTE>(dstpA, heightA, rowsizeA, dst_pitchA, 255);
1116 break;
1117 case 2:
1118 fill_plane<uint16_t>(dstpA, heightA, rowsizeA, dst_pitchA, (1 << target_bit_depth) - 1);
1119 break;
1120 case 4:
1121 fill_plane<float>(dstpA, heightA, rowsizeA, dst_pitchA, 1.0f);
1122 break;
1123 }
1124 }
1125 }
1126
1127
1/2
✓ Branch 103 → 104 taken 8 times.
✗ Branch 103 → 156 not taken.
8 int dst_pitchG = dst->GetPitch(PLANAR_G);
1128
1/2
✓ Branch 105 → 106 taken 8 times.
✗ Branch 105 → 156 not taken.
8 int dst_pitchB = dst->GetPitch(PLANAR_B);
1129
1/2
✓ Branch 107 → 108 taken 8 times.
✗ Branch 107 → 156 not taken.
8 int dst_pitchR = dst->GetPitch(PLANAR_R);
1130
1131 // always start from source bit depth
1132 8 int bits_per_pixel = source_bit_depth;
1133
1134
3/6
✓ Branch 109 → 110 taken 8 times.
✗ Branch 109 → 156 not taken.
✓ Branch 111 → 112 taken 8 times.
✗ Branch 111 → 156 not taken.
✓ Branch 113 → 114 taken 8 times.
✗ Branch 113 → 156 not taken.
8 const BYTE* srcp[3] = { src->GetReadPtr(PLANAR_Y), src->GetReadPtr(PLANAR_U), src->GetReadPtr(PLANAR_V) };
1135
3/6
✓ Branch 115 → 116 taken 8 times.
✗ Branch 115 → 156 not taken.
✓ Branch 117 → 118 taken 8 times.
✗ Branch 117 → 156 not taken.
✓ Branch 119 → 120 taken 8 times.
✗ Branch 119 → 156 not taken.
8 const int srcPitch[3] = { src->GetPitch(PLANAR_Y), src->GetPitch(PLANAR_U), src->GetPitch(PLANAR_V) };
1136
1137 8 BYTE* dstp[3] = { dstpG, dstpB, dstpR };
1138 8 int dstPitch[3] = { dst_pitchG, dst_pitchB, dst_pitchR };
1139
1140 // alpha is already handled above
1141
1142 8 const bool force_float = quality;
1143
1144 #ifdef INTEL_INTRINSICS
1145
1146
2/4
✓ Branch 120 → 121 taken 8 times.
✗ Branch 120 → 156 not taken.
✓ Branch 121 → 122 taken 8 times.
✗ Branch 121 → 131 not taken.
8 if (env->GetCPUFlags() & CPUF_AVX2)
1147 {
1148
2/2
✓ Branch 122 → 123 taken 3 times.
✓ Branch 122 → 124 taken 5 times.
8 if (bits_per_pixel == 8)
1149
1/2
✓ Branch 123 → 130 taken 3 times.
✗ Branch 123 → 156 not taken.
3 convert_yuv_to_planarrgb_avx2<ConversionDirection::YUV_TO_RGB, uint8_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
1150
1/2
✗ Branch 124 → 125 not taken.
✓ Branch 124 → 126 taken 5 times.
5 else if (bits_per_pixel < 16)
1151 convert_yuv_to_planarrgb_avx2<ConversionDirection::YUV_TO_RGB, uint16_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
1152
2/2
✓ Branch 126 → 127 taken 2 times.
✓ Branch 126 → 128 taken 3 times.
5 else if (bits_per_pixel == 16)
1153
1/2
✓ Branch 127 → 130 taken 2 times.
✗ Branch 127 → 156 not taken.
2 convert_yuv_to_planarrgb_avx2<ConversionDirection::YUV_TO_RGB, uint16_t, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
1154
1/2
✓ Branch 128 → 129 taken 3 times.
✗ Branch 128 → 130 not taken.
3 else if (bits_per_pixel == 32)
1155
1/2
✓ Branch 129 → 130 taken 3 times.
✗ Branch 129 → 156 not taken.
3 convert_yuv_to_planarrgb_avx2<ConversionDirection::YUV_TO_RGB, float, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
1156 8 return dst;
1157 }
1158
1159 if (env->GetCPUFlags() & CPUF_SSE2)
1160 {
1161 if (bits_per_pixel == 8)
1162 convert_yuv_to_planarrgb_sse2<ConversionDirection::YUV_TO_RGB, uint8_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
1163 else if (bits_per_pixel < 16)
1164 convert_yuv_to_planarrgb_sse2<ConversionDirection::YUV_TO_RGB, uint16_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
1165 else if (bits_per_pixel == 16)
1166 convert_yuv_to_planarrgb_sse2<ConversionDirection::YUV_TO_RGB, uint16_t, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
1167 else if (bits_per_pixel == 32)
1168 convert_yuv_to_planarrgb_sse2<ConversionDirection::YUV_TO_RGB, float, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
1169 return dst;
1170 }
1171
1172 #endif
1173
1174 if (bits_per_pixel == 8)
1175 convert_yuv_to_planarrgb_c<ConversionDirection::YUV_TO_RGB, uint8_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
1176 else if (bits_per_pixel < 16)
1177 convert_yuv_to_planarrgb_c<ConversionDirection::YUV_TO_RGB, uint16_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
1178 else if (bits_per_pixel == 16)
1179 convert_yuv_to_planarrgb_c<ConversionDirection::YUV_TO_RGB, uint16_t, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
1180 else if (bits_per_pixel == 32)
1181 convert_yuv_to_planarrgb_c<ConversionDirection::YUV_TO_RGB, float, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float);
1182 return dst;
1183 }
1184 return dst;
1185 8 }
1186
1187 /************************************
1188 * YUY2 to YV16
1189 ************************************/
1190
1191 ConvertYUY2ToYV16_or_Y::ConvertYUY2ToYV16_or_Y(PClip src, bool _to_y, IScriptEnvironment* env) : GenericVideoFilter(src), to_y(_to_y) {
1192
1193 if (!vi.IsYUY2())
1194 env->ThrowError("ConvertYUY2ToYV16/Y: Only YUY2 is allowed as input");
1195
1196 vi.pixel_type = to_y ? VideoInfo::CS_Y8 : VideoInfo::CS_YV16;
1197
1198 }
1199
1200 static void convert_yuy2_to_y8_c(const BYTE* srcp, BYTE* dstp, size_t src_pitch, size_t dst_pitch, size_t width, size_t height)
1201 {
1202 for (int y = 0; y < height; y++) {
1203 for (int x = 0; x < width; x++) {
1204 dstp[x] = srcp[x * 2];
1205 }
1206 srcp += src_pitch;
1207 dstp += dst_pitch;
1208 }
1209 }
1210
1211
1212 static void convert_yuy2_to_yv16_c(const BYTE *srcp, BYTE *dstp_y, BYTE *dstp_u, BYTE *dstp_v, size_t src_pitch, size_t dst_pitch_y, size_t dst_pitch_uv, size_t width, size_t height)
1213 {
1214 width /= 2;
1215
1216 for (size_t y = 0; y < height; ++y) {
1217 for (size_t x = 0; x < width; ++x) {
1218 dstp_y[x * 2] = srcp[x * 4 + 0];
1219 dstp_y[x * 2 + 1] = srcp[x * 4 + 2];
1220 dstp_u[x] = srcp[x * 4 + 1];
1221 dstp_v[x] = srcp[x * 4 + 3];
1222 }
1223 srcp += src_pitch;
1224 dstp_y += dst_pitch_y;
1225 dstp_u += dst_pitch_uv;
1226 dstp_v += dst_pitch_uv;
1227 }
1228 }
1229
1230
1231 PVideoFrame __stdcall ConvertYUY2ToYV16_or_Y::GetFrame(int n, IScriptEnvironment* env) {
1232 PVideoFrame src = child->GetFrame(n, env);
1233 PVideoFrame dst = env->NewVideoFrameP(vi, &src);
1234
1235 const BYTE* srcP = src->GetReadPtr();
1236 BYTE* dstY = dst->GetWritePtr(PLANAR_Y);
1237
1238 if (to_y) {
1239 update_ChromaLocation(env->getFramePropsRW(dst), -1, env); // Y8 target: delete _ChromaLocation
1240 // YUY2 to Y8, luma only
1241 #ifdef INTEL_INTRINSICS
1242 if (env->GetCPUFlags() & CPUF_SSE2) {
1243 convert_yuy2_to_y8_sse2(srcP, dstY, src->GetPitch(), dst->GetPitch(PLANAR_Y), vi.width, vi.height);
1244 }
1245 else
1246 #endif
1247 {
1248 convert_yuy2_to_y8_c(srcP, dstY, src->GetPitch(), dst->GetPitch(PLANAR_Y), vi.width, vi.height);
1249 }
1250 return dst;
1251 }
1252 else {
1253 BYTE* dstU = dst->GetWritePtr(PLANAR_U);
1254 BYTE* dstV = dst->GetWritePtr(PLANAR_V);
1255 // YUY2 to YV16, separate luma and chroma
1256 #ifdef INTEL_INTRINSICS
1257 if (env->GetCPUFlags() & CPUF_SSE2) {
1258 convert_yuy2_to_yv16_sse2(srcP, dstY, dstU, dstV, src->GetPitch(), dst->GetPitch(PLANAR_Y), dst->GetPitch(PLANAR_U), vi.width, vi.height);
1259 }
1260 else
1261 #ifdef X86_32
1262 if (env->GetCPUFlags() & CPUF_MMX) {
1263 convert_yuy2_to_yv16_mmx(srcP, dstY, dstU, dstV, src->GetPitch(), dst->GetPitch(PLANAR_Y), dst->GetPitch(PLANAR_U), vi.width, vi.height);
1264 }
1265 else
1266 #endif
1267 #endif
1268 {
1269 convert_yuy2_to_yv16_c(srcP, dstY, dstU, dstV, src->GetPitch(), dst->GetPitch(PLANAR_Y), dst->GetPitch(PLANAR_U), vi.width, vi.height);
1270 }
1271 }
1272
1273 return dst;
1274 }
1275
1276
1277 AVSValue __cdecl ConvertYUY2ToYV16_or_Y::Create(AVSValue args, void*, IScriptEnvironment* env) {
1278 PClip clip = args[0].AsClip();
1279 if (clip->GetVideoInfo().IsYV16())
1280 return clip;
1281 return new ConvertYUY2ToYV16_or_Y(clip, false /*to_y*/, env);
1282 }
1283
1284 /************************************
1285 * YV16 to YUY2
1286 ************************************/
1287
1288 ConvertYV16ToYUY2::ConvertYV16ToYUY2(PClip src, IScriptEnvironment* env) : GenericVideoFilter(src) {
1289
1290 if (!vi.IsYV16())
1291 env->ThrowError("ConvertYV16ToYUY2: Only YV16 is allowed as input");
1292
1293 vi.pixel_type = VideoInfo::CS_YUY2;
1294 }
1295
1296 static void convert_yv16_to_yuy2_c(const BYTE *srcp_y, const BYTE *srcp_u, const BYTE *srcp_v, BYTE *dstp, size_t src_pitch_y, size_t src_pitch_uv, size_t dst_pitch, size_t width, size_t height) {
1297 for (size_t y=0; y < height; y++) {
1298 for (size_t x=0; x < width / 2; x++) {
1299 dstp[x*4+0] = srcp_y[x*2];
1300 dstp[x*4+1] = srcp_u[x];
1301 dstp[x*4+2] = srcp_y[x*2+1];
1302 dstp[x*4+3] = srcp_v[x];
1303 }
1304 srcp_y += src_pitch_y;
1305 srcp_u += src_pitch_uv;
1306 srcp_v += src_pitch_uv;
1307 dstp += dst_pitch;
1308 }
1309 }
1310
1311 PVideoFrame __stdcall ConvertYV16ToYUY2::GetFrame(int n, IScriptEnvironment* env) {
1312 PVideoFrame src = child->GetFrame(n, env);
1313 PVideoFrame dst = env->NewVideoFrameP(vi, &src);
1314
1315 const BYTE* srcY = src->GetReadPtr(PLANAR_Y);
1316 const BYTE* srcU = src->GetReadPtr(PLANAR_U);
1317 const BYTE* srcV = src->GetReadPtr(PLANAR_V);
1318
1319 BYTE* dstp = dst->GetWritePtr();
1320
1321 #ifdef INTEL_INTRINSICS
1322 if (env->GetCPUFlags() & CPUF_SSE2) {
1323 //U and V don't have to be aligned since we user movq to read from those
1324 convert_yv16_to_yuy2_sse2(srcY, srcU, srcV, dstp, src->GetPitch(PLANAR_Y), src->GetPitch(PLANAR_U), dst->GetPitch(), vi.width, vi.height);
1325 } else
1326 #ifdef X86_32
1327 if (env->GetCPUFlags() & CPUF_MMX) {
1328 convert_yv16_to_yuy2_mmx(srcY, srcU, srcV, dstp, src->GetPitch(PLANAR_Y), src->GetPitch(PLANAR_U), dst->GetPitch(), vi.width, vi.height);
1329 } else
1330 #endif
1331 #endif
1332 {
1333 convert_yv16_to_yuy2_c(srcY, srcU, srcV, dstp, src->GetPitch(PLANAR_Y), src->GetPitch(PLANAR_U), dst->GetPitch(), vi.width, vi.height);
1334 }
1335
1336 return dst;
1337 }
1338
1339
1340 AVSValue __cdecl ConvertYV16ToYUY2::Create(AVSValue args, void*, IScriptEnvironment* env) {
1341 PClip clip = args[0].AsClip();
1342 if (clip->GetVideoInfo().IsYUY2())
1343 return clip;
1344 return new ConvertYV16ToYUY2(clip, env);
1345 }
1346
1347 /**********************************************
1348 * Converter between arbitrary planar formats
1349 *
1350 * This uses plane copy for luma, and a custom
1351 * resizer for chroma
1352 *
1353 * (c) Klaus Post, 2005
1354 * (c) Ian Brabham, 2011
1355 **********************************************/
1356
1357 4 ConvertToPlanarGeneric::ConvertToPlanarGeneric(
1358 PClip src, int dst_space, bool interlaced,
1359 int _ChromaLocation_In,
1360 const AVSValue& chromaResampler, const AVSValue& param1, const AVSValue& param2, const AVSValue& param3,
1361 int _ChromaLocation_Out,
1362 4 IScriptEnvironment* env) :
1363
4/8
✓ Branch 2 → 3 taken 4 times.
✗ Branch 2 → 340 not taken.
✓ Branch 3 → 4 taken 4 times.
✗ Branch 3 → 338 not taken.
✓ Branch 5 → 6 taken 4 times.
✗ Branch 5 → 577 not taken.
✓ Branch 6 → 7 taken 4 times.
✗ Branch 6 → 575 not taken.
4 GenericVideoFilter(src), ChromaLocation_In(_ChromaLocation_In), ChromaLocation_Out(_ChromaLocation_Out)
1364 {
1365
1/2
✓ Branch 7 → 8 taken 4 times.
✗ Branch 7 → 572 not taken.
4 Yinput = vi.NumComponents() == 1;
1366
1/2
✓ Branch 8 → 9 taken 4 times.
✗ Branch 8 → 572 not taken.
4 pixelsize = vi.ComponentSize();
1367
1368
1/2
✗ Branch 9 → 10 not taken.
✓ Branch 9 → 15 taken 4 times.
4 if (Yinput) {
1369 vi.pixel_type = dst_space;
1370 if (vi.ComponentSize() != pixelsize)
1371 env->ThrowError("Convert: Conversion from %d to %d-byte format not supported.", pixelsize, vi.ComponentSize());
1372 // no more preparation here, GetFrame simply returns Y
1373 3 return;
1374 }
1375
1376 // Y only output from any YUV: no chroma involved, GetFrame will snatch Y plane
1377
4/6
✓ Branch 15 → 16 taken 1 time.
✓ Branch 15 → 21 taken 3 times.
✓ Branch 16 → 17 taken 1 time.
✗ Branch 16 → 21 not taken.
✓ Branch 17 → 18 taken 1 time.
✗ Branch 17 → 21 not taken.
4 if (dst_space == VideoInfo::CS_Y8 || dst_space == VideoInfo::CS_Y10 ||
1378
3/6
✓ Branch 18 → 19 taken 1 time.
✗ Branch 18 → 21 not taken.
✓ Branch 19 → 20 taken 1 time.
✗ Branch 19 → 21 not taken.
✗ Branch 20 → 21 not taken.
✓ Branch 20 → 22 taken 1 time.
1 dst_space == VideoInfo::CS_Y12 || dst_space == VideoInfo::CS_Y14 || dst_space == VideoInfo::CS_Y16 ||
1379 dst_space == VideoInfo::CS_Y32)
1380 {
1381 3 vi.pixel_type = dst_space;
1382 3 return;
1383 }
1384
1385 4 auto Is420 = [](int pix_type) {
1386
2/4
✓ Branch 3 → 4 taken 2 times.
✗ Branch 3 → 15 not taken.
✓ Branch 4 → 5 taken 2 times.
✗ Branch 4 → 15 not taken.
2 return pix_type == VideoInfo::CS_YV12 || pix_type == VideoInfo::CS_I420 ||
1387
2/4
✓ Branch 5 → 6 taken 2 times.
✗ Branch 5 → 15 not taken.
✓ Branch 6 → 7 taken 2 times.
✗ Branch 6 → 15 not taken.
2 pix_type == VideoInfo::CS_YUV420P10 || pix_type == VideoInfo::CS_YUV420P12 ||
1388
2/4
✓ Branch 7 → 8 taken 2 times.
✗ Branch 7 → 15 not taken.
✓ Branch 8 → 9 taken 2 times.
✗ Branch 8 → 15 not taken.
2 pix_type == VideoInfo::CS_YUV420P14 || pix_type == VideoInfo::CS_YUV420P16 ||
1389
1/2
✓ Branch 9 → 10 taken 2 times.
✗ Branch 9 → 15 not taken.
2 pix_type == VideoInfo::CS_YUV420PS ||
1390
1/2
✓ Branch 10 → 11 taken 2 times.
✗ Branch 10 → 15 not taken.
2 pix_type == VideoInfo::CS_YUVA420 ||
1391
2/4
✓ Branch 11 → 12 taken 2 times.
✗ Branch 11 → 15 not taken.
✓ Branch 12 → 13 taken 2 times.
✗ Branch 12 → 15 not taken.
2 pix_type == VideoInfo::CS_YUVA420P10 || pix_type == VideoInfo::CS_YUVA420P12 ||
1392
4/6
✓ Branch 2 → 3 taken 2 times.
✓ Branch 2 → 15 taken 2 times.
✓ Branch 13 → 14 taken 2 times.
✗ Branch 13 → 15 not taken.
✗ Branch 14 → 15 not taken.
✓ Branch 14 → 16 taken 2 times.
6 pix_type == VideoInfo::CS_YUVA420P14 || pix_type == VideoInfo::CS_YUVA420P16 ||
1393 4 pix_type == VideoInfo::CS_YUVA420PS;
1394 };
1395
1396
3/6
✓ Branch 23 → 24 taken 1 time.
✗ Branch 23 → 27 not taken.
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 1 time.
✗ Branch 28 → 29 not taken.
✓ Branch 28 → 30 taken 1 time.
1 if (!Is420(vi.pixel_type) && !Is420(dst_space))
1397 interlaced = false; // Ignore, if YV12 is not involved.
1398 //if (interlaced) env->ThrowError("Convert: Interlaced only available with 4:2:0 color spaces.");
1399
1400 // Describe input pixel positioning
1401 1 float xdInU = 0.0f, txdInU = 0.0f, bxdInU = 0.0f;
1402 1 float ydInU = 0.0f, tydInU = 0.0f, bydInU = 0.0f;
1403 1 float xdInV = 0.0f, txdInV = 0.0f, bxdInV = 0.0f;
1404 1 float ydInV = 0.0f, tydInV = 0.0f, bydInV = 0.0f;
1405
1406 /*
1407 "mpeg1", "center"
1408 - 1-1 averaging kernel (4:2:0, 4:2:2 (horizontal only))
1409 "mpeg2", "left" (4:2:0, 4:2:2)
1410 - top-field samples are sited 1/4 sample below the luma samples (4:2:0)
1411 - bottom-field samples are sited 1/4 sample above the luma samples (4:2:0)
1412 - horizontal 1-2-1 kernel
1413 "dv": (4:2:0)
1414 Chroma samples are sited on top of luma samples, but CB and CR samples are sited on alternate lines.
1415 - top: V
1416 - bottom: U
1417 "top_left" (4:2:0)
1418 - horizontal 1-2-1 vertical 1-2-1
1419 */
1420
1421
1/2
✗ Branch 31 → 32 not taken.
✓ Branch 31 → 42 taken 1 time.
1 if (Is420(vi.pixel_type)) {
1422 switch (ChromaLocation_In) {
1423 case ChromaLocation_e::AVS_CHROMA_DV: // spec. avisynth
1424 xdInU = 0.0f; ydInU = 1.0f; txdInU = 0.0f; tydInU = 1.0f; bxdInU = 0.0f; bydInU = 1.0f; // Cb
1425 xdInV = 0.0f; ydInV = 0.0f; txdInV = 0.0f; tydInV = 0.0f; bxdInV = 0.0f; bydInV = 0.0f; // Cr
1426 break;
1427 case ChromaLocation_e::AVS_CHROMA_TOP:
1428 xdInU = 0.5f, ydInU = 0.0f; txdInU = 0.5f; tydInU = 0.0f; bxdInU = 0.5f; bydInU = 0.5f;
1429 xdInV = 0.5f, ydInV = 0.0f; txdInV = 0.5f; tydInV = 0.0f; bxdInV = 0.5f; bydInV = 0.5f;
1430 break;
1431 case ChromaLocation_e::AVS_CHROMA_CENTER: // mpeg1, center
1432 xdInU = 0.5f, ydInU = 0.5f; txdInU = 0.5f; tydInU = 0.25f; bxdInU = 0.5f; bydInU = 0.75f;
1433 xdInV = 0.5f, ydInV = 0.5f; txdInV = 0.5f; tydInV = 0.25f; bxdInV = 0.5f; bydInV = 0.75f;
1434 break;
1435 case ChromaLocation_e::AVS_CHROMA_BOTTOM:
1436 xdInU = 0.5f, ydInU = 1.0f; txdInU = 0.5f; tydInU = 0.5f; bxdInU = 0.5f; bydInU = 1.0f;
1437 xdInV = 0.5f, ydInV = 1.0f; txdInV = 0.5f; tydInV = 0.5f; bxdInV = 0.5f; bydInV = 1.0f;
1438 break;
1439 case ChromaLocation_e::AVS_CHROMA_TOP_LEFT:
1440 xdInU = 0.0f; ydInU = 0.0f; txdInU = 0.0f; tydInU = 0.0f; bxdInU = 0.0f; bydInU = 0.5f;
1441 xdInV = 0.0f; ydInV = 0.0f; txdInV = 0.0f; tydInV = 0.0f; bxdInV = 0.0f; bydInV = 0.5f;
1442 break;
1443 case ChromaLocation_e::AVS_CHROMA_LEFT: // left, mpeg2
1444 xdInU = 0.0f; ydInU = 0.5f; txdInU = 0.0f; tydInU = 0.25f; bxdInU = 0.0f; bydInU = 0.75f;
1445 xdInV = 0.0f; ydInV = 0.5f; txdInV = 0.0f; tydInV = 0.25f; bxdInV = 0.0f; bydInV = 0.75f;
1446 break;
1447 case ChromaLocation_e::AVS_CHROMA_BOTTOM_LEFT:
1448 xdInU = 0.0f; ydInU = 1.0f; txdInU = 0.0f; tydInU = 0.5f; bxdInU = 0.0f; bydInU = 1.0f;
1449 xdInV = 0.0f; ydInV = 1.0f; txdInV = 0.0f; tydInV = 0.5f; bxdInV = 0.0f; bydInV = 1.0f;
1450 break;
1451 default:
1452 env->ThrowError("Convert: not supported ChromaPlacement for 4:2:0 input.");
1453 }
1454 }
1455
2/4
✓ Branch 42 → 43 taken 1 time.
✗ Branch 42 → 572 not taken.
✗ Branch 43 → 44 not taken.
✓ Branch 43 → 49 taken 1 time.
1 else if (vi.Is422()) {
1456 switch (ChromaLocation_In) {
1457 case ChromaLocation_e::AVS_CHROMA_CENTER: // center
1458 xdInU = 0.5f, ydInU = 0.0f; txdInU = 0.5f; tydInU = 0.0f; bxdInU = 0.5f; bydInU = 0.0f;
1459 xdInV = 0.5f, ydInV = 0.0f; txdInV = 0.5f; tydInV = 0.0f; bxdInV = 0.5f; bydInV = 0.0f;
1460 break;
1461 case ChromaLocation_e::AVS_CHROMA_TOP_LEFT: // treated as left
1462 case ChromaLocation_e::AVS_CHROMA_LEFT: // left, mpeg2
1463 case ChromaLocation_e::AVS_CHROMA_BOTTOM_LEFT: // treated as left
1464 xdInU = 0.0f; ydInU = 0.0f; txdInU = 0.0f; tydInU = 0.0f; bxdInU = 0.0f; bydInU = 0.0f;
1465 xdInV = 0.0f; ydInV = 0.0f; txdInV = 0.0f; tydInV = 0.0f; bxdInV = 0.0f; bydInV = 0.0f;
1466 break;
1467 default:
1468 env->ThrowError("Convert: not supported ChromaPlacement for 4:2:2 input.");
1469 }
1470 }
1471
2/4
✓ Branch 49 → 50 taken 1 time.
✗ Branch 49 → 572 not taken.
✗ Branch 50 → 51 not taken.
✓ Branch 50 → 56 taken 1 time.
1 else if (vi.IsYV411()) {
1472 if (ChromaLocation_In >= 0
1473 && ChromaLocation_In != ChromaLocation_e::AVS_CHROMA_TOP_LEFT
1474 && ChromaLocation_In != ChromaLocation_e::AVS_CHROMA_LEFT
1475 && ChromaLocation_In != ChromaLocation_e::AVS_CHROMA_BOTTOM_LEFT
1476 )
1477 {
1478 // if given, only the 'left'-ish versions are accepted, this is how it is treated
1479 env->ThrowError("Convert: not supported ChromaPlacement for 4:1:1 input. Only 'left'-style is allowed if given.");
1480 }
1481 }
1482
1/2
✗ Branch 56 → 57 not taken.
✓ Branch 56 → 58 taken 1 time.
1 else if (ChromaLocation_In >= 0)
1483 env->ThrowError("Convert: Input ChromaPlacement is invalid for this format.");
1484
1485
1/2
✓ Branch 58 → 59 taken 1 time.
✗ Branch 58 → 572 not taken.
1 const int xsIn = 1 << vi.GetPlaneWidthSubsampling(PLANAR_U);
1486
1/2
✓ Branch 59 → 60 taken 1 time.
✗ Branch 59 → 572 not taken.
1 const int ysIn = 1 << vi.GetPlaneHeightSubsampling(PLANAR_U);
1487
1488 // change vi to the output format
1489 1 vi.pixel_type = dst_space;
1490
1491
2/4
✓ Branch 60 → 61 taken 1 time.
✗ Branch 60 → 572 not taken.
✗ Branch 61 → 62 not taken.
✓ Branch 61 → 64 taken 1 time.
1 if (vi.ComponentSize() != pixelsize)
1492 env->ThrowError("Convert: Conversion from %d to %d-byte format not supported.", pixelsize, vi.ComponentSize());
1493
1494 // Describe output pixel positioning
1495 1 float xdOutU = 0.0f, txdOutU = 0.0f, bxdOutU = 0.0f;
1496 1 float ydOutU = 0.0f, tydOutU = 0.0f, bydOutU = 0.0f;
1497 1 float xdOutV = 0.0f, txdOutV = 0.0f, bxdOutV = 0.0f;
1498 1 float ydOutV = 0.0f, tydOutV = 0.0f, bydOutV = 0.0f;
1499
1500
1/2
✓ Branch 65 → 66 taken 1 time.
✗ Branch 65 → 76 not taken.
1 if (Is420(vi.pixel_type)) {
1501
1/8
✗ Branch 66 → 67 not taken.
✗ Branch 66 → 68 not taken.
✗ Branch 66 → 69 not taken.
✗ Branch 66 → 70 not taken.
✗ Branch 66 → 71 not taken.
✓ Branch 66 → 72 taken 1 time.
✗ Branch 66 → 73 not taken.
✗ Branch 66 → 74 not taken.
1 switch (ChromaLocation_Out) {
1502 case ChromaLocation_e::AVS_CHROMA_DV:
1503 xdOutU = 0.0f; ydOutU = 1.0f; txdOutU = 0.0f; tydOutU = 1.0f; bxdOutU = 0.0f; bydOutU = 1.0f; // Cb
1504 xdOutV = 0.0f; ydOutV = 0.0f; txdOutV = 0.0f; tydOutV = 0.0f; bxdOutV = 0.0f; bydOutV = 0.0f; // Cr
1505 break;
1506 case ChromaLocation_e::AVS_CHROMA_TOP:
1507 xdOutU = 0.5f, ydOutU = 0.0f; txdOutU = 0.5f; tydOutU = 0.0f; bxdOutU = 0.5f; bydOutU = 0.5f;
1508 xdOutV = 0.5f, ydOutV = 0.0f; txdOutV = 0.5f; tydOutV = 0.0f; bxdOutV = 0.5f; bydOutV = 0.5f;
1509 break;
1510 case ChromaLocation_e::AVS_CHROMA_CENTER: // mpeg1, center
1511 xdOutU = 0.5f, ydOutU = 0.5f; txdOutU = 0.5f; tydOutU = 0.25f; bxdOutU = 0.5f; bydOutU = 0.75f;
1512 xdOutV = 0.5f, ydOutV = 0.5f; txdOutV = 0.5f; tydOutV = 0.25f; bxdOutV = 0.5f; bydOutV = 0.75f;
1513 break;
1514 case ChromaLocation_e::AVS_CHROMA_BOTTOM:
1515 xdOutU = 0.5f, ydOutU = 1.0f; txdOutU = 0.5f; tydOutU = 0.5f; bxdOutU = 0.5f; bydOutU = 1.0f;
1516 xdOutV = 0.5f, ydOutV = 1.0f; txdOutV = 0.5f; tydOutV = 0.5f; bxdOutV = 0.5f; bydOutV = 1.0f;
1517 break;
1518 case ChromaLocation_e::AVS_CHROMA_TOP_LEFT:
1519 xdOutU = 0.0f; ydOutU = 0.0f; txdOutU = 0.0f; tydOutU = 0.0f; bxdOutU = 0.0f; bydOutU = 0.5f;
1520 xdOutV = 0.0f; ydOutV = 0.0f; txdOutV = 0.0f; tydOutV = 0.0f; bxdOutV = 0.0f; bydOutV = 0.5f;
1521 break;
1522 1 case ChromaLocation_e::AVS_CHROMA_LEFT: // left, mpeg2
1523 1 xdOutU = 0.0f; ydOutU = 0.5f; txdOutU = 0.0f; tydOutU = 0.25f; bxdOutU = 0.0f; bydOutU = 0.75f;
1524 1 xdOutV = 0.0f; ydOutV = 0.5f; txdOutV = 0.0f; tydOutV = 0.25f; bxdOutV = 0.0f; bydOutV = 0.75f;
1525 1 break;
1526 case ChromaLocation_e::AVS_CHROMA_BOTTOM_LEFT:
1527 xdOutU = 0.0f; ydOutU = 1.0f; txdOutU = 0.0f; tydOutU = 0.5f; bxdOutU = 0.0f; bydOutU = 1.0f;
1528 xdOutV = 0.0f; ydOutV = 1.0f; txdOutV = 0.0f; tydOutV = 0.5f; bxdOutV = 0.0f; bydOutV = 1.0f;
1529 break;
1530 default:
1531 env->ThrowError("Convert: not supported ChromaPlacement for 4:2:0 output.");
1532 }
1533 }
1534 else if (vi.Is422()) {
1535 switch (ChromaLocation_Out) {
1536 case ChromaLocation_e::AVS_CHROMA_CENTER: // mpeg1, center
1537 xdOutU = 0.5f, ydOutU = 0.0f; txdOutU = 0.5f; tydOutU = 0.0f; bxdOutU = 0.5f; bydOutU = 0.0f;
1538 xdOutV = 0.5f, ydOutV = 0.0f; txdOutV = 0.5f; tydOutV = 0.0f; bxdOutV = 0.5f; bydOutV = 0.0f;
1539 break;
1540 case ChromaLocation_e::AVS_CHROMA_TOP_LEFT: // treated as left
1541 case ChromaLocation_e::AVS_CHROMA_LEFT: // left, mpeg2
1542 case ChromaLocation_e::AVS_CHROMA_BOTTOM_LEFT: // treated as left
1543 xdOutU = 0.0f; ydOutU = 0.0f; txdOutU = 0.0f; tydOutU = 0.0f; bxdOutU = 0.0f; bydOutU = 0.0f;
1544 xdOutV = 0.0f; ydOutV = 0.0f; txdOutV = 0.0f; tydOutV = 0.0f; bxdOutV = 0.0f; bydOutV = 0.0f;
1545 break;
1546 default:
1547 env->ThrowError("Convert: not supported ChromaPlacement for 4:2:2 output.");
1548 }
1549 }
1550 else if (ChromaLocation_Out >= 0)
1551 env->ThrowError("Convert: Output ChromaPlacement only available with 4:2:0 or 4:2:2 output.");
1552
1553
1/2
✓ Branch 85 → 86 taken 1 time.
✗ Branch 85 → 572 not taken.
1 const int xsOut = 1 << vi.GetPlaneWidthSubsampling(PLANAR_U);
1554 1 const int xmask = xsOut - 1;
1555
1/2
✗ Branch 86 → 87 not taken.
✓ Branch 86 → 88 taken 1 time.
1 if (vi.width & xmask)
1556 env->ThrowError("Convert: Cannot convert if width isn't mod%d!", xsOut);
1557
1558
1/2
✓ Branch 88 → 89 taken 1 time.
✗ Branch 88 → 572 not taken.
1 const int ysOut = 1 << vi.GetPlaneHeightSubsampling(PLANAR_U);
1559 1 const int ymask = ysOut - 1;
1560
1/2
✗ Branch 89 → 90 not taken.
✓ Branch 89 → 91 taken 1 time.
1 if (vi.height & ymask)
1561 env->ThrowError("Convert: Cannot convert if height isn't mod%d!", ysOut);
1562
1563
1/2
✓ Branch 91 → 92 taken 1 time.
✗ Branch 91 → 572 not taken.
1 int uv_width = vi.width >> vi.GetPlaneWidthSubsampling(PLANAR_U);
1564
1/2
✓ Branch 92 → 93 taken 1 time.
✗ Branch 92 → 572 not taken.
1 int uv_height = vi.height >> vi.GetPlaneHeightSubsampling(PLANAR_U);
1565
1566
5/10
✓ Branch 93 → 94 taken 1 time.
✗ Branch 93 → 349 not taken.
✓ Branch 94 → 95 taken 1 time.
✗ Branch 94 → 346 not taken.
✓ Branch 95 → 96 taken 1 time.
✗ Branch 95 → 343 not taken.
✓ Branch 96 → 97 taken 1 time.
✗ Branch 96 → 341 not taken.
✓ Branch 97 → 98 taken 1 time.
✗ Branch 97 → 341 not taken.
1 ResamplingFunction *filter = getResampler(chromaResampler.AsString("bicubic"), param1, param2, param3, true, env);
1567
1568
1/2
✓ Branch 101 → 102 taken 1 time.
✗ Branch 101 → 572 not taken.
1 bool P = !lstrcmpi(chromaResampler.AsString(""), "point");
1569
1570 8 auto ChrOffset = [P](int sIn, float dIn, int sOut, float dOut) {
1571 // (1 - sOut/sIn)/2 + (dOut-dIn)/sIn; // Gavino Jan 2011
1572
1/2
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 8 times.
8 return P ? (dOut - dIn) / sIn : 0.5f + (dOut - dIn - 0.5f*sOut) / sIn;
1573 1 };
1574
1575 1 const int force = 0;
1576 1 const bool preserve_center = true;
1577 1 const char *placement_name_notused = nullptr; // n/a
1578 1 const int forced_chroma_placement = -1; // no force
1579 // chroma planes are extracted, behave like Y when resized, no chroma planes involved
1580
1581
1/2
✓ Branch 102 → 103 taken 1 time.
✗ Branch 102 → 286 not taken.
1 if (interlaced) {
1582 1 uv_height /= 2;
1583
1584
4/12
✓ Branch 104 → 105 taken 1 time.
✗ Branch 104 → 350 not taken.
✓ Branch 106 → 107 taken 1 time.
✗ Branch 106 → 350 not taken.
✓ Branch 107 → 108 taken 1 time.
✗ Branch 107 → 350 not taken.
✓ Branch 108 → 109 taken 1 time.
✗ Branch 108 → 350 not taken.
✗ Branch 350 → 351 not taken.
✗ Branch 350 → 354 not taken.
✗ Branch 352 → 353 not taken.
✗ Branch 352 → 354 not taken.
6 AVSValue tUsubSampling[4] = { ChrOffset(xsIn, txdInU, xsOut, txdOutU), ChrOffset(ysIn, tydInU, ysOut, tydOutU), AVSValue(), AVSValue() };
1585
4/12
✓ Branch 110 → 111 taken 1 time.
✗ Branch 110 → 355 not taken.
✓ Branch 112 → 113 taken 1 time.
✗ Branch 112 → 355 not taken.
✓ Branch 113 → 114 taken 1 time.
✗ Branch 113 → 355 not taken.
✓ Branch 114 → 115 taken 1 time.
✗ Branch 114 → 355 not taken.
✗ Branch 355 → 356 not taken.
✗ Branch 355 → 359 not taken.
✗ Branch 357 → 358 not taken.
✗ Branch 357 → 359 not taken.
6 AVSValue bUsubSampling[4] = { ChrOffset(xsIn, bxdInU, xsOut, bxdOutU), ChrOffset(ysIn, bydInU, ysOut, bydOutU), AVSValue(), AVSValue() };
1586
4/12
✓ Branch 116 → 117 taken 1 time.
✗ Branch 116 → 360 not taken.
✓ Branch 118 → 119 taken 1 time.
✗ Branch 118 → 360 not taken.
✓ Branch 119 → 120 taken 1 time.
✗ Branch 119 → 360 not taken.
✓ Branch 120 → 121 taken 1 time.
✗ Branch 120 → 360 not taken.
✗ Branch 360 → 361 not taken.
✗ Branch 360 → 364 not taken.
✗ Branch 362 → 363 not taken.
✗ Branch 362 → 364 not taken.
6 AVSValue tVsubSampling[4] = { ChrOffset(xsIn, txdInV, xsOut, txdOutV), ChrOffset(ysIn, tydInV, ysOut, tydOutV), AVSValue(), AVSValue() };
1587
4/12
✓ Branch 122 → 123 taken 1 time.
✗ Branch 122 → 365 not taken.
✓ Branch 124 → 125 taken 1 time.
✗ Branch 124 → 365 not taken.
✓ Branch 125 → 126 taken 1 time.
✗ Branch 125 → 365 not taken.
✓ Branch 126 → 127 taken 1 time.
✗ Branch 126 → 365 not taken.
✗ Branch 365 → 366 not taken.
✗ Branch 365 → 369 not taken.
✗ Branch 367 → 368 not taken.
✗ Branch 367 → 369 not taken.
6 AVSValue bVsubSampling[4] = { ChrOffset(xsIn, bxdInV, xsOut, bxdOutV), ChrOffset(ysIn, bydInV, ysOut, bydOutV), AVSValue(), AVSValue() };
1588
1589
13/32
✓ Branch 127 → 128 taken 1 time.
✗ Branch 127 → 494 not taken.
✓ Branch 128 → 129 taken 1 time.
✗ Branch 128 → 384 not taken.
✓ Branch 129 → 130 taken 1 time.
✗ Branch 129 → 380 not taken.
✓ Branch 130 → 131 taken 1 time.
✗ Branch 130 → 376 not taken.
✓ Branch 131 → 132 taken 1 time.
✗ Branch 131 → 374 not taken.
✓ Branch 132 → 133 taken 1 time.
✗ Branch 132 → 374 not taken.
✓ Branch 133 → 134 taken 1 time.
✗ Branch 133 → 372 not taken.
✓ Branch 134 → 135 taken 1 time.
✗ Branch 134 → 372 not taken.
✓ Branch 135 → 136 taken 1 time.
✗ Branch 135 → 370 not taken.
✓ Branch 136 → 137 taken 1 time.
✗ Branch 136 → 370 not taken.
✗ Branch 140 → 141 not taken.
✓ Branch 140 → 142 taken 1 time.
✗ Branch 142 → 143 not taken.
✓ Branch 142 → 144 taken 1 time.
✗ Branch 144 → 145 not taken.
✓ Branch 144 → 146 taken 1 time.
✗ Branch 377 → 378 not taken.
✗ Branch 377 → 379 not taken.
✗ Branch 381 → 382 not taken.
✗ Branch 381 → 383 not taken.
✗ Branch 385 → 386 not taken.
✗ Branch 385 → 387 not taken.
1 Usource = new SeparateFields(new AssumeParity(new SwapUVToY(child, SwapUVToY::UToY8, env), true), env); // also works for Y16/Y32
1590
13/32
✓ Branch 146 → 147 taken 1 time.
✗ Branch 146 → 494 not taken.
✓ Branch 147 → 148 taken 1 time.
✗ Branch 147 → 402 not taken.
✓ Branch 148 → 149 taken 1 time.
✗ Branch 148 → 398 not taken.
✓ Branch 149 → 150 taken 1 time.
✗ Branch 149 → 394 not taken.
✓ Branch 150 → 151 taken 1 time.
✗ Branch 150 → 392 not taken.
✓ Branch 151 → 152 taken 1 time.
✗ Branch 151 → 392 not taken.
✓ Branch 152 → 153 taken 1 time.
✗ Branch 152 → 390 not taken.
✓ Branch 153 → 154 taken 1 time.
✗ Branch 153 → 390 not taken.
✓ Branch 154 → 155 taken 1 time.
✗ Branch 154 → 388 not taken.
✓ Branch 155 → 156 taken 1 time.
✗ Branch 155 → 388 not taken.
✗ Branch 159 → 160 not taken.
✓ Branch 159 → 161 taken 1 time.
✗ Branch 161 → 162 not taken.
✓ Branch 161 → 163 taken 1 time.
✗ Branch 163 → 164 not taken.
✓ Branch 163 → 165 taken 1 time.
✗ Branch 395 → 396 not taken.
✗ Branch 395 → 397 not taken.
✗ Branch 399 → 400 not taken.
✗ Branch 399 → 401 not taken.
✗ Branch 403 → 404 not taken.
✗ Branch 403 → 405 not taken.
1 Vsource = new SeparateFields(new AssumeParity(new SwapUVToY(child, SwapUVToY::VToY8, env), true), env); // also works for Y16/Y32
1591
1592
1/2
✓ Branch 167 → 168 taken 1 time.
✗ Branch 167 → 406 not taken.
2 std::vector<PClip> tbUsource(2); // Interleave() will take ownership of these
1593
1/2
✓ Branch 171 → 172 taken 1 time.
✗ Branch 171 → 409 not taken.
1 std::vector<PClip> tbVsource(2);
1594
1595
7/16
✓ Branch 173 → 174 taken 1 time.
✗ Branch 173 → 422 not taken.
✓ Branch 174 → 175 taken 1 time.
✗ Branch 174 → 418 not taken.
✓ Branch 175 → 176 taken 1 time.
✗ Branch 175 → 416 not taken.
✓ Branch 176 → 177 taken 1 time.
✗ Branch 176 → 416 not taken.
✓ Branch 177 → 178 taken 1 time.
✗ Branch 177 → 414 not taken.
✓ Branch 179 → 180 taken 1 time.
✗ Branch 179 → 412 not taken.
✗ Branch 183 → 184 not taken.
✓ Branch 183 → 185 taken 1 time.
✗ Branch 419 → 420 not taken.
✗ Branch 419 → 421 not taken.
1 tbUsource[0] = FilteredResize::CreateResize(new SelectEvery(Usource, 2, 0, env), uv_width, uv_height, tUsubSampling, force, filter, preserve_center, placement_name_notused, forced_chroma_placement, env);
1596
7/16
✓ Branch 185 → 186 taken 1 time.
✗ Branch 185 → 434 not taken.
✓ Branch 186 → 187 taken 1 time.
✗ Branch 186 → 430 not taken.
✓ Branch 187 → 188 taken 1 time.
✗ Branch 187 → 428 not taken.
✓ Branch 188 → 189 taken 1 time.
✗ Branch 188 → 428 not taken.
✓ Branch 189 → 190 taken 1 time.
✗ Branch 189 → 426 not taken.
✓ Branch 191 → 192 taken 1 time.
✗ Branch 191 → 424 not taken.
✗ Branch 195 → 196 not taken.
✓ Branch 195 → 197 taken 1 time.
✗ Branch 431 → 432 not taken.
✗ Branch 431 → 433 not taken.
1 tbUsource[1] = FilteredResize::CreateResize(new SelectEvery(Usource, 2, 1, env), uv_width, uv_height, bUsubSampling, force, filter, preserve_center, placement_name_notused, forced_chroma_placement, env);
1597
7/16
✓ Branch 197 → 198 taken 1 time.
✗ Branch 197 → 446 not taken.
✓ Branch 198 → 199 taken 1 time.
✗ Branch 198 → 442 not taken.
✓ Branch 199 → 200 taken 1 time.
✗ Branch 199 → 440 not taken.
✓ Branch 200 → 201 taken 1 time.
✗ Branch 200 → 440 not taken.
✓ Branch 201 → 202 taken 1 time.
✗ Branch 201 → 438 not taken.
✓ Branch 203 → 204 taken 1 time.
✗ Branch 203 → 436 not taken.
✗ Branch 207 → 208 not taken.
✓ Branch 207 → 209 taken 1 time.
✗ Branch 443 → 444 not taken.
✗ Branch 443 → 445 not taken.
1 tbVsource[0] = FilteredResize::CreateResize(new SelectEvery(Vsource, 2, 0, env), uv_width, uv_height, tVsubSampling, force, filter, preserve_center, placement_name_notused, forced_chroma_placement, env);
1598
7/16
✓ Branch 209 → 210 taken 1 time.
✗ Branch 209 → 458 not taken.
✓ Branch 210 → 211 taken 1 time.
✗ Branch 210 → 454 not taken.
✓ Branch 211 → 212 taken 1 time.
✗ Branch 211 → 452 not taken.
✓ Branch 212 → 213 taken 1 time.
✗ Branch 212 → 452 not taken.
✓ Branch 213 → 214 taken 1 time.
✗ Branch 213 → 450 not taken.
✓ Branch 215 → 216 taken 1 time.
✗ Branch 215 → 448 not taken.
✗ Branch 219 → 220 not taken.
✓ Branch 219 → 221 taken 1 time.
✗ Branch 455 → 456 not taken.
✗ Branch 455 → 457 not taken.
1 tbVsource[1] = FilteredResize::CreateResize(new SelectEvery(Vsource, 2, 1, env), uv_width, uv_height, bVsubSampling, force, filter, preserve_center, placement_name_notused, forced_chroma_placement, env);
1599
1600
12/30
✓ Branch 221 → 222 taken 1 time.
✗ Branch 221 → 490 not taken.
✓ Branch 222 → 223 taken 1 time.
✗ Branch 222 → 471 not taken.
✓ Branch 223 → 224 taken 1 time.
✗ Branch 223 → 467 not taken.
✓ Branch 226 → 227 taken 1 time.
✗ Branch 226 → 464 not taken.
✓ Branch 227 → 228 taken 1 time.
✗ Branch 227 → 464 not taken.
✓ Branch 228 → 229 taken 1 time.
✗ Branch 228 → 462 not taken.
✓ Branch 229 → 230 taken 1 time.
✗ Branch 229 → 462 not taken.
✓ Branch 230 → 231 taken 1 time.
✗ Branch 230 → 460 not taken.
✓ Branch 231 → 232 taken 1 time.
✗ Branch 231 → 460 not taken.
✗ Branch 234 → 235 not taken.
✓ Branch 234 → 236 taken 1 time.
✗ Branch 236 → 237 not taken.
✓ Branch 236 → 238 taken 1 time.
✗ Branch 238 → 239 not taken.
✓ Branch 238 → 240 taken 1 time.
✗ Branch 464 → 465 not taken.
✗ Branch 464 → 466 not taken.
✗ Branch 468 → 469 not taken.
✗ Branch 468 → 470 not taken.
✗ Branch 472 → 473 not taken.
✗ Branch 472 → 474 not taken.
2 Usource = new SelectEvery(new DoubleWeaveFields(new Interleave(std::move(tbUsource), env)), 2, 0, env);
1601
12/30
✓ Branch 240 → 241 taken 1 time.
✗ Branch 240 → 490 not taken.
✓ Branch 241 → 242 taken 1 time.
✗ Branch 241 → 486 not taken.
✓ Branch 242 → 243 taken 1 time.
✗ Branch 242 → 482 not taken.
✓ Branch 245 → 246 taken 1 time.
✗ Branch 245 → 479 not taken.
✓ Branch 246 → 247 taken 1 time.
✗ Branch 246 → 479 not taken.
✓ Branch 247 → 248 taken 1 time.
✗ Branch 247 → 477 not taken.
✓ Branch 248 → 249 taken 1 time.
✗ Branch 248 → 477 not taken.
✓ Branch 249 → 250 taken 1 time.
✗ Branch 249 → 475 not taken.
✓ Branch 250 → 251 taken 1 time.
✗ Branch 250 → 475 not taken.
✗ Branch 253 → 254 not taken.
✓ Branch 253 → 255 taken 1 time.
✗ Branch 255 → 256 not taken.
✓ Branch 255 → 257 taken 1 time.
✗ Branch 257 → 258 not taken.
✓ Branch 257 → 259 taken 1 time.
✗ Branch 479 → 480 not taken.
✗ Branch 479 → 481 not taken.
✗ Branch 483 → 484 not taken.
✗ Branch 483 → 485 not taken.
✗ Branch 487 → 488 not taken.
✗ Branch 487 → 489 not taken.
2 Vsource = new SelectEvery(new DoubleWeaveFields(new Interleave(std::move(tbVsource), env)), 2, 0, env);
1602
8/16
✓ Branch 262 → 263 taken 4 times.
✓ Branch 262 → 266 taken 1 time.
✓ Branch 268 → 269 taken 4 times.
✓ Branch 268 → 272 taken 1 time.
✓ Branch 274 → 275 taken 4 times.
✓ Branch 274 → 278 taken 1 time.
✓ Branch 280 → 281 taken 4 times.
✓ Branch 280 → 284 taken 1 time.
✗ Branch 495 → 496 not taken.
✗ Branch 495 → 499 not taken.
✗ Branch 502 → 503 not taken.
✗ Branch 502 → 506 not taken.
✗ Branch 509 → 510 not taken.
✗ Branch 509 → 513 not taken.
✗ Branch 516 → 517 not taken.
✗ Branch 516 → 520 not taken.
21 }
1603 else {
1604 AVSValue UsubSampling[4] = { ChrOffset(xsIn, xdInU, xsOut, xdOutU), ChrOffset(ysIn, ydInU, ysOut, ydOutU), AVSValue(), AVSValue() };
1605 AVSValue VsubSampling[4] = { ChrOffset(xsIn, xdInV, xsOut, xdOutV), ChrOffset(ysIn, ydInV, ysOut, ydOutV), AVSValue(), AVSValue() };
1606
1607 Usource = FilteredResize::CreateResize(new SwapUVToY(child, SwapUVToY::UToY8, env), uv_width, uv_height, UsubSampling, force, filter, preserve_center, placement_name_notused, forced_chroma_placement, env);
1608 Vsource = FilteredResize::CreateResize(new SwapUVToY(child, SwapUVToY::VToY8, env), uv_width, uv_height, VsubSampling, force, filter, preserve_center, placement_name_notused, forced_chroma_placement, env);
1609 }
1610
1/2
✓ Branch 333 → 334 taken 1 time.
✗ Branch 333 → 335 not taken.
1 delete filter;
1611 }
1612
1613 3 PVideoFrame __stdcall ConvertToPlanarGeneric::GetFrame(int n, IScriptEnvironment* env) {
1614
1/2
✓ Branch 3 → 4 taken 3 times.
✗ Branch 3 → 135 not taken.
3 PVideoFrame src = child->GetFrame(n, env);
1615
1616
1617
2/4
✓ Branch 4 → 5 taken 3 times.
✗ Branch 4 → 133 not taken.
✓ Branch 5 → 6 taken 3 times.
✗ Branch 5 → 20 not taken.
3 if (vi.IsY()) {
1618 // Abuse Subframe to snatch the Y plane
1619
5/12
✓ Branch 7 → 8 taken 3 times.
✗ Branch 7 → 133 not taken.
✓ Branch 9 → 10 taken 3 times.
✗ Branch 9 → 133 not taken.
✓ Branch 11 → 12 taken 3 times.
✗ Branch 11 → 133 not taken.
✓ Branch 12 → 13 taken 3 times.
✗ Branch 12 → 121 not taken.
✓ Branch 13 → 14 taken 3 times.
✗ Branch 13 → 119 not taken.
✗ Branch 122 → 123 not taken.
✗ Branch 122 → 124 not taken.
3 PVideoFrame dst = env->Subframe(src, 0, src->GetPitch(PLANAR_Y), src->GetRowSize(PLANAR_Y), src->GetHeight(PLANAR_Y));
1620
1/2
✓ Branch 15 → 16 taken 3 times.
✗ Branch 15 → 122 not taken.
3 auto props = env->getFramePropsRW(dst);
1621 // ChromaLocation_Out is <0 : erased
1622
1/2
✓ Branch 16 → 17 taken 3 times.
✗ Branch 16 → 122 not taken.
3 update_ChromaLocation(props, ChromaLocation_Out, env);
1623
1/2
✗ Branch 17 → 18 not taken.
✓ Branch 17 → 19 taken 3 times.
3 return dst;
1624 }
1625
1626 PVideoFrame dst = env->NewVideoFrameP(vi, &src);
1627 env->BitBlt(dst->GetWritePtr(PLANAR_Y), dst->GetPitch(PLANAR_Y), src->GetReadPtr(PLANAR_Y), src->GetPitch(PLANAR_Y),
1628 src->GetRowSize(PLANAR_Y_ALIGNED), src->GetHeight(PLANAR_Y));
1629
1630 auto props = env->getFramePropsRW(dst);
1631 update_ChromaLocation(props, ChromaLocation_Out, env);
1632
1633 // alpha. if pitch is zero -> no alpha channel
1634 const int rowsizeA = dst->GetRowSize(PLANAR_A);
1635 const int dst_pitchA = dst->GetPitch(PLANAR_A);
1636 BYTE* dstp_a = (dst_pitchA == 0) ? nullptr : dst->GetWritePtr(PLANAR_A);
1637 const int heightA = dst->GetHeight(PLANAR_A);
1638
1639 if (dst_pitchA != 0)
1640 {
1641 if (src->GetPitch(PLANAR_A) != 0)
1642 env->BitBlt(dstp_a, dst_pitchA, src->GetReadPtr(PLANAR_A), src->GetPitch(PLANAR_A),
1643 src->GetRowSize(PLANAR_A_ALIGNED), src->GetHeight(PLANAR_A));
1644 else {
1645 // e.g. ConvertToYUVA() case from Alpha-less formats
1646 switch (vi.ComponentSize())
1647 {
1648 case 1:
1649 fill_plane<BYTE>(dstp_a, heightA, rowsizeA, dst_pitchA, 255);
1650 break;
1651 case 2:
1652 fill_plane<uint16_t>(dstp_a, heightA, rowsizeA, dst_pitchA, (1 << vi.BitsPerComponent()) - 1);
1653 break;
1654 case 4:
1655 fill_plane<float>(dstp_a, heightA, rowsizeA, dst_pitchA, 1.0f);
1656 break;
1657 }
1658 }
1659 }
1660
1661 BYTE* dstp_u = dst->GetWritePtr(PLANAR_U);
1662 BYTE* dstp_v = dst->GetWritePtr(PLANAR_V);
1663 const int height = dst->GetHeight(PLANAR_U);
1664 const int rowsizeUV = dst->GetRowSize(PLANAR_U);
1665 const int dst_pitch = dst->GetPitch(PLANAR_U);
1666
1667 if (Yinput) {
1668 switch (vi.ComponentSize())
1669 {
1670 case 1:
1671 fill_chroma<BYTE>(dstp_u, dstp_v, height, rowsizeUV, dst_pitch, 0x80);
1672 break;
1673 case 2:
1674 fill_chroma<uint16_t>(dstp_u, dstp_v, height, rowsizeUV, dst_pitch, 1 << (vi.BitsPerComponent() - 1));
1675 break;
1676 case 4:
1677 const float half = 0.0f;
1678 fill_chroma<float>(dstp_u, dstp_v, height, rowsizeUV, dst_pitch, half);
1679 break;
1680 }
1681 } else {
1682 src = Usource->GetFrame(n, env);
1683 env->BitBlt(dstp_u, dst_pitch, src->GetReadPtr(PLANAR_Y), src->GetPitch(PLANAR_Y), src->GetRowSize(PLANAR_Y_ALIGNED), height);
1684 src = Vsource->GetFrame(n, env);
1685 env->BitBlt(dstp_v, dst_pitch, src->GetReadPtr(PLANAR_Y), src->GetPitch(PLANAR_Y), src->GetRowSize(PLANAR_Y_ALIGNED), height);
1686 }
1687
1688 return dst;
1689 3 }
1690 /* 0 1 2 3 4 5 6 7 8 9
1691 { "ConvertToYUV411", BUILTIN_FUNC_PREFIX, "c[interlaced]b[matrix]s[ChromaInPlacement]s[chromaresample]s[param1]f[param2]f[param3]f[bits]i[quality]b", ConvertToPlanarGeneric::CreateYV411, (void*)1 }, // alias for ConvertToYV411, 8 bit check later
1692 { "ConvertToYUV444", BUILTIN_FUNC_PREFIX, "c[interlaced]b[matrix]s[ChromaInPlacement]s[chromaresample]s[param1]f[param2]f[param3]f[bits]i[quality]b", ConvertToPlanarGeneric::CreateYUV444, (void*)1 },
1693 { "ConvertToYUVA444", BUILTIN_FUNC_PREFIX, "c[interlaced]b[matrix]s[ChromaInPlacement]s[chromaresample]s[param1]f[param2]f[param3]f[bits]i[quality]b", ConvertToPlanarGeneric::CreateYUV444, (void*)2 },
1694 0 1 2 3 4 5 6 7 8 9 10
1695 { "ConvertToYUV420", BUILTIN_FUNC_PREFIX, "c[interlaced]b[matrix]s[ChromaInPlacement]s[chromaresample]s[ChromaOutPlacement]s[param1]f[param2]f[param3]f[bits]i[quality]b", ConvertToPlanarGeneric::CreateYUV420, (void*)1 },
1696 { "ConvertToYUV422", BUILTIN_FUNC_PREFIX, "c[interlaced]b[matrix]s[ChromaInPlacement]s[chromaresample]s[ChromaOutPlacement]s[param1]f[param2]f[param3]f[bits]i[quality]b", ConvertToPlanarGeneric::CreateYUV422, (void*)1 },
1697 { "ConvertToYUVA420", BUILTIN_FUNC_PREFIX, "c[interlaced]b[matrix]s[ChromaInPlacement]s[chromaresample]s[ChromaOutPlacement]s[param1]f[param2]f[param3]f[bits]i[quality]b", ConvertToPlanarGeneric::CreateYUV420, (void*)2 },
1698 { "ConvertToYUVA422", BUILTIN_FUNC_PREFIX, "c[interlaced]b[matrix]s[ChromaInPlacement]s[chromaresample]s[ChromaOutPlacement]s[param1]f[param2]f[param3]f[bits]i[quality]b", ConvertToPlanarGeneric::CreateYUV422, (void*)2 },
1699 0 1 2 3
1700 { "ConvertToY", BUILTIN_FUNC_PREFIX, "c[matrix]s[bits]i[quality]b", ConvertToPlanarGeneric::CreateConvertToY, (void*)1 }, // user_data == 1 -> any bit depth sources
1701
1702 */
1703 4 AVSValue ConvertToPlanarGeneric::Create(AVSValue& args, const char* filter, bool strip_alpha_legacy_8bit, bool to_yuva, IScriptEnvironment* env) {
1704 4 bool converted = false;
1705
1706
2/4
✓ Branch 2 → 3 taken 4 times.
✗ Branch 2 → 638 not taken.
✓ Branch 3 → 4 taken 4 times.
✗ Branch 3 → 638 not taken.
4 PClip clip = args[0].AsClip();
1707
1/2
✓ Branch 5 → 6 taken 4 times.
✗ Branch 5 → 636 not taken.
4 VideoInfo vi = clip->GetVideoInfo();
1708
1709 4 const bool to_y = strcmp(filter, "ConvertToY") == 0;
1710 4 const bool to_420 = strcmp(filter, "ConvertToYUV420") == 0;
1711 4 const bool to_422 = strcmp(filter, "ConvertToYUV422") == 0;
1712 4 const bool to_411 = strcmp(filter, "ConvertToYV411") == 0;
1713 4 const bool to_444 = strcmp(filter, "ConvertToYUV444") == 0;
1714
1715
2/4
✓ Branch 6 → 7 taken 4 times.
✗ Branch 6 → 636 not taken.
✗ Branch 7 → 8 not taken.
✓ Branch 7 → 18 taken 4 times.
4 if (vi.IsYUY2()) {
1716 // use to_y: no need YV16 extra planes when our target is Y only
1717 clip = new ConvertYUY2ToYV16_or_Y(clip, to_y, env);
1718 vi = clip->GetVideoInfo();
1719 }
1720
1721
1/2
✓ Branch 18 → 19 taken 4 times.
✗ Branch 18 → 636 not taken.
4 AVSValue bits_arg;
1722
1/2
✓ Branch 19 → 20 taken 4 times.
✗ Branch 19 → 634 not taken.
4 AVSValue quality_arg;
1723
1/2
✓ Branch 20 → 21 taken 4 times.
✗ Branch 20 → 632 not taken.
4 AVSValue matrix_arg;
1724
2/2
✓ Branch 21 → 22 taken 3 times.
✓ Branch 21 → 28 taken 1 time.
4 if (to_y) {
1725
2/4
✓ Branch 22 → 23 taken 3 times.
✗ Branch 22 → 630 not taken.
✓ Branch 23 → 24 taken 3 times.
✗ Branch 23 → 630 not taken.
3 matrix_arg = args[1];
1726
2/4
✓ Branch 24 → 25 taken 3 times.
✗ Branch 24 → 630 not taken.
✓ Branch 25 → 26 taken 3 times.
✗ Branch 25 → 630 not taken.
3 bits_arg = args[2];
1727
2/4
✓ Branch 26 → 27 taken 3 times.
✗ Branch 26 → 630 not taken.
✓ Branch 27 → 43 taken 3 times.
✗ Branch 27 → 630 not taken.
3 quality_arg = args[3];
1728 }
1729
1/4
✗ Branch 28 → 29 not taken.
✓ Branch 28 → 30 taken 1 time.
✗ Branch 29 → 30 not taken.
✗ Branch 29 → 37 not taken.
1 else if (to_420 || to_422) {
1730
2/4
✓ Branch 30 → 31 taken 1 time.
✗ Branch 30 → 630 not taken.
✓ Branch 31 → 32 taken 1 time.
✗ Branch 31 → 630 not taken.
1 matrix_arg = args[2];
1731
2/4
✓ Branch 32 → 33 taken 1 time.
✗ Branch 32 → 630 not taken.
✓ Branch 33 → 34 taken 1 time.
✗ Branch 33 → 630 not taken.
1 bits_arg = args[9];
1732
2/4
✓ Branch 34 → 35 taken 1 time.
✗ Branch 34 → 630 not taken.
✓ Branch 35 → 36 taken 1 time.
✗ Branch 35 → 630 not taken.
1 quality_arg = args[10];
1733 }
1734 else {
1735 matrix_arg = args[2];
1736 bits_arg = args[8];
1737 quality_arg = args[9];
1738 }
1739
1740
2/4
✓ Branch 43 → 44 taken 4 times.
✗ Branch 43 → 630 not taken.
✓ Branch 44 → 45 taken 4 times.
✗ Branch 44 → 630 not taken.
4 const int target_bits_per_pixel = bits_arg.AsInt(vi.BitsPerComponent());
1741
1/2
✓ Branch 45 → 46 taken 4 times.
✗ Branch 45 → 630 not taken.
4 const bool quality = quality_arg.AsBool(false); // float RGB YUV inside
1742
1743
1/2
✓ Branch 46 → 47 taken 4 times.
✗ Branch 46 → 630 not taken.
4 int bits_per_pixel = vi.BitsPerComponent();
1744
1745 /*
1746 if (target_bits_per_pixel != bits_per_pixel && !vi.IsRGB()) {
1747 env->ThrowError("%s: on-thy-fly bit-depth conversion only supported from RGB formats.", filter);
1748 }
1749 */
1750 4 bool needConvertFinalBitdepth = false;
1751
1752
2/4
✓ Branch 47 → 48 taken 4 times.
✗ Branch 47 → 630 not taken.
✗ Branch 48 → 49 not taken.
✓ Branch 48 → 50 taken 4 times.
4 if (target_bits_per_pixel != vi.BitsPerComponent()) {
1753 needConvertFinalBitdepth = true;
1754 }
1755
1756
2/4
✓ Branch 50 → 51 taken 4 times.
✗ Branch 50 → 630 not taken.
✗ Branch 51 → 52 not taken.
✓ Branch 51 → 120 taken 4 times.
4 if (vi.IsRGB()) { // packed or planar source
1757 const bool keep_packedrgb_alpha = to_yuva && (vi.IsRGB32() || vi.IsRGB64());
1758 // 3.7.6: We convert ALL packed RGB formats to planar RGB!
1759 // The only case where a RGB32->YV24 is a bit slower is: SSE2-only but no SSSE3 capable CPU.
1760 // All other cases are quicker, when converting to planar first and then to YUV444, than doing packed RGB->YUV444 in one step.
1761 // On AVX2 capable CPUs using the PlanarRGB-YUV engine, we are +80% quicker
1762 // doing RGB32->PlanarRGB->YUV444 than doing RGB32->YUV444 in the old SSSE3 step.
1763 if (!vi.IsPlanar()) {
1764 // we convert to intermediate PlanarRGB, RGB48/64->YUV444 is slow C, planarRGB is fast
1765 // Default ConvertToPlanarRGB call
1766 AVSValue new_args[10] = { clip, AVSValue(), AVSValue(), AVSValue(), AVSValue(), AVSValue(), AVSValue(), AVSValue(), AVSValue(), AVSValue() };
1767 // clip, matrix, interlaced, chromainplacement, chromaresample, param1, param2, param3, bits, quality
1768 // convert to planar RGBA only if RGB64 and target is YUVA (need to keep alpha)
1769 const intptr_t planar_rgb_type = keep_packedrgb_alpha ? -2 : -1;
1770 clip = CreateConvertToRGB(AVSValue(new_args, 10), (void *)planar_rgb_type, env).AsClip();
1771 vi = clip->GetVideoInfo();
1772 }
1773
1774 if (target_bits_per_pixel != vi.BitsPerComponent()) {
1775 needConvertFinalBitdepth = true;
1776 }
1777
1778 bool bitdepthConverted = false;
1779 if (needConvertFinalBitdepth) {
1780 // Optional bit-depth conversion in PackedRGBtoPlanarRGB.
1781 // int->float full/narrow range, int-int full/narrow supported
1782 clip = new ConvertRGBToYUV444(clip, matrix_arg.AsString(0) /* matrix_name */, keep_packedrgb_alpha, target_bits_per_pixel, quality, /*ref*/bitdepthConverted, to_y, env);
1783 vi = clip->GetVideoInfo();
1784 if (bitdepthConverted) {
1785 needConvertFinalBitdepth = false; // done in-process
1786 }
1787 } else {
1788 // pass -1 as finalBitdepth, signing that no bit-depth conversion required
1789 // output bitdepthConverted is n/a
1790 clip = new ConvertRGBToYUV444(clip, matrix_arg.AsString(0) /* matrix_name */, keep_packedrgb_alpha, -1 /*no bit-depth conversion*/, quality, /*ref*/bitdepthConverted, to_y, env);
1791 vi = clip->GetVideoInfo();
1792 }
1793
1794 vi = clip->GetVideoInfo();
1795 converted = true;
1796 }
1797
2/4
✓ Branch 120 → 121 taken 4 times.
✗ Branch 120 → 630 not taken.
✗ Branch 121 → 122 not taken.
✓ Branch 121 → 123 taken 4 times.
4 else if (!vi.IsPlanar())
1798 env->ThrowError("%s: Can only convert from Planar YUV.", filter);
1799
1800 // YV411 has no 8+ bits variant.
1801 // A bit depth changing YV411->YUV4xx conversion must be reversed: first convert th format keeping 8 bits,
1802 // then do the bit-depth conversion.
1803
2/8
✗ Branch 123 → 124 not taken.
✓ Branch 123 → 127 taken 4 times.
✗ Branch 124 → 125 not taken.
✗ Branch 124 → 630 not taken.
✗ Branch 125 → 126 not taken.
✗ Branch 125 → 127 not taken.
✗ Branch 128 → 129 not taken.
✓ Branch 128 → 147 taken 4 times.
4 if (needConvertFinalBitdepth && !vi.IsYV411()) {
1804 // plain Invoke and no "new ConvertBits()": this detects and keeps source and target ranges
1805 AVSValue new_args[2] = { clip, target_bits_per_pixel };
1806 clip = env->Invoke("ConvertBits", AVSValue(new_args, 2)).AsClip();
1807 vi = clip->GetVideoInfo();
1808 needConvertFinalBitdepth = false;
1809 }
1810
1811
1/2
✓ Branch 147 → 148 taken 4 times.
✗ Branch 147 → 630 not taken.
4 bits_per_pixel = vi.BitsPerComponent(); // rgb conversion or standalone ConvertBits() would alter it.
1812
1813 4 int pixel_type = VideoInfo::CS_UNKNOWN;
1814
1/2
✓ Branch 148 → 149 taken 4 times.
✗ Branch 148 → 630 not taken.
4 AVSValue outplacement = AVSValue(); // only for ConvertToYUV420 and ConvertToYUV422
1815
1816
2/6
✓ Branch 149 → 150 taken 4 times.
✗ Branch 149 → 628 not taken.
✗ Branch 150 → 151 not taken.
✓ Branch 150 → 153 taken 4 times.
✗ Branch 151 → 152 not taken.
✗ Branch 151 → 153 not taken.
4 bool hasAlpha = vi.NumComponents() == 4 && !strip_alpha_legacy_8bit;
1817
2/6
✓ Branch 154 → 155 taken 4 times.
✗ Branch 154 → 628 not taken.
✗ Branch 155 → 156 not taken.
✓ Branch 155 → 158 taken 4 times.
✗ Branch 156 → 157 not taken.
✗ Branch 156 → 158 not taken.
4 bool shouldStripAlpha = vi.NumComponents() == 4 && strip_alpha_legacy_8bit;
1818
3/6
✓ Branch 159 → 160 taken 4 times.
✗ Branch 159 → 628 not taken.
✓ Branch 160 → 161 taken 4 times.
✗ Branch 160 → 163 not taken.
✗ Branch 161 → 162 not taken.
✓ Branch 161 → 163 taken 4 times.
4 bool shouldAddAlpha = vi.NumComponents() != 4 && to_yuva;
1819
2/4
✓ Branch 164 → 165 taken 4 times.
✗ Branch 164 → 166 not taken.
✗ Branch 165 → 166 not taken.
✓ Branch 165 → 167 taken 4 times.
4 bool targethasAlpha = hasAlpha || shouldAddAlpha;
1820
1821 4 int ChromaLocation_In = -1; // invalid. Chromalocation_e::AVS_CHROMALOCATION_UNUSED
1822 4 int ChromaLocation_Out = -1; // left as invalid for 444, and Y
1823
1824
2/4
✓ Branch 168 → 169 taken 4 times.
✗ Branch 168 → 628 not taken.
✗ Branch 169 → 170 not taken.
✓ Branch 169 → 178 taken 4 times.
4 if (vi.IsYV411()) {
1825 // ChromaInPlacement parameter exists, (default none/-1) + input frame properties; 'left'-ish _ChromaLocation is allowed, checked later
1826 auto frame0 = clip->GetFrame(0, env);
1827 const AVSMap* props = env->getFramePropsRO(frame0);
1828 chromaloc_parse_merge_with_props(vi, args[3].AsString(nullptr), props, /* ref*/ChromaLocation_In, -1 /*default none chromaloc */, env);
1829 }
1830
5/10
✓ Branch 178 → 179 taken 4 times.
✗ Branch 178 → 628 not taken.
✓ Branch 179 → 180 taken 4 times.
✗ Branch 179 → 182 not taken.
✓ Branch 180 → 181 taken 4 times.
✗ Branch 180 → 628 not taken.
✗ Branch 181 → 182 not taken.
✓ Branch 181 → 183 taken 4 times.
✗ Branch 184 → 185 not taken.
✓ Branch 184 → 193 taken 4 times.
4 else if (vi.Is420() || vi.Is422()) {
1831 // ChromaInPlacement parameter is valid + input frame properties
1832 auto frame0 = clip->GetFrame(0, env);
1833 const AVSMap* props = env->getFramePropsRO(frame0);
1834 chromaloc_parse_merge_with_props(vi, args[3].AsString(nullptr), props, /* ref*/ChromaLocation_In, ChromaLocation_e::AVS_CHROMA_LEFT /*default*/, env);
1835 }
1836
1837
1/2
✓ Branch 193 → 194 taken 4 times.
✗ Branch 193 → 628 not taken.
4 AVSValue param1;
1838
1/2
✓ Branch 194 → 195 taken 4 times.
✗ Branch 194 → 626 not taken.
4 AVSValue param2;
1839
1/2
✓ Branch 195 → 196 taken 4 times.
✗ Branch 195 → 624 not taken.
4 AVSValue param3;
1840
3/4
✓ Branch 196 → 197 taken 3 times.
✓ Branch 196 → 198 taken 1 time.
✗ Branch 197 → 198 not taken.
✓ Branch 197 → 208 taken 3 times.
4 if (to_420 || to_422) {
1841 // ChromaOutPlacement parameter is valid
1842
3/6
✓ Branch 198 → 199 taken 1 time.
✗ Branch 198 → 622 not taken.
✓ Branch 199 → 200 taken 1 time.
✗ Branch 199 → 622 not taken.
✓ Branch 200 → 201 taken 1 time.
✗ Branch 200 → 622 not taken.
1 chromaloc_parse_merge_with_props(vi, args[5].AsString(nullptr), nullptr, /* ref*/ChromaLocation_Out, ChromaLocation_e::AVS_CHROMA_LEFT /*default*/, env);
1843
2/4
✓ Branch 201 → 202 taken 1 time.
✗ Branch 201 → 622 not taken.
✓ Branch 202 → 203 taken 1 time.
✗ Branch 202 → 622 not taken.
1 param1 = args[6];
1844
2/4
✓ Branch 203 → 204 taken 1 time.
✗ Branch 203 → 622 not taken.
✓ Branch 204 → 205 taken 1 time.
✗ Branch 204 → 622 not taken.
1 param2 = args[7];
1845
2/4
✓ Branch 205 → 206 taken 1 time.
✗ Branch 205 → 622 not taken.
✓ Branch 206 → 207 taken 1 time.
✗ Branch 206 → 622 not taken.
1 param3 = args[8];
1846 }
1847
2/4
✓ Branch 208 → 209 taken 3 times.
✗ Branch 208 → 210 not taken.
✗ Branch 209 → 210 not taken.
✓ Branch 209 → 216 taken 3 times.
3 else if (to_444 || to_411) {
1848 // No ChromaOutPlacement parameter, indexes skip back accordingly
1849 param1 = args[5];
1850 param2 = args[6];
1851 param3 = args[7];
1852 }
1853
1854 // FIXME: no-op or almost no-op shortcuts won't exist even at 420-420 conversion if YUV-YUV matrix conversion is added
1855
1856
2/2
✓ Branch 216 → 217 taken 3 times.
✓ Branch 216 → 229 taken 1 time.
4 if (to_y) {
1857
2/4
✓ Branch 217 → 218 taken 3 times.
✗ Branch 217 → 622 not taken.
✗ Branch 218 → 219 not taken.
✓ Branch 218 → 221 taken 3 times.
3 if (vi.IsY()) {
1858 // After RGB->Y conversion or input as Y
1859 return clip;
1860 }
1861 // planar YUV original, GetFrame will return Y
1862
1/7
✓ Branch 221 → 222 taken 3 times.
✗ Branch 221 → 223 not taken.
✗ Branch 221 → 224 not taken.
✗ Branch 221 → 225 not taken.
✗ Branch 221 → 226 not taken.
✗ Branch 221 → 227 not taken.
✗ Branch 221 → 228 not taken.
3 switch (bits_per_pixel)
1863 {
1864 3 case 8: pixel_type = VideoInfo::CS_Y8; break;
1865 case 10: pixel_type = VideoInfo::CS_Y10; break;
1866 case 12: pixel_type = VideoInfo::CS_Y12; break;
1867 case 14: pixel_type = VideoInfo::CS_Y14; break;
1868 case 16: pixel_type = VideoInfo::CS_Y16; break;
1869 case 32: pixel_type = VideoInfo::CS_Y32; break;
1870 }
1871 }
1872
1/2
✓ Branch 229 → 230 taken 1 time.
✗ Branch 229 → 286 not taken.
1 else if (to_420) {
1873
2/4
✓ Branch 230 → 231 taken 1 time.
✗ Branch 230 → 622 not taken.
✗ Branch 231 → 232 not taken.
✓ Branch 231 → 257 taken 1 time.
1 if (vi.Is420()) {
1874 // possible shortcut
1875 if (ChromaLocation_In == ChromaLocation_Out)
1876 {
1877 if (shouldStripAlpha)
1878 return new RemoveAlphaPlane(clip, env);
1879 if (shouldAddAlpha) {
1880 // create with default alpha
1881 clip = new AddAlphaPlane(clip, nullptr, 0.0f, false, env);
1882 vi = clip->GetVideoInfo();
1883 }
1884 return clip;
1885 }
1886 }
1887
1888
2/4
✓ Branch 257 → 258 taken 1 time.
✗ Branch 257 → 622 not taken.
✓ Branch 258 → 259 taken 1 time.
✗ Branch 258 → 622 not taken.
1 outplacement = args[5];
1889
2/9
✓ Branch 259 → 260 taken 1 time.
✗ Branch 259 → 622 not taken.
✓ Branch 260 → 261 taken 1 time.
✗ Branch 260 → 265 not taken.
✗ Branch 260 → 269 not taken.
✗ Branch 260 → 273 not taken.
✗ Branch 260 → 277 not taken.
✗ Branch 260 → 281 not taken.
✗ Branch 260 → 285 not taken.
1 switch (vi.BitsPerComponent())
1890 {
1891
1/2
✗ Branch 261 → 262 not taken.
✓ Branch 261 → 263 taken 1 time.
1 case 8 : pixel_type = targethasAlpha ? VideoInfo::CS_YUVA420 : VideoInfo::CS_YV12; break;
1892 case 10: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA420P10 : VideoInfo::CS_YUV420P10; break;
1893 case 12: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA420P12 : VideoInfo::CS_YUV420P12; break;
1894 case 14: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA420P14 : VideoInfo::CS_YUV420P14; break;
1895 case 16: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA420P16 : VideoInfo::CS_YUV420P16; break;
1896 case 32: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA420PS : VideoInfo::CS_YUV420PS; break;
1897 }
1898 }
1899 else if (to_422) {
1900 if (vi.Is422()) {
1901 // possible shortcut
1902 if (ChromaLocation_In == ChromaLocation_Out)
1903 {
1904 if (shouldStripAlpha)
1905 return new RemoveAlphaPlane(clip, env);
1906 if (shouldAddAlpha) {
1907 // create with default alpha
1908 clip = new AddAlphaPlane(clip, nullptr, 0.0f, false, env);
1909 vi = clip->GetVideoInfo();
1910 }
1911 return clip;
1912 }
1913 }
1914
1915 outplacement = args[5];
1916 switch (bits_per_pixel)
1917 {
1918 case 8 : pixel_type = targethasAlpha ? VideoInfo::CS_YUVA422 : VideoInfo::CS_YV16; break;
1919 case 10: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA422P10 : VideoInfo::CS_YUV422P10; break;
1920 case 12: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA422P12 : VideoInfo::CS_YUV422P12; break;
1921 case 14: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA422P14 : VideoInfo::CS_YUV422P14; break;
1922 case 16: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA422P16 : VideoInfo::CS_YUV422P16; break;
1923 case 32: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA422PS : VideoInfo::CS_YUV422PS; break;
1924 }
1925 }
1926 else if (to_444) {
1927 if (vi.Is444()) {
1928 if (shouldStripAlpha)
1929 return new RemoveAlphaPlane(clip, env);
1930 if (shouldAddAlpha) {
1931 // create with default alpha
1932 clip = new AddAlphaPlane(clip, nullptr, 0.0f, false, env);
1933 vi = clip->GetVideoInfo();
1934 }
1935 return clip;
1936 }
1937
1938 switch (bits_per_pixel)
1939 {
1940 case 8 : pixel_type = targethasAlpha ? VideoInfo::CS_YUVA444 : VideoInfo::CS_YV24; break;
1941 case 10: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA444P10 : VideoInfo::CS_YUV444P10; break;
1942 case 12: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA444P12 : VideoInfo::CS_YUV444P12; break;
1943 case 14: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA444P14 : VideoInfo::CS_YUV444P14; break;
1944 case 16: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA444P16 : VideoInfo::CS_YUV444P16; break;
1945 case 32: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA444PS : VideoInfo::CS_YUV444PS; break;
1946 }
1947 }
1948 else if (to_411) {
1949 if (target_bits_per_pixel != 8)
1950 env->ThrowError("%s: only bits=8 supported for YV411", filter);
1951 if (vi.IsYV411()) return clip;
1952 if(vi.ComponentSize()!=1)
1953 env->ThrowError("%s: 8 bit input only", filter);
1954
1955 pixel_type = VideoInfo::CS_YV411;
1956 }
1957 else env->ThrowError("Convert: unknown filter '%s'.", filter);
1958
1959
1/2
✗ Branch 407 → 408 not taken.
✓ Branch 407 → 409 taken 4 times.
4 if (pixel_type == VideoInfo::CS_UNKNOWN)
1960 env->ThrowError("%s: unsupported bit depth", filter);
1961
1962
1/2
✗ Branch 409 → 410 not taken.
✓ Branch 409 → 418 taken 4 times.
4 if (converted)
1963 clip = env->Invoke("Cache", AVSValue(clip)).AsClip();
1964
1965 // ConvertToPlanarGeneric's GetFrame will recognize if alpha copy or fill-with-defaults needed
1966
1/2
✓ Branch 418 → 419 taken 4 times.
✗ Branch 418 → 622 not taken.
8 AVSValue dummy_for_to_y;
1967
1968
1/4
✓ Branch 431 → 432 taken 4 times.
✗ Branch 431 → 591 not taken.
✗ Branch 594 → 595 not taken.
✗ Branch 594 → 597 not taken.
4 clip = new ConvertToPlanarGeneric(clip, pixel_type,
1969
2/4
✓ Branch 426 → 427 taken 1 time.
✗ Branch 426 → 594 not taken.
✓ Branch 427 → 428 taken 1 time.
✗ Branch 427 → 594 not taken.
1 to_y ? false : args[1].AsBool(false), // interlaced
1970 ChromaLocation_In,
1971
1/2
✓ Branch 422 → 423 taken 1 time.
✗ Branch 422 → 594 not taken.
1 to_y ? dummy_for_to_y : args[4], // chromaresample
1972 param1, param2, param3,
1973 ChromaLocation_Out,
1974
8/12
✓ Branch 419 → 420 taken 4 times.
✗ Branch 419 → 620 not taken.
✓ Branch 420 → 421 taken 3 times.
✓ Branch 420 → 422 taken 1 time.
✓ Branch 424 → 425 taken 3 times.
✓ Branch 424 → 426 taken 1 time.
✓ Branch 429 → 430 taken 4 times.
✗ Branch 429 → 593 not taken.
✓ Branch 430 → 431 taken 4 times.
✗ Branch 430 → 591 not taken.
✗ Branch 433 → 434 not taken.
✓ Branch 433 → 436 taken 4 times.
10 env);
1975
1976 // If still not converted, do it now (YV411->YUVxxx 8+ bits)
1977
1/2
✗ Branch 436 → 437 not taken.
✓ Branch 436 → 455 taken 4 times.
4 if (needConvertFinalBitdepth) {
1978 // plain Invoke and no "new ConvertBits()": this detects and keeps source and target ranges
1979 AVSValue new_args[2] = { clip, target_bits_per_pixel };
1980 clip = env->Invoke("ConvertBits", AVSValue(new_args, 2)).AsClip();
1981 vi = clip->GetVideoInfo();
1982 needConvertFinalBitdepth = false;
1983 }
1984
1985
1/2
✓ Branch 455 → 456 taken 4 times.
✗ Branch 455 → 620 not taken.
4 return clip;
1986
1987 4 }
1988
1989 1 AVSValue __cdecl ConvertToPlanarGeneric::CreateYUV420(AVSValue args, void* user_data, IScriptEnvironment* env) {
1990 1 bool only_8bit = reinterpret_cast<intptr_t>(user_data) == 0;
1991 1 bool to_yuva = reinterpret_cast<intptr_t>(user_data) == 2;
1992
1/2
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 45 taken 1 time.
1 if (only_8bit) {
1993 // "ConvertToYV12" syntax
1994 if (args[9].Defined() && args[9].AsInt() != 8)
1995 env->ThrowError("ConvertToYV12: only 8 bit output supported. "
1996 "Use ConvertToYUV420 for higher bit depth.");
1997 AVSValue new_args[11] = {
1998 args[0], args[1], args[2], args[3], args[4],
1999 args[5], args[6], args[7], args[8],
2000 AVSValue(8), // bits forced to 8
2001 args[10]
2002 };
2003 AVSValue new_args_val(new_args, 11); // named, lives until end of scope
2004 return Create(new_args_val, "ConvertToYUV420", only_8bit, to_yuva, env);
2005 }
2006 1 return Create(args, "ConvertToYUV420", only_8bit, to_yuva, env);
2007 }
2008
2009 AVSValue __cdecl ConvertToPlanarGeneric::CreateYUV422(AVSValue args, void* user_data, IScriptEnvironment* env) {
2010 bool only_8bit = reinterpret_cast<intptr_t>(user_data) == 0;
2011 bool to_yuva = reinterpret_cast<intptr_t>(user_data) == 2;
2012 if (only_8bit) {
2013 // "ConvertToYV16" syntax
2014 if (args[9].Defined() && args[9].AsInt() != 8)
2015 env->ThrowError("ConvertToYV16: only 8 bit output supported. "
2016 "Use ConvertToYUV422 for higher bit depth.");
2017 AVSValue new_args[11] = {
2018 args[0], args[1], args[2], args[3], args[4],
2019 args[5], args[6], args[7], args[8],
2020 AVSValue(8),
2021 args[10]
2022 };
2023 AVSValue new_args_val(new_args, 11);
2024 return Create(new_args_val, "ConvertToYUV422", only_8bit, to_yuva, env);
2025 }
2026 return Create(args, "ConvertToYUV422", only_8bit, to_yuva, env);
2027 }
2028
2029 AVSValue __cdecl ConvertToPlanarGeneric::CreateYUV444(AVSValue args, void* user_data, IScriptEnvironment* env) {
2030 bool only_8bit = reinterpret_cast<intptr_t>(user_data) == 0;
2031 bool to_yuva = reinterpret_cast<intptr_t>(user_data) == 2;
2032 if (only_8bit) {
2033 // "ConvertToYV24" syntax
2034 // parameter index skip back by 1 compared to 420/422, no ChromaOutPlacement parameter, bits is at index 8 instead of 9
2035 if (args[8].Defined() && args[8].AsInt() != 8)
2036 env->ThrowError("ConvertToYV24: only 8 bit output supported. "
2037 "Use ConvertToYUV444 for higher bit depth.");
2038 AVSValue new_args[10] = {
2039 args[0], args[1], args[2], args[3], args[4],
2040 args[5], args[6], args[7],
2041 AVSValue(8),
2042 args[9]
2043 };
2044 AVSValue new_args_val(new_args, 10);
2045 return Create(new_args_val, "ConvertToYUV444", only_8bit, to_yuva, env);
2046 }
2047 return Create(args, "ConvertToYUV444", only_8bit, to_yuva, env);
2048 }
2049
2050 AVSValue __cdecl ConvertToPlanarGeneric::CreateYV411(AVSValue args, void* user_data, IScriptEnvironment* env) {
2051 bool only_8bit = reinterpret_cast<intptr_t>(user_data) == 0;
2052 bool to_yuva = reinterpret_cast<intptr_t>(user_data) == 2;
2053 // parameter index skip back by 1 compared to 420/422, no ChromaOutPlacement parameter, bits is at index 8 instead of 9
2054 if (args[8].Defined() && args[8].AsInt() != 8)
2055 env->ThrowError("ConvertToYV411: only 8 bit output supported, "
2056 "no high bit depth YUV411 format exists.");
2057 AVSValue new_args[10] = {
2058 args[0], args[1], args[2], args[3], args[4],
2059 args[5], args[6], args[7],
2060 AVSValue(8),
2061 args[9]
2062 };
2063 AVSValue new_args_val(new_args, 10);
2064 return Create(new_args_val, "ConvertToYV411", only_8bit, to_yuva, env);
2065 }
2066
2067 AVSValue __cdecl ConvertToPlanarGeneric::CreateConvertToYUY2(AVSValue args, void*, IScriptEnvironment* env)
2068 {
2069 PClip clip = args[0].AsClip();
2070 VideoInfo vi = clip->GetVideoInfo();
2071
2072 // Fast no-op: YUY2 source, no parameters at all.
2073 // Do not touch frame properties - caller's responsibility.
2074 if (vi.IsYUY2()
2075 && !args[1].Defined() // interlaced
2076 && !args[2].Defined() // matrix
2077 && !args[3].Defined() // ChromaInPlacement
2078 && !args[4].Defined() // chromaresample
2079 && !args[5].Defined() // ChromaOutPlacement
2080 && !args[6].Defined() // param1
2081 && !args[7].Defined() // param2
2082 && !args[8].Defined() // param3
2083 && !args[9].Defined() // bits
2084 && !args[10].Defined()) // quality
2085 return clip;
2086
2087 // YUY2 is 8-bit only: bits= must be 8 if specified.
2088 // We check here to give a proper ConvertToYUY2-specific error message,
2089 // rather than letting CreateYUV422 complain about something unrelated.
2090 // Source can be any bit depth - the conversion chain will downconvert.
2091 if (args[9].Defined() && args[9].AsInt() != 8)
2092 env->ThrowError("ConvertToYUY2: bits must be 8, YUY2 is an 8-bit format");
2093
2094 // Rebuild args with bits=8 forced, so CreateYUV422 sees an explicit
2095 // 8-bit target regardless of source bit depth.
2096 // This also means the void*1 path in CreateYUV422 won't reject
2097 // high bit depth sources - the bits=8 in args drives the downconvert.
2098 AVSValue new_args[11] = {
2099 args[0], // clip
2100 args[1], // interlaced
2101 args[2], // matrix
2102 args[3], // ChromaInPlacement
2103 args[4], // chromaresample
2104 args[5], // ChromaOutPlacement
2105 args[6], // param1
2106 args[7], // param2
2107 args[8], // param3
2108 AVSValue(8), // bits: always 8 for YUY2, overrides source depth
2109 args[10] // quality
2110 };
2111
2112 // (void*)1: allow any source bit depth, bits=8 in args enforces 8-bit output.
2113 // The legacy (void*)0 source-depth check is not appropriate here since
2114 // we explicitly want to allow e.g. 10-bit YUV420 → 8-bit YUY2.
2115 PClip yv16 = CreateYUV422(AVSValue(new_args, 11), (void*)1, env).AsClip();
2116
2117 // Lossless repack YV16->YUY2.
2118 // Frame properties preserved via NewVideoFrameP in GetFrame.
2119 return new ConvertYV16ToYUY2(yv16, env);
2120 }
2121
2122 AVSValue __cdecl ConvertToPlanarGeneric::CreateConvertBackToYUY2(AVSValue args, void*, IScriptEnvironment* env)
2123 {
2124 // ConvertBackToYUY2 was a pre-2.5 optimization for RGB roundtrip workflows.
2125 // It was never interlaced-aware (hardcoded interlaced=false).
2126 // Now obsolete - forward to ConvertToYUY2::Create with full parameter array.
2127 // ConvertBackToYUY2 signature: c[matrix]s
2128 // ConvertToYUY2 signature: c[interlaced]b[matrix]s[ChromaInPlacement]s
2129 // [chromaresample]s[ChromaOutPlacement]s
2130 // [param1]f[param2]f[param3]f[bits]i[quality]b
2131 AVSValue new_args[11] = {
2132 args[0], // clip
2133 AVSValue(false),// interlaced: was always false in ConvertBackToYUY2
2134 args[1], // matrix: pass through
2135 AVSValue(), // ChromaInPlacement: not defined
2136 AVSValue(), // chromaresample: not defined
2137 AVSValue(), // ChromaOutPlacement: not defined
2138 AVSValue(), // param1: not defined
2139 AVSValue(), // param2: not defined
2140 AVSValue(), // param3: not defined
2141 AVSValue(), // bits: not defined (will be forced to 8 inside)
2142 AVSValue() // quality: not defined
2143 };
2144 return CreateConvertToYUY2(AVSValue(new_args, 11), nullptr, env);
2145 }
2146
2147
2148 /*
2149 static int getPlacement(const AVSValue& _placement, IScriptEnvironment* env) {
2150 const char* placement = _placement.AsString(0);
2151
2152 if (placement) {
2153 if (!lstrcmpi(placement, "mpeg2") || !lstrcmpi(placement, "left"))
2154 return PLACEMENT_MPEG2;
2155
2156 if (!lstrcmpi(placement, "mpeg1") || !lstrcmpi(placement, "jpeg") || !lstrcmpi(placement, "center"))
2157 return PLACEMENT_MPEG1;
2158
2159 if (!lstrcmpi(placement, "dv"))
2160 return PLACEMENT_DV;
2161
2162 if (!lstrcmpi(placement, "top_left"))
2163 return PLACEMENT_TOP_LEFT;
2164
2165 env->ThrowError("Convert: Unknown chromaplacement");
2166 }
2167 return PLACEMENT_MPEG2;
2168 }
2169 */
2170
2171
2172 1 ResamplingFunction* getResampler(const char* resampler, AVSValue param1, AVSValue param2, AVSValue param3, bool throw_on_error, IScriptEnvironment* env) {
2173
1/2
✓ Branch 2 → 3 taken 1 time.
✗ Branch 2 → 117 not taken.
1 if (resampler) {
2174
1/2
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 10 taken 1 time.
1 if (!lstrcmpi(resampler, "point"))
2175 return new PointFilter();
2176
1/2
✗ Branch 10 → 11 not taken.
✓ Branch 10 → 17 taken 1 time.
1 else if (!lstrcmpi(resampler, "bilinear"))
2177 return new TriangleFilter();
2178
1/2
✓ Branch 17 → 18 taken 1 time.
✗ Branch 17 → 26 not taken.
1 else if (!lstrcmpi(resampler, "bicubic"))
2179
4/10
✓ Branch 19 → 20 taken 1 time.
✗ Branch 19 → 126 not taken.
✓ Branch 20 → 21 taken 1 time.
✗ Branch 20 → 126 not taken.
✓ Branch 21 → 22 taken 1 time.
✗ Branch 21 → 126 not taken.
✗ Branch 23 → 24 not taken.
✓ Branch 23 → 25 taken 1 time.
✗ Branch 126 → 127 not taken.
✗ Branch 126 → 128 not taken.
1 return new MitchellNetravaliFilter(param1.AsDblDef(1.0/3), param2.AsDblDef(1.0/3)); // optional B and C as param1 and param2
2180 else if (!lstrcmpi(resampler, "lanczos"))
2181 return new LanczosFilter((int)param1.AsFloat(3)); // optional Taps as param1
2182 else if (!lstrcmpi(resampler, "lanczos4"))
2183 return new LanczosFilter(4);
2184 else if (!lstrcmpi(resampler, "blackman"))
2185 return new BlackmanFilter((int)param1.AsFloat(4)); // optional Taps as param1
2186 else if (!lstrcmpi(resampler, "spline16"))
2187 return new Spline16Filter();
2188 else if (!lstrcmpi(resampler, "spline36"))
2189 return new Spline36Filter();
2190 else if (!lstrcmpi(resampler, "spline64"))
2191 return new Spline64Filter();
2192 else if (!lstrcmpi(resampler, "gauss"))
2193 return new GaussianFilter(param1.AsDblDef(30.0), param2.AsDblDef(2.0), param3.AsDblDef(4.0)); // optional P, B, S as param1, param2, param3
2194 else if (!lstrcmpi(resampler, "sinc"))
2195 return new SincFilter((int)param1.AsFloat(4)); // optional Taps as param1
2196 else if (!lstrcmpi(resampler, "sinpow"))
2197 return new SinPowerFilter(param1.AsDblDef(2.5)); // optional P as param1
2198 else if (!lstrcmpi(resampler, "sinclin2"))
2199 return new SincLin2Filter((int)param1.AsFloat(15)); // optional Taps= as param1
2200 else if (!lstrcmpi(resampler, "userdefined2"))
2201 return new UserDefined2Filter(param1.AsDblDef(121.0), param2.AsDblDef(19.0), param3.AsDblDef(2.3)); // optional B and C and S as param1, param2, param3
2202 else
2203 if (throw_on_error)
2204 env->ThrowError("Convert: Unknown chroma resampler, '%s'", resampler);
2205 else
2206 return nullptr; // e.g. from AddBorders
2207 }
2208 return new MitchellNetravaliFilter(param1.AsDblDef(1.0/3), param2.AsDblDef(1.0/3)); // Default colorspace conversion for AviSynth
2209 }
2210
2211 DISABLE_WARNING_POP
2212