GCC Code Coverage Report


Directory: avs_core/
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 19.7% 2109 / 0 / 10727
Functions: 29.4% 62 / 0 / 211
Branches: 20.4% 949 / 0 / 4648

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 11 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 2 times.
void fill_chroma<unsigned char>(unsigned char*, unsigned char*, int, int, int, unsigned char):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 22 taken 7 times.
void fill_chroma<unsigned short>(unsigned char*, unsigned char*, int, int, int, unsigned short):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 22 taken 2 times.
11 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 11 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 7 times.
✓ Branch 42 → 43 taken 2 times.
void fill_chroma<unsigned char>(unsigned char*, unsigned char*, int, int, int, unsigned char):
✓ Branch 42 → 23 taken 18 times.
✓ Branch 42 → 43 taken 7 times.
void fill_chroma<unsigned short>(unsigned char*, unsigned char*, int, int, int, unsigned short):
✓ Branch 42 → 23 taken 6 times.
✓ Branch 42 → 43 taken 2 times.
42 for (int i = 0; i < height; i++) {
76 31 std::fill_n(reinterpret_cast<pixel_t*>(dstp_u), size, val);
77 31 std::fill_n(reinterpret_cast<pixel_t*>(dstp_v), size, val);
78 31 dstp_u += pitch;
79 31 dstp_v += pitch;
80 }
81 }
82 11 }
83
84 template <typename pixel_t>
85 9 void fill_plane(uint8_t * dstp, int height, int row_size, int pitch, pixel_t val)
86 {
87
3/6
void fill_plane<float>(unsigned char*, int, int, int, float):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 13 taken 3 times.
void fill_plane<unsigned char>(unsigned char*, int, int, int, unsigned char):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 13 taken 5 times.
void fill_plane<unsigned short>(unsigned char*, int, int, int, unsigned short):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 13 taken 1 time.
9 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 9 size_t size = row_size / sizeof(pixel_t);
93
6/6
void fill_plane<float>(unsigned char*, int, int, int, float):
✓ Branch 24 → 14 taken 7 times.
✓ Branch 24 → 25 taken 3 times.
void fill_plane<unsigned char>(unsigned char*, int, int, int, unsigned char):
✓ Branch 24 → 14 taken 21 times.
✓ Branch 24 → 25 taken 5 times.
void fill_plane<unsigned short>(unsigned char*, int, int, int, unsigned short):
✓ Branch 24 → 14 taken 3 times.
✓ Branch 24 → 25 taken 1 time.
40 for (int i = 0; i < height; i++) {
94 31 std::fill_n(reinterpret_cast<pixel_t*>(dstp), size, val);
95 31 dstp += pitch;
96 }
97 }
98 9 }
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 14 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 14 times.
✗ Branch 2 → 102 not taken.
✓ Branch 3 → 4 taken 14 times.
✗ Branch 3 → 100 not taken.
14 : 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 14 times.
✗ Branch 5 → 105 not taken.
✗ Branch 6 → 7 not taken.
✓ Branch 6 → 8 taken 14 times.
14 if (!vi.IsRGB())
151 env->ThrowError("ConvertRGBToYV24/YUV444: Only RGB data input accepted");
152
153
5/10
✓ Branch 8 → 9 taken 14 times.
✗ Branch 8 → 105 not taken.
✓ Branch 9 → 10 taken 14 times.
✗ Branch 9 → 12 not taken.
✓ Branch 10 → 11 taken 14 times.
✗ Branch 10 → 105 not taken.
✗ Branch 11 → 12 not taken.
✓ Branch 11 → 13 taken 14 times.
✗ Branch 14 → 15 not taken.
✓ Branch 14 → 16 taken 14 times.
14 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 14 times.
✗ Branch 17 → 105 not taken.
14 auto frame0 = src->GetFrame(0, env);
158
1/2
✓ Branch 18 → 19 taken 14 times.
✗ Branch 18 → 103 not taken.
14 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 14 times.
✗ Branch 19 → 103 not taken.
14 matrix_parse_merge_with_props(true /*in rgb*/, false /*out yuv*/, matrix_name, props, theMatrix, theColorRange, theOutColorRange, env);
162
163 14 const int shift = 15; // internally 15 bits precision, still no overflow in calculations
164
1/2
✓ Branch 20 → 21 taken 14 times.
✗ Branch 20 → 103 not taken.
14 int bits_per_pixel = vi.BitsPerComponent();
165 14 source_bit_depth = bits_per_pixel;
166
167
2/4
✓ Branch 21 → 22 taken 14 times.
✗ Branch 21 → 103 not taken.
✗ Branch 22 → 23 not taken.
✓ Branch 22 → 24 taken 14 times.
14 if (!do_BuildMatrix_Rgb2Yuv(theMatrix, theColorRange, theOutColorRange, shift, source_bit_depth, /*ref*/matrix))
168 env->ThrowError("ConvertRGBToYV24/YUV444: Unknown matrix.");
169
170 14 theColorRange = theOutColorRange; // final frame property
171
172 // target_bit_depth == -1: no conversion required
173 14 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 12 times.
✓ Branch 24 → 30 taken 2 times.
14 if (need_bitdepth_conversion)
177 {
178 // supported conversions:
179 // 8-16-bits any range to 8-16, 32 bits any range
180 12 bitdepthConverted = true;
181
182
2/2
✓ Branch 25 → 26 taken 7 times.
✓ Branch 25 → 31 taken 5 times.
12 if (!to_y) { // single plane Y only has no alpha
183 #ifdef INTEL_INTRINSICS
184
1/2
✓ Branch 26 → 27 taken 7 times.
✗ Branch 26 → 103 not taken.
7 const bool sse2 = !!(env->GetCPUFlags() & CPUF_SSE2);
185
1/2
✓ Branch 27 → 28 taken 7 times.
✗ Branch 27 → 103 not taken.
7 const bool sse4 = !!(env->GetCPUFlags() & CPUF_SSE4_1);
186
1/2
✓ Branch 28 → 29 taken 7 times.
✗ Branch 28 → 103 not taken.
7 const bool avx2 = !!(env->GetCPUFlags() & CPUF_AVX2);
187 #endif
188 // we really need only alpha conversion function
189 7 const bool fulls = true; // alpha is always full range
190 7 const bool fulld = true; // alpha is always full range
191 7 const int dither_mode = -1;
192 #ifdef INTEL_INTRINSICS
193
1/2
✓ Branch 29 → 31 taken 7 times.
✗ Branch 29 → 103 not taken.
7 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 14 times.
✗ Branch 31 → 103 not taken.
✓ Branch 32 → 33 taken 4 times.
✓ Branch 32 → 35 taken 10 times.
✓ Branch 33 → 34 taken 4 times.
✗ Branch 33 → 103 not taken.
✓ Branch 34 → 35 taken 4 times.
✗ Branch 34 → 36 not taken.
14 isPlanarRGBfamily = vi.IsPlanarRGB() || vi.IsPlanarRGBA();
205
4/14
✓ Branch 37 → 38 taken 14 times.
✗ Branch 37 → 103 not taken.
✓ Branch 38 → 39 taken 10 times.
✓ Branch 38 → 44 taken 4 times.
✗ Branch 39 → 40 not taken.
✓ Branch 39 → 45 taken 10 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.
14 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 14 times.
✗ Branch 46 → 85 not taken.
14 if (isPlanarRGBfamily)
208 {
209
2/2
✓ Branch 47 → 48 taken 5 times.
✓ Branch 47 → 56 taken 9 times.
14 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 4 times.
✓ Branch 56 → 58 taken 5 times.
9 pixel_step = targetHasAlpha ? -2 : -1;
225
4/7
✓ Branch 59 → 60 taken 1 time.
✓ Branch 59 → 64 taken 4 times.
✗ Branch 59 → 68 not taken.
✗ Branch 59 → 72 not taken.
✓ Branch 59 → 76 taken 1 time.
✓ Branch 59 → 80 taken 3 times.
✗ Branch 59 → 84 not taken.
9 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
2/2
✓ Branch 64 → 65 taken 2 times.
✓ Branch 64 → 66 taken 2 times.
4 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
2/2
✓ Branch 80 → 81 taken 1 time.
✓ Branch 80 → 82 taken 2 times.
3 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 14 }
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 16 PVideoFrame __stdcall ConvertRGBToYUV444::GetFrame(int n, IScriptEnvironment* env)
299 {
300
1/2
✓ Branch 3 → 4 taken 16 times.
✗ Branch 3 → 148 not taken.
16 PVideoFrame src = child->GetFrame(n, env);
301
1/2
✓ Branch 4 → 5 taken 16 times.
✗ Branch 4 → 146 not taken.
16 PVideoFrame dst = env->NewVideoFrameP(vi, &src);
302
303
1/2
✓ Branch 5 → 6 taken 16 times.
✗ Branch 5 → 144 not taken.
16 auto props = env->getFramePropsRW(dst);
304
1/2
✓ Branch 6 → 7 taken 16 times.
✗ Branch 6 → 144 not taken.
16 update_Matrix_and_ColorRange(props, theMatrix, theColorRange, env);
305
306
1/2
✓ Branch 8 → 9 taken 16 times.
✗ Branch 8 → 144 not taken.
16 BYTE* dstY = dst->GetWritePtr(PLANAR_Y);
307
3/4
✓ Branch 9 → 10 taken 5 times.
✓ Branch 9 → 11 taken 11 times.
✓ Branch 12 → 13 taken 11 times.
✗ Branch 12 → 144 not taken.
16 BYTE* dstU = to_y ? nullptr : dst->GetWritePtr(PLANAR_U);
308
3/4
✓ Branch 14 → 15 taken 5 times.
✓ Branch 14 → 16 taken 11 times.
✓ Branch 17 → 18 taken 11 times.
✗ Branch 17 → 144 not taken.
16 BYTE* dstV = to_y ? nullptr : dst->GetWritePtr(PLANAR_V);
309
310
1/2
✓ Branch 20 → 21 taken 16 times.
✗ Branch 20 → 144 not taken.
16 const int Ypitch = dst->GetPitch(PLANAR_Y);
311
3/4
✓ Branch 21 → 22 taken 5 times.
✓ Branch 21 → 23 taken 11 times.
✓ Branch 24 → 25 taken 11 times.
✗ Branch 24 → 144 not taken.
16 const int UVpitch = to_y ? 0 : dst->GetPitch(PLANAR_U);
312
313 16 const bool packedRGBsource = pixel_step > 0;
314
315
1/2
✗ Branch 26 → 27 not taken.
✓ Branch 26 → 28 taken 16 times.
16 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 16 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 4 times.
✓ Branch 28 → 66 taken 12 times.
16 if (targetHasAlpha) {
326
1/2
✓ Branch 30 → 31 taken 4 times.
✗ Branch 30 → 144 not taken.
4 dstpA = dst->GetWritePtr(PLANAR_A);
327
1/2
✓ Branch 32 → 33 taken 4 times.
✗ Branch 32 → 144 not taken.
4 int heightA = dst->GetHeight(PLANAR_A);
328
1/2
✓ Branch 34 → 35 taken 4 times.
✗ Branch 34 → 144 not taken.
4 int rowsizeA = dst->GetRowSize(PLANAR_A);
329
1/2
✓ Branch 36 → 37 taken 4 times.
✗ Branch 36 → 144 not taken.
4 int dst_pitchA = dst->GetPitch(PLANAR_A);
330 // simple copy
331
2/4
✓ Branch 38 → 39 taken 4 times.
✗ Branch 38 → 144 not taken.
✓ Branch 39 → 40 taken 4 times.
✗ Branch 39 → 57 not taken.
4 if (src->GetRowSize(PLANAR_A)) {
332
333
2/2
✓ Branch 40 → 41 taken 2 times.
✓ Branch 40 → 50 taken 2 times.
4 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 2 times.
✗ Branch 42 → 144 not taken.
✓ Branch 44 → 45 taken 2 times.
✗ Branch 44 → 144 not taken.
✓ Branch 46 → 47 taken 2 times.
✗ Branch 46 → 144 not taken.
✓ Branch 48 → 49 taken 2 times.
✗ Branch 48 → 144 not taken.
✓ Branch 49 → 65 taken 2 times.
✗ Branch 49 → 144 not taken.
2 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
4/8
✓ Branch 51 → 52 taken 2 times.
✗ Branch 51 → 144 not taken.
✓ Branch 53 → 54 taken 2 times.
✗ Branch 53 → 144 not taken.
✓ Branch 55 → 56 taken 2 times.
✗ Branch 55 → 144 not taken.
✓ Branch 56 → 65 taken 2 times.
✗ Branch 56 → 144 not taken.
2 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 (vi.ComponentSize())
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 67 → 68 taken 16 times.
✗ Branch 67 → 144 not taken.
✓ Branch 69 → 70 taken 16 times.
✗ Branch 69 → 144 not taken.
✓ Branch 71 → 72 taken 16 times.
✗ Branch 71 → 144 not taken.
16 const BYTE* srcp[3] = { src->GetReadPtr(PLANAR_G), src->GetReadPtr(PLANAR_B), src->GetReadPtr(PLANAR_R) };
362
3/6
✓ Branch 73 → 74 taken 16 times.
✗ Branch 73 → 144 not taken.
✓ Branch 75 → 76 taken 16 times.
✗ Branch 75 → 144 not taken.
✓ Branch 77 → 78 taken 16 times.
✗ Branch 77 → 144 not taken.
16 const int srcPitch[3] = { src->GetPitch(PLANAR_G), src->GetPitch(PLANAR_B), src->GetPitch(PLANAR_R) };
363
364 16 BYTE* dstp[3] = { dstY, dstU, dstV };
365 16 int dstPitch[3] = { Ypitch, UVpitch, UVpitch };
366
367 16 const bool force_float = quality;
368
369 // to Y
370
371
2/2
✓ Branch 78 → 79 taken 5 times.
✓ Branch 78 → 110 taken 11 times.
16 if (to_y) {
372 #ifdef INTEL_INTRINSICS
373
2/4
✓ Branch 79 → 80 taken 5 times.
✗ Branch 79 → 144 not taken.
✓ Branch 80 → 81 taken 5 times.
✗ Branch 80 → 90 not taken.
5 if (env->GetCPUFlags() & CPUF_AVX2) {
374
2/2
✓ Branch 81 → 82 taken 2 times.
✓ Branch 81 → 83 taken 3 times.
5 if (bits_per_pixel == 8)
375
1/2
✓ Branch 82 → 89 taken 2 times.
✗ Branch 82 → 144 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 83 → 84 taken 1 time.
✓ Branch 83 → 85 taken 2 times.
3 else if (bits_per_pixel < 16)
377
1/2
✓ Branch 84 → 89 taken 1 time.
✗ Branch 84 → 144 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 85 → 86 taken 1 time.
✓ Branch 85 → 87 taken 1 time.
2 else if (bits_per_pixel == 16)
379
1/2
✓ Branch 86 → 89 taken 1 time.
✗ Branch 86 → 144 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 87 → 88 taken 1 time.
✗ Branch 87 → 89 not taken.
1 else if (bits_per_pixel == 32)
381
1/2
✓ Branch 88 → 89 taken 1 time.
✗ Branch 88 → 144 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 110 → 111 taken 11 times.
✗ Branch 110 → 144 not taken.
✓ Branch 111 → 112 taken 11 times.
✗ Branch 111 → 121 not taken.
11 if (env->GetCPUFlags() & CPUF_AVX2) {
414
2/2
✓ Branch 112 → 113 taken 3 times.
✓ Branch 112 → 114 taken 8 times.
11 if (bits_per_pixel == 8)
415
1/2
✓ Branch 113 → 120 taken 3 times.
✗ Branch 113 → 144 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 114 → 115 not taken.
✓ Branch 114 → 116 taken 8 times.
8 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 116 → 117 taken 2 times.
✓ Branch 116 → 118 taken 6 times.
8 else if (bits_per_pixel == 16)
419
1/2
✓ Branch 117 → 120 taken 2 times.
✗ Branch 117 → 144 not taken.
2 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 118 → 119 taken 6 times.
✗ Branch 118 → 120 not taken.
6 else if (bits_per_pixel == 32)
421
1/2
✓ Branch 119 → 120 taken 6 times.
✗ Branch 119 → 144 not taken.
6 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 11 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 16 }
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 10 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 10 times.
✗ Branch 2 → 60 not taken.
✓ Branch 3 → 4 taken 10 times.
✗ Branch 3 → 58 not taken.
10 : 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 10 times.
✗ Branch 5 → 63 not taken.
✗ Branch 6 → 7 not taken.
✓ Branch 6 → 8 taken 10 times.
10 if (!vi.Is444())
466 env->ThrowError("ConvertYUV444ToRGB: Only 4:4:4 data input accepted");
467
468
1/2
✓ Branch 9 → 10 taken 10 times.
✗ Branch 9 → 63 not taken.
10 auto frame0 = child->GetFrame(0, env);
469
1/2
✓ Branch 10 → 11 taken 10 times.
✗ Branch 10 → 61 not taken.
10 const AVSMap* props = env->getFramePropsRO(frame0);
470
1/2
✓ Branch 11 → 12 taken 10 times.
✗ Branch 11 → 61 not taken.
10 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 10 const int shift = 13; // for integer arithmetic, over 13 bits would overflow the matrix elements/internal calculation
482
1/2
✓ Branch 12 → 13 taken 10 times.
✗ Branch 12 → 61 not taken.
10 const int bits_per_pixel = vi.BitsPerComponent();
483 10 source_bit_depth = bits_per_pixel;
484
485
2/4
✓ Branch 13 → 14 taken 10 times.
✗ Branch 13 → 61 not taken.
✗ Branch 14 → 15 not taken.
✓ Branch 14 → 16 taken 10 times.
10 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 10 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 3 times.
✓ Branch 16 → 21 taken 7 times.
10 if (need_bitdepth_conversion)
496 {
497 // supported conversions:
498 // 8-16-bits any range to 8-16, 32 bits any range
499 3 bitdepthConverted = true;
500 #ifdef INTEL_INTRINSICS
501
1/2
✓ Branch 17 → 18 taken 3 times.
✗ Branch 17 → 61 not taken.
3 const bool sse2 = !!(env->GetCPUFlags() & CPUF_SSE2);
502
1/2
✓ Branch 18 → 19 taken 3 times.
✗ Branch 18 → 61 not taken.
3 const bool sse4 = !!(env->GetCPUFlags() & CPUF_SSE4_1);
503
1/2
✓ Branch 19 → 20 taken 3 times.
✗ Branch 19 → 61 not taken.
3 const bool avx2 = !!(env->GetCPUFlags() & CPUF_AVX2);
504 // we really need only alpha conversion function
505 3 const bool fulls = true; // alpha is always full range
506 3 const bool fulld = true; // alpha is always full range
507 3 const int dither_mode = -1;
508 #ifdef INTEL_INTRINSICS
509
1/2
✓ Branch 20 → 22 taken 3 times.
✗ Branch 20 → 61 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);
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 10 theOutMatrix = Matrix_e::AVS_MATRIX_RGB;
523
524
1/6
✓ Branch 22 → 23 taken 10 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.
10 switch (pixel_step)
525 {
526 10 case -1: case -2: // target is planar RGB(A): all bit depths supported
527 {
528 10 const bool hasAlpha = (pixel_step == -2);
529
4/7
✓ Branch 23 → 24 taken 2 times.
✓ Branch 23 → 28 taken 3 times.
✗ 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.
10 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
2/2
✓ Branch 28 → 29 taken 2 times.
✓ Branch 28 → 30 taken 1 time.
3 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 10 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 10 }
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 40 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 40 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 40 constexpr bool final_is_float = std::is_floating_point<pixel_t_dst>::value;
626 40 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 40 constexpr bool force_float = (conv_type == YuvRgbConversionType::FORCE_FLOAT) || would_need_64bit_v_patch;
632
633 40 constexpr bool need_int_conversion_narrow_range = conv_type == YuvRgbConversionType::BITCONV_INT_LIMITED;
634 40 constexpr bool need_int_conversion_full_range = conv_type == YuvRgbConversionType::BITCONV_INT_FULL;
635 40 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 40 const bool float_matrix_workflow = force_float || need_int_conversion_full_range;
639
640 // quasi-constexpr, may help optimizer
641 16 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 12 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 40 const int bit_diff = need_int_conversion ? bits_per_pixel_target - bits_per_pixel : 0;
648 40 const int target_shift = need_int_conversion_narrow_range ? INT_ARITH_SHIFT - bit_diff : INT_ARITH_SHIFT;
649 40 const int ROUNDER = (final_is_float || float_matrix_workflow) ? 0 : (1 << (target_shift - 1));
650
651 40 const float out_offset_f = m.offset_out_f_32;
652 40 const int half_pixel_offset = 1 << (bits_per_pixel - 1);
653 40 const int half_pixel_offset_target = 1 << (bits_per_pixel_target - 1);
654 40 const int max_pixel_value_target = (1 << bits_per_pixel_target) - 1;
655
656 40 bits_conv_constants conversion_ranges;
657 40 const bool full_scale_d = m.offset_out == 0;
658
25/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 taken 1 time.
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 taken 1 time.
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 taken 3 times.
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.
40 get_bits_conv_constants(conversion_ranges, false, full_scale_d, full_scale_d, bits_per_pixel, bits_per_pixel_target);
659
660 40 constexpr int int_arithmetic_shift = 1 << INT_ARITH_SHIFT;
661 40 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 40 const int offset_in_scalar = m.offset_in;
666 40 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 27 round_mask_plus_offset_out_i = final_is_float ? 0 : ROUNDER + (offset_out_scalar << INT_ARITH_SHIFT);
673 27 round_mask_plus_offset_out_chroma_i = final_is_float ? 0 : ROUNDER + (half_pixel_offset << INT_ARITH_SHIFT);
674 }
675
676
50/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 taken 5 times.
✓ Branch 63 → 64 taken 1 time.
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 taken 5 times.
✓ Branch 63 → 64 taken 1 time.
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 taken 15 times.
✓ Branch 63 → 64 taken 3 times.
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.
204 for (int y = 0; y < height; y++) {
677 164 const pixel_t* src0 = reinterpret_cast<const pixel_t*>(srcp[0]); // Y or G
678 164 const pixel_t* src1 = reinterpret_cast<const pixel_t*>(srcp[1]); // U or B
679 164 const pixel_t* src2 = reinterpret_cast<const pixel_t*>(srcp[2]); // V or R
680 164 pixel_t_dst* d0 = reinterpret_cast<pixel_t_dst*>(dstp[0]); // G or Y
681 164 pixel_t_dst* d1 = reinterpret_cast<pixel_t_dst*>(dstp[1]); // B or U
682 164 pixel_t_dst* d2 = reinterpret_cast<pixel_t_dst*>(dstp[2]); // R or V
683
684
50/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 taken 165 times.
✓ Branch 61 → 62 taken 5 times.
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 taken 165 times.
✓ Branch 61 → 62 taken 5 times.
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 taken 495 times.
✓ Branch 61 → 62 taken 15 times.
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.
4625 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 4062 in0_i = static_cast<int>(src0[x]);
696 4062 in1_i = static_cast<int>(src1[x]);
697 4062 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 // Note: C is slightly different from Intel SIMD SSE2/AVX2 implementation:
734 // C is using (a+b+c)*scale, SIMD is using a*scale+b*scale+c*scale logic regarding the coeff scaling
735 // and summation. They may not be bit identical here in the float_matrix_workflow (e.g. fullrange destination)
736 if constexpr (direction == ConversionDirection::YUV_TO_RGB || direction == ConversionDirection::YUV_TO_YUV) {
737 // YUV input: in0=Y, in1=U, in2=V
738 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
739 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
740 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
741 }
742 else if constexpr (direction == ConversionDirection::RGB_TO_YUV || direction == ConversionDirection::RGB_TO_RGB) {
743 // RGB input: in0=G, in1=B, in2=R
744 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
745 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
746 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
747 }
748 else if constexpr (direction == ConversionDirection::RGB_TO_Y) {
749 // RGB input: in0=G, in1=B, in2=R
750 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
751 }
752
753 // Add output offset
754 if constexpr (direction == ConversionDirection::YUV_TO_RGB || direction == ConversionDirection::RGB_TO_RGB) {
755 // RGB output: same offset for all
756 85 float rgb_offset_scaled = m.offset_out_f * scale_f;
757 85 out0_f += rgb_offset_scaled;
758 85 out1_f += rgb_offset_scaled;
759 85 out2_f += rgb_offset_scaled;
760 }
761 else if constexpr (direction == ConversionDirection::RGB_TO_YUV || direction == ConversionDirection::YUV_TO_YUV) {
762 // YUV output: different offsets
763 377 float y_offset_scaled = m.offset_out_f * scale_f;
764 377 float uv_center = final_is_float ? 0.0f : (float)half_pixel_offset_target;
765 377 out0_f += y_offset_scaled; // Y
766 377 out1_f += uv_center; // U
767 377 out2_f += uv_center; // V
768 }
769 else if constexpr (direction == ConversionDirection::RGB_TO_Y) {
770 // Y output: single Y offsets
771 672 float y_offset_scaled = m.offset_out_f * scale_f;
772 672 out0_f += y_offset_scaled; // Y
773 }
774
775 if constexpr (final_is_float) {
776 409 d0[x] = static_cast<pixel_t_dst>(out0_f);
777 if constexpr (direction != ConversionDirection::RGB_TO_Y) {
778 217 d1[x] = static_cast<pixel_t_dst>(out1_f);
779 217 d2[x] = static_cast<pixel_t_dst>(out2_f);
780 }
781 }
782 else {
783 // Convert to integer with rounding
784 725 int out0_i = static_cast<int>(out0_f + 0.5f);
785
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);
786 725 d0[x] = static_cast<pixel_t_dst>(out0_i);
787
788 if constexpr (direction != ConversionDirection::RGB_TO_Y) {
789 245 int out1_i = static_cast<int>(out1_f + 0.5f);
790 245 int out2_i = static_cast<int>(out2_f + 0.5f);
791
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);
792
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);
793 245 d1[x] = static_cast<pixel_t_dst>(out1_i);
794 245 d2[x] = static_cast<pixel_t_dst>(out2_i);
795 }
796 }
797 }
798 else {
799 // Integer workflow
800 // Apply input offset and centering
801 if constexpr (direction == ConversionDirection::YUV_TO_RGB || direction == ConversionDirection::YUV_TO_YUV) {
802 // YUV input
803 1614 in0_i = in0_i + offset_in_scalar; // Y
804 1614 in1_i = in1_i - half_pixel_offset; // U (centered)
805 1614 in2_i = in2_i - half_pixel_offset; // V (centered)
806 }
807 else if constexpr (direction == ConversionDirection::RGB_TO_YUV || direction == ConversionDirection::RGB_TO_RGB || direction == ConversionDirection::RGB_TO_Y) {
808 // RGB input
809 1713 in0_i = in0_i + offset_in_scalar; // G
810 1713 in1_i = in1_i + offset_in_scalar; // B
811 1713 in2_i = in2_i + offset_in_scalar; // R
812 }
813
814 // Matrix multiply with appropriate rounding/offset
815 int round_and_offset_0, round_and_offset_1, round_and_offset_2;
816
817 if constexpr (direction == ConversionDirection::YUV_TO_RGB || direction == ConversionDirection::RGB_TO_RGB) {
818 // RGB output: same offset for all
819 1440 round_and_offset_0 = round_mask_plus_offset_out_i;
820 1440 round_and_offset_1 = round_mask_plus_offset_out_i;
821 1440 round_and_offset_2 = round_mask_plus_offset_out_i;
822 }
823 else if constexpr (direction == ConversionDirection::RGB_TO_YUV || direction == ConversionDirection::YUV_TO_YUV) {
824 // YUV output: different offsets
825 1599 round_and_offset_0 = round_mask_plus_offset_out_i; // Y
826 1599 round_and_offset_1 = round_mask_plus_offset_out_chroma_i; // U
827 1599 round_and_offset_2 = round_mask_plus_offset_out_chroma_i; // V
828 }
829 else if constexpr (direction == ConversionDirection::RGB_TO_Y) {
830 // Y output: single Y offset
831 288 round_and_offset_0 = round_mask_plus_offset_out_i; // Y
832 }
833
834 if constexpr (direction == ConversionDirection::YUV_TO_RGB || direction == ConversionDirection::YUV_TO_YUV) {
835 // YUV input: in0=Y, in1=U, in2=V
836 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;
837 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;
838 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;
839 }
840 else if constexpr (direction == ConversionDirection::RGB_TO_YUV || direction == ConversionDirection::RGB_TO_RGB) {
841 // RGB input: in0=G, in1=B, in2=R
842 1425 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;
843 1425 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;
844 1425 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;
845 }
846 else if constexpr (direction == ConversionDirection::RGB_TO_Y) {
847 // RGB input: in0=G, in1=B, in2=R
848 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;
849 }
850
851 if constexpr (final_is_float) {
852 // Integer workflow + float output
853 10 out0_f = static_cast<float>(out0_raw) * scale_f + out_offset_f;
854 if constexpr (direction == ConversionDirection::YUV_TO_RGB || direction == ConversionDirection::RGB_TO_RGB) {
855 // offset for the rest two only RGB output
856 out1_f = static_cast<float>(out1_raw) * scale_f + out_offset_f;
857 out2_f = static_cast<float>(out2_raw) * scale_f + out_offset_f;
858 }
859 else if constexpr (direction == ConversionDirection::RGB_TO_YUV || direction == ConversionDirection::YUV_TO_YUV) {
860 // for YUV the U and V float offset is different : 0.0f
861 10 out1_f = static_cast<float>(out1_raw) * scale_f; // U
862 10 out2_f = static_cast<float>(out2_raw) * scale_f; // V
863 }
864
865 10 d0[x] = static_cast<pixel_t_dst>(out0_f);
866 if constexpr (direction != ConversionDirection::RGB_TO_Y) {
867 10 d1[x] = static_cast<pixel_t_dst>(out1_f);
868 10 d2[x] = static_cast<pixel_t_dst>(out2_f);
869 }
870 }
871 else {
872 // Integer workflow + integer output
873 3317 int out0_i = static_cast<int>(out0_raw >> target_shift);
874
13/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 taken 165 times.
✗ 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 taken 165 times.
✗ 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 taken 495 times.
✗ 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.
3317 out0_i = std::clamp(out0_i, 0, max_pixel_value_target);
875 3317 d0[x] = static_cast<pixel_t_dst>(out0_i);
876
877 if constexpr (direction != ConversionDirection::RGB_TO_Y) {
878 3029 int out1_i = static_cast<int>(out1_raw >> target_shift);
879 3029 int out2_i = static_cast<int>(out2_raw >> target_shift);
880
881 // We are in integer domain, no convenient SIMD packus! We cannot spare min-max clamp to constexpr (lessthan16bit_target) {
882 // We need to do it always
883
10/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 taken 165 times.
✗ 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 taken 165 times.
✗ 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 taken 495 times.
✗ 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.
3029 out1_i = std::clamp(out1_i, 0, max_pixel_value_target);
884
10/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 taken 165 times.
✗ 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 taken 165 times.
✗ 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 taken 495 times.
✗ 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.
3029 out2_i = std::clamp(out2_i, 0, max_pixel_value_target);
885
886 3029 d1[x] = static_cast<pixel_t_dst>(out1_i);
887 3029 d2[x] = static_cast<pixel_t_dst>(out2_i);
888 }
889 }
890 }
891 }
892
893 164 dstp[0] += dstPitch[0];
894 if constexpr (direction != ConversionDirection::RGB_TO_Y) {
895 134 dstp[1] += dstPitch[1];
896 134 dstp[2] += dstPitch[2];
897 }
898 164 srcp[0] += srcPitch[0];
899 164 srcp[1] += srcPitch[1];
900 164 srcp[2] += srcPitch[2];
901 }
902 40 }
903
904 // Dispatcher matching AVX2/SSE2 structure
905 template<ConversionDirection direction, typename pixel_t_src, bool lessthan16bit>
906 40 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,
907 int bits_per_pixel, int bits_per_pixel_target, bool force_float)
908 {
909 // Handle forced float or float input
910
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 6 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 4 times.
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.
35 if (force_float || std::is_floating_point<pixel_t_src>::value) {
911
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) {
912 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);
913 }
914
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) {
915 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);
916 }
917
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) {
918 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);
919 }
920 else {
921 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);
922 }
923 9 return;
924 }
925
926 if constexpr (!std::is_floating_point<pixel_t_src>::value) {
927 31 const bool need_conversion = bits_per_pixel_target != bits_per_pixel;
928
16/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 taken 2 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 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 taken 3 times.
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.
31 if (!need_conversion) {
929 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);
930 22 return;
931 }
932
933 9 const bool full_d = m.offset_out == 0;
934
12/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 taken 2 times.
✗ Branch 14 → 29 not taken.
✓ Branch 15 → 16 taken 2 times.
✗ 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 taken 3 times.
✗ Branch 14 → 29 not taken.
✓ Branch 15 → 16 taken 3 times.
✗ 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.
9 if (bits_per_pixel_target >= 8 && bits_per_pixel <= 16) {
935
6/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 taken 2 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 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 taken 3 times.
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.
9 if (bits_per_pixel_target == 8) {
936
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)
937 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);
938 else
939 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);
940 }
941
6/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 taken 1 time.
✓ Branch 20 → 24 taken 1 time.
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 taken 3 times.
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.
8 else if (bits_per_pixel_target < 16) {
942
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 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 taken 1 time.
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.
2 if (full_d)
943 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);
944 else
945 2 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);
946 }
947
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 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 taken 1 time.
✗ 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 taken 3 times.
✗ 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.
6 else if (bits_per_pixel_target == 16) {
948
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 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 taken 1 time.
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 taken 3 times.
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.
5 if (full_d)
949 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);
950 else
951 4 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);
952 }
953 else {
954 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);
955 }
956 }
957 }
958 }
959
960 // Template instantiations for C version - all 4 directions
961 // YUV_TO_RGB
962 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);
963 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);
964 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);
965 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);
966
967 // RGB_TO_YUV
968 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);
969 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);
970 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);
971 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);
972
973 // RGB_TO_Y
974 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);
975 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);
976 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);
977 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);
978
979 // YUV_TO_YUV
980 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);
981 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);
982 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);
983 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);
984
985 10 PVideoFrame __stdcall ConvertYUV444ToRGB::GetFrame(int n, IScriptEnvironment* env)
986 {
987
1/2
✓ Branch 3 → 4 taken 10 times.
✗ Branch 3 → 162 not taken.
10 PVideoFrame src = child->GetFrame(n, env);
988
1/2
✓ Branch 4 → 5 taken 10 times.
✗ Branch 4 → 160 not taken.
10 PVideoFrame dst = env->NewVideoFrameP(vi, &src);
989
990
1/2
✓ Branch 5 → 6 taken 10 times.
✗ Branch 5 → 158 not taken.
10 auto props = env->getFramePropsRW(dst);
991
1/2
✓ Branch 6 → 7 taken 10 times.
✗ Branch 6 → 158 not taken.
10 update_Matrix_and_ColorRange(props, theOutMatrix, theOutColorRange, env);
992
1/2
✓ Branch 7 → 8 taken 10 times.
✗ Branch 7 → 158 not taken.
10 update_ChromaLocation(props, -1, env); // RGB target: delete _ChromaLocation
993
994
1/2
✓ Branch 9 → 10 taken 10 times.
✗ Branch 9 → 158 not taken.
10 const BYTE* srcY = src->GetReadPtr(PLANAR_Y);
995
1/2
✓ Branch 11 → 12 taken 10 times.
✗ Branch 11 → 158 not taken.
10 const BYTE* srcU = src->GetReadPtr(PLANAR_U);
996
1/2
✓ Branch 13 → 14 taken 10 times.
✗ Branch 13 → 158 not taken.
10 const BYTE* srcV = src->GetReadPtr(PLANAR_V);
997
1/2
✓ Branch 15 → 16 taken 10 times.
✗ Branch 15 → 158 not taken.
10 const BYTE* srcA = src->GetReadPtr(PLANAR_A);
998
999
1/2
✓ Branch 17 → 18 taken 10 times.
✗ Branch 17 → 158 not taken.
10 BYTE* dstp = dst->GetWritePtr();
1000
1001
1/2
✓ Branch 19 → 20 taken 10 times.
✗ Branch 19 → 158 not taken.
10 const int src_pitch_y = src->GetPitch(PLANAR_Y);
1002
1/2
✓ Branch 21 → 22 taken 10 times.
✗ Branch 21 → 158 not taken.
10 const int src_pitch_uv = src->GetPitch(PLANAR_U);
1003
1/2
✓ Branch 23 → 24 taken 10 times.
✗ Branch 23 → 158 not taken.
10 const int src_pitch_a = src->GetPitch(PLANAR_A); // zero if no Alpha
1004
1005
1/2
✓ Branch 25 → 26 taken 10 times.
✗ Branch 25 → 158 not taken.
10 const int dst_pitch = dst->GetPitch();
1006
1007 // Legacy direct YV24 -> packed 8 bit RGB24/RGB32
1008 // quality=true float-inside or bit-depth changing transformation is handled through planar RGB intermediate.
1009
1010
2/4
✓ Branch 26 → 27 taken 10 times.
✗ Branch 26 → 28 not taken.
✗ Branch 27 → 28 not taken.
✓ Branch 27 → 55 taken 10 times.
10 if (pixel_step == 3 || pixel_step == 4) {
1011 #ifdef INTEL_INTRINSICS
1012 if (env->GetCPUFlags() & CPUF_AVX2) {
1013 if (pixel_step == 4) {
1014 // RGB32
1015 if (src_pitch_a) // move alpha channel from YUVA
1016 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);
1017 else
1018 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);
1019 }
1020 else {
1021 // RGB24
1022 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);
1023 }
1024 return dst;
1025 }
1026 else if (env->GetCPUFlags() & CPUF_SSE2) {
1027 if (pixel_step == 4) {
1028 if (src_pitch_a) // move alpha channel from YUVA
1029 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);
1030 else
1031 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);
1032 }
1033 else {
1034 if (env->GetCPUFlags() & CPUF_SSSE3) {
1035 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);
1036 }
1037 else {
1038 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);
1039 }
1040 }
1041 return dst;
1042 }
1043
1044 #ifdef X86_32
1045 // packed RGB24 and RGB32
1046 if ((src_pitch_a == 0) && (env->GetCPUFlags() & CPUF_MMX)) {
1047 if (pixel_step == 4) {
1048 convert_yv24_to_rgb_mmx<4>(dstp, srcY, srcU, srcV, dst_pitch, src_pitch_y, src_pitch_uv, vi.width, vi.height, matrix);
1049 }
1050 else {
1051 convert_yv24_to_rgb_mmx<3>(dstp, srcY, srcU, srcV, dst_pitch, src_pitch_y, src_pitch_uv, vi.width, vi.height, matrix);
1052 }
1053 return dst;
1054 }
1055 #endif
1056 #endif
1057
1058 // Unoptimized C-code.
1059 // rgb24 or rgb32, packed RGB
1060 if (pixel_step == 3 || pixel_step == 4) {
1061 if (pixel_step == 4) {
1062 if (src_pitch_a) // move alpha channel from YUVA
1063 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);
1064 else
1065 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);
1066 }
1067 else { // 3 RGB24
1068 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);
1069 }
1070 return dst;
1071 }
1072 } // YV24->RGB24/RGB32
1073
1074 // rgb48 or rgb64, packed RGB
1075
2/4
✓ Branch 55 → 56 taken 10 times.
✗ Branch 55 → 57 not taken.
✗ Branch 56 → 57 not taken.
✓ Branch 56 → 58 taken 10 times.
10 if (pixel_step == 6 || pixel_step == 8) {
1076 // cannot happen, handled earlier, RGB48/64 are post converted from RGB(A)P16
1077 env->ThrowError("ConvertFrom 444: RGB48/64 conversion should have been handled earlier through planar RGB intermediate");
1078 }
1079
1080
1/2
✓ Branch 58 → 59 taken 10 times.
✗ Branch 58 → 153 not taken.
10 if (pixel_step < 0) {
1081 // -1: RGBP -2:RGBAP
1082 // Common task: copy or fill alpha channel
1083
1084 // YUV444 -> PlanarRGB
1085 // YUVA444 -> PlanarRGBA
1086 10 bool targetHasAlpha = pixel_step == -2;
1087
1088
1/2
✓ Branch 60 → 61 taken 10 times.
✗ Branch 60 → 157 not taken.
10 BYTE *dstpG = dst->GetWritePtr(PLANAR_G);
1089
1/2
✓ Branch 62 → 63 taken 10 times.
✗ Branch 62 → 157 not taken.
10 BYTE *dstpB = dst->GetWritePtr(PLANAR_B);
1090
1/2
✓ Branch 64 → 65 taken 10 times.
✗ Branch 64 → 157 not taken.
10 BYTE *dstpR = dst->GetWritePtr(PLANAR_R);
1091
1092 // copy or fill alpha
1093 BYTE *dstpA;
1094
2/2
✓ Branch 65 → 66 taken 6 times.
✓ Branch 65 → 103 taken 4 times.
10 if (targetHasAlpha) {
1095
1/2
✓ Branch 67 → 68 taken 6 times.
✗ Branch 67 → 157 not taken.
6 dstpA = dst->GetWritePtr(PLANAR_A);
1096
1/2
✓ Branch 69 → 70 taken 6 times.
✗ Branch 69 → 157 not taken.
6 int heightA = dst->GetHeight(PLANAR_A);
1097
1/2
✓ Branch 71 → 72 taken 6 times.
✗ Branch 71 → 157 not taken.
6 int rowsizeA = dst->GetRowSize(PLANAR_A);
1098
1/2
✓ Branch 73 → 74 taken 6 times.
✗ Branch 73 → 157 not taken.
6 int dst_pitchA = dst->GetPitch(PLANAR_A);
1099 // simple copy
1100
3/4
✓ Branch 75 → 76 taken 6 times.
✗ Branch 75 → 157 not taken.
✓ Branch 76 → 77 taken 3 times.
✓ Branch 76 → 94 taken 3 times.
6 if (src->GetRowSize(PLANAR_A)) {
1101
1102
2/2
✓ Branch 77 → 78 taken 1 time.
✓ Branch 77 → 87 taken 2 times.
3 if (source_bit_depth == target_bit_depth) {
1103 // vi.IsYUVA() no-no! vi is already the target video type
1104
5/10
✓ Branch 79 → 80 taken 1 time.
✗ Branch 79 → 157 not taken.
✓ Branch 81 → 82 taken 1 time.
✗ Branch 81 → 157 not taken.
✓ Branch 83 → 84 taken 1 time.
✗ Branch 83 → 157 not taken.
✓ Branch 85 → 86 taken 1 time.
✗ Branch 85 → 157 not taken.
✓ Branch 86 → 102 taken 1 time.
✗ Branch 86 → 157 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));
1105 }
1106 else {
1107 // RGBPA target + different bit-depth
1108 // Alpha bit depth conversion needed, normal planes are done in-process.
1109 // we need only conv_function_a, proper dispatching from ConvertBits
1110
4/8
✓ Branch 88 → 89 taken 2 times.
✗ Branch 88 → 157 not taken.
✓ Branch 90 → 91 taken 2 times.
✗ Branch 90 → 157 not taken.
✓ Branch 92 → 93 taken 2 times.
✗ Branch 92 → 157 not taken.
✓ Branch 93 → 102 taken 2 times.
✗ Branch 93 → 157 not taken.
2 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);
1111 }
1112 }
1113 else {
1114 // fill default transparency
1115
4/6
✓ Branch 94 → 95 taken 3 times.
✗ Branch 94 → 157 not taken.
✓ Branch 95 → 96 taken 1 time.
✓ Branch 95 → 98 taken 1 time.
✓ Branch 95 → 100 taken 1 time.
✗ Branch 95 → 102 not taken.
3 switch (vi.ComponentSize())
1116 {
1117 1 case 1:
1118
1/2
✓ Branch 96 → 97 taken 1 time.
✗ Branch 96 → 157 not taken.
1 fill_plane<BYTE>(dstpA, heightA, rowsizeA, dst_pitchA, 255);
1119 1 break;
1120 1 case 2:
1121
1/2
✓ Branch 98 → 99 taken 1 time.
✗ Branch 98 → 157 not taken.
1 fill_plane<uint16_t>(dstpA, heightA, rowsizeA, dst_pitchA, (1 << target_bit_depth) - 1);
1122 1 break;
1123 1 case 4:
1124
1/2
✓ Branch 100 → 101 taken 1 time.
✗ Branch 100 → 157 not taken.
1 fill_plane<float>(dstpA, heightA, rowsizeA, dst_pitchA, 1.0f);
1125 1 break;
1126 }
1127 }
1128 }
1129
1130
1/2
✓ Branch 104 → 105 taken 10 times.
✗ Branch 104 → 157 not taken.
10 int dst_pitchG = dst->GetPitch(PLANAR_G);
1131
1/2
✓ Branch 106 → 107 taken 10 times.
✗ Branch 106 → 157 not taken.
10 int dst_pitchB = dst->GetPitch(PLANAR_B);
1132
1/2
✓ Branch 108 → 109 taken 10 times.
✗ Branch 108 → 157 not taken.
10 int dst_pitchR = dst->GetPitch(PLANAR_R);
1133
1134 // always start from source bit depth
1135 10 int bits_per_pixel = source_bit_depth;
1136
1137
3/6
✓ Branch 110 → 111 taken 10 times.
✗ Branch 110 → 157 not taken.
✓ Branch 112 → 113 taken 10 times.
✗ Branch 112 → 157 not taken.
✓ Branch 114 → 115 taken 10 times.
✗ Branch 114 → 157 not taken.
10 const BYTE* srcp[3] = { src->GetReadPtr(PLANAR_Y), src->GetReadPtr(PLANAR_U), src->GetReadPtr(PLANAR_V) };
1138
3/6
✓ Branch 116 → 117 taken 10 times.
✗ Branch 116 → 157 not taken.
✓ Branch 118 → 119 taken 10 times.
✗ Branch 118 → 157 not taken.
✓ Branch 120 → 121 taken 10 times.
✗ Branch 120 → 157 not taken.
10 const int srcPitch[3] = { src->GetPitch(PLANAR_Y), src->GetPitch(PLANAR_U), src->GetPitch(PLANAR_V) };
1139
1140 10 BYTE* dstp[3] = { dstpG, dstpB, dstpR };
1141 10 int dstPitch[3] = { dst_pitchG, dst_pitchB, dst_pitchR };
1142
1143 // alpha is already handled above
1144
1145 10 const bool force_float = quality;
1146
1147 #ifdef INTEL_INTRINSICS
1148
1149
2/4
✓ Branch 121 → 122 taken 10 times.
✗ Branch 121 → 157 not taken.
✓ Branch 122 → 123 taken 10 times.
✗ Branch 122 → 132 not taken.
10 if (env->GetCPUFlags() & CPUF_AVX2)
1150 {
1151
2/2
✓ Branch 123 → 124 taken 3 times.
✓ Branch 123 → 125 taken 7 times.
10 if (bits_per_pixel == 8)
1152
1/2
✓ Branch 124 → 131 taken 3 times.
✗ Branch 124 → 157 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);
1153
1/2
✗ Branch 125 → 126 not taken.
✓ Branch 125 → 127 taken 7 times.
7 else if (bits_per_pixel < 16)
1154 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);
1155
2/2
✓ Branch 127 → 128 taken 3 times.
✓ Branch 127 → 129 taken 4 times.
7 else if (bits_per_pixel == 16)
1156
1/2
✓ Branch 128 → 131 taken 3 times.
✗ Branch 128 → 157 not taken.
3 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);
1157
1/2
✓ Branch 129 → 130 taken 4 times.
✗ Branch 129 → 131 not taken.
4 else if (bits_per_pixel == 32)
1158
1/2
✓ Branch 130 → 131 taken 4 times.
✗ Branch 130 → 157 not taken.
4 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);
1159 10 return dst;
1160 }
1161
1162 if (env->GetCPUFlags() & CPUF_SSE2)
1163 {
1164 if (bits_per_pixel == 8)
1165 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);
1166 else if (bits_per_pixel < 16)
1167 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);
1168 else if (bits_per_pixel == 16)
1169 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);
1170 else if (bits_per_pixel == 32)
1171 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);
1172 return dst;
1173 }
1174
1175 #endif
1176
1177 if (bits_per_pixel == 8)
1178 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);
1179 else if (bits_per_pixel < 16)
1180 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);
1181 else if (bits_per_pixel == 16)
1182 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);
1183 else if (bits_per_pixel == 32)
1184 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);
1185 return dst;
1186 }
1187 return dst;
1188 10 }
1189
1190 /************************************
1191 * YUY2 to YV16
1192 ************************************/
1193
1194
2/4
✓ Branch 2 → 3 taken 2 times.
✗ Branch 2 → 14 not taken.
✓ Branch 3 → 4 taken 2 times.
✗ Branch 3 → 12 not taken.
2 ConvertYUY2ToYV16_or_Y::ConvertYUY2ToYV16_or_Y(PClip src, bool _to_y, IScriptEnvironment* env) : GenericVideoFilter(src), to_y(_to_y) {
1195
1196
2/4
✓ Branch 5 → 6 taken 2 times.
✗ Branch 5 → 15 not taken.
✗ Branch 6 → 7 not taken.
✓ Branch 6 → 8 taken 2 times.
2 if (!vi.IsYUY2())
1197 env->ThrowError("ConvertYUY2ToYV16/Y: Only YUY2 is allowed as input");
1198
1199
2/2
✓ Branch 8 → 9 taken 1 time.
✓ Branch 8 → 10 taken 1 time.
2 vi.pixel_type = to_y ? VideoInfo::CS_Y8 : VideoInfo::CS_YV16;
1200
1201 2 }
1202
1203 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)
1204 {
1205 for (int y = 0; y < height; y++) {
1206 for (int x = 0; x < width; x++) {
1207 dstp[x] = srcp[x * 2];
1208 }
1209 srcp += src_pitch;
1210 dstp += dst_pitch;
1211 }
1212 }
1213
1214
1215 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)
1216 {
1217 width /= 2;
1218
1219 for (size_t y = 0; y < height; ++y) {
1220 for (size_t x = 0; x < width; ++x) {
1221 dstp_y[x * 2] = srcp[x * 4 + 0];
1222 dstp_y[x * 2 + 1] = srcp[x * 4 + 2];
1223 dstp_u[x] = srcp[x * 4 + 1];
1224 dstp_v[x] = srcp[x * 4 + 3];
1225 }
1226 srcp += src_pitch;
1227 dstp_y += dst_pitch_y;
1228 dstp_u += dst_pitch_uv;
1229 dstp_v += dst_pitch_uv;
1230 }
1231 }
1232
1233
1234 2 PVideoFrame __stdcall ConvertYUY2ToYV16_or_Y::GetFrame(int n, IScriptEnvironment* env) {
1235
1/2
✓ Branch 3 → 4 taken 2 times.
✗ Branch 3 → 53 not taken.
2 PVideoFrame src = child->GetFrame(n, env);
1236
1/2
✓ Branch 4 → 5 taken 2 times.
✗ Branch 4 → 51 not taken.
2 PVideoFrame dst = env->NewVideoFrameP(vi, &src);
1237
1238
1/2
✓ Branch 6 → 7 taken 2 times.
✗ Branch 6 → 49 not taken.
2 const BYTE* srcP = src->GetReadPtr();
1239
1/2
✓ Branch 8 → 9 taken 2 times.
✗ Branch 8 → 49 not taken.
2 BYTE* dstY = dst->GetWritePtr(PLANAR_Y);
1240
1241
2/2
✓ Branch 9 → 10 taken 1 time.
✓ Branch 9 → 25 taken 1 time.
2 if (to_y) {
1242
2/4
✓ Branch 10 → 11 taken 1 time.
✗ Branch 10 → 49 not taken.
✓ Branch 11 → 12 taken 1 time.
✗ Branch 11 → 49 not taken.
1 update_ChromaLocation(env->getFramePropsRW(dst), -1, env); // Y8 target: delete _ChromaLocation
1243 // YUY2 to Y8, luma only
1244 #ifdef INTEL_INTRINSICS
1245
2/4
✓ Branch 12 → 13 taken 1 time.
✗ Branch 12 → 49 not taken.
✓ Branch 13 → 14 taken 1 time.
✗ Branch 13 → 19 not taken.
1 if (env->GetCPUFlags() & CPUF_SSE2) {
1246
3/6
✓ Branch 15 → 16 taken 1 time.
✗ Branch 15 → 49 not taken.
✓ Branch 17 → 18 taken 1 time.
✗ Branch 17 → 49 not taken.
✓ Branch 18 → 24 taken 1 time.
✗ Branch 18 → 49 not taken.
1 convert_yuy2_to_y8_sse2(srcP, dstY, src->GetPitch(), dst->GetPitch(PLANAR_Y), vi.width, vi.height);
1247 }
1248 else
1249 #endif
1250 {
1251 convert_yuy2_to_y8_c(srcP, dstY, src->GetPitch(), dst->GetPitch(PLANAR_Y), vi.width, vi.height);
1252 }
1253 1 return dst;
1254 }
1255 else {
1256
1/2
✓ Branch 26 → 27 taken 1 time.
✗ Branch 26 → 49 not taken.
1 BYTE* dstU = dst->GetWritePtr(PLANAR_U);
1257
1/2
✓ Branch 28 → 29 taken 1 time.
✗ Branch 28 → 49 not taken.
1 BYTE* dstV = dst->GetWritePtr(PLANAR_V);
1258 // YUY2 to YV16, separate luma and chroma
1259 #ifdef INTEL_INTRINSICS
1260
2/4
✓ Branch 29 → 30 taken 1 time.
✗ Branch 29 → 49 not taken.
✓ Branch 30 → 31 taken 1 time.
✗ Branch 30 → 38 not taken.
1 if (env->GetCPUFlags() & CPUF_SSE2) {
1261
4/8
✓ Branch 32 → 33 taken 1 time.
✗ Branch 32 → 49 not taken.
✓ Branch 34 → 35 taken 1 time.
✗ Branch 34 → 49 not taken.
✓ Branch 36 → 37 taken 1 time.
✗ Branch 36 → 49 not taken.
✓ Branch 37 → 45 taken 1 time.
✗ Branch 37 → 49 not taken.
1 convert_yuy2_to_yv16_sse2(srcP, dstY, dstU, dstV, src->GetPitch(), dst->GetPitch(PLANAR_Y), dst->GetPitch(PLANAR_U), vi.width, vi.height);
1262 }
1263 else
1264 #ifdef X86_32
1265 if (env->GetCPUFlags() & CPUF_MMX) {
1266 convert_yuy2_to_yv16_mmx(srcP, dstY, dstU, dstV, src->GetPitch(), dst->GetPitch(PLANAR_Y), dst->GetPitch(PLANAR_U), vi.width, vi.height);
1267 }
1268 else
1269 #endif
1270 #endif
1271 {
1272 convert_yuy2_to_yv16_c(srcP, dstY, dstU, dstV, src->GetPitch(), dst->GetPitch(PLANAR_Y), dst->GetPitch(PLANAR_U), vi.width, vi.height);
1273 }
1274 }
1275
1276 1 return dst;
1277 2 }
1278
1279
1280 AVSValue __cdecl ConvertYUY2ToYV16_or_Y::Create(AVSValue args, void*, IScriptEnvironment* env) {
1281 PClip clip = args[0].AsClip();
1282 if (clip->GetVideoInfo().IsYV16())
1283 return clip;
1284 return new ConvertYUY2ToYV16_or_Y(clip, false /*to_y*/, env);
1285 }
1286
1287 /************************************
1288 * YV16 to YUY2
1289 ************************************/
1290
1291
2/4
✓ Branch 2 → 3 taken 1 time.
✗ Branch 2 → 11 not taken.
✓ Branch 3 → 4 taken 1 time.
✗ Branch 3 → 9 not taken.
1 ConvertYV16ToYUY2::ConvertYV16ToYUY2(PClip src, IScriptEnvironment* env) : GenericVideoFilter(src) {
1292
1293
2/4
✓ Branch 5 → 6 taken 1 time.
✗ Branch 5 → 12 not taken.
✗ Branch 6 → 7 not taken.
✓ Branch 6 → 8 taken 1 time.
1 if (!vi.IsYV16())
1294 env->ThrowError("ConvertYV16ToYUY2: Only YV16 is allowed as input");
1295
1296 1 vi.pixel_type = VideoInfo::CS_YUY2;
1297 1 }
1298
1299 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) {
1300 for (size_t y=0; y < height; y++) {
1301 for (size_t x=0; x < width / 2; x++) {
1302 dstp[x*4+0] = srcp_y[x*2];
1303 dstp[x*4+1] = srcp_u[x];
1304 dstp[x*4+2] = srcp_y[x*2+1];
1305 dstp[x*4+3] = srcp_v[x];
1306 }
1307 srcp_y += src_pitch_y;
1308 srcp_u += src_pitch_uv;
1309 srcp_v += src_pitch_uv;
1310 dstp += dst_pitch;
1311 }
1312 }
1313
1314 1 PVideoFrame __stdcall ConvertYV16ToYUY2::GetFrame(int n, IScriptEnvironment* env) {
1315
1/2
✓ Branch 3 → 4 taken 1 time.
✗ Branch 3 → 36 not taken.
1 PVideoFrame src = child->GetFrame(n, env);
1316
1/2
✓ Branch 4 → 5 taken 1 time.
✗ Branch 4 → 34 not taken.
1 PVideoFrame dst = env->NewVideoFrameP(vi, &src);
1317
1318
1/2
✓ Branch 6 → 7 taken 1 time.
✗ Branch 6 → 32 not taken.
1 const BYTE* srcY = src->GetReadPtr(PLANAR_Y);
1319
1/2
✓ Branch 8 → 9 taken 1 time.
✗ Branch 8 → 32 not taken.
1 const BYTE* srcU = src->GetReadPtr(PLANAR_U);
1320
1/2
✓ Branch 10 → 11 taken 1 time.
✗ Branch 10 → 32 not taken.
1 const BYTE* srcV = src->GetReadPtr(PLANAR_V);
1321
1322
1/2
✓ Branch 12 → 13 taken 1 time.
✗ Branch 12 → 32 not taken.
1 BYTE* dstp = dst->GetWritePtr();
1323
1324 #ifdef INTEL_INTRINSICS
1325
2/4
✓ Branch 13 → 14 taken 1 time.
✗ Branch 13 → 32 not taken.
✓ Branch 14 → 15 taken 1 time.
✗ Branch 14 → 22 not taken.
1 if (env->GetCPUFlags() & CPUF_SSE2) {
1326 //U and V don't have to be aligned since we user movq to read from those
1327
4/8
✓ Branch 16 → 17 taken 1 time.
✗ Branch 16 → 32 not taken.
✓ Branch 18 → 19 taken 1 time.
✗ Branch 18 → 32 not taken.
✓ Branch 20 → 21 taken 1 time.
✗ Branch 20 → 32 not taken.
✓ Branch 21 → 29 taken 1 time.
✗ Branch 21 → 32 not taken.
1 convert_yv16_to_yuy2_sse2(srcY, srcU, srcV, dstp, src->GetPitch(PLANAR_Y), src->GetPitch(PLANAR_U), dst->GetPitch(), vi.width, vi.height);
1328 } else
1329 #ifdef X86_32
1330 if (env->GetCPUFlags() & CPUF_MMX) {
1331 convert_yv16_to_yuy2_mmx(srcY, srcU, srcV, dstp, src->GetPitch(PLANAR_Y), src->GetPitch(PLANAR_U), dst->GetPitch(), vi.width, vi.height);
1332 } else
1333 #endif
1334 #endif
1335 {
1336 convert_yv16_to_yuy2_c(srcY, srcU, srcV, dstp, src->GetPitch(PLANAR_Y), src->GetPitch(PLANAR_U), dst->GetPitch(), vi.width, vi.height);
1337 }
1338
1339 1 return dst;
1340 1 }
1341
1342
1343 AVSValue __cdecl ConvertYV16ToYUY2::Create(AVSValue args, void*, IScriptEnvironment* env) {
1344 PClip clip = args[0].AsClip();
1345 if (clip->GetVideoInfo().IsYUY2())
1346 return clip;
1347 return new ConvertYV16ToYUY2(clip, env);
1348 }
1349
1350 /**********************************************
1351 * Converter between arbitrary planar formats
1352 *
1353 * This uses plane copy for luma, and a custom
1354 * resizer for chroma
1355 *
1356 * (c) Klaus Post, 2005
1357 * (c) Ian Brabham, 2011
1358 **********************************************/
1359
1360 36 ConvertToPlanarGeneric::ConvertToPlanarGeneric(
1361 PClip src, int dst_space, bool interlaced,
1362 int _ChromaLocation_In,
1363 const AVSValue& chromaResampler, const AVSValue& param1, const AVSValue& param2, const AVSValue& param3,
1364 int _ChromaLocation_Out,
1365 36 IScriptEnvironment* env) :
1366
4/8
✓ Branch 2 → 3 taken 36 times.
✗ Branch 2 → 340 not taken.
✓ Branch 3 → 4 taken 36 times.
✗ Branch 3 → 338 not taken.
✓ Branch 5 → 6 taken 36 times.
✗ Branch 5 → 577 not taken.
✓ Branch 6 → 7 taken 36 times.
✗ Branch 6 → 575 not taken.
36 GenericVideoFilter(src), ChromaLocation_In(_ChromaLocation_In), ChromaLocation_Out(_ChromaLocation_Out)
1367 {
1368
1/2
✓ Branch 7 → 8 taken 36 times.
✗ Branch 7 → 572 not taken.
36 Yinput = vi.NumComponents() == 1;
1369
1/2
✓ Branch 8 → 9 taken 36 times.
✗ Branch 8 → 572 not taken.
36 pixelsize = vi.ComponentSize();
1370
1371
2/2
✓ Branch 9 → 10 taken 3 times.
✓ Branch 9 → 15 taken 33 times.
36 if (Yinput) {
1372 3 vi.pixel_type = dst_space;
1373
2/4
✓ Branch 10 → 11 taken 3 times.
✗ Branch 10 → 572 not taken.
✗ Branch 11 → 12 not taken.
✓ Branch 11 → 14 taken 3 times.
3 if (vi.ComponentSize() != pixelsize)
1374 env->ThrowError("Convert: Conversion from %d to %d-byte format not supported.", pixelsize, vi.ComponentSize());
1375 // no more preparation here, GetFrame simply returns Y
1376 7 return;
1377 }
1378
1379 // Y only output from any YUV: no chroma involved, GetFrame will snatch Y plane
1380
4/6
✓ Branch 15 → 16 taken 29 times.
✓ Branch 15 → 21 taken 4 times.
✓ Branch 16 → 17 taken 29 times.
✗ Branch 16 → 21 not taken.
✓ Branch 17 → 18 taken 29 times.
✗ Branch 17 → 21 not taken.
33 if (dst_space == VideoInfo::CS_Y8 || dst_space == VideoInfo::CS_Y10 ||
1381
3/6
✓ Branch 18 → 19 taken 29 times.
✗ Branch 18 → 21 not taken.
✓ Branch 19 → 20 taken 29 times.
✗ Branch 19 → 21 not taken.
✗ Branch 20 → 21 not taken.
✓ Branch 20 → 22 taken 29 times.
29 dst_space == VideoInfo::CS_Y12 || dst_space == VideoInfo::CS_Y14 || dst_space == VideoInfo::CS_Y16 ||
1382 dst_space == VideoInfo::CS_Y32)
1383 {
1384 4 vi.pixel_type = dst_space;
1385 4 return;
1386 }
1387
1388 97 auto Is420 = [](int pix_type) {
1389
2/4
✓ Branch 3 → 4 taken 50 times.
✗ Branch 3 → 15 not taken.
✓ Branch 4 → 5 taken 50 times.
✗ Branch 4 → 15 not taken.
50 return pix_type == VideoInfo::CS_YV12 || pix_type == VideoInfo::CS_I420 ||
1390
2/4
✓ Branch 5 → 6 taken 50 times.
✗ Branch 5 → 15 not taken.
✓ Branch 6 → 7 taken 50 times.
✗ Branch 6 → 15 not taken.
50 pix_type == VideoInfo::CS_YUV420P10 || pix_type == VideoInfo::CS_YUV420P12 ||
1391
4/4
✓ Branch 7 → 8 taken 48 times.
✓ Branch 7 → 15 taken 2 times.
✓ Branch 8 → 9 taken 46 times.
✓ Branch 8 → 15 taken 2 times.
50 pix_type == VideoInfo::CS_YUV420P14 || pix_type == VideoInfo::CS_YUV420P16 ||
1392
2/2
✓ Branch 9 → 10 taken 42 times.
✓ Branch 9 → 15 taken 4 times.
46 pix_type == VideoInfo::CS_YUV420PS ||
1393
1/2
✓ Branch 10 → 11 taken 42 times.
✗ Branch 10 → 15 not taken.
42 pix_type == VideoInfo::CS_YUVA420 ||
1394
2/4
✓ Branch 11 → 12 taken 42 times.
✗ Branch 11 → 15 not taken.
✓ Branch 12 → 13 taken 42 times.
✗ Branch 12 → 15 not taken.
42 pix_type == VideoInfo::CS_YUVA420P10 || pix_type == VideoInfo::CS_YUVA420P12 ||
1395
4/6
✓ Branch 2 → 3 taken 50 times.
✓ Branch 2 → 15 taken 47 times.
✓ Branch 13 → 14 taken 42 times.
✗ Branch 13 → 15 not taken.
✗ Branch 14 → 15 not taken.
✓ Branch 14 → 16 taken 42 times.
147 pix_type == VideoInfo::CS_YUVA420P14 || pix_type == VideoInfo::CS_YUVA420P16 ||
1396 97 pix_type == VideoInfo::CS_YUVA420PS;
1397 };
1398
1399
6/6
✓ Branch 23 → 24 taken 10 times.
✓ Branch 23 → 27 taken 19 times.
✓ Branch 25 → 26 taken 2 times.
✓ Branch 25 → 27 taken 8 times.
✓ Branch 28 → 29 taken 2 times.
✓ Branch 28 → 30 taken 27 times.
29 if (!Is420(vi.pixel_type) && !Is420(dst_space))
1400 2 interlaced = false; // Ignore, if YV12 is not involved.
1401 //if (interlaced) env->ThrowError("Convert: Interlaced only available with 4:2:0 color spaces.");
1402
1403 // Describe input pixel positioning
1404 29 float xdInU = 0.0f, txdInU = 0.0f, bxdInU = 0.0f;
1405 29 float ydInU = 0.0f, tydInU = 0.0f, bydInU = 0.0f;
1406 29 float xdInV = 0.0f, txdInV = 0.0f, bxdInV = 0.0f;
1407 29 float ydInV = 0.0f, tydInV = 0.0f, bydInV = 0.0f;
1408
1409 /*
1410 "mpeg1", "center"
1411 - 1-1 averaging kernel (4:2:0, 4:2:2 (horizontal only))
1412 "mpeg2", "left" (4:2:0, 4:2:2)
1413 - top-field samples are sited 1/4 sample below the luma samples (4:2:0)
1414 - bottom-field samples are sited 1/4 sample above the luma samples (4:2:0)
1415 - horizontal 1-2-1 kernel
1416 "dv": (4:2:0)
1417 Chroma samples are sited on top of luma samples, but CB and CR samples are sited on alternate lines.
1418 - top: V
1419 - bottom: U
1420 "top_left" (4:2:0)
1421 - horizontal 1-2-1 vertical 1-2-1
1422 */
1423
1424
2/2
✓ Branch 31 → 32 taken 19 times.
✓ Branch 31 → 42 taken 10 times.
29 if (Is420(vi.pixel_type)) {
1425
7/8
✓ Branch 32 → 33 taken 1 time.
✓ Branch 32 → 34 taken 1 time.
✓ Branch 32 → 35 taken 1 time.
✓ Branch 32 → 36 taken 1 time.
✓ Branch 32 → 37 taken 12 times.
✓ Branch 32 → 38 taken 2 times.
✓ Branch 32 → 39 taken 1 time.
✗ Branch 32 → 40 not taken.
19 switch (ChromaLocation_In) {
1426 1 case ChromaLocation_e::AVS_CHROMA_DV: // spec. avisynth
1427 1 xdInU = 0.0f; ydInU = 1.0f; txdInU = 0.0f; tydInU = 1.0f; bxdInU = 0.0f; bydInU = 1.0f; // Cb
1428 1 xdInV = 0.0f; ydInV = 0.0f; txdInV = 0.0f; tydInV = 0.0f; bxdInV = 0.0f; bydInV = 0.0f; // Cr
1429 1 break;
1430 1 case ChromaLocation_e::AVS_CHROMA_TOP:
1431 1 xdInU = 0.5f, ydInU = 0.0f; txdInU = 0.5f; tydInU = 0.0f; bxdInU = 0.5f; bydInU = 0.5f;
1432 1 xdInV = 0.5f, ydInV = 0.0f; txdInV = 0.5f; tydInV = 0.0f; bxdInV = 0.5f; bydInV = 0.5f;
1433 1 break;
1434 1 case ChromaLocation_e::AVS_CHROMA_CENTER: // mpeg1, center
1435 1 xdInU = 0.5f, ydInU = 0.5f; txdInU = 0.5f; tydInU = 0.25f; bxdInU = 0.5f; bydInU = 0.75f;
1436 1 xdInV = 0.5f, ydInV = 0.5f; txdInV = 0.5f; tydInV = 0.25f; bxdInV = 0.5f; bydInV = 0.75f;
1437 1 break;
1438 1 case ChromaLocation_e::AVS_CHROMA_BOTTOM:
1439 1 xdInU = 0.5f, ydInU = 1.0f; txdInU = 0.5f; tydInU = 0.5f; bxdInU = 0.5f; bydInU = 1.0f;
1440 1 xdInV = 0.5f, ydInV = 1.0f; txdInV = 0.5f; tydInV = 0.5f; bxdInV = 0.5f; bydInV = 1.0f;
1441 1 break;
1442 12 case ChromaLocation_e::AVS_CHROMA_TOP_LEFT:
1443 12 xdInU = 0.0f; ydInU = 0.0f; txdInU = 0.0f; tydInU = 0.0f; bxdInU = 0.0f; bydInU = 0.5f;
1444 12 xdInV = 0.0f; ydInV = 0.0f; txdInV = 0.0f; tydInV = 0.0f; bxdInV = 0.0f; bydInV = 0.5f;
1445 12 break;
1446 2 case ChromaLocation_e::AVS_CHROMA_LEFT: // left, mpeg2
1447 2 xdInU = 0.0f; ydInU = 0.5f; txdInU = 0.0f; tydInU = 0.25f; bxdInU = 0.0f; bydInU = 0.75f;
1448 2 xdInV = 0.0f; ydInV = 0.5f; txdInV = 0.0f; tydInV = 0.25f; bxdInV = 0.0f; bydInV = 0.75f;
1449 2 break;
1450 1 case ChromaLocation_e::AVS_CHROMA_BOTTOM_LEFT:
1451 1 xdInU = 0.0f; ydInU = 1.0f; txdInU = 0.0f; tydInU = 0.5f; bxdInU = 0.0f; bydInU = 1.0f;
1452 1 xdInV = 0.0f; ydInV = 1.0f; txdInV = 0.0f; tydInV = 0.5f; bxdInV = 0.0f; bydInV = 1.0f;
1453 1 break;
1454 default:
1455 env->ThrowError("Convert: not supported ChromaPlacement for 4:2:0 input.");
1456 }
1457 }
1458
3/4
✓ Branch 42 → 43 taken 10 times.
✗ Branch 42 → 572 not taken.
✓ Branch 43 → 44 taken 2 times.
✓ Branch 43 → 49 taken 8 times.
10 else if (vi.Is422()) {
1459
1/3
✗ Branch 44 → 45 not taken.
✓ Branch 44 → 46 taken 2 times.
✗ Branch 44 → 47 not taken.
2 switch (ChromaLocation_In) {
1460 case ChromaLocation_e::AVS_CHROMA_CENTER: // center
1461 xdInU = 0.5f, ydInU = 0.0f; txdInU = 0.5f; tydInU = 0.0f; bxdInU = 0.5f; bydInU = 0.0f;
1462 xdInV = 0.5f, ydInV = 0.0f; txdInV = 0.5f; tydInV = 0.0f; bxdInV = 0.5f; bydInV = 0.0f;
1463 break;
1464 2 case ChromaLocation_e::AVS_CHROMA_TOP_LEFT: // treated as left
1465 case ChromaLocation_e::AVS_CHROMA_LEFT: // left, mpeg2
1466 case ChromaLocation_e::AVS_CHROMA_BOTTOM_LEFT: // treated as left
1467 2 xdInU = 0.0f; ydInU = 0.0f; txdInU = 0.0f; tydInU = 0.0f; bxdInU = 0.0f; bydInU = 0.0f;
1468 2 xdInV = 0.0f; ydInV = 0.0f; txdInV = 0.0f; tydInV = 0.0f; bxdInV = 0.0f; bydInV = 0.0f;
1469 2 break;
1470 default:
1471 env->ThrowError("Convert: not supported ChromaPlacement for 4:2:2 input.");
1472 }
1473 }
1474
2/4
✓ Branch 49 → 50 taken 8 times.
✗ Branch 49 → 572 not taken.
✗ Branch 50 → 51 not taken.
✓ Branch 50 → 56 taken 8 times.
8 else if (vi.IsYV411()) {
1475 if (ChromaLocation_In >= 0
1476 && ChromaLocation_In != ChromaLocation_e::AVS_CHROMA_TOP_LEFT
1477 && ChromaLocation_In != ChromaLocation_e::AVS_CHROMA_LEFT
1478 && ChromaLocation_In != ChromaLocation_e::AVS_CHROMA_BOTTOM_LEFT
1479 )
1480 {
1481 // if given, only the 'left'-ish versions are accepted, this is how it is treated
1482 env->ThrowError("Convert: not supported ChromaPlacement for 4:1:1 input. Only 'left'-style is allowed if given.");
1483 }
1484 }
1485
1/2
✗ Branch 56 → 57 not taken.
✓ Branch 56 → 58 taken 8 times.
8 else if (ChromaLocation_In >= 0)
1486 env->ThrowError("Convert: Input ChromaPlacement is invalid for this format.");
1487
1488
1/2
✓ Branch 58 → 59 taken 29 times.
✗ Branch 58 → 572 not taken.
29 const int xsIn = 1 << vi.GetPlaneWidthSubsampling(PLANAR_U);
1489
1/2
✓ Branch 59 → 60 taken 29 times.
✗ Branch 59 → 572 not taken.
29 const int ysIn = 1 << vi.GetPlaneHeightSubsampling(PLANAR_U);
1490
1491 // change vi to the output format
1492 29 vi.pixel_type = dst_space;
1493
1494
2/4
✓ Branch 60 → 61 taken 29 times.
✗ Branch 60 → 572 not taken.
✗ Branch 61 → 62 not taken.
✓ Branch 61 → 64 taken 29 times.
29 if (vi.ComponentSize() != pixelsize)
1495 env->ThrowError("Convert: Conversion from %d to %d-byte format not supported.", pixelsize, vi.ComponentSize());
1496
1497 // Describe output pixel positioning
1498 29 float xdOutU = 0.0f, txdOutU = 0.0f, bxdOutU = 0.0f;
1499 29 float ydOutU = 0.0f, tydOutU = 0.0f, bydOutU = 0.0f;
1500 29 float xdOutV = 0.0f, txdOutV = 0.0f, bxdOutV = 0.0f;
1501 29 float ydOutV = 0.0f, tydOutV = 0.0f, bydOutV = 0.0f;
1502
1503
2/2
✓ Branch 65 → 66 taken 9 times.
✓ Branch 65 → 76 taken 20 times.
29 if (Is420(vi.pixel_type)) {
1504
4/8
✓ Branch 66 → 67 taken 1 time.
✗ Branch 66 → 68 not taken.
✓ Branch 66 → 69 taken 1 time.
✗ Branch 66 → 70 not taken.
✓ Branch 66 → 71 taken 4 times.
✓ Branch 66 → 72 taken 3 times.
✗ Branch 66 → 73 not taken.
✗ Branch 66 → 74 not taken.
9 switch (ChromaLocation_Out) {
1505 1 case ChromaLocation_e::AVS_CHROMA_DV:
1506 1 xdOutU = 0.0f; ydOutU = 1.0f; txdOutU = 0.0f; tydOutU = 1.0f; bxdOutU = 0.0f; bydOutU = 1.0f; // Cb
1507 1 xdOutV = 0.0f; ydOutV = 0.0f; txdOutV = 0.0f; tydOutV = 0.0f; bxdOutV = 0.0f; bydOutV = 0.0f; // Cr
1508 1 break;
1509 case ChromaLocation_e::AVS_CHROMA_TOP:
1510 xdOutU = 0.5f, ydOutU = 0.0f; txdOutU = 0.5f; tydOutU = 0.0f; bxdOutU = 0.5f; bydOutU = 0.5f;
1511 xdOutV = 0.5f, ydOutV = 0.0f; txdOutV = 0.5f; tydOutV = 0.0f; bxdOutV = 0.5f; bydOutV = 0.5f;
1512 break;
1513 1 case ChromaLocation_e::AVS_CHROMA_CENTER: // mpeg1, center
1514 1 xdOutU = 0.5f, ydOutU = 0.5f; txdOutU = 0.5f; tydOutU = 0.25f; bxdOutU = 0.5f; bydOutU = 0.75f;
1515 1 xdOutV = 0.5f, ydOutV = 0.5f; txdOutV = 0.5f; tydOutV = 0.25f; bxdOutV = 0.5f; bydOutV = 0.75f;
1516 1 break;
1517 case ChromaLocation_e::AVS_CHROMA_BOTTOM:
1518 xdOutU = 0.5f, ydOutU = 1.0f; txdOutU = 0.5f; tydOutU = 0.5f; bxdOutU = 0.5f; bydOutU = 1.0f;
1519 xdOutV = 0.5f, ydOutV = 1.0f; txdOutV = 0.5f; tydOutV = 0.5f; bxdOutV = 0.5f; bydOutV = 1.0f;
1520 break;
1521 4 case ChromaLocation_e::AVS_CHROMA_TOP_LEFT:
1522 4 xdOutU = 0.0f; ydOutU = 0.0f; txdOutU = 0.0f; tydOutU = 0.0f; bxdOutU = 0.0f; bydOutU = 0.5f;
1523 4 xdOutV = 0.0f; ydOutV = 0.0f; txdOutV = 0.0f; tydOutV = 0.0f; bxdOutV = 0.0f; bydOutV = 0.5f;
1524 4 break;
1525 3 case ChromaLocation_e::AVS_CHROMA_LEFT: // left, mpeg2
1526 3 xdOutU = 0.0f; ydOutU = 0.5f; txdOutU = 0.0f; tydOutU = 0.25f; bxdOutU = 0.0f; bydOutU = 0.75f;
1527 3 xdOutV = 0.0f; ydOutV = 0.5f; txdOutV = 0.0f; tydOutV = 0.25f; bxdOutV = 0.0f; bydOutV = 0.75f;
1528 3 break;
1529 case ChromaLocation_e::AVS_CHROMA_BOTTOM_LEFT:
1530 xdOutU = 0.0f; ydOutU = 1.0f; txdOutU = 0.0f; tydOutU = 0.5f; bxdOutU = 0.0f; bydOutU = 1.0f;
1531 xdOutV = 0.0f; ydOutV = 1.0f; txdOutV = 0.0f; tydOutV = 0.5f; bxdOutV = 0.0f; bydOutV = 1.0f;
1532 break;
1533 default:
1534 env->ThrowError("Convert: not supported ChromaPlacement for 4:2:0 output.");
1535 }
1536 }
1537
3/4
✓ Branch 76 → 77 taken 20 times.
✗ Branch 76 → 572 not taken.
✓ Branch 77 → 78 taken 2 times.
✓ Branch 77 → 83 taken 18 times.
20 else if (vi.Is422()) {
1538
1/3
✓ Branch 78 → 79 taken 2 times.
✗ Branch 78 → 80 not taken.
✗ Branch 78 → 81 not taken.
2 switch (ChromaLocation_Out) {
1539 2 case ChromaLocation_e::AVS_CHROMA_CENTER: // mpeg1, center
1540 2 xdOutU = 0.5f, ydOutU = 0.0f; txdOutU = 0.5f; tydOutU = 0.0f; bxdOutU = 0.5f; bydOutU = 0.0f;
1541 2 xdOutV = 0.5f, ydOutV = 0.0f; txdOutV = 0.5f; tydOutV = 0.0f; bxdOutV = 0.5f; bydOutV = 0.0f;
1542 2 break;
1543 case ChromaLocation_e::AVS_CHROMA_TOP_LEFT: // treated as left
1544 case ChromaLocation_e::AVS_CHROMA_LEFT: // left, mpeg2
1545 case ChromaLocation_e::AVS_CHROMA_BOTTOM_LEFT: // treated as left
1546 xdOutU = 0.0f; ydOutU = 0.0f; txdOutU = 0.0f; tydOutU = 0.0f; bxdOutU = 0.0f; bydOutU = 0.0f;
1547 xdOutV = 0.0f; ydOutV = 0.0f; txdOutV = 0.0f; tydOutV = 0.0f; bxdOutV = 0.0f; bydOutV = 0.0f;
1548 break;
1549 default:
1550 env->ThrowError("Convert: not supported ChromaPlacement for 4:2:2 output.");
1551 }
1552 }
1553
1/2
✗ Branch 83 → 84 not taken.
✓ Branch 83 → 85 taken 18 times.
18 else if (ChromaLocation_Out >= 0)
1554 env->ThrowError("Convert: Output ChromaPlacement only available with 4:2:0 or 4:2:2 output.");
1555
1556
1/2
✓ Branch 85 → 86 taken 29 times.
✗ Branch 85 → 572 not taken.
29 const int xsOut = 1 << vi.GetPlaneWidthSubsampling(PLANAR_U);
1557 29 const int xmask = xsOut - 1;
1558
1/2
✗ Branch 86 → 87 not taken.
✓ Branch 86 → 88 taken 29 times.
29 if (vi.width & xmask)
1559 env->ThrowError("Convert: Cannot convert if width isn't mod%d!", xsOut);
1560
1561
1/2
✓ Branch 88 → 89 taken 29 times.
✗ Branch 88 → 572 not taken.
29 const int ysOut = 1 << vi.GetPlaneHeightSubsampling(PLANAR_U);
1562 29 const int ymask = ysOut - 1;
1563
1/2
✗ Branch 89 → 90 not taken.
✓ Branch 89 → 91 taken 29 times.
29 if (vi.height & ymask)
1564 env->ThrowError("Convert: Cannot convert if height isn't mod%d!", ysOut);
1565
1566
1/2
✓ Branch 91 → 92 taken 29 times.
✗ Branch 91 → 572 not taken.
29 int uv_width = vi.width >> vi.GetPlaneWidthSubsampling(PLANAR_U);
1567
1/2
✓ Branch 92 → 93 taken 29 times.
✗ Branch 92 → 572 not taken.
29 int uv_height = vi.height >> vi.GetPlaneHeightSubsampling(PLANAR_U);
1568
1569
5/10
✓ Branch 93 → 94 taken 29 times.
✗ Branch 93 → 349 not taken.
✓ Branch 94 → 95 taken 29 times.
✗ Branch 94 → 346 not taken.
✓ Branch 95 → 96 taken 29 times.
✗ Branch 95 → 343 not taken.
✓ Branch 96 → 97 taken 29 times.
✗ Branch 96 → 341 not taken.
✓ Branch 97 → 98 taken 29 times.
✗ Branch 97 → 341 not taken.
29 ResamplingFunction *filter = getResampler(chromaResampler.AsString("bicubic"), param1, param2, param3, true, env);
1570
1571
1/2
✓ Branch 101 → 102 taken 29 times.
✗ Branch 101 → 572 not taken.
29 bool P = !lstrcmpi(chromaResampler.AsString(""), "point");
1572
1573 136 auto ChrOffset = [P](int sIn, float dIn, int sOut, float dOut) {
1574 // (1 - sOut/sIn)/2 + (dOut-dIn)/sIn; // Gavino Jan 2011
1575
2/2
✓ Branch 2 → 3 taken 64 times.
✓ Branch 2 → 4 taken 72 times.
136 return P ? (dOut - dIn) / sIn : 0.5f + (dOut - dIn - 0.5f*sOut) / sIn;
1576 29 };
1577
1578 29 const int force = 0;
1579 29 const bool preserve_center = true;
1580 29 const char *placement_name_notused = nullptr; // n/a
1581 29 const int forced_chroma_placement = -1; // no force
1582 // chroma planes are extracted, behave like Y when resized, no chroma planes involved
1583
1584
2/2
✓ Branch 102 → 103 taken 5 times.
✓ Branch 102 → 286 taken 24 times.
29 if (interlaced) {
1585 5 uv_height /= 2;
1586
1587
4/12
✓ Branch 104 → 105 taken 5 times.
✗ Branch 104 → 350 not taken.
✓ Branch 106 → 107 taken 5 times.
✗ Branch 106 → 350 not taken.
✓ Branch 107 → 108 taken 5 times.
✗ Branch 107 → 350 not taken.
✓ Branch 108 → 109 taken 5 times.
✗ 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.
30 AVSValue tUsubSampling[4] = { ChrOffset(xsIn, txdInU, xsOut, txdOutU), ChrOffset(ysIn, tydInU, ysOut, tydOutU), AVSValue(), AVSValue() };
1588
4/12
✓ Branch 110 → 111 taken 5 times.
✗ Branch 110 → 355 not taken.
✓ Branch 112 → 113 taken 5 times.
✗ Branch 112 → 355 not taken.
✓ Branch 113 → 114 taken 5 times.
✗ Branch 113 → 355 not taken.
✓ Branch 114 → 115 taken 5 times.
✗ 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.
30 AVSValue bUsubSampling[4] = { ChrOffset(xsIn, bxdInU, xsOut, bxdOutU), ChrOffset(ysIn, bydInU, ysOut, bydOutU), AVSValue(), AVSValue() };
1589
4/12
✓ Branch 116 → 117 taken 5 times.
✗ Branch 116 → 360 not taken.
✓ Branch 118 → 119 taken 5 times.
✗ Branch 118 → 360 not taken.
✓ Branch 119 → 120 taken 5 times.
✗ Branch 119 → 360 not taken.
✓ Branch 120 → 121 taken 5 times.
✗ 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.
30 AVSValue tVsubSampling[4] = { ChrOffset(xsIn, txdInV, xsOut, txdOutV), ChrOffset(ysIn, tydInV, ysOut, tydOutV), AVSValue(), AVSValue() };
1590
4/12
✓ Branch 122 → 123 taken 5 times.
✗ Branch 122 → 365 not taken.
✓ Branch 124 → 125 taken 5 times.
✗ Branch 124 → 365 not taken.
✓ Branch 125 → 126 taken 5 times.
✗ Branch 125 → 365 not taken.
✓ Branch 126 → 127 taken 5 times.
✗ 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.
30 AVSValue bVsubSampling[4] = { ChrOffset(xsIn, bxdInV, xsOut, bxdOutV), ChrOffset(ysIn, bydInV, ysOut, bydOutV), AVSValue(), AVSValue() };
1591
1592
13/32
✓ Branch 127 → 128 taken 5 times.
✗ Branch 127 → 494 not taken.
✓ Branch 128 → 129 taken 5 times.
✗ Branch 128 → 384 not taken.
✓ Branch 129 → 130 taken 5 times.
✗ Branch 129 → 380 not taken.
✓ Branch 130 → 131 taken 5 times.
✗ Branch 130 → 376 not taken.
✓ Branch 131 → 132 taken 5 times.
✗ Branch 131 → 374 not taken.
✓ Branch 132 → 133 taken 5 times.
✗ Branch 132 → 374 not taken.
✓ Branch 133 → 134 taken 5 times.
✗ Branch 133 → 372 not taken.
✓ Branch 134 → 135 taken 5 times.
✗ Branch 134 → 372 not taken.
✓ Branch 135 → 136 taken 5 times.
✗ Branch 135 → 370 not taken.
✓ Branch 136 → 137 taken 5 times.
✗ Branch 136 → 370 not taken.
✗ Branch 140 → 141 not taken.
✓ Branch 140 → 142 taken 5 times.
✗ Branch 142 → 143 not taken.
✓ Branch 142 → 144 taken 5 times.
✗ Branch 144 → 145 not taken.
✓ Branch 144 → 146 taken 5 times.
✗ 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.
5 Usource = new SeparateFields(new AssumeParity(new SwapUVToY(child, SwapUVToY::UToY8, env), true), env); // also works for Y16/Y32
1593
13/32
✓ Branch 146 → 147 taken 5 times.
✗ Branch 146 → 494 not taken.
✓ Branch 147 → 148 taken 5 times.
✗ Branch 147 → 402 not taken.
✓ Branch 148 → 149 taken 5 times.
✗ Branch 148 → 398 not taken.
✓ Branch 149 → 150 taken 5 times.
✗ Branch 149 → 394 not taken.
✓ Branch 150 → 151 taken 5 times.
✗ Branch 150 → 392 not taken.
✓ Branch 151 → 152 taken 5 times.
✗ Branch 151 → 392 not taken.
✓ Branch 152 → 153 taken 5 times.
✗ Branch 152 → 390 not taken.
✓ Branch 153 → 154 taken 5 times.
✗ Branch 153 → 390 not taken.
✓ Branch 154 → 155 taken 5 times.
✗ Branch 154 → 388 not taken.
✓ Branch 155 → 156 taken 5 times.
✗ Branch 155 → 388 not taken.
✗ Branch 159 → 160 not taken.
✓ Branch 159 → 161 taken 5 times.
✗ Branch 161 → 162 not taken.
✓ Branch 161 → 163 taken 5 times.
✗ Branch 163 → 164 not taken.
✓ Branch 163 → 165 taken 5 times.
✗ 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.
5 Vsource = new SeparateFields(new AssumeParity(new SwapUVToY(child, SwapUVToY::VToY8, env), true), env); // also works for Y16/Y32
1594
1595
1/2
✓ Branch 167 → 168 taken 5 times.
✗ Branch 167 → 406 not taken.
10 std::vector<PClip> tbUsource(2); // Interleave() will take ownership of these
1596
1/2
✓ Branch 171 → 172 taken 5 times.
✗ Branch 171 → 409 not taken.
5 std::vector<PClip> tbVsource(2);
1597
1598
7/16
✓ Branch 173 → 174 taken 5 times.
✗ Branch 173 → 422 not taken.
✓ Branch 174 → 175 taken 5 times.
✗ Branch 174 → 418 not taken.
✓ Branch 175 → 176 taken 5 times.
✗ Branch 175 → 416 not taken.
✓ Branch 176 → 177 taken 5 times.
✗ Branch 176 → 416 not taken.
✓ Branch 177 → 178 taken 5 times.
✗ Branch 177 → 414 not taken.
✓ Branch 179 → 180 taken 5 times.
✗ Branch 179 → 412 not taken.
✗ Branch 183 → 184 not taken.
✓ Branch 183 → 185 taken 5 times.
✗ Branch 419 → 420 not taken.
✗ Branch 419 → 421 not taken.
5 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);
1599
7/16
✓ Branch 185 → 186 taken 5 times.
✗ Branch 185 → 434 not taken.
✓ Branch 186 → 187 taken 5 times.
✗ Branch 186 → 430 not taken.
✓ Branch 187 → 188 taken 5 times.
✗ Branch 187 → 428 not taken.
✓ Branch 188 → 189 taken 5 times.
✗ Branch 188 → 428 not taken.
✓ Branch 189 → 190 taken 5 times.
✗ Branch 189 → 426 not taken.
✓ Branch 191 → 192 taken 5 times.
✗ Branch 191 → 424 not taken.
✗ Branch 195 → 196 not taken.
✓ Branch 195 → 197 taken 5 times.
✗ Branch 431 → 432 not taken.
✗ Branch 431 → 433 not taken.
5 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);
1600
7/16
✓ Branch 197 → 198 taken 5 times.
✗ Branch 197 → 446 not taken.
✓ Branch 198 → 199 taken 5 times.
✗ Branch 198 → 442 not taken.
✓ Branch 199 → 200 taken 5 times.
✗ Branch 199 → 440 not taken.
✓ Branch 200 → 201 taken 5 times.
✗ Branch 200 → 440 not taken.
✓ Branch 201 → 202 taken 5 times.
✗ Branch 201 → 438 not taken.
✓ Branch 203 → 204 taken 5 times.
✗ Branch 203 → 436 not taken.
✗ Branch 207 → 208 not taken.
✓ Branch 207 → 209 taken 5 times.
✗ Branch 443 → 444 not taken.
✗ Branch 443 → 445 not taken.
5 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);
1601
7/16
✓ Branch 209 → 210 taken 5 times.
✗ Branch 209 → 458 not taken.
✓ Branch 210 → 211 taken 5 times.
✗ Branch 210 → 454 not taken.
✓ Branch 211 → 212 taken 5 times.
✗ Branch 211 → 452 not taken.
✓ Branch 212 → 213 taken 5 times.
✗ Branch 212 → 452 not taken.
✓ Branch 213 → 214 taken 5 times.
✗ Branch 213 → 450 not taken.
✓ Branch 215 → 216 taken 5 times.
✗ Branch 215 → 448 not taken.
✗ Branch 219 → 220 not taken.
✓ Branch 219 → 221 taken 5 times.
✗ Branch 455 → 456 not taken.
✗ Branch 455 → 457 not taken.
5 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);
1602
1603
12/30
✓ Branch 221 → 222 taken 5 times.
✗ Branch 221 → 490 not taken.
✓ Branch 222 → 223 taken 5 times.
✗ Branch 222 → 471 not taken.
✓ Branch 223 → 224 taken 5 times.
✗ Branch 223 → 467 not taken.
✓ Branch 226 → 227 taken 5 times.
✗ Branch 226 → 464 not taken.
✓ Branch 227 → 228 taken 5 times.
✗ Branch 227 → 464 not taken.
✓ Branch 228 → 229 taken 5 times.
✗ Branch 228 → 462 not taken.
✓ Branch 229 → 230 taken 5 times.
✗ Branch 229 → 462 not taken.
✓ Branch 230 → 231 taken 5 times.
✗ Branch 230 → 460 not taken.
✓ Branch 231 → 232 taken 5 times.
✗ Branch 231 → 460 not taken.
✗ Branch 234 → 235 not taken.
✓ Branch 234 → 236 taken 5 times.
✗ Branch 236 → 237 not taken.
✓ Branch 236 → 238 taken 5 times.
✗ Branch 238 → 239 not taken.
✓ Branch 238 → 240 taken 5 times.
✗ 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.
10 Usource = new SelectEvery(new DoubleWeaveFields(new Interleave(std::move(tbUsource), env)), 2, 0, env);
1604
12/30
✓ Branch 240 → 241 taken 5 times.
✗ Branch 240 → 490 not taken.
✓ Branch 241 → 242 taken 5 times.
✗ Branch 241 → 486 not taken.
✓ Branch 242 → 243 taken 5 times.
✗ Branch 242 → 482 not taken.
✓ Branch 245 → 246 taken 5 times.
✗ Branch 245 → 479 not taken.
✓ Branch 246 → 247 taken 5 times.
✗ Branch 246 → 479 not taken.
✓ Branch 247 → 248 taken 5 times.
✗ Branch 247 → 477 not taken.
✓ Branch 248 → 249 taken 5 times.
✗ Branch 248 → 477 not taken.
✓ Branch 249 → 250 taken 5 times.
✗ Branch 249 → 475 not taken.
✓ Branch 250 → 251 taken 5 times.
✗ Branch 250 → 475 not taken.
✗ Branch 253 → 254 not taken.
✓ Branch 253 → 255 taken 5 times.
✗ Branch 255 → 256 not taken.
✓ Branch 255 → 257 taken 5 times.
✗ Branch 257 → 258 not taken.
✓ Branch 257 → 259 taken 5 times.
✗ 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.
10 Vsource = new SelectEvery(new DoubleWeaveFields(new Interleave(std::move(tbVsource), env)), 2, 0, env);
1605
8/16
✓ Branch 262 → 263 taken 20 times.
✓ Branch 262 → 266 taken 5 times.
✓ Branch 268 → 269 taken 20 times.
✓ Branch 268 → 272 taken 5 times.
✓ Branch 274 → 275 taken 20 times.
✓ Branch 274 → 278 taken 5 times.
✓ Branch 280 → 281 taken 20 times.
✓ Branch 280 → 284 taken 5 times.
✗ 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.
105 }
1606 else {
1607
4/12
✓ Branch 287 → 288 taken 24 times.
✗ Branch 287 → 523 not taken.
✓ Branch 289 → 290 taken 24 times.
✗ Branch 289 → 523 not taken.
✓ Branch 290 → 291 taken 24 times.
✗ Branch 290 → 523 not taken.
✓ Branch 291 → 292 taken 24 times.
✗ Branch 291 → 523 not taken.
✗ Branch 523 → 524 not taken.
✗ Branch 523 → 527 not taken.
✗ Branch 525 → 526 not taken.
✗ Branch 525 → 527 not taken.
144 AVSValue UsubSampling[4] = { ChrOffset(xsIn, xdInU, xsOut, xdOutU), ChrOffset(ysIn, ydInU, ysOut, ydOutU), AVSValue(), AVSValue() };
1608
4/12
✓ Branch 293 → 294 taken 24 times.
✗ Branch 293 → 528 not taken.
✓ Branch 295 → 296 taken 24 times.
✗ Branch 295 → 528 not taken.
✓ Branch 296 → 297 taken 24 times.
✗ Branch 296 → 528 not taken.
✓ Branch 297 → 298 taken 24 times.
✗ Branch 297 → 528 not taken.
✗ Branch 528 → 529 not taken.
✗ Branch 528 → 532 not taken.
✗ Branch 530 → 531 not taken.
✗ Branch 530 → 532 not taken.
120 AVSValue VsubSampling[4] = { ChrOffset(xsIn, xdInV, xsOut, xdOutV), ChrOffset(ysIn, ydInV, ysOut, ydOutV), AVSValue(), AVSValue() };
1609
1610
7/16
✓ Branch 298 → 299 taken 24 times.
✗ Branch 298 → 543 not taken.
✓ Branch 299 → 300 taken 24 times.
✗ Branch 299 → 539 not taken.
✓ Branch 300 → 301 taken 24 times.
✗ Branch 300 → 537 not taken.
✓ Branch 301 → 302 taken 24 times.
✗ Branch 301 → 537 not taken.
✓ Branch 302 → 303 taken 24 times.
✗ Branch 302 → 535 not taken.
✓ Branch 303 → 304 taken 24 times.
✗ Branch 303 → 533 not taken.
✗ Branch 307 → 308 not taken.
✓ Branch 307 → 309 taken 24 times.
✗ Branch 540 → 541 not taken.
✗ Branch 540 → 542 not taken.
24 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);
1611
7/16
✓ Branch 309 → 310 taken 24 times.
✗ Branch 309 → 555 not taken.
✓ Branch 310 → 311 taken 24 times.
✗ Branch 310 → 551 not taken.
✓ Branch 311 → 312 taken 24 times.
✗ Branch 311 → 549 not taken.
✓ Branch 312 → 313 taken 24 times.
✗ Branch 312 → 549 not taken.
✓ Branch 313 → 314 taken 24 times.
✗ Branch 313 → 547 not taken.
✓ Branch 314 → 315 taken 24 times.
✗ Branch 314 → 545 not taken.
✗ Branch 318 → 319 not taken.
✓ Branch 318 → 320 taken 24 times.
✗ Branch 552 → 553 not taken.
✗ Branch 552 → 554 not taken.
24 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);
1612
4/8
✓ Branch 321 → 322 taken 96 times.
✓ Branch 321 → 325 taken 24 times.
✓ Branch 327 → 328 taken 96 times.
✓ Branch 327 → 331 taken 24 times.
✗ Branch 558 → 559 not taken.
✗ Branch 558 → 562 not taken.
✗ Branch 565 → 566 not taken.
✗ Branch 565 → 569 not taken.
240 }
1613
1/2
✓ Branch 333 → 334 taken 29 times.
✗ Branch 333 → 335 not taken.
29 delete filter;
1614 }
1615
1616 35 PVideoFrame __stdcall ConvertToPlanarGeneric::GetFrame(int n, IScriptEnvironment* env) {
1617
1/2
✓ Branch 3 → 4 taken 35 times.
✗ Branch 3 → 135 not taken.
35 PVideoFrame src = child->GetFrame(n, env);
1618
1619
1620
3/4
✓ Branch 4 → 5 taken 35 times.
✗ Branch 4 → 133 not taken.
✓ Branch 5 → 6 taken 4 times.
✓ Branch 5 → 20 taken 31 times.
35 if (vi.IsY()) {
1621 // Abuse Subframe to snatch the Y plane
1622
5/12
✓ Branch 7 → 8 taken 4 times.
✗ Branch 7 → 133 not taken.
✓ Branch 9 → 10 taken 4 times.
✗ Branch 9 → 133 not taken.
✓ Branch 11 → 12 taken 4 times.
✗ Branch 11 → 133 not taken.
✓ Branch 12 → 13 taken 4 times.
✗ Branch 12 → 121 not taken.
✓ Branch 13 → 14 taken 4 times.
✗ Branch 13 → 119 not taken.
✗ Branch 122 → 123 not taken.
✗ Branch 122 → 124 not taken.
4 PVideoFrame dst = env->Subframe(src, 0, src->GetPitch(PLANAR_Y), src->GetRowSize(PLANAR_Y), src->GetHeight(PLANAR_Y));
1623
1/2
✓ Branch 15 → 16 taken 4 times.
✗ Branch 15 → 122 not taken.
4 auto props = env->getFramePropsRW(dst);
1624 // ChromaLocation_Out is <0 : erased
1625
1/2
✓ Branch 16 → 17 taken 4 times.
✗ Branch 16 → 122 not taken.
4 update_ChromaLocation(props, ChromaLocation_Out, env);
1626
1/2
✗ Branch 17 → 18 not taken.
✓ Branch 17 → 19 taken 4 times.
4 return dst;
1627 }
1628
1629
1/2
✓ Branch 20 → 21 taken 31 times.
✗ Branch 20 → 133 not taken.
31 PVideoFrame dst = env->NewVideoFrameP(vi, &src);
1630
7/14
✓ Branch 22 → 23 taken 31 times.
✗ Branch 22 → 131 not taken.
✓ Branch 24 → 25 taken 31 times.
✗ Branch 24 → 131 not taken.
✓ Branch 26 → 27 taken 31 times.
✗ Branch 26 → 131 not taken.
✓ Branch 28 → 29 taken 31 times.
✗ Branch 28 → 131 not taken.
✓ Branch 30 → 31 taken 31 times.
✗ Branch 30 → 131 not taken.
✓ Branch 32 → 33 taken 31 times.
✗ Branch 32 → 131 not taken.
✓ Branch 33 → 34 taken 31 times.
✗ Branch 33 → 131 not taken.
31 env->BitBlt(dst->GetWritePtr(PLANAR_Y), dst->GetPitch(PLANAR_Y), src->GetReadPtr(PLANAR_Y), src->GetPitch(PLANAR_Y),
1631 src->GetRowSize(PLANAR_Y_ALIGNED), src->GetHeight(PLANAR_Y));
1632
1633
1/2
✓ Branch 34 → 35 taken 31 times.
✗ Branch 34 → 131 not taken.
31 auto props = env->getFramePropsRW(dst);
1634
1/2
✓ Branch 35 → 36 taken 31 times.
✗ Branch 35 → 131 not taken.
31 update_ChromaLocation(props, ChromaLocation_Out, env);
1635
1636 // alpha. if pitch is zero -> no alpha channel
1637
1/2
✓ Branch 37 → 38 taken 31 times.
✗ Branch 37 → 131 not taken.
31 const int rowsizeA = dst->GetRowSize(PLANAR_A);
1638
1/2
✓ Branch 39 → 40 taken 31 times.
✗ Branch 39 → 131 not taken.
31 const int dst_pitchA = dst->GetPitch(PLANAR_A);
1639
3/4
✓ Branch 40 → 41 taken 3 times.
✓ Branch 40 → 44 taken 28 times.
✓ Branch 42 → 43 taken 3 times.
✗ Branch 42 → 131 not taken.
31 BYTE* dstp_a = (dst_pitchA == 0) ? nullptr : dst->GetWritePtr(PLANAR_A);
1640
1/2
✓ Branch 46 → 47 taken 31 times.
✗ Branch 46 → 131 not taken.
31 const int heightA = dst->GetHeight(PLANAR_A);
1641
1642
2/2
✓ Branch 47 → 48 taken 3 times.
✓ Branch 47 → 70 taken 28 times.
31 if (dst_pitchA != 0)
1643 {
1644
3/4
✓ Branch 49 → 50 taken 3 times.
✗ Branch 49 → 131 not taken.
✓ Branch 50 → 51 taken 2 times.
✓ Branch 50 → 60 taken 1 time.
3 if (src->GetPitch(PLANAR_A) != 0)
1645
5/10
✓ Branch 52 → 53 taken 2 times.
✗ Branch 52 → 131 not taken.
✓ Branch 54 → 55 taken 2 times.
✗ Branch 54 → 131 not taken.
✓ Branch 56 → 57 taken 2 times.
✗ Branch 56 → 131 not taken.
✓ Branch 58 → 59 taken 2 times.
✗ Branch 58 → 131 not taken.
✓ Branch 59 → 69 taken 2 times.
✗ Branch 59 → 131 not taken.
2 env->BitBlt(dstp_a, dst_pitchA, src->GetReadPtr(PLANAR_A), src->GetPitch(PLANAR_A),
1646 src->GetRowSize(PLANAR_A_ALIGNED), src->GetHeight(PLANAR_A));
1647 else {
1648 // e.g. ConvertToYUVA() case from Alpha-less formats
1649
2/6
✓ Branch 60 → 61 taken 1 time.
✗ Branch 60 → 131 not taken.
✓ Branch 61 → 62 taken 1 time.
✗ Branch 61 → 64 not taken.
✗ Branch 61 → 67 not taken.
✗ Branch 61 → 69 not taken.
1 switch (vi.ComponentSize())
1650 {
1651 1 case 1:
1652
1/2
✓ Branch 62 → 63 taken 1 time.
✗ Branch 62 → 131 not taken.
1 fill_plane<BYTE>(dstp_a, heightA, rowsizeA, dst_pitchA, 255);
1653 1 break;
1654 case 2:
1655 fill_plane<uint16_t>(dstp_a, heightA, rowsizeA, dst_pitchA, (1 << vi.BitsPerComponent()) - 1);
1656 break;
1657 case 4:
1658 fill_plane<float>(dstp_a, heightA, rowsizeA, dst_pitchA, 1.0f);
1659 break;
1660 }
1661 }
1662 }
1663
1664
1/2
✓ Branch 71 → 72 taken 31 times.
✗ Branch 71 → 131 not taken.
31 BYTE* dstp_u = dst->GetWritePtr(PLANAR_U);
1665
1/2
✓ Branch 73 → 74 taken 31 times.
✗ Branch 73 → 131 not taken.
31 BYTE* dstp_v = dst->GetWritePtr(PLANAR_V);
1666
1/2
✓ Branch 75 → 76 taken 31 times.
✗ Branch 75 → 131 not taken.
31 const int height = dst->GetHeight(PLANAR_U);
1667
1/2
✓ Branch 77 → 78 taken 31 times.
✗ Branch 77 → 131 not taken.
31 const int rowsizeUV = dst->GetRowSize(PLANAR_U);
1668
1/2
✓ Branch 79 → 80 taken 31 times.
✗ Branch 79 → 131 not taken.
31 const int dst_pitch = dst->GetPitch(PLANAR_U);
1669
1670
2/2
✓ Branch 80 → 81 taken 3 times.
✓ Branch 80 → 91 taken 28 times.
31 if (Yinput) {
1671
4/6
✓ Branch 81 → 82 taken 3 times.
✗ Branch 81 → 131 not taken.
✓ Branch 82 → 83 taken 1 time.
✓ Branch 82 → 85 taken 1 time.
✓ Branch 82 → 88 taken 1 time.
✗ Branch 82 → 90 not taken.
3 switch (vi.ComponentSize())
1672 {
1673 1 case 1:
1674
1/2
✓ Branch 83 → 84 taken 1 time.
✗ Branch 83 → 131 not taken.
1 fill_chroma<BYTE>(dstp_u, dstp_v, height, rowsizeUV, dst_pitch, 0x80);
1675 1 break;
1676 1 case 2:
1677
2/4
✓ Branch 85 → 86 taken 1 time.
✗ Branch 85 → 131 not taken.
✓ Branch 86 → 87 taken 1 time.
✗ Branch 86 → 131 not taken.
1 fill_chroma<uint16_t>(dstp_u, dstp_v, height, rowsizeUV, dst_pitch, 1 << (vi.BitsPerComponent() - 1));
1678 1 break;
1679 1 case 4:
1680 1 const float half = 0.0f;
1681
1/2
✓ Branch 88 → 89 taken 1 time.
✗ Branch 88 → 131 not taken.
1 fill_chroma<float>(dstp_u, dstp_v, height, rowsizeUV, dst_pitch, half);
1682 1 break;
1683 }
1684 } else {
1685
2/4
✓ Branch 92 → 93 taken 28 times.
✗ Branch 92 → 127 not taken.
✓ Branch 93 → 94 taken 28 times.
✗ Branch 93 → 125 not taken.
28 src = Usource->GetFrame(n, env);
1686
4/8
✓ Branch 96 → 97 taken 28 times.
✗ Branch 96 → 131 not taken.
✓ Branch 98 → 99 taken 28 times.
✗ Branch 98 → 131 not taken.
✓ Branch 100 → 101 taken 28 times.
✗ Branch 100 → 131 not taken.
✓ Branch 101 → 102 taken 28 times.
✗ Branch 101 → 131 not taken.
28 env->BitBlt(dstp_u, dst_pitch, src->GetReadPtr(PLANAR_Y), src->GetPitch(PLANAR_Y), src->GetRowSize(PLANAR_Y_ALIGNED), height);
1687
2/4
✓ Branch 103 → 104 taken 28 times.
✗ Branch 103 → 130 not taken.
✓ Branch 104 → 105 taken 28 times.
✗ Branch 104 → 128 not taken.
28 src = Vsource->GetFrame(n, env);
1688
4/8
✓ Branch 107 → 108 taken 28 times.
✗ Branch 107 → 131 not taken.
✓ Branch 109 → 110 taken 28 times.
✗ Branch 109 → 131 not taken.
✓ Branch 111 → 112 taken 28 times.
✗ Branch 111 → 131 not taken.
✓ Branch 112 → 113 taken 28 times.
✗ Branch 112 → 131 not taken.
28 env->BitBlt(dstp_v, dst_pitch, src->GetReadPtr(PLANAR_Y), src->GetPitch(PLANAR_Y), src->GetRowSize(PLANAR_Y_ALIGNED), height);
1689 }
1690
1691
1/2
✓ Branch 113 → 114 taken 31 times.
✗ Branch 113 → 131 not taken.
31 return dst;
1692 35 }
1693 /* 0 1 2 3 4 5 6 7 8 9
1694 { "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
1695 { "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 },
1696 { "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 },
1697 0 1 2 3 4 5 6 7 8 9 10
1698 { "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 },
1699 { "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 },
1700 { "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 },
1701 { "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 },
1702 0 1 2 3
1703 { "ConvertToY", BUILTIN_FUNC_PREFIX, "c[matrix]s[bits]i[quality]b", ConvertToPlanarGeneric::CreateConvertToY, (void*)1 }, // user_data == 1 -> any bit depth sources
1704
1705 */
1706 4 AVSValue ConvertToPlanarGeneric::Create(AVSValue& args, const char* filter, bool strip_alpha_legacy_8bit, bool to_yuva, IScriptEnvironment* env) {
1707 4 bool converted = false;
1708
1709
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();
1710
1/2
✓ Branch 5 → 6 taken 4 times.
✗ Branch 5 → 636 not taken.
4 VideoInfo vi = clip->GetVideoInfo();
1711
1712 4 const bool to_y = strcmp(filter, "ConvertToY") == 0;
1713 4 const bool to_420 = strcmp(filter, "ConvertToYUV420") == 0;
1714 4 const bool to_422 = strcmp(filter, "ConvertToYUV422") == 0;
1715 4 const bool to_411 = strcmp(filter, "ConvertToYV411") == 0;
1716 4 const bool to_444 = strcmp(filter, "ConvertToYUV444") == 0;
1717
1718
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()) {
1719 // use to_y: no need YV16 extra planes when our target is Y only
1720 clip = new ConvertYUY2ToYV16_or_Y(clip, to_y, env);
1721 vi = clip->GetVideoInfo();
1722 }
1723
1724
1/2
✓ Branch 18 → 19 taken 4 times.
✗ Branch 18 → 636 not taken.
4 AVSValue bits_arg;
1725
1/2
✓ Branch 19 → 20 taken 4 times.
✗ Branch 19 → 634 not taken.
4 AVSValue quality_arg;
1726
1/2
✓ Branch 20 → 21 taken 4 times.
✗ Branch 20 → 632 not taken.
4 AVSValue matrix_arg;
1727
2/2
✓ Branch 21 → 22 taken 3 times.
✓ Branch 21 → 28 taken 1 time.
4 if (to_y) {
1728
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];
1729
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];
1730
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];
1731 }
1732
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) {
1733
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];
1734
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];
1735
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];
1736 }
1737 else {
1738 matrix_arg = args[2];
1739 bits_arg = args[8];
1740 quality_arg = args[9];
1741 }
1742
1743
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());
1744
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
1745
1746
1/2
✓ Branch 46 → 47 taken 4 times.
✗ Branch 46 → 630 not taken.
4 int bits_per_pixel = vi.BitsPerComponent();
1747
1748 /*
1749 if (target_bits_per_pixel != bits_per_pixel && !vi.IsRGB()) {
1750 env->ThrowError("%s: on-thy-fly bit-depth conversion only supported from RGB formats.", filter);
1751 }
1752 */
1753 4 bool needConvertFinalBitdepth = false;
1754
1755
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()) {
1756 needConvertFinalBitdepth = true;
1757 }
1758
1759
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
1760 const bool keep_packedrgb_alpha = to_yuva && (vi.IsRGB32() || vi.IsRGB64());
1761 // 3.7.6: We convert ALL packed RGB formats to planar RGB!
1762 // The only case where a RGB32->YV24 is a bit slower is: SSE2-only but no SSSE3 capable CPU.
1763 // All other cases are quicker, when converting to planar first and then to YUV444, than doing packed RGB->YUV444 in one step.
1764 // On AVX2 capable CPUs using the PlanarRGB-YUV engine, we are +80% quicker
1765 // doing RGB32->PlanarRGB->YUV444 than doing RGB32->YUV444 in the old SSSE3 step.
1766 if (!vi.IsPlanar()) {
1767 // we convert to intermediate PlanarRGB, RGB48/64->YUV444 is slow C, planarRGB is fast
1768 // Default ConvertToPlanarRGB call
1769 AVSValue new_args[10] = { clip, AVSValue(), AVSValue(), AVSValue(), AVSValue(), AVSValue(), AVSValue(), AVSValue(), AVSValue(), AVSValue() };
1770 // clip, matrix, interlaced, chromainplacement, chromaresample, param1, param2, param3, bits, quality
1771 // convert to planar RGBA only if RGB64 and target is YUVA (need to keep alpha)
1772 const intptr_t planar_rgb_type = keep_packedrgb_alpha ? -2 : -1;
1773 clip = CreateConvertToRGB(AVSValue(new_args, 10), (void *)planar_rgb_type, env).AsClip();
1774 vi = clip->GetVideoInfo();
1775 }
1776
1777 if (target_bits_per_pixel != vi.BitsPerComponent()) {
1778 needConvertFinalBitdepth = true;
1779 }
1780
1781 bool bitdepthConverted = false;
1782 if (needConvertFinalBitdepth) {
1783 // Optional bit-depth conversion in PackedRGBtoPlanarRGB.
1784 // int->float full/narrow range, int-int full/narrow supported
1785 clip = new ConvertRGBToYUV444(clip, matrix_arg.AsString(0) /* matrix_name */, keep_packedrgb_alpha, target_bits_per_pixel, quality, /*ref*/bitdepthConverted, to_y, env);
1786 vi = clip->GetVideoInfo();
1787 if (bitdepthConverted) {
1788 needConvertFinalBitdepth = false; // done in-process
1789 }
1790 } else {
1791 // pass -1 as finalBitdepth, signing that no bit-depth conversion required
1792 // output bitdepthConverted is n/a
1793 clip = new ConvertRGBToYUV444(clip, matrix_arg.AsString(0) /* matrix_name */, keep_packedrgb_alpha, -1 /*no bit-depth conversion*/, quality, /*ref*/bitdepthConverted, to_y, env);
1794 vi = clip->GetVideoInfo();
1795 }
1796
1797 vi = clip->GetVideoInfo();
1798 converted = true;
1799 }
1800
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())
1801 env->ThrowError("%s: Can only convert from Planar YUV.", filter);
1802
1803 // YV411 has no 8+ bits variant.
1804 // A bit depth changing YV411->YUV4xx conversion must be reversed: first convert th format keeping 8 bits,
1805 // then do the bit-depth conversion.
1806
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()) {
1807 // plain Invoke and no "new ConvertBits()": this detects and keeps source and target ranges
1808 AVSValue new_args[2] = { clip, target_bits_per_pixel };
1809 clip = env->Invoke("ConvertBits", AVSValue(new_args, 2)).AsClip();
1810 vi = clip->GetVideoInfo();
1811 needConvertFinalBitdepth = false;
1812 }
1813
1814
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.
1815
1816 4 int pixel_type = VideoInfo::CS_UNKNOWN;
1817
1/2
✓ Branch 148 → 149 taken 4 times.
✗ Branch 148 → 630 not taken.
4 AVSValue outplacement = AVSValue(); // only for ConvertToYUV420 and ConvertToYUV422
1818
1819
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;
1820
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;
1821
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;
1822
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;
1823
1824 4 int ChromaLocation_In = -1; // invalid. Chromalocation_e::AVS_CHROMALOCATION_UNUSED
1825 4 int ChromaLocation_Out = -1; // left as invalid for 444, and Y
1826
1827
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()) {
1828 // ChromaInPlacement parameter exists, (default none/-1) + input frame properties; 'left'-ish _ChromaLocation is allowed, checked later
1829 auto frame0 = clip->GetFrame(0, env);
1830 const AVSMap* props = env->getFramePropsRO(frame0);
1831 chromaloc_parse_merge_with_props(vi, args[3].AsString(nullptr), props, /* ref*/ChromaLocation_In, -1 /*default none chromaloc */, env);
1832 }
1833
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()) {
1834 // ChromaInPlacement parameter is valid + input frame properties
1835 auto frame0 = clip->GetFrame(0, env);
1836 const AVSMap* props = env->getFramePropsRO(frame0);
1837 chromaloc_parse_merge_with_props(vi, args[3].AsString(nullptr), props, /* ref*/ChromaLocation_In, ChromaLocation_e::AVS_CHROMA_LEFT /*default*/, env);
1838 }
1839
1840
1/2
✓ Branch 193 → 194 taken 4 times.
✗ Branch 193 → 628 not taken.
4 AVSValue param1;
1841
1/2
✓ Branch 194 → 195 taken 4 times.
✗ Branch 194 → 626 not taken.
4 AVSValue param2;
1842
1/2
✓ Branch 195 → 196 taken 4 times.
✗ Branch 195 → 624 not taken.
4 AVSValue param3;
1843
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) {
1844 // ChromaOutPlacement parameter is valid
1845
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);
1846
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];
1847
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];
1848
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];
1849 }
1850
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) {
1851 // No ChromaOutPlacement parameter, indexes skip back accordingly
1852 param1 = args[5];
1853 param2 = args[6];
1854 param3 = args[7];
1855 }
1856
1857 // FIXME: no-op or almost no-op shortcuts won't exist even at 420-420 conversion if YUV-YUV matrix conversion is added
1858
1859
2/2
✓ Branch 216 → 217 taken 3 times.
✓ Branch 216 → 229 taken 1 time.
4 if (to_y) {
1860
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()) {
1861 // After RGB->Y conversion or input as Y
1862 return clip;
1863 }
1864 // planar YUV original, GetFrame will return Y
1865
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)
1866 {
1867 3 case 8: pixel_type = VideoInfo::CS_Y8; break;
1868 case 10: pixel_type = VideoInfo::CS_Y10; break;
1869 case 12: pixel_type = VideoInfo::CS_Y12; break;
1870 case 14: pixel_type = VideoInfo::CS_Y14; break;
1871 case 16: pixel_type = VideoInfo::CS_Y16; break;
1872 case 32: pixel_type = VideoInfo::CS_Y32; break;
1873 }
1874 }
1875
1/2
✓ Branch 229 → 230 taken 1 time.
✗ Branch 229 → 286 not taken.
1 else if (to_420) {
1876
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()) {
1877 // possible shortcut
1878 if (ChromaLocation_In == ChromaLocation_Out)
1879 {
1880 if (shouldStripAlpha)
1881 return new RemoveAlphaPlane(clip, env);
1882 if (shouldAddAlpha) {
1883 // create with default alpha
1884 clip = new AddAlphaPlane(clip, nullptr, 0.0f, false, env);
1885 vi = clip->GetVideoInfo();
1886 }
1887 return clip;
1888 }
1889 }
1890
1891
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];
1892
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())
1893 {
1894
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;
1895 case 10: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA420P10 : VideoInfo::CS_YUV420P10; break;
1896 case 12: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA420P12 : VideoInfo::CS_YUV420P12; break;
1897 case 14: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA420P14 : VideoInfo::CS_YUV420P14; break;
1898 case 16: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA420P16 : VideoInfo::CS_YUV420P16; break;
1899 case 32: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA420PS : VideoInfo::CS_YUV420PS; break;
1900 }
1901 }
1902 else if (to_422) {
1903 if (vi.Is422()) {
1904 // possible shortcut
1905 if (ChromaLocation_In == ChromaLocation_Out)
1906 {
1907 if (shouldStripAlpha)
1908 return new RemoveAlphaPlane(clip, env);
1909 if (shouldAddAlpha) {
1910 // create with default alpha
1911 clip = new AddAlphaPlane(clip, nullptr, 0.0f, false, env);
1912 vi = clip->GetVideoInfo();
1913 }
1914 return clip;
1915 }
1916 }
1917
1918 outplacement = args[5];
1919 switch (bits_per_pixel)
1920 {
1921 case 8 : pixel_type = targethasAlpha ? VideoInfo::CS_YUVA422 : VideoInfo::CS_YV16; break;
1922 case 10: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA422P10 : VideoInfo::CS_YUV422P10; break;
1923 case 12: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA422P12 : VideoInfo::CS_YUV422P12; break;
1924 case 14: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA422P14 : VideoInfo::CS_YUV422P14; break;
1925 case 16: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA422P16 : VideoInfo::CS_YUV422P16; break;
1926 case 32: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA422PS : VideoInfo::CS_YUV422PS; break;
1927 }
1928 }
1929 else if (to_444) {
1930 if (vi.Is444()) {
1931 if (shouldStripAlpha)
1932 return new RemoveAlphaPlane(clip, env);
1933 if (shouldAddAlpha) {
1934 // create with default alpha
1935 clip = new AddAlphaPlane(clip, nullptr, 0.0f, false, env);
1936 vi = clip->GetVideoInfo();
1937 }
1938 return clip;
1939 }
1940
1941 switch (bits_per_pixel)
1942 {
1943 case 8 : pixel_type = targethasAlpha ? VideoInfo::CS_YUVA444 : VideoInfo::CS_YV24; break;
1944 case 10: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA444P10 : VideoInfo::CS_YUV444P10; break;
1945 case 12: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA444P12 : VideoInfo::CS_YUV444P12; break;
1946 case 14: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA444P14 : VideoInfo::CS_YUV444P14; break;
1947 case 16: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA444P16 : VideoInfo::CS_YUV444P16; break;
1948 case 32: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA444PS : VideoInfo::CS_YUV444PS; break;
1949 }
1950 }
1951 else if (to_411) {
1952 if (target_bits_per_pixel != 8)
1953 env->ThrowError("%s: only bits=8 supported for YV411", filter);
1954 if (vi.IsYV411()) return clip;
1955 if(vi.ComponentSize()!=1)
1956 env->ThrowError("%s: 8 bit input only", filter);
1957
1958 pixel_type = VideoInfo::CS_YV411;
1959 }
1960 else env->ThrowError("Convert: unknown filter '%s'.", filter);
1961
1962
1/2
✗ Branch 407 → 408 not taken.
✓ Branch 407 → 409 taken 4 times.
4 if (pixel_type == VideoInfo::CS_UNKNOWN)
1963 env->ThrowError("%s: unsupported bit depth", filter);
1964
1965
1/2
✗ Branch 409 → 410 not taken.
✓ Branch 409 → 418 taken 4 times.
4 if (converted)
1966 clip = env->Invoke("Cache", AVSValue(clip)).AsClip();
1967
1968 // ConvertToPlanarGeneric's GetFrame will recognize if alpha copy or fill-with-defaults needed
1969
1/2
✓ Branch 418 → 419 taken 4 times.
✗ Branch 418 → 622 not taken.
8 AVSValue dummy_for_to_y;
1970
1971
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,
1972
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
1973 ChromaLocation_In,
1974
1/2
✓ Branch 422 → 423 taken 1 time.
✗ Branch 422 → 594 not taken.
1 to_y ? dummy_for_to_y : args[4], // chromaresample
1975 param1, param2, param3,
1976 ChromaLocation_Out,
1977
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);
1978
1979 // If still not converted, do it now (YV411->YUVxxx 8+ bits)
1980
1/2
✗ Branch 436 → 437 not taken.
✓ Branch 436 → 455 taken 4 times.
4 if (needConvertFinalBitdepth) {
1981 // plain Invoke and no "new ConvertBits()": this detects and keeps source and target ranges
1982 AVSValue new_args[2] = { clip, target_bits_per_pixel };
1983 clip = env->Invoke("ConvertBits", AVSValue(new_args, 2)).AsClip();
1984 vi = clip->GetVideoInfo();
1985 needConvertFinalBitdepth = false;
1986 }
1987
1988
1/2
✓ Branch 455 → 456 taken 4 times.
✗ Branch 455 → 620 not taken.
4 return clip;
1989
1990 4 }
1991
1992 1 AVSValue __cdecl ConvertToPlanarGeneric::CreateYUV420(AVSValue args, void* user_data, IScriptEnvironment* env) {
1993 1 bool only_8bit = reinterpret_cast<intptr_t>(user_data) == 0;
1994 1 bool to_yuva = reinterpret_cast<intptr_t>(user_data) == 2;
1995
1/2
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 45 taken 1 time.
1 if (only_8bit) {
1996 // "ConvertToYV12" syntax
1997 if (args[9].Defined() && args[9].AsInt() != 8)
1998 env->ThrowError("ConvertToYV12: only 8 bit output supported. "
1999 "Use ConvertToYUV420 for higher bit depth.");
2000 AVSValue new_args[11] = {
2001 args[0], args[1], args[2], args[3], args[4],
2002 args[5], args[6], args[7], args[8],
2003 AVSValue(8), // bits forced to 8
2004 args[10]
2005 };
2006 AVSValue new_args_val(new_args, 11); // named, lives until end of scope
2007 return Create(new_args_val, "ConvertToYUV420", only_8bit, to_yuva, env);
2008 }
2009 1 return Create(args, "ConvertToYUV420", only_8bit, to_yuva, env);
2010 }
2011
2012 AVSValue __cdecl ConvertToPlanarGeneric::CreateYUV422(AVSValue args, void* user_data, IScriptEnvironment* env) {
2013 bool only_8bit = reinterpret_cast<intptr_t>(user_data) == 0;
2014 bool to_yuva = reinterpret_cast<intptr_t>(user_data) == 2;
2015 if (only_8bit) {
2016 // "ConvertToYV16" syntax
2017 if (args[9].Defined() && args[9].AsInt() != 8)
2018 env->ThrowError("ConvertToYV16: only 8 bit output supported. "
2019 "Use ConvertToYUV422 for higher bit depth.");
2020 AVSValue new_args[11] = {
2021 args[0], args[1], args[2], args[3], args[4],
2022 args[5], args[6], args[7], args[8],
2023 AVSValue(8),
2024 args[10]
2025 };
2026 AVSValue new_args_val(new_args, 11);
2027 return Create(new_args_val, "ConvertToYUV422", only_8bit, to_yuva, env);
2028 }
2029 return Create(args, "ConvertToYUV422", only_8bit, to_yuva, env);
2030 }
2031
2032 AVSValue __cdecl ConvertToPlanarGeneric::CreateYUV444(AVSValue args, void* user_data, IScriptEnvironment* env) {
2033 bool only_8bit = reinterpret_cast<intptr_t>(user_data) == 0;
2034 bool to_yuva = reinterpret_cast<intptr_t>(user_data) == 2;
2035 if (only_8bit) {
2036 // "ConvertToYV24" syntax
2037 // parameter index skip back by 1 compared to 420/422, no ChromaOutPlacement parameter, bits is at index 8 instead of 9
2038 if (args[8].Defined() && args[8].AsInt() != 8)
2039 env->ThrowError("ConvertToYV24: only 8 bit output supported. "
2040 "Use ConvertToYUV444 for higher bit depth.");
2041 AVSValue new_args[10] = {
2042 args[0], args[1], args[2], args[3], args[4],
2043 args[5], args[6], args[7],
2044 AVSValue(8),
2045 args[9]
2046 };
2047 AVSValue new_args_val(new_args, 10);
2048 return Create(new_args_val, "ConvertToYUV444", only_8bit, to_yuva, env);
2049 }
2050 return Create(args, "ConvertToYUV444", only_8bit, to_yuva, env);
2051 }
2052
2053 AVSValue __cdecl ConvertToPlanarGeneric::CreateYV411(AVSValue args, void* user_data, IScriptEnvironment* env) {
2054 bool only_8bit = reinterpret_cast<intptr_t>(user_data) == 0;
2055 bool to_yuva = reinterpret_cast<intptr_t>(user_data) == 2;
2056 // parameter index skip back by 1 compared to 420/422, no ChromaOutPlacement parameter, bits is at index 8 instead of 9
2057 if (args[8].Defined() && args[8].AsInt() != 8)
2058 env->ThrowError("ConvertToYV411: only 8 bit output supported, "
2059 "no high bit depth YUV411 format exists.");
2060 AVSValue new_args[10] = {
2061 args[0], args[1], args[2], args[3], args[4],
2062 args[5], args[6], args[7],
2063 AVSValue(8),
2064 args[9]
2065 };
2066 AVSValue new_args_val(new_args, 10);
2067 return Create(new_args_val, "ConvertToYV411", only_8bit, to_yuva, env);
2068 }
2069
2070 AVSValue __cdecl ConvertToPlanarGeneric::CreateConvertToYUY2(AVSValue args, void*, IScriptEnvironment* env)
2071 {
2072 PClip clip = args[0].AsClip();
2073 VideoInfo vi = clip->GetVideoInfo();
2074
2075 // Fast no-op: YUY2 source, no parameters at all.
2076 // Do not touch frame properties - caller's responsibility.
2077 if (vi.IsYUY2()
2078 && !args[1].Defined() // interlaced
2079 && !args[2].Defined() // matrix
2080 && !args[3].Defined() // ChromaInPlacement
2081 && !args[4].Defined() // chromaresample
2082 && !args[5].Defined() // ChromaOutPlacement
2083 && !args[6].Defined() // param1
2084 && !args[7].Defined() // param2
2085 && !args[8].Defined() // param3
2086 && !args[9].Defined() // bits
2087 && !args[10].Defined()) // quality
2088 return clip;
2089
2090 // YUY2 is 8-bit only: bits= must be 8 if specified.
2091 // We check here to give a proper ConvertToYUY2-specific error message,
2092 // rather than letting CreateYUV422 complain about something unrelated.
2093 // Source can be any bit depth - the conversion chain will downconvert.
2094 if (args[9].Defined() && args[9].AsInt() != 8)
2095 env->ThrowError("ConvertToYUY2: bits must be 8, YUY2 is an 8-bit format");
2096
2097 // Rebuild args with bits=8 forced, so CreateYUV422 sees an explicit
2098 // 8-bit target regardless of source bit depth.
2099 // This also means the void*1 path in CreateYUV422 won't reject
2100 // high bit depth sources - the bits=8 in args drives the downconvert.
2101 AVSValue new_args[11] = {
2102 args[0], // clip
2103 args[1], // interlaced
2104 args[2], // matrix
2105 args[3], // ChromaInPlacement
2106 args[4], // chromaresample
2107 args[5], // ChromaOutPlacement
2108 args[6], // param1
2109 args[7], // param2
2110 args[8], // param3
2111 AVSValue(8), // bits: always 8 for YUY2, overrides source depth
2112 args[10] // quality
2113 };
2114
2115 // (void*)1: allow any source bit depth, bits=8 in args enforces 8-bit output.
2116 // The legacy (void*)0 source-depth check is not appropriate here since
2117 // we explicitly want to allow e.g. 10-bit YUV420 → 8-bit YUY2.
2118 PClip yv16 = CreateYUV422(AVSValue(new_args, 11), (void*)1, env).AsClip();
2119
2120 // Lossless repack YV16->YUY2.
2121 // Frame properties preserved via NewVideoFrameP in GetFrame.
2122 return new ConvertYV16ToYUY2(yv16, env);
2123 }
2124
2125 AVSValue __cdecl ConvertToPlanarGeneric::CreateConvertBackToYUY2(AVSValue args, void*, IScriptEnvironment* env)
2126 {
2127 // ConvertBackToYUY2 was a pre-2.5 optimization for RGB roundtrip workflows.
2128 // It was never interlaced-aware (hardcoded interlaced=false).
2129 // Now obsolete - forward to ConvertToYUY2::Create with full parameter array.
2130 // ConvertBackToYUY2 signature: c[matrix]s
2131 // ConvertToYUY2 signature: c[interlaced]b[matrix]s[ChromaInPlacement]s
2132 // [chromaresample]s[ChromaOutPlacement]s
2133 // [param1]f[param2]f[param3]f[bits]i[quality]b
2134 AVSValue new_args[11] = {
2135 args[0], // clip
2136 AVSValue(false),// interlaced: was always false in ConvertBackToYUY2
2137 args[1], // matrix: pass through
2138 AVSValue(), // ChromaInPlacement: not defined
2139 AVSValue(), // chromaresample: not defined
2140 AVSValue(), // ChromaOutPlacement: not defined
2141 AVSValue(), // param1: not defined
2142 AVSValue(), // param2: not defined
2143 AVSValue(), // param3: not defined
2144 AVSValue(), // bits: not defined (will be forced to 8 inside)
2145 AVSValue() // quality: not defined
2146 };
2147 return CreateConvertToYUY2(AVSValue(new_args, 11), nullptr, env);
2148 }
2149
2150
2151 /*
2152 static int getPlacement(const AVSValue& _placement, IScriptEnvironment* env) {
2153 const char* placement = _placement.AsString(0);
2154
2155 if (placement) {
2156 if (!lstrcmpi(placement, "mpeg2") || !lstrcmpi(placement, "left"))
2157 return PLACEMENT_MPEG2;
2158
2159 if (!lstrcmpi(placement, "mpeg1") || !lstrcmpi(placement, "jpeg") || !lstrcmpi(placement, "center"))
2160 return PLACEMENT_MPEG1;
2161
2162 if (!lstrcmpi(placement, "dv"))
2163 return PLACEMENT_DV;
2164
2165 if (!lstrcmpi(placement, "top_left"))
2166 return PLACEMENT_TOP_LEFT;
2167
2168 env->ThrowError("Convert: Unknown chromaplacement");
2169 }
2170 return PLACEMENT_MPEG2;
2171 }
2172 */
2173
2174
2175 29 ResamplingFunction* getResampler(const char* resampler, AVSValue param1, AVSValue param2, AVSValue param3, bool throw_on_error, IScriptEnvironment* env) {
2176
1/2
✓ Branch 2 → 3 taken 29 times.
✗ Branch 2 → 117 not taken.
29 if (resampler) {
2177
2/2
✓ Branch 3 → 4 taken 14 times.
✓ Branch 3 → 10 taken 15 times.
29 if (!lstrcmpi(resampler, "point"))
2178
1/2
✗ Branch 7 → 8 not taken.
✓ Branch 7 → 9 taken 14 times.
14 return new PointFilter();
2179
2/2
✓ Branch 10 → 11 taken 10 times.
✓ Branch 10 → 17 taken 5 times.
15 else if (!lstrcmpi(resampler, "bilinear"))
2180
1/2
✗ Branch 14 → 15 not taken.
✓ Branch 14 → 16 taken 10 times.
10 return new TriangleFilter();
2181
2/2
✓ Branch 17 → 18 taken 2 times.
✓ Branch 17 → 26 taken 3 times.
5 else if (!lstrcmpi(resampler, "bicubic"))
2182
4/10
✓ Branch 19 → 20 taken 2 times.
✗ Branch 19 → 126 not taken.
✓ Branch 20 → 21 taken 2 times.
✗ Branch 20 → 126 not taken.
✓ Branch 21 → 22 taken 2 times.
✗ Branch 21 → 126 not taken.
✗ Branch 23 → 24 not taken.
✓ Branch 23 → 25 taken 2 times.
✗ Branch 126 → 127 not taken.
✗ Branch 126 → 128 not taken.
2 return new MitchellNetravaliFilter(param1.AsDblDef(1.0/3), param2.AsDblDef(1.0/3)); // optional B and C as param1 and param2
2183
2/2
✓ Branch 26 → 27 taken 2 times.
✓ Branch 26 → 34 taken 1 time.
3 else if (!lstrcmpi(resampler, "lanczos"))
2184
3/8
✓ Branch 28 → 29 taken 2 times.
✗ Branch 28 → 129 not taken.
✓ Branch 29 → 30 taken 2 times.
✗ Branch 29 → 129 not taken.
✗ Branch 31 → 32 not taken.
✓ Branch 31 → 33 taken 2 times.
✗ Branch 129 → 130 not taken.
✗ Branch 129 → 131 not taken.
2 return new LanczosFilter((int)param1.AsFloat(3)); // optional Taps as param1
2185
1/2
✗ Branch 34 → 35 not taken.
✓ Branch 34 → 41 taken 1 time.
1 else if (!lstrcmpi(resampler, "lanczos4"))
2186 return new LanczosFilter(4);
2187
1/2
✗ Branch 41 → 42 not taken.
✓ Branch 41 → 49 taken 1 time.
1 else if (!lstrcmpi(resampler, "blackman"))
2188 return new BlackmanFilter((int)param1.AsFloat(4)); // optional Taps as param1
2189
1/2
✗ Branch 49 → 50 not taken.
✓ Branch 49 → 56 taken 1 time.
1 else if (!lstrcmpi(resampler, "spline16"))
2190 return new Spline16Filter();
2191
1/2
✗ Branch 56 → 57 not taken.
✓ Branch 56 → 63 taken 1 time.
1 else if (!lstrcmpi(resampler, "spline36"))
2192 return new Spline36Filter();
2193
1/2
✗ Branch 63 → 64 not taken.
✓ Branch 63 → 70 taken 1 time.
1 else if (!lstrcmpi(resampler, "spline64"))
2194 return new Spline64Filter();
2195
1/2
✗ Branch 70 → 71 not taken.
✓ Branch 70 → 80 taken 1 time.
1 else if (!lstrcmpi(resampler, "gauss"))
2196 return new GaussianFilter(param1.AsDblDef(30.0), param2.AsDblDef(2.0), param3.AsDblDef(4.0)); // optional P, B, S as param1, param2, param3
2197
1/2
✓ Branch 80 → 81 taken 1 time.
✗ Branch 80 → 88 not taken.
1 else if (!lstrcmpi(resampler, "sinc"))
2198
3/8
✓ Branch 82 → 83 taken 1 time.
✗ Branch 82 → 141 not taken.
✓ Branch 83 → 84 taken 1 time.
✗ Branch 83 → 141 not taken.
✗ Branch 85 → 86 not taken.
✓ Branch 85 → 87 taken 1 time.
✗ Branch 141 → 142 not taken.
✗ Branch 141 → 143 not taken.
1 return new SincFilter((int)param1.AsFloat(4)); // optional Taps as param1
2199 else if (!lstrcmpi(resampler, "sinpow"))
2200 return new SinPowerFilter(param1.AsDblDef(2.5)); // optional P as param1
2201 else if (!lstrcmpi(resampler, "sinclin2"))
2202 return new SincLin2Filter((int)param1.AsFloat(15)); // optional Taps= as param1
2203 else if (!lstrcmpi(resampler, "userdefined2"))
2204 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
2205 else
2206 if (throw_on_error)
2207 env->ThrowError("Convert: Unknown chroma resampler, '%s'", resampler);
2208 else
2209 return nullptr; // e.g. from AddBorders
2210 }
2211 return new MitchellNetravaliFilter(param1.AsDblDef(1.0/3), param2.AsDblDef(1.0/3)); // Default colorspace conversion for AviSynth
2212 }
2213
2214 DISABLE_WARNING_POP
2215