convert/convert_planar.cpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | // Avisynth v2.5. Copyright 2002 Ben Rudiak-Gould et al. | ||
| 2 | // http://avisynth.nl | ||
| 3 | |||
| 4 | // This program is free software; you can redistribute it and/or modify | ||
| 5 | // it under the terms of the GNU General Public License as published by | ||
| 6 | // the Free Software Foundation; either version 2 of the License, or | ||
| 7 | // (at your option) any later version. | ||
| 8 | // | ||
| 9 | // This program is distributed in the hope that it will be useful, | ||
| 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | // GNU General Public License for more details. | ||
| 13 | // | ||
| 14 | // You should have received a copy of the GNU General Public License | ||
| 15 | // along with this program; if not, write to the Free Software | ||
| 16 | // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA, or visit | ||
| 17 | // http://www.gnu.org/copyleft/gpl.html . | ||
| 18 | // | ||
| 19 | // Linking Avisynth statically or dynamically with other modules is making a | ||
| 20 | // combined work based on Avisynth. Thus, the terms and conditions of the GNU | ||
| 21 | // General Public License cover the whole combination. | ||
| 22 | // | ||
| 23 | // As a special exception, the copyright holders of Avisynth give you | ||
| 24 | // permission to link Avisynth with independent modules that communicate with | ||
| 25 | // Avisynth solely through the interfaces defined in avisynth.h, regardless of the license | ||
| 26 | // terms of these independent modules, and to copy and distribute the | ||
| 27 | // resulting combined work under terms of your choice, provided that | ||
| 28 | // every copy of the combined work is accompanied by a complete copy of | ||
| 29 | // the source code of Avisynth (the version of Avisynth used to produce the | ||
| 30 | // combined work), being distributed under the terms of the GNU General | ||
| 31 | // Public License plus this exception. An independent module is a module | ||
| 32 | // which is not derived from or based on Avisynth, such as 3rd-party filters, | ||
| 33 | // import and export plugins, or graphical user interfaces. | ||
| 34 | |||
| 35 | // ConvertPlanar (c) 2005 by Klaus Post | ||
| 36 | |||
| 37 | |||
| 38 | #include "convert.h" | ||
| 39 | #include "convert_matrix.h" | ||
| 40 | #include "convert_helper.h" | ||
| 41 | #include "convert_planar.h" | ||
| 42 | #ifdef INTEL_INTRINSICS | ||
| 43 | #include "intel/convert_planar_sse.h" | ||
| 44 | #include "intel/convert_planar_avx2.h" | ||
| 45 | #endif | ||
| 46 | #include "convert_bits.h" | ||
| 47 | #include "../filters/resample.h" | ||
| 48 | #include "../filters/planeswap.h" | ||
| 49 | #include "../filters/field.h" | ||
| 50 | |||
| 51 | #ifdef AVS_WINDOWS | ||
| 52 | #include <avs/win.h> | ||
| 53 | #else | ||
| 54 | #include <avs/posix.h> | ||
| 55 | #endif | ||
| 56 | |||
| 57 | #include <avs/alignment.h> | ||
| 58 | #include <algorithm> | ||
| 59 | #include <string> | ||
| 60 | #include <vector> | ||
| 61 | |||
| 62 | DISABLE_WARNING_PUSH | ||
| 63 | DISABLE_WARNING_UNREFERENCED_LOCAL_VARIABLE | ||
| 64 | |||
| 65 | template <typename pixel_t> | ||
| 66 | 8 | void fill_chroma(uint8_t * dstp_u, uint8_t * dstp_v, int height, int row_size, int pitch, pixel_t val) | |
| 67 | { | ||
| 68 |
3/6void fill_chroma<float>(unsigned char*, unsigned char*, int, int, int, float):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 22 taken 1 time.
void fill_chroma<unsigned char>(unsigned char*, unsigned char*, int, int, int, unsigned char):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 22 taken 6 times.
void fill_chroma<unsigned short>(unsigned char*, unsigned char*, int, int, int, unsigned short):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 22 taken 1 time.
|
8 | if (pitch == row_size) { |
| 69 | ✗ | size_t size = height * pitch / sizeof(pixel_t); | |
| 70 | ✗ | std::fill_n(reinterpret_cast<pixel_t*>(dstp_u), size, val); | |
| 71 | ✗ | std::fill_n(reinterpret_cast<pixel_t*>(dstp_v), size, val); | |
| 72 | } | ||
| 73 | else { | ||
| 74 | 8 | size_t size = row_size / sizeof(pixel_t); | |
| 75 |
6/6void fill_chroma<float>(unsigned char*, unsigned char*, int, int, int, float):
✓ Branch 42 → 23 taken 3 times.
✓ Branch 42 → 43 taken 1 time.
void fill_chroma<unsigned char>(unsigned char*, unsigned char*, int, int, int, unsigned char):
✓ Branch 42 → 23 taken 15 times.
✓ Branch 42 → 43 taken 6 times.
void fill_chroma<unsigned short>(unsigned char*, unsigned char*, int, int, int, unsigned short):
✓ Branch 42 → 23 taken 2 times.
✓ Branch 42 → 43 taken 1 time.
|
28 | for (int i = 0; i < height; i++) { |
| 76 | 20 | std::fill_n(reinterpret_cast<pixel_t*>(dstp_u), size, val); | |
| 77 | 20 | std::fill_n(reinterpret_cast<pixel_t*>(dstp_v), size, val); | |
| 78 | 20 | dstp_u += pitch; | |
| 79 | 20 | dstp_v += pitch; | |
| 80 | } | ||
| 81 | } | ||
| 82 | 8 | } | |
| 83 | |||
| 84 | template <typename pixel_t> | ||
| 85 | 5 | void fill_plane(uint8_t * dstp, int height, int row_size, int pitch, pixel_t val) | |
| 86 | { | ||
| 87 |
2/6void fill_plane<float>(unsigned char*, int, int, int, float):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 13 taken 2 times.
void fill_plane<unsigned char>(unsigned char*, int, int, int, unsigned char):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 13 taken 3 times.
void fill_plane<unsigned short>(unsigned char*, int, int, int, unsigned short):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 13 not taken.
|
5 | if (pitch == row_size) { |
| 88 | ✗ | size_t size = height * pitch / sizeof(pixel_t); | |
| 89 | ✗ | std::fill_n(reinterpret_cast<pixel_t*>(dstp), size, val); | |
| 90 | } | ||
| 91 | else { | ||
| 92 | 5 | size_t size = row_size / sizeof(pixel_t); | |
| 93 |
4/6void fill_plane<float>(unsigned char*, int, int, int, float):
✓ Branch 24 → 14 taken 4 times.
✓ Branch 24 → 25 taken 2 times.
void fill_plane<unsigned char>(unsigned char*, int, int, int, unsigned char):
✓ Branch 24 → 14 taken 12 times.
✓ Branch 24 → 25 taken 3 times.
void fill_plane<unsigned short>(unsigned char*, int, int, int, unsigned short):
✗ Branch 24 → 14 not taken.
✗ Branch 24 → 25 not taken.
|
21 | for (int i = 0; i < height; i++) { |
| 94 | 16 | std::fill_n(reinterpret_cast<pixel_t*>(dstp), size, val); | |
| 95 | 16 | dstp += pitch; | |
| 96 | } | ||
| 97 | } | ||
| 98 | 5 | } | |
| 99 | |||
| 100 | // specialize it | ||
| 101 | template void fill_plane<uint8_t>(uint8_t * dstp, int height, int row_size, int pitch, uint8_t val); | ||
| 102 | template void fill_plane<uint16_t>(uint8_t * dstp, int height, int row_size, int pitch, uint16_t val); | ||
| 103 | template void fill_plane<float>(uint8_t * dstp, int height, int row_size, int pitch, float val); | ||
| 104 | template void fill_chroma<uint8_t>(uint8_t * dstp_u, uint8_t * dstp_v, int height, int row_size, int pitch, uint8_t val); | ||
| 105 | template void fill_chroma<uint16_t>(uint8_t * dstp_u, uint8_t * dstp_v, int height, int row_size, int pitch, uint16_t val); | ||
| 106 | template void fill_chroma<float>(uint8_t * dstp_u, uint8_t * dstp_v, int height, int row_size, int pitch, float val); | ||
| 107 | |||
| 108 | |||
| 109 | // ConvertToY::ConvertToY moved into ConvertPlanarToGeneric, since the conversion logic and parameters overlap with -->444 Conversion, we just need only Y. | ||
| 110 | // Legacy formats (packed RGB/YUY2) are handled uniformly inside. | ||
| 111 | 3 | AVSValue __cdecl ConvertToPlanarGeneric::CreateY(AVSValue args, void* user_data, IScriptEnvironment* env) { | |
| 112 | 3 | bool only_8bit = reinterpret_cast<intptr_t>(user_data) == 0; | |
| 113 |
2/4✓ Branch 2 → 3 taken 3 times.
✗ Branch 2 → 56 not taken.
✓ Branch 3 → 4 taken 3 times.
✗ Branch 3 → 56 not taken.
|
3 | PClip clip = args[0].AsClip(); |
| 114 | |||
| 115 | // 0 1 2 3 | ||
| 116 | // c[matrix]s[bits]i[quality]b | ||
| 117 |
1/2✗ Branch 4 → 5 not taken.
✓ Branch 4 → 15 taken 3 times.
|
3 | if (only_8bit) { |
| 118 | // ConvertToY8() syntax | ||
| 119 | ✗ | if (args[2].Defined() && args[2].AsInt() != 8) | |
| 120 | ✗ | env->ThrowError("ConvertToY8: only 8 bit output supported. " | |
| 121 | "Use ConvertToY for higher bit depth."); | ||
| 122 | } | ||
| 123 | |||
| 124 | // 1.) One single route: planar constructor, where YUY2 is converted to Y8 if needed | ||
| 125 | // 2.) If Y, reason to not return it right now: | ||
| 126 | // - possible bit-depth conversion, | ||
| 127 | // - optional Y-Y future matrix (auto:full->auto:limited) syntax conversion) | ||
| 128 | |||
| 129 | // We use the very same logic as for ConvertToYV24/YUV444, ConvertToYV16/YUV422, ConvertToYV12/YUV420 | ||
| 130 |
1/2✗ Branch 15 → 16 not taken.
✓ Branch 15 → 34 taken 3 times.
|
3 | if (only_8bit) { |
| 131 | // ConvertToY8() syntax, force 8 bit output} | ||
| 132 | AVSValue new_args[4] = { | ||
| 133 | args[0], args[1], AVSValue(8), args[3] | ||
| 134 | ✗ | }; | |
| 135 | ✗ | AVSValue new_args_val(new_args, 4); | |
| 136 | ✗ | return Create(new_args_val, "ConvertToY", only_8bit, false /*to_yuva*/, env); | |
| 137 | ✗ | } | |
| 138 | else { | ||
| 139 |
1/2✓ Branch 34 → 35 taken 3 times.
✗ Branch 34 → 54 not taken.
|
3 | return Create(args, "ConvertToY", only_8bit, false /*to_yuva*/, env); |
| 140 | } | ||
| 141 | 3 | } | |
| 142 | |||
| 143 | /***************************************************** | ||
| 144 | * ConvertRGBToYUV444 or simply Y only (when to_y=true) | ||
| 145 | ******************************************************/ | ||
| 146 | |||
| 147 | 10 | ConvertRGBToYUV444::ConvertRGBToYUV444(PClip src, const char *matrix_name, bool keep_packedrgb_alpha, int _target_bit_depth, bool _quality, bool& bitdepthConverted, bool _to_y, IScriptEnvironment* env) | |
| 148 |
2/4✓ Branch 2 → 3 taken 10 times.
✗ Branch 2 → 102 not taken.
✓ Branch 3 → 4 taken 10 times.
✗ Branch 3 → 100 not taken.
|
10 | : GenericVideoFilter(src), target_bit_depth(_target_bit_depth), quality(_quality), conv_function(nullptr), conv_function_chroma(nullptr), conv_function_a(nullptr), to_y(_to_y) |
| 149 | { | ||
| 150 |
2/4✓ Branch 5 → 6 taken 10 times.
✗ Branch 5 → 105 not taken.
✗ Branch 6 → 7 not taken.
✓ Branch 6 → 8 taken 10 times.
|
10 | if (!vi.IsRGB()) |
| 151 | ✗ | env->ThrowError("ConvertRGBToYV24/YUV444: Only RGB data input accepted"); | |
| 152 | |||
| 153 |
5/10✓ Branch 8 → 9 taken 10 times.
✗ Branch 8 → 105 not taken.
✓ Branch 9 → 10 taken 10 times.
✗ Branch 9 → 12 not taken.
✓ Branch 10 → 11 taken 10 times.
✗ Branch 10 → 105 not taken.
✗ Branch 11 → 12 not taken.
✓ Branch 11 → 13 taken 10 times.
✗ Branch 14 → 15 not taken.
✓ Branch 14 → 16 taken 10 times.
|
10 | if (vi.IsRGB48() || vi.IsRGB64()) |
| 154 | ✗ | env->ThrowError("ConvertRGBToYV24/YUV444: internal error: packed 16 bit not supported, must be converted to RGBP(A)16"); | |
| 155 | |||
| 156 | // ChromaInPlacement parameter exists, (default none/-1) + input frame properties; 'left'-ish _ChromaLocation is allowed, checked later | ||
| 157 |
1/2✓ Branch 17 → 18 taken 10 times.
✗ Branch 17 → 105 not taken.
|
10 | auto frame0 = src->GetFrame(0, env); |
| 158 |
1/2✓ Branch 18 → 19 taken 10 times.
✗ Branch 18 → 103 not taken.
|
10 | const AVSMap* props = env->getFramePropsRO(frame0); |
| 159 | |||
| 160 | // input _ColorRange frame property can appear for RGB source (studio range limited rgb) | ||
| 161 |
1/2✓ Branch 19 → 20 taken 10 times.
✗ Branch 19 → 103 not taken.
|
10 | matrix_parse_merge_with_props(true /*in rgb*/, false /*out yuv*/, matrix_name, props, theMatrix, theColorRange, theOutColorRange, env); |
| 162 | |||
| 163 | 10 | const int shift = 15; // internally 15 bits precision, still no overflow in calculations | |
| 164 |
1/2✓ Branch 20 → 21 taken 10 times.
✗ Branch 20 → 103 not taken.
|
10 | int bits_per_pixel = vi.BitsPerComponent(); |
| 165 | 10 | source_bit_depth = bits_per_pixel; | |
| 166 | |||
| 167 |
2/4✓ Branch 21 → 22 taken 10 times.
✗ Branch 21 → 103 not taken.
✗ Branch 22 → 23 not taken.
✓ Branch 22 → 24 taken 10 times.
|
10 | if (!do_BuildMatrix_Rgb2Yuv(theMatrix, theColorRange, theOutColorRange, shift, source_bit_depth, /*ref*/matrix)) |
| 168 | ✗ | env->ThrowError("ConvertRGBToYV24/YUV444: Unknown matrix."); | |
| 169 | |||
| 170 | 10 | theColorRange = theOutColorRange; // final frame property | |
| 171 | |||
| 172 | // target_bit_depth == -1: no conversion required | ||
| 173 | 10 | const bool need_bitdepth_conversion = (target_bit_depth != -1); | |
| 174 | |||
| 175 | // get alpha converter, GetFrame is using that if alpha must be depth-converterd and not only copied | ||
| 176 |
2/2✓ Branch 24 → 25 taken 8 times.
✓ Branch 24 → 30 taken 2 times.
|
10 | if (need_bitdepth_conversion) |
| 177 | { | ||
| 178 | // supported conversions: | ||
| 179 | // 8-16-bits any range to 8-16, 32 bits any range | ||
| 180 | 8 | bitdepthConverted = true; | |
| 181 | |||
| 182 |
2/2✓ Branch 25 → 26 taken 3 times.
✓ Branch 25 → 31 taken 5 times.
|
8 | if (!to_y) { // single plane Y only has no alpha |
| 183 | #ifdef INTEL_INTRINSICS | ||
| 184 |
1/2✓ Branch 26 → 27 taken 3 times.
✗ Branch 26 → 103 not taken.
|
3 | const bool sse2 = !!(env->GetCPUFlags() & CPUF_SSE2); |
| 185 |
1/2✓ Branch 27 → 28 taken 3 times.
✗ Branch 27 → 103 not taken.
|
3 | const bool sse4 = !!(env->GetCPUFlags() & CPUF_SSE4_1); |
| 186 |
1/2✓ Branch 28 → 29 taken 3 times.
✗ Branch 28 → 103 not taken.
|
3 | const bool avx2 = !!(env->GetCPUFlags() & CPUF_AVX2); |
| 187 | #endif | ||
| 188 | // we really need only alpha conversion function | ||
| 189 | 3 | const bool fulls = true; // alpha is always full range | |
| 190 | 3 | const bool fulld = true; // alpha is always full range | |
| 191 | 3 | const int dither_mode = -1; | |
| 192 | #ifdef INTEL_INTRINSICS | ||
| 193 |
1/2✓ Branch 29 → 31 taken 3 times.
✗ Branch 29 → 103 not taken.
|
3 | get_convert_any_bits_functions(dither_mode, source_bit_depth, target_bit_depth, fulls, fulld, sse2, sse4, avx2, conv_function, conv_function_chroma, conv_function_a); |
| 194 | #else | ||
| 195 | get_convert_any_bits_functions(dither_mode, source_bit_depth, target_bit_depth, fulls, fulld, conv_function, conv_function_chroma, conv_function_a); | ||
| 196 | #endif | ||
| 197 | } | ||
| 198 | } | ||
| 199 | else { | ||
| 200 | 2 | bitdepthConverted = false; | |
| 201 | 2 | target_bit_depth = source_bit_depth; | |
| 202 | } | ||
| 203 | |||
| 204 |
5/8✓ Branch 31 → 32 taken 10 times.
✗ Branch 31 → 103 not taken.
✓ Branch 32 → 33 taken 1 time.
✓ Branch 32 → 35 taken 9 times.
✓ Branch 33 → 34 taken 1 time.
✗ Branch 33 → 103 not taken.
✓ Branch 34 → 35 taken 1 time.
✗ Branch 34 → 36 not taken.
|
10 | isPlanarRGBfamily = vi.IsPlanarRGB() || vi.IsPlanarRGBA(); |
| 205 |
4/14✓ Branch 37 → 38 taken 10 times.
✗ Branch 37 → 103 not taken.
✓ Branch 38 → 39 taken 9 times.
✓ Branch 38 → 44 taken 1 time.
✗ Branch 39 → 40 not taken.
✓ Branch 39 → 45 taken 9 times.
✗ Branch 40 → 41 not taken.
✗ Branch 40 → 103 not taken.
✗ Branch 41 → 42 not taken.
✗ Branch 41 → 44 not taken.
✗ Branch 42 → 43 not taken.
✗ Branch 42 → 103 not taken.
✗ Branch 43 → 44 not taken.
✗ Branch 43 → 45 not taken.
|
10 | targetHasAlpha = vi.IsPlanarRGBA() || (keep_packedrgb_alpha && (vi.IsRGB32() || vi.IsRGB64())); |
| 206 | // for packed RGB it depends: ConvertToYUVAxxx() can force YUVA target option | ||
| 207 |
1/2✓ Branch 46 → 47 taken 10 times.
✗ Branch 46 → 85 not taken.
|
10 | if (isPlanarRGBfamily) |
| 208 | { | ||
| 209 |
2/2✓ Branch 47 → 48 taken 5 times.
✓ Branch 47 → 56 taken 5 times.
|
10 | if (to_y) { |
| 210 | // --> Y | ||
| 211 | 5 | pixel_step = -1; | |
| 212 |
4/7✓ Branch 48 → 49 taken 2 times.
✓ Branch 48 → 50 taken 1 time.
✗ Branch 48 → 51 not taken.
✗ Branch 48 → 52 not taken.
✓ Branch 48 → 53 taken 1 time.
✓ Branch 48 → 54 taken 1 time.
✗ Branch 48 → 55 not taken.
|
5 | switch (target_bit_depth) |
| 213 | { | ||
| 214 | 2 | case 8: vi.pixel_type = VideoInfo::CS_Y8; break; | |
| 215 | 1 | case 10: vi.pixel_type = VideoInfo::CS_Y10; break; | |
| 216 | ✗ | case 12: vi.pixel_type = VideoInfo::CS_Y12; break; | |
| 217 | ✗ | case 14: vi.pixel_type = VideoInfo::CS_Y14; break; | |
| 218 | 1 | case 16: vi.pixel_type = VideoInfo::CS_Y16; break; | |
| 219 | 1 | case 32: vi.pixel_type = VideoInfo::CS_Y32; break; | |
| 220 | } | ||
| 221 | } | ||
| 222 | else { | ||
| 223 | // --> 444(4) | ||
| 224 |
2/2✓ Branch 56 → 57 taken 1 time.
✓ Branch 56 → 58 taken 4 times.
|
5 | pixel_step = targetHasAlpha ? -2 : -1; |
| 225 |
4/7✓ Branch 59 → 60 taken 1 time.
✓ Branch 59 → 64 taken 2 times.
✗ Branch 59 → 68 not taken.
✗ Branch 59 → 72 not taken.
✓ Branch 59 → 76 taken 1 time.
✓ Branch 59 → 80 taken 1 time.
✗ Branch 59 → 84 not taken.
|
5 | switch (target_bit_depth) |
| 226 | { | ||
| 227 |
1/2✗ Branch 60 → 61 not taken.
✓ Branch 60 → 62 taken 1 time.
|
1 | case 8: vi.pixel_type = targetHasAlpha ? VideoInfo::CS_YUVA444 : VideoInfo::CS_YV24; break; |
| 228 |
1/2✗ Branch 64 → 65 not taken.
✓ Branch 64 → 66 taken 2 times.
|
2 | case 10: vi.pixel_type = targetHasAlpha ? VideoInfo::CS_YUVA444P10 : VideoInfo::CS_YUV444P10; break; |
| 229 | ✗ | case 12: vi.pixel_type = targetHasAlpha ? VideoInfo::CS_YUVA444P12 : VideoInfo::CS_YUV444P12; break; | |
| 230 | ✗ | case 14: vi.pixel_type = targetHasAlpha ? VideoInfo::CS_YUVA444P14 : VideoInfo::CS_YUV444P14; break; | |
| 231 |
1/2✓ Branch 76 → 77 taken 1 time.
✗ Branch 76 → 78 not taken.
|
1 | case 16: vi.pixel_type = targetHasAlpha ? VideoInfo::CS_YUVA444P16 : VideoInfo::CS_YUV444P16; break; |
| 232 |
1/2✗ Branch 80 → 81 not taken.
✓ Branch 80 → 82 taken 1 time.
|
1 | case 32: vi.pixel_type = targetHasAlpha ? VideoInfo::CS_YUVA444PS : VideoInfo::CS_YUV444PS; break; |
| 233 | } | ||
| 234 | } | ||
| 235 | } else { // packed RGB24/32/48/64 | ||
| 236 | // for compatibility reasons ConvertToYUVxxx target is not YUVA even | ||
| 237 | // if original has alpha, such as RGB32. | ||
| 238 | // Unlike ConvertToYUVA which can force keeping RGB32's or RGB64's alpha | ||
| 239 | |||
| 240 | // must be the same, bit depth change is supported only from planar rgb | ||
| 241 | ✗ | if (bits_per_pixel != target_bit_depth) | |
| 242 | ✗ | env->ThrowError("ConvertRGBToYV24/YUV444: bit depth change is only supported from planar RGB input"); | |
| 243 | |||
| 244 | ✗ | pixel_step = vi.BytesFromPixels(1); // 3,4 for packed 8 bit, 6,8 for | |
| 245 | ✗ | switch(vi.ComponentSize()) | |
| 246 | { | ||
| 247 | ✗ | case 1: vi.pixel_type = targetHasAlpha ? VideoInfo::CS_YUVA444 : VideoInfo::CS_YV24; break; | |
| 248 | ✗ | case 2: vi.pixel_type = targetHasAlpha ? VideoInfo::CS_YUVA444P16 : VideoInfo::CS_YUV444P16; break; | |
| 249 | } | ||
| 250 | } | ||
| 251 | |||
| 252 | 10 | } | |
| 253 | |||
| 254 | #if 0 | ||
| 255 | // Kept for reference | ||
| 256 | template<int pixel_step, bool copyalpha> | ||
| 257 | static void convert_rgb24or32_to_yuv444_c(BYTE* dstY, BYTE* dstU, BYTE* dstV, BYTE* dstA, const BYTE* srcp, size_t Ypitch, size_t UVpitch, size_t Apitch, size_t Spitch, size_t width, size_t height, const ConversionMatrix& m) | ||
| 258 | { | ||
| 259 | const bool has_offset_rgb = 0 != m.offset_rgb; | ||
| 260 | |||
| 261 | // RGB24 (pixel_step=3) | ||
| 262 | // RGB32 (pixel_step=4) optional copyalpha | ||
| 263 | srcp += Spitch * (height - 1); // We start at last line | ||
| 264 | const size_t Sstep = Spitch + width * pixel_step; | ||
| 265 | for (size_t y = 0; y < height; y++) { | ||
| 266 | for (size_t x = 0; x < width; x++) { | ||
| 267 | int b = srcp[0]; | ||
| 268 | int g = srcp[1]; | ||
| 269 | int r = srcp[2]; | ||
| 270 | if (has_offset_rgb) { | ||
| 271 | b = b + m.offset_rgb; | ||
| 272 | g = g + m.offset_rgb; | ||
| 273 | r = r + m.offset_rgb; | ||
| 274 | } | ||
| 275 | int Y = m.offset_y + (((int)m.y_b * b + (int)m.y_g * g + (int)m.y_r * r + 16384) >> 15); | ||
| 276 | int U = 128 + (((int)m.u_b * b + (int)m.u_g * g + (int)m.u_r * r + 16384) >> 15); | ||
| 277 | int V = 128 + (((int)m.v_b * b + (int)m.v_g * g + (int)m.v_r * r + 16384) >> 15); | ||
| 278 | dstY[x] = PixelClip(Y); // All the safety we can wish for. | ||
| 279 | dstU[x] = PixelClip(U); | ||
| 280 | dstV[x] = PixelClip(V); | ||
| 281 | if constexpr (copyalpha) { | ||
| 282 | dstA[x] = srcp[3]; | ||
| 283 | } | ||
| 284 | srcp += pixel_step; | ||
| 285 | } | ||
| 286 | srcp -= Sstep; // packed RGBs are upside down | ||
| 287 | dstY += Ypitch; | ||
| 288 | dstU += UVpitch; | ||
| 289 | dstV += UVpitch; | ||
| 290 | if constexpr (copyalpha) { | ||
| 291 | dstA += Apitch; | ||
| 292 | } | ||
| 293 | } | ||
| 294 | } | ||
| 295 | #endif | ||
| 296 | |||
| 297 | |||
| 298 | 12 | PVideoFrame __stdcall ConvertRGBToYUV444::GetFrame(int n, IScriptEnvironment* env) | |
| 299 | { | ||
| 300 |
1/2✓ Branch 3 → 4 taken 12 times.
✗ Branch 3 → 147 not taken.
|
12 | PVideoFrame src = child->GetFrame(n, env); |
| 301 |
1/2✓ Branch 4 → 5 taken 12 times.
✗ Branch 4 → 145 not taken.
|
12 | PVideoFrame dst = env->NewVideoFrameP(vi, &src); |
| 302 | |||
| 303 |
1/2✓ Branch 5 → 6 taken 12 times.
✗ Branch 5 → 143 not taken.
|
12 | auto props = env->getFramePropsRW(dst); |
| 304 |
1/2✓ Branch 6 → 7 taken 12 times.
✗ Branch 6 → 143 not taken.
|
12 | update_Matrix_and_ColorRange(props, theMatrix, theColorRange, env); |
| 305 | |||
| 306 |
1/2✓ Branch 8 → 9 taken 12 times.
✗ Branch 8 → 143 not taken.
|
12 | BYTE* dstY = dst->GetWritePtr(PLANAR_Y); |
| 307 |
3/4✓ Branch 9 → 10 taken 5 times.
✓ Branch 9 → 11 taken 7 times.
✓ Branch 12 → 13 taken 7 times.
✗ Branch 12 → 143 not taken.
|
12 | BYTE* dstU = to_y ? nullptr : dst->GetWritePtr(PLANAR_U); |
| 308 |
3/4✓ Branch 14 → 15 taken 5 times.
✓ Branch 14 → 16 taken 7 times.
✓ Branch 17 → 18 taken 7 times.
✗ Branch 17 → 143 not taken.
|
12 | BYTE* dstV = to_y ? nullptr : dst->GetWritePtr(PLANAR_V); |
| 309 | |||
| 310 |
1/2✓ Branch 20 → 21 taken 12 times.
✗ Branch 20 → 143 not taken.
|
12 | const int Ypitch = dst->GetPitch(PLANAR_Y); |
| 311 |
3/4✓ Branch 21 → 22 taken 5 times.
✓ Branch 21 → 23 taken 7 times.
✓ Branch 24 → 25 taken 7 times.
✗ Branch 24 → 143 not taken.
|
12 | const int UVpitch = to_y ? 0 : dst->GetPitch(PLANAR_U); |
| 312 | |||
| 313 | 12 | const bool packedRGBsource = pixel_step > 0; | |
| 314 | |||
| 315 |
1/2✗ Branch 26 → 27 not taken.
✓ Branch 26 → 28 taken 12 times.
|
12 | if (packedRGBsource) { |
| 316 | ✗ | env->ThrowError("Packed RGB is no more allowed here, already preconverted to planar RGB. This is a bug."); | |
| 317 | } | ||
| 318 | |||
| 319 | // here we do planar RGB only | ||
| 320 | 12 | const int bits_per_pixel = source_bit_depth; | |
| 321 | |||
| 322 | // copy or fill alpha | ||
| 323 | // Two places, at YUV444toPlanarRGB as well | ||
| 324 | BYTE* dstpA; | ||
| 325 |
2/2✓ Branch 28 → 29 taken 1 time.
✓ Branch 28 → 65 taken 11 times.
|
12 | if (targetHasAlpha) { |
| 326 |
1/2✓ Branch 30 → 31 taken 1 time.
✗ Branch 30 → 143 not taken.
|
1 | dstpA = dst->GetWritePtr(PLANAR_A); |
| 327 |
1/2✓ Branch 32 → 33 taken 1 time.
✗ Branch 32 → 143 not taken.
|
1 | int heightA = dst->GetHeight(PLANAR_A); |
| 328 |
1/2✓ Branch 34 → 35 taken 1 time.
✗ Branch 34 → 143 not taken.
|
1 | int rowsizeA = dst->GetRowSize(PLANAR_A); |
| 329 |
1/2✓ Branch 36 → 37 taken 1 time.
✗ Branch 36 → 143 not taken.
|
1 | int dst_pitchA = dst->GetPitch(PLANAR_A); |
| 330 | // simple copy | ||
| 331 |
2/4✓ Branch 38 → 39 taken 1 time.
✗ Branch 38 → 143 not taken.
✓ Branch 39 → 40 taken 1 time.
✗ Branch 39 → 57 not taken.
|
1 | if (src->GetRowSize(PLANAR_A)) { |
| 332 | |||
| 333 |
1/2✓ Branch 40 → 41 taken 1 time.
✗ Branch 40 → 50 not taken.
|
1 | if (source_bit_depth == target_bit_depth) { |
| 334 | // vi.IsYUVA() no-no! vi is already the target video type | ||
| 335 |
5/10✓ Branch 42 → 43 taken 1 time.
✗ Branch 42 → 143 not taken.
✓ Branch 44 → 45 taken 1 time.
✗ Branch 44 → 143 not taken.
✓ Branch 46 → 47 taken 1 time.
✗ Branch 46 → 143 not taken.
✓ Branch 48 → 49 taken 1 time.
✗ Branch 48 → 143 not taken.
✓ Branch 49 → 64 taken 1 time.
✗ Branch 49 → 143 not taken.
|
1 | env->BitBlt(dstpA, dst_pitchA, src->GetReadPtr(PLANAR_A), src->GetPitch(PLANAR_A), src->GetRowSize(PLANAR_A_ALIGNED), src->GetHeight(PLANAR_A)); |
| 336 | } | ||
| 337 | else { | ||
| 338 | // RGBPA target + different bit-depth | ||
| 339 | // Alpha bit depth conversion needed, normal planes are done in-process. | ||
| 340 | // we need only conv_function_a, proper dispatching from ConvertBits | ||
| 341 | ✗ | conv_function_a(src->GetReadPtr(PLANAR_A), dstpA, src->GetRowSize(PLANAR_A), heightA, src->GetPitch(PLANAR_A), dst_pitchA, source_bit_depth, target_bit_depth, -1); | |
| 342 | } | ||
| 343 | } | ||
| 344 | else { | ||
| 345 | // fill default transparency | ||
| 346 | ✗ | switch (target_bit_depth) | |
| 347 | { | ||
| 348 | ✗ | case 1: | |
| 349 | ✗ | fill_plane<BYTE>(dstpA, heightA, rowsizeA, dst_pitchA, 255); | |
| 350 | ✗ | break; | |
| 351 | ✗ | case 2: | |
| 352 | ✗ | fill_plane<uint16_t>(dstpA, heightA, rowsizeA, dst_pitchA, (1 << target_bit_depth) - 1); | |
| 353 | ✗ | break; | |
| 354 | ✗ | case 4: | |
| 355 | ✗ | fill_plane<float>(dstpA, heightA, rowsizeA, dst_pitchA, 1.0f); | |
| 356 | ✗ | break; | |
| 357 | } | ||
| 358 | } | ||
| 359 | } | ||
| 360 | |||
| 361 |
3/6✓ Branch 66 → 67 taken 12 times.
✗ Branch 66 → 143 not taken.
✓ Branch 68 → 69 taken 12 times.
✗ Branch 68 → 143 not taken.
✓ Branch 70 → 71 taken 12 times.
✗ Branch 70 → 143 not taken.
|
12 | const BYTE* srcp[3] = { src->GetReadPtr(PLANAR_G), src->GetReadPtr(PLANAR_B), src->GetReadPtr(PLANAR_R) }; |
| 362 |
3/6✓ Branch 72 → 73 taken 12 times.
✗ Branch 72 → 143 not taken.
✓ Branch 74 → 75 taken 12 times.
✗ Branch 74 → 143 not taken.
✓ Branch 76 → 77 taken 12 times.
✗ Branch 76 → 143 not taken.
|
12 | const int srcPitch[3] = { src->GetPitch(PLANAR_G), src->GetPitch(PLANAR_B), src->GetPitch(PLANAR_R) }; |
| 363 | |||
| 364 | 12 | BYTE* dstp[3] = { dstY, dstU, dstV }; | |
| 365 | 12 | int dstPitch[3] = { Ypitch, UVpitch, UVpitch }; | |
| 366 | |||
| 367 | 12 | const bool force_float = quality; | |
| 368 | |||
| 369 | // to Y | ||
| 370 | |||
| 371 |
2/2✓ Branch 77 → 78 taken 5 times.
✓ Branch 77 → 109 taken 7 times.
|
12 | if (to_y) { |
| 372 | #ifdef INTEL_INTRINSICS | ||
| 373 |
2/4✓ Branch 78 → 79 taken 5 times.
✗ Branch 78 → 143 not taken.
✓ Branch 79 → 80 taken 5 times.
✗ Branch 79 → 89 not taken.
|
5 | if (env->GetCPUFlags() & CPUF_AVX2) { |
| 374 |
2/2✓ Branch 80 → 81 taken 2 times.
✓ Branch 80 → 82 taken 3 times.
|
5 | if (bits_per_pixel == 8) |
| 375 |
1/2✓ Branch 81 → 88 taken 2 times.
✗ Branch 81 → 143 not taken.
|
2 | convert_yuv_to_planarrgb_avx2<ConversionDirection::RGB_TO_Y, uint8_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); |
| 376 |
2/2✓ Branch 82 → 83 taken 1 time.
✓ Branch 82 → 84 taken 2 times.
|
3 | else if (bits_per_pixel < 16) |
| 377 |
1/2✓ Branch 83 → 88 taken 1 time.
✗ Branch 83 → 143 not taken.
|
1 | convert_yuv_to_planarrgb_avx2<ConversionDirection::RGB_TO_Y, uint16_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); |
| 378 |
2/2✓ Branch 84 → 85 taken 1 time.
✓ Branch 84 → 86 taken 1 time.
|
2 | else if (bits_per_pixel == 16) |
| 379 |
1/2✓ Branch 85 → 88 taken 1 time.
✗ Branch 85 → 143 not taken.
|
1 | convert_yuv_to_planarrgb_avx2<ConversionDirection::RGB_TO_Y, uint16_t, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); |
| 380 |
1/2✓ Branch 86 → 87 taken 1 time.
✗ Branch 86 → 88 not taken.
|
1 | else if (bits_per_pixel == 32) |
| 381 |
1/2✓ Branch 87 → 88 taken 1 time.
✗ Branch 87 → 143 not taken.
|
1 | convert_yuv_to_planarrgb_avx2<ConversionDirection::RGB_TO_Y, float, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); |
| 382 | 5 | return dst; | |
| 383 | } | ||
| 384 | |||
| 385 | ✗ | if (env->GetCPUFlags() & CPUF_SSE2) { | |
| 386 | ✗ | if (bits_per_pixel == 8) | |
| 387 | ✗ | convert_yuv_to_planarrgb_sse2<ConversionDirection::RGB_TO_Y, uint8_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); | |
| 388 | ✗ | else if (bits_per_pixel < 16) | |
| 389 | ✗ | convert_yuv_to_planarrgb_sse2<ConversionDirection::RGB_TO_Y, uint16_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); | |
| 390 | ✗ | else if (bits_per_pixel == 16) | |
| 391 | ✗ | convert_yuv_to_planarrgb_sse2<ConversionDirection::RGB_TO_Y, uint16_t, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); | |
| 392 | ✗ | else if (bits_per_pixel == 32) | |
| 393 | ✗ | convert_yuv_to_planarrgb_sse2<ConversionDirection::RGB_TO_Y, float, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); | |
| 394 | ✗ | return dst; | |
| 395 | } | ||
| 396 | |||
| 397 | #endif | ||
| 398 | |||
| 399 | ✗ | if (bits_per_pixel == 8) | |
| 400 | ✗ | convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_Y, uint8_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); | |
| 401 | ✗ | else if (bits_per_pixel < 16) | |
| 402 | ✗ | convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_Y, uint16_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); | |
| 403 | ✗ | else if (bits_per_pixel == 16) | |
| 404 | ✗ | convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_Y, uint16_t, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); | |
| 405 | ✗ | else if (bits_per_pixel == 32) | |
| 406 | ✗ | convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_Y, float, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); | |
| 407 | ✗ | return dst; | |
| 408 | } | ||
| 409 | |||
| 410 | // to YUV | ||
| 411 | |||
| 412 | #ifdef INTEL_INTRINSICS | ||
| 413 |
2/4✓ Branch 109 → 110 taken 7 times.
✗ Branch 109 → 143 not taken.
✓ Branch 110 → 111 taken 7 times.
✗ Branch 110 → 120 not taken.
|
7 | if (env->GetCPUFlags() & CPUF_AVX2) { |
| 414 |
2/2✓ Branch 111 → 112 taken 3 times.
✓ Branch 111 → 113 taken 4 times.
|
7 | if (bits_per_pixel == 8) |
| 415 |
1/2✓ Branch 112 → 119 taken 3 times.
✗ Branch 112 → 143 not taken.
|
3 | convert_yuv_to_planarrgb_avx2<ConversionDirection::RGB_TO_YUV, uint8_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); |
| 416 |
1/2✗ Branch 113 → 114 not taken.
✓ Branch 113 → 115 taken 4 times.
|
4 | else if (bits_per_pixel < 16) |
| 417 | ✗ | convert_yuv_to_planarrgb_avx2<ConversionDirection::RGB_TO_YUV, uint16_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); | |
| 418 |
2/2✓ Branch 115 → 116 taken 1 time.
✓ Branch 115 → 117 taken 3 times.
|
4 | else if (bits_per_pixel == 16) |
| 419 |
1/2✓ Branch 116 → 119 taken 1 time.
✗ Branch 116 → 143 not taken.
|
1 | convert_yuv_to_planarrgb_avx2<ConversionDirection::RGB_TO_YUV, uint16_t, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); |
| 420 |
1/2✓ Branch 117 → 118 taken 3 times.
✗ Branch 117 → 119 not taken.
|
3 | else if (bits_per_pixel == 32) |
| 421 |
1/2✓ Branch 118 → 119 taken 3 times.
✗ Branch 118 → 143 not taken.
|
3 | convert_yuv_to_planarrgb_avx2<ConversionDirection::RGB_TO_YUV, float, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); |
| 422 | 7 | return dst; | |
| 423 | } | ||
| 424 | |||
| 425 | ✗ | if (env->GetCPUFlags() & CPUF_SSE2) { | |
| 426 | ✗ | if (bits_per_pixel == 8) | |
| 427 | ✗ | convert_yuv_to_planarrgb_sse2<ConversionDirection::RGB_TO_YUV, uint8_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); | |
| 428 | ✗ | else if (bits_per_pixel < 16) | |
| 429 | ✗ | convert_yuv_to_planarrgb_sse2<ConversionDirection::RGB_TO_YUV, uint16_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); | |
| 430 | ✗ | else if (bits_per_pixel == 16) | |
| 431 | ✗ | convert_yuv_to_planarrgb_sse2<ConversionDirection::RGB_TO_YUV, uint16_t, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); | |
| 432 | ✗ | else if (bits_per_pixel == 32) | |
| 433 | ✗ | convert_yuv_to_planarrgb_sse2<ConversionDirection::RGB_TO_YUV, float, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); | |
| 434 | ✗ | return dst; | |
| 435 | } | ||
| 436 | |||
| 437 | #endif | ||
| 438 | |||
| 439 | ✗ | if (bits_per_pixel == 8) | |
| 440 | ✗ | convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_YUV, uint8_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); | |
| 441 | ✗ | else if (bits_per_pixel < 16) | |
| 442 | ✗ | convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_YUV, uint16_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); | |
| 443 | ✗ | else if (bits_per_pixel == 16) | |
| 444 | ✗ | convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_YUV, uint16_t, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); | |
| 445 | ✗ | else if (bits_per_pixel == 32) | |
| 446 | ✗ | convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_YUV, float, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); | |
| 447 | ✗ | return dst; | |
| 448 | |||
| 449 | 12 | } | |
| 450 | |||
| 451 | |||
| 452 | |||
| 453 | /***************************************************** | ||
| 454 | * ConvertYV24ToRGB | ||
| 455 | * | ||
| 456 | * (c) Klaus Post, 2005 | ||
| 457 | * Generic 4:4:4(:4), 16 bit and Planar RGB(A) support 2016 by PF | ||
| 458 | ******************************************************/ | ||
| 459 | |||
| 460 | |||
| 461 | 8 | ConvertYUV444ToRGB::ConvertYUV444ToRGB(PClip src, const char *matrix_name, int _pixel_step, int _target_bit_depth, bool _quality, bool& bitdepthConverted, IScriptEnvironment* env) | |
| 462 |
2/4✓ Branch 2 → 3 taken 8 times.
✗ Branch 2 → 60 not taken.
✓ Branch 3 → 4 taken 8 times.
✗ Branch 3 → 58 not taken.
|
8 | : GenericVideoFilter(src), pixel_step(_pixel_step), target_bit_depth(_target_bit_depth), quality(_quality), conv_function(nullptr), conv_function_chroma(nullptr), conv_function_a(nullptr) |
| 463 | { | ||
| 464 | |||
| 465 |
2/4✓ Branch 5 → 6 taken 8 times.
✗ Branch 5 → 63 not taken.
✗ Branch 6 → 7 not taken.
✓ Branch 6 → 8 taken 8 times.
|
8 | if (!vi.Is444()) |
| 466 | ✗ | env->ThrowError("ConvertYUV444ToRGB: Only 4:4:4 data input accepted"); | |
| 467 | |||
| 468 |
1/2✓ Branch 9 → 10 taken 8 times.
✗ Branch 9 → 63 not taken.
|
8 | auto frame0 = child->GetFrame(0, env); |
| 469 |
1/2✓ Branch 10 → 11 taken 8 times.
✗ Branch 10 → 61 not taken.
|
8 | const AVSMap* props = env->getFramePropsRO(frame0); |
| 470 |
1/2✓ Branch 11 → 12 taken 8 times.
✗ Branch 11 → 61 not taken.
|
8 | matrix_parse_merge_with_props(false /*in yuv*/, true /*out rgb*/, matrix_name, props, theMatrix, theColorRange, theOutColorRange, env); |
| 471 | // Good to know: | ||
| 472 | // - When frame property "_ColorRange" exists, it overrides the default output RGB color range. | ||
| 473 | // - PC.xxx old-style matrix names leave the color range unchanged, whether they exist or not. | ||
| 474 | // - When using PC.xxx and YUV is limited => output RGB is narrow range (limited) | ||
| 475 | // - Other non PC.xxx old matrix names: | ||
| 476 | // - input range is defined by the matrix name, even if _ColorRange frame property exists | ||
| 477 | // - output range is default Full for RGB, unless _ColorRange exists, when its value defines the output RGB range (full or limited/narrow) | ||
| 478 | // - new style matrix definitions: see docs. Preserve what is not set, distinct :f or :l suffixes may tell the color range, not part of matrix name. | ||
| 479 | // - Matrix coefficients still need to know input and output color range (full or limited/narrow) so by this time we have these two. | ||
| 480 | |||
| 481 | 8 | const int shift = 13; // for integer arithmetic, over 13 bits would overflow the matrix elements/internal calculation | |
| 482 |
1/2✓ Branch 12 → 13 taken 8 times.
✗ Branch 12 → 61 not taken.
|
8 | const int bits_per_pixel = vi.BitsPerComponent(); |
| 483 | 8 | source_bit_depth = bits_per_pixel; | |
| 484 | |||
| 485 |
2/4✓ Branch 13 → 14 taken 8 times.
✗ Branch 13 → 61 not taken.
✗ Branch 14 → 15 not taken.
✓ Branch 14 → 16 taken 8 times.
|
8 | if (!do_BuildMatrix_Yuv2Rgb(theMatrix, theColorRange, theOutColorRange, shift, source_bit_depth, /*ref*/matrix)) |
| 486 | ✗ | env->ThrowError("ConvertYUV444ToRGB: Unknown matrix."); | |
| 487 | |||
| 488 | // Old comment: what is not implemented in-process, we do the conversion with invoked ConvertBits() | ||
| 489 | // Now all source-target combinations are supported. | ||
| 490 | |||
| 491 | // target_bit_depth == -1: no conversion required | ||
| 492 | 8 | const bool need_bitdepth_conversion = (target_bit_depth != -1); | |
| 493 | |||
| 494 | // get alpha converter, GetFrame is using that if alpha must be depth-converterd and not only copied | ||
| 495 |
2/2✓ Branch 16 → 17 taken 1 time.
✓ Branch 16 → 21 taken 7 times.
|
8 | if (need_bitdepth_conversion) |
| 496 | { | ||
| 497 | // supported conversions: | ||
| 498 | // 8-16-bits any range to 8-16, 32 bits any range | ||
| 499 | 1 | bitdepthConverted = true; | |
| 500 | #ifdef INTEL_INTRINSICS | ||
| 501 |
1/2✓ Branch 17 → 18 taken 1 time.
✗ Branch 17 → 61 not taken.
|
1 | const bool sse2 = !!(env->GetCPUFlags() & CPUF_SSE2); |
| 502 |
1/2✓ Branch 18 → 19 taken 1 time.
✗ Branch 18 → 61 not taken.
|
1 | const bool sse4 = !!(env->GetCPUFlags() & CPUF_SSE4_1); |
| 503 |
1/2✓ Branch 19 → 20 taken 1 time.
✗ Branch 19 → 61 not taken.
|
1 | const bool avx2 = !!(env->GetCPUFlags() & CPUF_AVX2); |
| 504 | // we really need only alpha conversion function | ||
| 505 | 1 | const bool fulls = true; // alpha is always full range | |
| 506 | 1 | const bool fulld = true; // alpha is always full range | |
| 507 | 1 | const int dither_mode = -1; | |
| 508 | #ifdef INTEL_INTRINSICS | ||
| 509 |
1/2✓ Branch 20 → 22 taken 1 time.
✗ Branch 20 → 61 not taken.
|
1 | get_convert_any_bits_functions(dither_mode, source_bit_depth, target_bit_depth, fulls, fulld, sse2, sse4, avx2, conv_function, conv_function_chroma, conv_function_a); |
| 510 | #else | ||
| 511 | get_convert_any_bits_functions(dither_mode, source_bit_depth, target_bit_depth, fulls, fulld, conv_function, conv_function_chroma, conv_function_a); | ||
| 512 | #endif | ||
| 513 | |||
| 514 | #endif | ||
| 515 | |||
| 516 | } | ||
| 517 | else { | ||
| 518 | 7 | bitdepthConverted = false; | |
| 519 | 7 | target_bit_depth = source_bit_depth; | |
| 520 | } | ||
| 521 | |||
| 522 | 8 | theOutMatrix = Matrix_e::AVS_MATRIX_RGB; | |
| 523 | |||
| 524 |
1/6✓ Branch 22 → 23 taken 8 times.
✗ Branch 22 → 51 not taken.
✗ Branch 22 → 52 not taken.
✗ Branch 22 → 53 not taken.
✗ Branch 22 → 54 not taken.
✗ Branch 22 → 55 not taken.
|
8 | switch (pixel_step) |
| 525 | { | ||
| 526 | 8 | case -1: case -2: // target is planar RGB(A): all bit depths supported | |
| 527 | { | ||
| 528 | 8 | const bool hasAlpha = (pixel_step == -2); | |
| 529 |
4/7✓ Branch 23 → 24 taken 2 times.
✓ Branch 23 → 28 taken 1 time.
✗ Branch 23 → 32 not taken.
✗ Branch 23 → 36 not taken.
✓ Branch 23 → 40 taken 2 times.
✓ Branch 23 → 44 taken 3 times.
✗ Branch 23 → 48 not taken.
|
8 | switch (target_bit_depth) |
| 530 | { | ||
| 531 |
2/2✓ Branch 24 → 25 taken 1 time.
✓ Branch 24 → 26 taken 1 time.
|
2 | case 8: vi.pixel_type = hasAlpha ? VideoInfo::CS_RGBAP : VideoInfo::CS_RGBP; break; |
| 532 |
1/2✗ Branch 28 → 29 not taken.
✓ Branch 28 → 30 taken 1 time.
|
1 | case 10: vi.pixel_type = hasAlpha ? VideoInfo::CS_RGBAP10 : VideoInfo::CS_RGBP10; break; |
| 533 | ✗ | case 12: vi.pixel_type = hasAlpha ? VideoInfo::CS_RGBAP12 : VideoInfo::CS_RGBP12; break; | |
| 534 | ✗ | case 14: vi.pixel_type = hasAlpha ? VideoInfo::CS_RGBAP14 : VideoInfo::CS_RGBP14; break; | |
| 535 |
1/2✓ Branch 40 → 41 taken 2 times.
✗ Branch 40 → 42 not taken.
|
2 | case 16: vi.pixel_type = hasAlpha ? VideoInfo::CS_RGBAP16 : VideoInfo::CS_RGBP16; break; |
| 536 |
2/2✓ Branch 44 → 45 taken 1 time.
✓ Branch 44 → 46 taken 2 times.
|
3 | case 32: vi.pixel_type = hasAlpha ? VideoInfo::CS_RGBAPS : VideoInfo::CS_RGBPS; break; |
| 537 | ✗ | default: | |
| 538 | ✗ | env->ThrowError("ConvertYUV444ToRGB: invalid vi.BitsPerComponent(): %d", vi.BitsPerComponent()); | |
| 539 | } | ||
| 540 | } | ||
| 541 | 8 | break; | |
| 542 | ✗ | case 3: vi.pixel_type = VideoInfo::CS_BGR24; break; | |
| 543 | ✗ | case 4: vi.pixel_type = VideoInfo::CS_BGR32; break; | |
| 544 | ✗ | case 6: vi.pixel_type = VideoInfo::CS_BGR48; break; | |
| 545 | ✗ | case 8: vi.pixel_type = VideoInfo::CS_BGR64; break; | |
| 546 | ✗ | default: | |
| 547 | ✗ | env->ThrowError("ConvertYUV444ToRGB: invalid pixel step: %d", pixel_step); | |
| 548 | } | ||
| 549 | |||
| 550 | 8 | } | |
| 551 | |||
| 552 | template<int pixel_step, bool source_has_alpha> | ||
| 553 | ✗ | static void convert_yv24_to_rgb_c(BYTE* dstp, const BYTE* srcY, const BYTE* srcU, const BYTE* srcV, const BYTE* srcA, int dst_pitch, int src_pitch_y, int src_pitch_uv, int src_pitch_a, int width, int height, const ConversionMatrix& matrix) | |
| 554 | { | ||
| 555 | ✗ | dstp += dst_pitch * (height - 1); // We start at last line. Packed RGB is bottom-up. | |
| 556 | ✗ | auto round_mask_plus_rgb_offset_i = 4096 + (matrix.offset_rgb << 13); | |
| 557 | if constexpr (pixel_step == 4) { // RGB32 | ||
| 558 | ✗ | for (int y = 0; y < height; y++) { | |
| 559 | ✗ | for (int x = 0; x < width; x++) { | |
| 560 | ✗ | int Y = srcY[x] + matrix.offset_y; | |
| 561 | ✗ | int U = srcU[x] - 128; | |
| 562 | ✗ | int V = srcV[x] - 128; | |
| 563 | ✗ | uint8_t a = source_has_alpha ? srcA[x] : 255; // YUVA aware | |
| 564 | ✗ | int b = (((int)matrix.y_b * Y + (int)matrix.u_b * U + (int)matrix.v_b * V + round_mask_plus_rgb_offset_i) >> 13); | |
| 565 | ✗ | int g = (((int)matrix.y_g * Y + (int)matrix.u_g * U + (int)matrix.v_g * V + round_mask_plus_rgb_offset_i) >> 13); | |
| 566 | ✗ | int r = (((int)matrix.y_r * Y + (int)matrix.u_r * U + (int)matrix.v_r * V + round_mask_plus_rgb_offset_i) >> 13); | |
| 567 | ✗ | dstp[x * 4 + 0] = PixelClip(b); // All the safety we can wish for. | |
| 568 | ✗ | dstp[x * 4 + 1] = PixelClip(g); // Probably needed here. | |
| 569 | ✗ | dstp[x * 4 + 2] = PixelClip(r); | |
| 570 | ✗ | dstp[x * 4 + 3] = a; // alpha | |
| 571 | } | ||
| 572 | ✗ | dstp -= dst_pitch; | |
| 573 | ✗ | srcY += src_pitch_y; | |
| 574 | ✗ | srcU += src_pitch_uv; | |
| 575 | ✗ | srcV += src_pitch_uv; | |
| 576 | ✗ | srcA += src_pitch_a; | |
| 577 | } | ||
| 578 | } | ||
| 579 | else if constexpr (pixel_step == 3) { // RGB24 | ||
| 580 | ✗ | const int Dstep = dst_pitch + (width * pixel_step); | |
| 581 | ✗ | for (int y = 0; y < height; y++) { | |
| 582 | ✗ | for (int x = 0; x < width; x++) { | |
| 583 | ✗ | int Y = srcY[x] + matrix.offset_y; | |
| 584 | ✗ | int U = srcU[x] - 128; | |
| 585 | ✗ | int V = srcV[x] - 128; | |
| 586 | ✗ | int b = (((int)matrix.y_b * Y + (int)matrix.u_b * U + (int)matrix.v_b * V + round_mask_plus_rgb_offset_i) >> 13); | |
| 587 | ✗ | int g = (((int)matrix.y_g * Y + (int)matrix.u_g * U + (int)matrix.v_g * V + round_mask_plus_rgb_offset_i) >> 13); | |
| 588 | ✗ | int r = (((int)matrix.y_r * Y + (int)matrix.u_r * U + (int)matrix.v_r * V + round_mask_plus_rgb_offset_i) >> 13); | |
| 589 | ✗ | dstp[0] = PixelClip(b); // All the safety we can wish for. | |
| 590 | ✗ | dstp[1] = PixelClip(g); // Probably needed here. | |
| 591 | ✗ | dstp[2] = PixelClip(r); | |
| 592 | ✗ | dstp += pixel_step; | |
| 593 | } | ||
| 594 | ✗ | dstp -= Dstep; | |
| 595 | ✗ | srcY += src_pitch_y; | |
| 596 | ✗ | srcU += src_pitch_uv; | |
| 597 | ✗ | srcV += src_pitch_uv; | |
| 598 | } | ||
| 599 | } | ||
| 600 | ✗ | } | |
| 601 | |||
| 602 | |||
| 603 | // C reference implementation matching AVX2/SSE2 logic with all conversion directions | ||
| 604 | template<ConversionDirection direction, typename pixel_t, bool lessthan16bit, bool lessthan16bit_target, typename pixel_t_dst, YuvRgbConversionType conv_type> | ||
| 605 | 35 | static void convert_yuv_to_planarrgb_c_internal(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, | |
| 606 | int bits_per_pixel, int bits_per_pixel_target) | ||
| 607 | { | ||
| 608 | // int64_t needed for exact 16 bit pixels in integer workflow | ||
| 609 | // float input always uses float workflow | ||
| 610 | typedef typename std::conditional<sizeof(pixel_t) == 1 || lessthan16bit, int, int64_t>::type safe_int_t; | ||
| 611 | |||
| 612 | // Remark: for RGB->YUV and RGB->Y 16 bit original, we later redirect the constexpr values to a full-float-workflow. | ||
| 613 | // Though int64_t would work here in C just fine, but has serious performance issues at Intel SIMD, | ||
| 614 | // so we make it identical to the SIMD path and use float path which is simple and much quicker in this case.) | ||
| 615 | |||
| 616 | 35 | constexpr int INT_ARITH_SHIFT = | |
| 617 | (direction == ConversionDirection::YUV_TO_RGB) ? 13 : | ||
| 618 | (direction == ConversionDirection::RGB_TO_YUV || direction == ConversionDirection::RGB_TO_Y) ? 15 : | ||
| 619 | (direction == ConversionDirection::YUV_TO_YUV) ? 14 : 13; | ||
| 620 | |||
| 621 | // Validate: float input requires FORCE_FLOAT conversion type | ||
| 622 | static_assert(!(std::is_floating_point<pixel_t>::value && conv_type != YuvRgbConversionType::FORCE_FLOAT), | ||
| 623 | "FORCE_FLOAT conversion type is required for float input pixel type"); | ||
| 624 | |||
| 625 | 35 | constexpr bool final_is_float = std::is_floating_point<pixel_t_dst>::value; | |
| 626 | 35 | constexpr bool would_need_64bit_v_patch = !lessthan16bit && !final_is_float && (INT_ARITH_SHIFT == 15); | |
| 627 | // RGB_TO_YUV, RGB_TO_Y 16 bit origin case needs 64 bit extension at one point to avoid overflow | ||
| 628 | // but it makes it much slower than the full-float path, so we force float path for that case as well | ||
| 629 | |||
| 630 | // effectively full-float-inside for int full range conversion, but with the same output rules as other float conversions | ||
| 631 | 35 | constexpr bool force_float = (conv_type == YuvRgbConversionType::FORCE_FLOAT) || would_need_64bit_v_patch; | |
| 632 | |||
| 633 | 35 | constexpr bool need_int_conversion_narrow_range = conv_type == YuvRgbConversionType::BITCONV_INT_LIMITED; | |
| 634 | 35 | constexpr bool need_int_conversion_full_range = conv_type == YuvRgbConversionType::BITCONV_INT_FULL; | |
| 635 | 35 | constexpr bool need_int_conversion = conv_type == YuvRgbConversionType::BITCONV_INT_FULL || | |
| 636 | conv_type == YuvRgbConversionType::BITCONV_INT_LIMITED || | ||
| 637 | (conv_type == YuvRgbConversionType::FORCE_FLOAT && !final_is_float); | ||
| 638 | 35 | const bool float_matrix_workflow = force_float || need_int_conversion_full_range; | |
| 639 | |||
| 640 | // quasi-constexpr, may help optimizer | ||
| 641 | 14 | if constexpr (std::is_same<pixel_t, uint8_t>::value) bits_per_pixel = 8; | |
| 642 | 14 | if constexpr (std::is_same<pixel_t_dst, uint8_t>::value) bits_per_pixel_target = 8; | |
| 643 | 10 | if constexpr (std::is_same<pixel_t, uint16_t>::value && !lessthan16bit) bits_per_pixel = 16; | |
| 644 | 8 | if constexpr (std::is_same<pixel_t_dst, uint16_t>::value && !lessthan16bit_target) bits_per_pixel_target = 16; | |
| 645 | 22 | if constexpr (conv_type == YuvRgbConversionType::NATIVE_INT) bits_per_pixel_target = bits_per_pixel; | |
| 646 | |||
| 647 | 35 | const int bit_diff = need_int_conversion ? bits_per_pixel_target - bits_per_pixel : 0; | |
| 648 | 35 | const int target_shift = need_int_conversion_narrow_range ? INT_ARITH_SHIFT - bit_diff : INT_ARITH_SHIFT; | |
| 649 | 35 | const int ROUNDER = (final_is_float || float_matrix_workflow) ? 0 : (1 << (target_shift - 1)); | |
| 650 | |||
| 651 | 35 | const float out_offset_f = m.offset_out_f_32; | |
| 652 | 35 | const int half_pixel_offset = 1 << (bits_per_pixel - 1); | |
| 653 | 35 | const int half_pixel_offset_target = 1 << (bits_per_pixel_target - 1); | |
| 654 | 35 | const int max_pixel_value_target = (1 << bits_per_pixel_target) - 1; | |
| 655 | |||
| 656 | 35 | bits_conv_constants conversion_ranges; | |
| 657 | 35 | const bool full_scale_d = m.offset_out == 0; | |
| 658 |
22/320void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 6 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 2 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 4 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 2 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 3 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, float, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 2 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 24 not taken.
|
35 | get_bits_conv_constants(conversion_ranges, false, full_scale_d, full_scale_d, bits_per_pixel, bits_per_pixel_target); |
| 659 | |||
| 660 | 35 | constexpr int int_arithmetic_shift = 1 << INT_ARITH_SHIFT; | |
| 661 | 35 | float scale_f = conversion_ranges.mul_factor; | |
| 662 | if (final_is_float && !float_matrix_workflow) | ||
| 663 | 1 | scale_f = scale_f / int_arithmetic_shift; | |
| 664 | |||
| 665 | 35 | const int offset_in_scalar = m.offset_in; | |
| 666 | 35 | const int offset_out_scalar = m.offset_out; | |
| 667 | |||
| 668 | int round_mask_plus_offset_out_i; | ||
| 669 | int round_mask_plus_offset_out_chroma_i; | ||
| 670 | |||
| 671 | if constexpr (!float_matrix_workflow) { | ||
| 672 | 22 | round_mask_plus_offset_out_i = final_is_float ? 0 : ROUNDER + (offset_out_scalar << INT_ARITH_SHIFT); | |
| 673 | 22 | round_mask_plus_offset_out_chroma_i = final_is_float ? 0 : ROUNDER + (half_pixel_offset << INT_ARITH_SHIFT); | |
| 674 | } | ||
| 675 | |||
| 676 |
44/320void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 60 → 56 taken 5 times.
✓ Branch 60 → 61 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 60 → 56 not taken.
✗ Branch 60 → 61 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 55 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 63 → 56 taken 30 times.
✓ Branch 63 → 64 taken 6 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 60 → 56 not taken.
✗ Branch 60 → 61 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 55 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 63 → 56 taken 5 times.
✓ Branch 63 → 64 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 60 → 56 not taken.
✗ Branch 60 → 61 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 55 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 63 → 56 taken 10 times.
✓ Branch 63 → 64 taken 2 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 60 → 56 taken 5 times.
✓ Branch 60 → 61 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 60 → 56 not taken.
✗ Branch 60 → 61 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 55 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 63 → 56 taken 20 times.
✓ Branch 63 → 64 taken 4 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 60 → 56 taken 2 times.
✓ Branch 60 → 61 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 55 taken 2 times.
✓ Branch 59 → 60 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 63 → 56 taken 10 times.
✓ Branch 63 → 64 taken 2 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 60 → 56 not taken.
✗ Branch 60 → 61 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 55 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 63 → 56 taken 5 times.
✓ Branch 63 → 64 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 60 → 56 taken 3 times.
✓ Branch 60 → 61 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 60 → 56 not taken.
✗ Branch 60 → 61 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 55 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 63 → 56 taken 3 times.
✓ Branch 63 → 64 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 60 → 56 not taken.
✗ Branch 60 → 61 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 55 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 63 → 56 taken 9 times.
✓ Branch 63 → 64 taken 3 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 60 → 56 not taken.
✗ Branch 60 → 61 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 55 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 63 → 56 not taken.
✗ Branch 63 → 64 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, float, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 60 → 56 taken 6 times.
✓ Branch 60 → 61 taken 2 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 60 → 56 not taken.
✗ Branch 60 → 61 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 55 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 56 taken 3 times.
✓ Branch 61 → 62 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 56 taken 3 times.
✓ Branch 61 → 62 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 56 taken 3 times.
✓ Branch 61 → 62 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 60 → 56 not taken.
✗ Branch 60 → 61 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 55 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 56 taken 3 times.
✓ Branch 61 → 62 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 56 taken 3 times.
✓ Branch 61 → 62 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 60 → 56 not taken.
✗ Branch 60 → 61 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 55 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 56 taken 3 times.
✓ Branch 61 → 62 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 56 taken 3 times.
✓ Branch 61 → 62 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 56 taken 3 times.
✓ Branch 61 → 62 taken 1 time.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 56 not taken.
✗ Branch 61 → 62 not taken.
|
174 | for (int y = 0; y < height; y++) { |
| 677 | 139 | const pixel_t* src0 = reinterpret_cast<const pixel_t*>(srcp[0]); // Y or G | |
| 678 | 139 | const pixel_t* src1 = reinterpret_cast<const pixel_t*>(srcp[1]); // U or B | |
| 679 | 139 | const pixel_t* src2 = reinterpret_cast<const pixel_t*>(srcp[2]); // V or R | |
| 680 | 139 | pixel_t_dst* d0 = reinterpret_cast<pixel_t_dst*>(dstp[0]); // G or Y | |
| 681 | 139 | pixel_t_dst* d1 = reinterpret_cast<pixel_t_dst*>(dstp[1]); // B or U | |
| 682 | 139 | pixel_t_dst* d2 = reinterpret_cast<pixel_t_dst*>(dstp[2]); // R or V | |
| 683 | |||
| 684 |
44/320void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 58 → 57 taken 85 times.
✓ Branch 58 → 59 taken 5 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 57 not taken.
✗ Branch 58 → 59 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 56 not taken.
✗ Branch 57 → 58 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 57 taken 960 times.
✓ Branch 61 → 62 taken 30 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 57 not taken.
✗ Branch 58 → 59 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 56 not taken.
✗ Branch 57 → 58 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 57 taken 160 times.
✓ Branch 61 → 62 taken 5 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 57 not taken.
✗ Branch 58 → 59 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 56 not taken.
✗ Branch 57 → 58 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 57 taken 320 times.
✓ Branch 61 → 62 taken 10 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 58 → 57 taken 95 times.
✓ Branch 58 → 59 taken 5 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 57 not taken.
✗ Branch 58 → 59 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 56 not taken.
✗ Branch 57 → 58 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 57 taken 505 times.
✓ Branch 61 → 62 taken 20 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 58 → 57 taken 10 times.
✓ Branch 58 → 59 taken 2 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 56 taken 10 times.
✓ Branch 57 → 58 taken 2 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 57 taken 245 times.
✓ Branch 61 → 62 taken 10 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 57 not taken.
✗ Branch 58 → 59 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 56 not taken.
✗ Branch 57 → 58 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 57 taken 85 times.
✓ Branch 61 → 62 taken 5 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 58 → 57 taken 27 times.
✓ Branch 58 → 59 taken 3 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 57 not taken.
✗ Branch 58 → 59 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 56 not taken.
✗ Branch 57 → 58 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 57 taken 51 times.
✓ Branch 61 → 62 taken 3 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 57 not taken.
✗ Branch 58 → 59 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 56 not taken.
✗ Branch 57 → 58 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 61 → 57 taken 123 times.
✓ Branch 61 → 62 taken 9 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 57 not taken.
✗ Branch 58 → 59 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 56 not taken.
✗ Branch 57 → 58 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 61 → 57 not taken.
✗ Branch 61 → 62 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, float, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 58 → 57 taken 192 times.
✓ Branch 58 → 59 taken 6 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 57 not taken.
✗ Branch 58 → 59 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 56 not taken.
✗ Branch 57 → 58 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 57 taken 96 times.
✓ Branch 59 → 60 taken 3 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 57 taken 96 times.
✓ Branch 59 → 60 taken 3 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 57 taken 96 times.
✓ Branch 59 → 60 taken 3 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 57 not taken.
✗ Branch 58 → 59 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 56 not taken.
✗ Branch 57 → 58 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 57 taken 96 times.
✓ Branch 59 → 60 taken 3 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 57 taken 96 times.
✓ Branch 59 → 60 taken 3 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, float, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 57 not taken.
✗ Branch 58 → 59 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, float, (YuvRgbConversionType)2>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 56 not taken.
✗ Branch 57 → 58 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 57 taken 96 times.
✓ Branch 59 → 60 taken 3 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 57 taken 96 times.
✓ Branch 59 → 60 taken 3 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 57 taken 96 times.
✓ Branch 59 → 60 taken 3 times.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 57 not taken.
✗ Branch 59 → 60 not taken.
|
3775 | for (int x = 0; x < width; x++) { |
| 685 | float in0_f, in1_f, in2_f; | ||
| 686 | int in0_i, in1_i, in2_i; | ||
| 687 | |||
| 688 | // Load inputs | ||
| 689 | if constexpr (std::is_floating_point<pixel_t>::value) { | ||
| 690 | 399 | in0_f = src0[x]; | |
| 691 | 399 | in1_f = src1[x]; | |
| 692 | 399 | in2_f = src2[x]; | |
| 693 | } | ||
| 694 | else { | ||
| 695 | 3237 | in0_i = static_cast<int>(src0[x]); | |
| 696 | 3237 | in1_i = static_cast<int>(src1[x]); | |
| 697 | 3237 | in2_i = static_cast<int>(src2[x]); | |
| 698 | } | ||
| 699 | |||
| 700 | float out0_f, out1_f, out2_f; | ||
| 701 | safe_int_t out0_raw, out1_raw, out2_raw; // Keep as int64_t for 16-bit (see would_need_64bit_v_patch remarks above) | ||
| 702 | |||
| 703 | if constexpr (float_matrix_workflow) { | ||
| 704 | // Float workflow | ||
| 705 | if constexpr (!std::is_floating_point<pixel_t>::value) { | ||
| 706 | // Convert integer to float and apply input offset | ||
| 707 | if constexpr (direction == ConversionDirection::YUV_TO_RGB || direction == ConversionDirection::YUV_TO_YUV) { | ||
| 708 | // YUV input | ||
| 709 | ✗ | in0_f = static_cast<float>(in0_i + offset_in_scalar); // Y | |
| 710 | ✗ | in1_f = static_cast<float>(in1_i - half_pixel_offset); // U | |
| 711 | ✗ | in2_f = static_cast<float>(in2_i - half_pixel_offset); // V | |
| 712 | } | ||
| 713 | else if constexpr (direction == ConversionDirection::RGB_TO_YUV || direction == ConversionDirection::RGB_TO_Y || direction == ConversionDirection::RGB_TO_RGB) { | ||
| 714 | // RGB input | ||
| 715 | 735 | in0_f = static_cast<float>(in0_i + offset_in_scalar); // G | |
| 716 | 735 | in1_f = static_cast<float>(in1_i + offset_in_scalar); // B | |
| 717 | 735 | in2_f = static_cast<float>(in2_i + offset_in_scalar); // R | |
| 718 | } | ||
| 719 | } | ||
| 720 | else { | ||
| 721 | // Float input - apply offset | ||
| 722 | if constexpr (direction == ConversionDirection::YUV_TO_RGB || direction == ConversionDirection::YUV_TO_YUV) { | ||
| 723 | 112 | in0_f += m.offset_in_f; // Y only | |
| 724 | } | ||
| 725 | else { | ||
| 726 | 287 | in0_f += m.offset_in_f; // G | |
| 727 | 287 | in1_f += m.offset_in_f; // B | |
| 728 | 287 | in2_f += m.offset_in_f; // R | |
| 729 | } | ||
| 730 | } | ||
| 731 | |||
| 732 | // Matrix multiply - coefficient order depends on direction | ||
| 733 | if constexpr (direction == ConversionDirection::YUV_TO_RGB || direction == ConversionDirection::YUV_TO_YUV) { | ||
| 734 | // YUV input: in0=Y, in1=U, in2=V | ||
| 735 | 112 | out0_f = (m.y_g_f * in0_f + m.u_g_f * in1_f + m.v_g_f * in2_f) * scale_f; // G or Y | |
| 736 | 112 | out1_f = (m.y_b_f * in0_f + m.u_b_f * in1_f + m.v_b_f * in2_f) * scale_f; // B or U | |
| 737 | 112 | out2_f = (m.y_r_f * in0_f + m.u_r_f * in1_f + m.v_r_f * in2_f) * scale_f; // R or V | |
| 738 | } | ||
| 739 | else if constexpr (direction == ConversionDirection::RGB_TO_YUV || direction == ConversionDirection::RGB_TO_RGB) { | ||
| 740 | // RGB input: in0=G, in1=B, in2=R | ||
| 741 | 350 | out0_f = (m.y_g_f * in0_f + m.y_b_f * in1_f + m.y_r_f * in2_f) * scale_f; // Y or G | |
| 742 | 350 | out1_f = (m.u_g_f * in0_f + m.u_b_f * in1_f + m.u_r_f * in2_f) * scale_f; // U or B | |
| 743 | 350 | out2_f = (m.v_g_f * in0_f + m.v_b_f * in1_f + m.v_r_f * in2_f) * scale_f; // V or R | |
| 744 | } | ||
| 745 | else if constexpr (direction == ConversionDirection::RGB_TO_Y) { | ||
| 746 | // RGB input: in0=G, in1=B, in2=R | ||
| 747 | 672 | out0_f = (m.y_g_f * in0_f + m.y_b_f * in1_f + m.y_r_f * in2_f) * scale_f; // Y or G | |
| 748 | } | ||
| 749 | |||
| 750 | // Add output offset | ||
| 751 | if constexpr (direction == ConversionDirection::YUV_TO_RGB || direction == ConversionDirection::RGB_TO_RGB) { | ||
| 752 | // RGB output: same offset for all | ||
| 753 | 85 | float rgb_offset_scaled = m.offset_out_f * scale_f; | |
| 754 | 85 | out0_f += rgb_offset_scaled; | |
| 755 | 85 | out1_f += rgb_offset_scaled; | |
| 756 | 85 | out2_f += rgb_offset_scaled; | |
| 757 | } | ||
| 758 | else if constexpr (direction == ConversionDirection::RGB_TO_YUV || direction == ConversionDirection::YUV_TO_YUV) { | ||
| 759 | // YUV output: different offsets | ||
| 760 | 377 | float y_offset_scaled = m.offset_out_f * scale_f; | |
| 761 | 377 | float uv_center = final_is_float ? 0.0f : (float)half_pixel_offset_target; | |
| 762 | 377 | out0_f += y_offset_scaled; // Y | |
| 763 | 377 | out1_f += uv_center; // U | |
| 764 | 377 | out2_f += uv_center; // V | |
| 765 | } | ||
| 766 | else if constexpr (direction == ConversionDirection::RGB_TO_Y) { | ||
| 767 | // Y output: single Y offsets | ||
| 768 | 672 | float y_offset_scaled = m.offset_out_f * scale_f; | |
| 769 | 672 | out0_f += y_offset_scaled; // Y | |
| 770 | } | ||
| 771 | |||
| 772 | if constexpr (final_is_float) { | ||
| 773 | 409 | d0[x] = static_cast<pixel_t_dst>(out0_f); | |
| 774 | if constexpr (direction != ConversionDirection::RGB_TO_Y) { | ||
| 775 | 217 | d1[x] = static_cast<pixel_t_dst>(out1_f); | |
| 776 | 217 | d2[x] = static_cast<pixel_t_dst>(out2_f); | |
| 777 | } | ||
| 778 | } | ||
| 779 | else { | ||
| 780 | // Convert to integer with rounding | ||
| 781 | 725 | int out0_i = static_cast<int>(out0_f + 0.5f); | |
| 782 |
6/184void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 245 times.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 96 times.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 96 times.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 96 times.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 96 times.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 96 times.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
|
725 | out0_i = std::clamp(out0_i, 0, max_pixel_value_target); |
| 783 | 725 | d0[x] = static_cast<pixel_t_dst>(out0_i); | |
| 784 | |||
| 785 | if constexpr (direction != ConversionDirection::RGB_TO_Y) { | ||
| 786 | 245 | int out1_i = static_cast<int>(out1_f + 0.5f); | |
| 787 | 245 | int out2_i = static_cast<int>(out2_f + 0.5f); | |
| 788 |
1/134void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 58 → 59 taken 245 times.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
|
245 | out1_i = std::clamp(out1_i, 0, max_pixel_value_target); |
| 789 |
1/134void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 60 taken 245 times.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, float, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)1>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)4>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
|
245 | out2_i = std::clamp(out2_i, 0, max_pixel_value_target); |
| 790 | 245 | d1[x] = static_cast<pixel_t_dst>(out1_i); | |
| 791 | 245 | d2[x] = static_cast<pixel_t_dst>(out2_i); | |
| 792 | } | ||
| 793 | } | ||
| 794 | } | ||
| 795 | else { | ||
| 796 | // Integer workflow | ||
| 797 | // Apply input offset and centering | ||
| 798 | if constexpr (direction == ConversionDirection::YUV_TO_RGB || direction == ConversionDirection::YUV_TO_YUV) { | ||
| 799 | // YUV input | ||
| 800 | 1614 | in0_i = in0_i + offset_in_scalar; // Y | |
| 801 | 1614 | in1_i = in1_i - half_pixel_offset; // U (centered) | |
| 802 | 1614 | in2_i = in2_i - half_pixel_offset; // V (centered) | |
| 803 | } | ||
| 804 | else if constexpr (direction == ConversionDirection::RGB_TO_YUV || direction == ConversionDirection::RGB_TO_RGB || direction == ConversionDirection::RGB_TO_Y) { | ||
| 805 | // RGB input | ||
| 806 | 888 | in0_i = in0_i + offset_in_scalar; // G | |
| 807 | 888 | in1_i = in1_i + offset_in_scalar; // B | |
| 808 | 888 | in2_i = in2_i + offset_in_scalar; // R | |
| 809 | } | ||
| 810 | |||
| 811 | // Matrix multiply with appropriate rounding/offset | ||
| 812 | int round_and_offset_0, round_and_offset_1, round_and_offset_2; | ||
| 813 | |||
| 814 | if constexpr (direction == ConversionDirection::YUV_TO_RGB || direction == ConversionDirection::RGB_TO_RGB) { | ||
| 815 | // RGB output: same offset for all | ||
| 816 | 1440 | round_and_offset_0 = round_mask_plus_offset_out_i; | |
| 817 | 1440 | round_and_offset_1 = round_mask_plus_offset_out_i; | |
| 818 | 1440 | round_and_offset_2 = round_mask_plus_offset_out_i; | |
| 819 | } | ||
| 820 | else if constexpr (direction == ConversionDirection::RGB_TO_YUV || direction == ConversionDirection::YUV_TO_YUV) { | ||
| 821 | // YUV output: different offsets | ||
| 822 | 774 | round_and_offset_0 = round_mask_plus_offset_out_i; // Y | |
| 823 | 774 | round_and_offset_1 = round_mask_plus_offset_out_chroma_i; // U | |
| 824 | 774 | round_and_offset_2 = round_mask_plus_offset_out_chroma_i; // V | |
| 825 | } | ||
| 826 | else if constexpr (direction == ConversionDirection::RGB_TO_Y) { | ||
| 827 | // Y output: single Y offset | ||
| 828 | 288 | round_and_offset_0 = round_mask_plus_offset_out_i; // Y | |
| 829 | } | ||
| 830 | |||
| 831 | if constexpr (direction == ConversionDirection::YUV_TO_RGB || direction == ConversionDirection::YUV_TO_YUV) { | ||
| 832 | // YUV input: in0=Y, in1=U, in2=V | ||
| 833 | 1614 | out0_raw = (safe_int_t)m.y_g * in0_i + (safe_int_t)m.u_g * in1_i + (safe_int_t)m.v_g * in2_i + round_and_offset_0; | |
| 834 | 1614 | out1_raw = (safe_int_t)m.y_b * in0_i + (safe_int_t)m.u_b * in1_i + (safe_int_t)m.v_b * in2_i + round_and_offset_1; | |
| 835 | 1614 | out2_raw = (safe_int_t)m.y_r * in0_i + (safe_int_t)m.u_r * in1_i + (safe_int_t)m.v_r * in2_i + round_and_offset_2; | |
| 836 | } | ||
| 837 | else if constexpr (direction == ConversionDirection::RGB_TO_YUV || direction == ConversionDirection::RGB_TO_RGB) { | ||
| 838 | // RGB input: in0=G, in1=B, in2=R | ||
| 839 | 600 | out0_raw = (safe_int_t)m.y_g * in0_i + (safe_int_t)m.y_b * in1_i + (safe_int_t)m.y_r * in2_i + round_and_offset_0; | |
| 840 | 600 | out1_raw = (safe_int_t)m.u_g * in0_i + (safe_int_t)m.u_b * in1_i + (safe_int_t)m.u_r * in2_i + round_and_offset_1; | |
| 841 | 600 | out2_raw = (safe_int_t)m.v_g * in0_i + (safe_int_t)m.v_b * in1_i + (safe_int_t)m.v_r * in2_i + round_and_offset_2; | |
| 842 | } | ||
| 843 | else if constexpr (direction == ConversionDirection::RGB_TO_Y) { | ||
| 844 | // RGB input: in0=G, in1=B, in2=R | ||
| 845 | 288 | out0_raw = (safe_int_t)m.y_g * in0_i + (safe_int_t)m.y_b * in1_i + (safe_int_t)m.y_r * in2_i + round_and_offset_0; | |
| 846 | } | ||
| 847 | |||
| 848 | if constexpr (final_is_float) { | ||
| 849 | // Integer workflow + float output | ||
| 850 | 10 | out0_f = static_cast<float>(out0_raw) * scale_f + out_offset_f; | |
| 851 | if constexpr (direction == ConversionDirection::YUV_TO_RGB || direction == ConversionDirection::RGB_TO_RGB) { | ||
| 852 | // offset for the rest two only RGB output | ||
| 853 | ✗ | out1_f = static_cast<float>(out1_raw) * scale_f + out_offset_f; | |
| 854 | ✗ | out2_f = static_cast<float>(out2_raw) * scale_f + out_offset_f; | |
| 855 | } | ||
| 856 | else if constexpr (direction == ConversionDirection::RGB_TO_YUV || direction == ConversionDirection::YUV_TO_YUV) { | ||
| 857 | // for YUV the U and V float offset is different : 0.0f | ||
| 858 | 10 | out1_f = static_cast<float>(out1_raw) * scale_f; // U | |
| 859 | 10 | out2_f = static_cast<float>(out2_raw) * scale_f; // V | |
| 860 | } | ||
| 861 | |||
| 862 | 10 | d0[x] = static_cast<pixel_t_dst>(out0_f); | |
| 863 | if constexpr (direction != ConversionDirection::RGB_TO_Y) { | ||
| 864 | 10 | d1[x] = static_cast<pixel_t_dst>(out1_f); | |
| 865 | 10 | d2[x] = static_cast<pixel_t_dst>(out2_f); | |
| 866 | } | ||
| 867 | } | ||
| 868 | else { | ||
| 869 | // Integer workflow + integer output | ||
| 870 | 2492 | int out0_i = static_cast<int>(out0_raw >> target_shift); | |
| 871 |
10/80void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 960 times.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 160 times.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 320 times.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 505 times.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 85 times.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 51 times.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 123 times.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 65 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 96 times.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 96 times.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 57 → 58 taken 96 times.
✗ Branch 57 → 63 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)4, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 63 not taken.
|
2492 | out0_i = std::clamp(out0_i, 0, max_pixel_value_target); |
| 872 | 2492 | d0[x] = static_cast<pixel_t_dst>(out0_i); | |
| 873 | |||
| 874 | if constexpr (direction != ConversionDirection::RGB_TO_Y) { | ||
| 875 | 2204 | int out1_i = static_cast<int>(out1_raw >> target_shift); | |
| 876 | 2204 | int out2_i = static_cast<int>(out2_raw >> target_shift); | |
| 877 | |||
| 878 | // We are in integer domain, no convenient SIMD packus! We cannot spare min-max clamp to constexpr (lessthan16bit_target) { | ||
| 879 | // We need to do it always | ||
| 880 |
7/64void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 58 → 59 taken 960 times.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 58 → 59 taken 160 times.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 58 → 59 taken 320 times.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 58 → 59 taken 505 times.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 58 → 59 taken 85 times.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 58 → 59 taken 51 times.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 58 → 59 taken 123 times.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 66 not taken.
|
2204 | out1_i = std::clamp(out1_i, 0, max_pixel_value_target); |
| 881 |
7/64void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 60 taken 960 times.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 60 taken 160 times.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 60 taken 320 times.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)0, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 60 taken 505 times.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 60 taken 85 times.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)1, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 60 taken 51 times.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned char, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✓ Branch 59 → 60 taken 123 times.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, false, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, false, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned char, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)0>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
void convert_yuv_to_planarrgb_c_internal<(ConversionDirection)2, unsigned short, true, true, unsigned short, (YuvRgbConversionType)3>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int):
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 67 not taken.
|
2204 | out2_i = std::clamp(out2_i, 0, max_pixel_value_target); |
| 882 | |||
| 883 | 2204 | d1[x] = static_cast<pixel_t_dst>(out1_i); | |
| 884 | 2204 | d2[x] = static_cast<pixel_t_dst>(out2_i); | |
| 885 | } | ||
| 886 | } | ||
| 887 | } | ||
| 888 | } | ||
| 889 | |||
| 890 | 139 | dstp[0] += dstPitch[0]; | |
| 891 | if constexpr (direction != ConversionDirection::RGB_TO_Y) { | ||
| 892 | 109 | dstp[1] += dstPitch[1]; | |
| 893 | 109 | dstp[2] += dstPitch[2]; | |
| 894 | } | ||
| 895 | 139 | srcp[0] += srcPitch[0]; | |
| 896 | 139 | srcp[1] += srcPitch[1]; | |
| 897 | 139 | srcp[2] += srcPitch[2]; | |
| 898 | } | ||
| 899 | 35 | } | |
| 900 | |||
| 901 | // Dispatcher matching AVX2/SSE2 structure | ||
| 902 | template<ConversionDirection direction, typename pixel_t_src, bool lessthan16bit> | ||
| 903 | 35 | void convert_yuv_to_planarrgb_c(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, | |
| 904 | int bits_per_pixel, int bits_per_pixel_target, bool force_float) | ||
| 905 | { | ||
| 906 | // Handle forced float or float input | ||
| 907 |
15/24void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 11 taken 6 times.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 11 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 11 taken 2 times.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 11 taken 4 times.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 2 → 3 taken 1 time.
✓ Branch 2 → 11 taken 3 times.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 11 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 11 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 11 taken 3 times.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 11 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 2 → 3 taken 1 time.
✓ Branch 2 → 11 taken 2 times.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 2 → 3 taken 1 time.
✓ Branch 2 → 11 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 2 → 3 taken 1 time.
✓ Branch 2 → 11 taken 2 times.
|
30 | if (force_float || std::is_floating_point<pixel_t_src>::value) { |
| 908 |
8/32void convert_yuv_to_planarrgb_c<(ConversionDirection)0, float, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, float, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, float, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, float, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 2 times.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 3 → 4 taken 1 time.
✗ Branch 3 → 5 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 1 time.
|
9 | if (bits_per_pixel_target == 8) { |
| 909 | 1 | convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, lessthan16bit, true, uint8_t, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target); | |
| 910 | } | ||
| 911 |
7/32void convert_yuv_to_planarrgb_c<(ConversionDirection)0, float, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 4 → 5 not taken.
✓ Branch 4 → 6 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 5 → 6 not taken.
✗ Branch 5 → 7 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 5 → 6 not taken.
✗ Branch 5 → 7 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 5 → 6 not taken.
✗ Branch 5 → 7 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, float, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 4 → 5 not taken.
✓ Branch 4 → 6 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 5 → 6 not taken.
✗ Branch 5 → 7 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 5 → 6 not taken.
✗ Branch 5 → 7 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, float, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 4 → 5 not taken.
✓ Branch 4 → 6 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 5 → 6 not taken.
✗ Branch 5 → 7 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 5 → 6 not taken.
✗ Branch 5 → 7 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 5 → 6 not taken.
✗ Branch 5 → 7 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, float, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 4 → 5 not taken.
✓ Branch 4 → 6 taken 2 times.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 5 → 6 not taken.
✗ Branch 5 → 7 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 7 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 5 → 6 taken 1 time.
✗ Branch 5 → 7 not taken.
|
8 | else if (bits_per_pixel_target < 16) { |
| 912 | 1 | convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, lessthan16bit, true, uint16_t, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target); | |
| 913 | } | ||
| 914 |
6/32void convert_yuv_to_planarrgb_c<(ConversionDirection)0, float, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 6 → 7 not taken.
✓ Branch 6 → 8 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, float, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 6 → 7 not taken.
✓ Branch 6 → 8 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 7 → 8 not taken.
✓ Branch 7 → 9 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, float, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 6 → 7 not taken.
✓ Branch 6 → 8 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, float, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 6 → 7 not taken.
✓ Branch 6 → 8 taken 2 times.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 7 → 8 taken 1 time.
✗ Branch 7 → 9 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
|
7 | else if (bits_per_pixel_target == 16) { |
| 915 | 1 | convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, lessthan16bit, false, uint16_t, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target); | |
| 916 | } | ||
| 917 | else { | ||
| 918 | 6 | convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, lessthan16bit, false, float, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target); | |
| 919 | } | ||
| 920 | 9 | return; | |
| 921 | } | ||
| 922 | |||
| 923 | if constexpr (!std::is_floating_point<pixel_t_src>::value) { | ||
| 924 | 26 | const bool need_conversion = bits_per_pixel_target != bits_per_pixel; | |
| 925 |
14/24void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 11 → 12 taken 6 times.
✗ Branch 11 → 14 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 11 → 12 taken 1 time.
✗ Branch 11 → 14 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 11 → 12 taken 2 times.
✗ Branch 11 → 14 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 11 → 12 taken 4 times.
✗ Branch 11 → 14 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 11 → 12 taken 2 times.
✓ Branch 11 → 14 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 11 → 12 taken 1 time.
✗ Branch 11 → 14 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 11 → 12 taken 1 time.
✗ Branch 11 → 14 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 11 → 12 taken 3 times.
✗ Branch 11 → 14 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 14 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 11 → 12 taken 1 time.
✓ Branch 11 → 14 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 11 → 12 not taken.
✓ Branch 11 → 14 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 11 → 12 taken 1 time.
✓ Branch 11 → 14 taken 1 time.
|
26 | if (!need_conversion) { |
| 926 | 22 | convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, lessthan16bit, lessthan16bit, pixel_t_src, YuvRgbConversionType::NATIVE_INT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target); | |
| 927 | 22 | return; | |
| 928 | } | ||
| 929 | |||
| 930 | 4 | const bool full_d = m.offset_out == 0; | |
| 931 |
8/48void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 14 → 15 not taken.
✗ Branch 14 → 29 not taken.
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 29 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 14 → 15 not taken.
✗ Branch 14 → 29 not taken.
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 29 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 14 → 15 not taken.
✗ Branch 14 → 29 not taken.
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 29 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 14 → 15 not taken.
✗ Branch 14 → 29 not taken.
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 29 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 14 → 15 taken 1 time.
✗ Branch 14 → 29 not taken.
✓ Branch 15 → 16 taken 1 time.
✗ Branch 15 → 29 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 14 → 15 not taken.
✗ Branch 14 → 29 not taken.
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 29 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 14 → 15 not taken.
✗ Branch 14 → 29 not taken.
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 29 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 14 → 15 not taken.
✗ Branch 14 → 29 not taken.
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 29 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 14 → 15 not taken.
✗ Branch 14 → 29 not taken.
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 29 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 14 → 15 taken 1 time.
✗ Branch 14 → 29 not taken.
✓ Branch 15 → 16 taken 1 time.
✗ Branch 15 → 29 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 14 → 15 taken 1 time.
✗ Branch 14 → 29 not taken.
✓ Branch 15 → 16 taken 1 time.
✗ Branch 15 → 29 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 14 → 15 taken 1 time.
✗ Branch 14 → 29 not taken.
✓ Branch 15 → 16 taken 1 time.
✗ Branch 15 → 29 not taken.
|
4 | if (bits_per_pixel_target >= 8 && bits_per_pixel <= 16) { |
| 932 |
4/24void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 20 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 20 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 20 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 20 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 16 → 17 not taken.
✓ Branch 16 → 20 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 20 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 20 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 20 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 20 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 16 → 17 not taken.
✓ Branch 16 → 20 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 16 → 17 taken 1 time.
✗ Branch 16 → 20 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 16 → 17 not taken.
✓ Branch 16 → 20 taken 1 time.
|
4 | if (bits_per_pixel_target == 8) { |
| 933 |
1/24void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 17 → 18 not taken.
✗ Branch 17 → 19 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 17 → 18 not taken.
✗ Branch 17 → 19 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 17 → 18 not taken.
✗ Branch 17 → 19 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 17 → 18 not taken.
✗ Branch 17 → 19 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 17 → 18 not taken.
✗ Branch 17 → 19 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 17 → 18 not taken.
✗ Branch 17 → 19 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 17 → 18 not taken.
✗ Branch 17 → 19 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 17 → 18 not taken.
✗ Branch 17 → 19 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 17 → 18 not taken.
✗ Branch 17 → 19 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 17 → 18 not taken.
✗ Branch 17 → 19 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 17 → 18 not taken.
✓ Branch 17 → 19 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 17 → 18 not taken.
✗ Branch 17 → 19 not taken.
|
1 | if (full_d) |
| 934 | ✗ | convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, lessthan16bit, true, uint8_t, YuvRgbConversionType::BITCONV_INT_FULL>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target); | |
| 935 | else | ||
| 936 | 1 | convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, lessthan16bit, true, uint8_t, YuvRgbConversionType::BITCONV_INT_LIMITED>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target); | |
| 937 | } | ||
| 938 |
3/24void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 24 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 24 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 24 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 24 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 20 → 21 not taken.
✓ Branch 20 → 24 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 24 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 24 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 24 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 24 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 20 → 21 taken 1 time.
✗ Branch 20 → 24 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 24 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 20 → 21 not taken.
✓ Branch 20 → 24 taken 1 time.
|
3 | else if (bits_per_pixel_target < 16) { |
| 939 |
1/24void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 21 → 22 not taken.
✓ Branch 21 → 23 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
|
1 | if (full_d) |
| 940 | ✗ | convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, lessthan16bit, true, uint16_t, YuvRgbConversionType::BITCONV_INT_FULL>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target); | |
| 941 | else | ||
| 942 | 1 | convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, lessthan16bit, true, uint16_t, YuvRgbConversionType::BITCONV_INT_LIMITED>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target); | |
| 943 | } | ||
| 944 |
2/24void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 28 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 28 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 28 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 28 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 24 → 25 not taken.
✓ Branch 24 → 28 taken 1 time.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 28 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 28 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 28 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 28 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 28 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 28 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 24 → 25 taken 1 time.
✗ Branch 24 → 28 not taken.
|
2 | else if (bits_per_pixel_target == 16) { |
| 945 |
1/24void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 27 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 27 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)0, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 27 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 27 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 27 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)1, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 27 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 27 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 27 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)2, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 27 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned char, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 27 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, false>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 27 not taken.
void convert_yuv_to_planarrgb_c<(ConversionDirection)4, unsigned short, true>(unsigned char**, int*, unsigned char const**, int const*, int, int, ConversionMatrix const&, int, int, bool):
✓ Branch 25 → 26 taken 1 time.
✗ Branch 25 → 27 not taken.
|
1 | if (full_d) |
| 946 | 1 | convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, lessthan16bit, false, uint16_t, YuvRgbConversionType::BITCONV_INT_FULL>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target); | |
| 947 | else | ||
| 948 | ✗ | convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, lessthan16bit, false, uint16_t, YuvRgbConversionType::BITCONV_INT_LIMITED>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target); | |
| 949 | } | ||
| 950 | else { | ||
| 951 | 1 | convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, lessthan16bit, false, float, YuvRgbConversionType::FLOAT_OUTPUT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target); | |
| 952 | } | ||
| 953 | } | ||
| 954 | } | ||
| 955 | } | ||
| 956 | |||
| 957 | // Template instantiations for C version - all 4 directions | ||
| 958 | // YUV_TO_RGB | ||
| 959 | template void convert_yuv_to_planarrgb_c<ConversionDirection::YUV_TO_RGB, uint8_t, true>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float); | ||
| 960 | template void convert_yuv_to_planarrgb_c<ConversionDirection::YUV_TO_RGB, uint16_t, true>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float); | ||
| 961 | template void convert_yuv_to_planarrgb_c<ConversionDirection::YUV_TO_RGB, uint16_t, false>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float); | ||
| 962 | template void convert_yuv_to_planarrgb_c<ConversionDirection::YUV_TO_RGB, float, false>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float); | ||
| 963 | |||
| 964 | // RGB_TO_YUV | ||
| 965 | template void convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_YUV, uint8_t, true>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float); | ||
| 966 | template void convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_YUV, uint16_t, true>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float); | ||
| 967 | template void convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_YUV, uint16_t, false>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float); | ||
| 968 | template void convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_YUV, float, false>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float); | ||
| 969 | |||
| 970 | // RGB_TO_Y | ||
| 971 | template void convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_Y, uint8_t, true>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float); | ||
| 972 | template void convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_Y, uint16_t, true>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float); | ||
| 973 | template void convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_Y, uint16_t, false>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float); | ||
| 974 | template void convert_yuv_to_planarrgb_c<ConversionDirection::RGB_TO_Y, float, false>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float); | ||
| 975 | |||
| 976 | // YUV_TO_YUV | ||
| 977 | template void convert_yuv_to_planarrgb_c<ConversionDirection::YUV_TO_YUV, uint8_t, true>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float); | ||
| 978 | template void convert_yuv_to_planarrgb_c<ConversionDirection::YUV_TO_YUV, uint16_t, true>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float); | ||
| 979 | template void convert_yuv_to_planarrgb_c<ConversionDirection::YUV_TO_YUV, uint16_t, false>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float); | ||
| 980 | template void convert_yuv_to_planarrgb_c<ConversionDirection::YUV_TO_YUV, float, false>(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp[3], const int srcPitch[3], int width, int height, const ConversionMatrix& m, int bits_per_pixel, int bits_per_pixel_target, bool force_float); | ||
| 981 | |||
| 982 | 8 | PVideoFrame __stdcall ConvertYUV444ToRGB::GetFrame(int n, IScriptEnvironment* env) | |
| 983 | { | ||
| 984 |
1/2✓ Branch 3 → 4 taken 8 times.
✗ Branch 3 → 161 not taken.
|
8 | PVideoFrame src = child->GetFrame(n, env); |
| 985 |
1/2✓ Branch 4 → 5 taken 8 times.
✗ Branch 4 → 159 not taken.
|
8 | PVideoFrame dst = env->NewVideoFrameP(vi, &src); |
| 986 | |||
| 987 |
1/2✓ Branch 5 → 6 taken 8 times.
✗ Branch 5 → 157 not taken.
|
8 | auto props = env->getFramePropsRW(dst); |
| 988 |
1/2✓ Branch 6 → 7 taken 8 times.
✗ Branch 6 → 157 not taken.
|
8 | update_Matrix_and_ColorRange(props, theOutMatrix, theOutColorRange, env); |
| 989 |
1/2✓ Branch 7 → 8 taken 8 times.
✗ Branch 7 → 157 not taken.
|
8 | update_ChromaLocation(props, -1, env); // RGB target: delete _ChromaLocation |
| 990 | |||
| 991 |
1/2✓ Branch 9 → 10 taken 8 times.
✗ Branch 9 → 157 not taken.
|
8 | const BYTE* srcY = src->GetReadPtr(PLANAR_Y); |
| 992 |
1/2✓ Branch 11 → 12 taken 8 times.
✗ Branch 11 → 157 not taken.
|
8 | const BYTE* srcU = src->GetReadPtr(PLANAR_U); |
| 993 |
1/2✓ Branch 13 → 14 taken 8 times.
✗ Branch 13 → 157 not taken.
|
8 | const BYTE* srcV = src->GetReadPtr(PLANAR_V); |
| 994 |
1/2✓ Branch 15 → 16 taken 8 times.
✗ Branch 15 → 157 not taken.
|
8 | const BYTE* srcA = src->GetReadPtr(PLANAR_A); |
| 995 | |||
| 996 |
1/2✓ Branch 17 → 18 taken 8 times.
✗ Branch 17 → 157 not taken.
|
8 | BYTE* dstp = dst->GetWritePtr(); |
| 997 | |||
| 998 |
1/2✓ Branch 19 → 20 taken 8 times.
✗ Branch 19 → 157 not taken.
|
8 | const int src_pitch_y = src->GetPitch(PLANAR_Y); |
| 999 |
1/2✓ Branch 21 → 22 taken 8 times.
✗ Branch 21 → 157 not taken.
|
8 | const int src_pitch_uv = src->GetPitch(PLANAR_U); |
| 1000 |
1/2✓ Branch 23 → 24 taken 8 times.
✗ Branch 23 → 157 not taken.
|
8 | const int src_pitch_a = src->GetPitch(PLANAR_A); // zero if no Alpha |
| 1001 | |||
| 1002 |
1/2✓ Branch 25 → 26 taken 8 times.
✗ Branch 25 → 157 not taken.
|
8 | const int dst_pitch = dst->GetPitch(); |
| 1003 | |||
| 1004 | // Legacy direct YV24 -> packed 8 bit RGB24/RGB32 | ||
| 1005 | // quality=true float-inside or bit-depth changing transformation is handled through planar RGB intermediate. | ||
| 1006 | |||
| 1007 |
2/4✓ Branch 26 → 27 taken 8 times.
✗ Branch 26 → 28 not taken.
✗ Branch 27 → 28 not taken.
✓ Branch 27 → 55 taken 8 times.
|
8 | if (pixel_step == 3 || pixel_step == 4) { |
| 1008 | #ifdef INTEL_INTRINSICS | ||
| 1009 | ✗ | if (env->GetCPUFlags() & CPUF_AVX2) { | |
| 1010 | ✗ | if (pixel_step == 4) { | |
| 1011 | // RGB32 | ||
| 1012 | ✗ | if (src_pitch_a) // move alpha channel from YUVA | |
| 1013 | ✗ | convert_yv24_to_rgb_avx2<4, true>(dstp, srcY, srcU, srcV, srcA, dst_pitch, src_pitch_y, src_pitch_uv, src_pitch_a, vi.width, vi.height, matrix); | |
| 1014 | else | ||
| 1015 | ✗ | convert_yv24_to_rgb_avx2<4, false>(dstp, srcY, srcU, srcV, srcA, dst_pitch, src_pitch_y, src_pitch_uv, src_pitch_a, vi.width, vi.height, matrix); | |
| 1016 | } | ||
| 1017 | else { | ||
| 1018 | // RGB24 | ||
| 1019 | ✗ | convert_yv24_to_rgb_avx2<3, false>(dstp, srcY, srcU, srcV, srcA, dst_pitch, src_pitch_y, src_pitch_uv, src_pitch_a, vi.width, vi.height, matrix); | |
| 1020 | } | ||
| 1021 | ✗ | return dst; | |
| 1022 | } | ||
| 1023 | ✗ | else if (env->GetCPUFlags() & CPUF_SSE2) { | |
| 1024 | ✗ | if (pixel_step == 4) { | |
| 1025 | ✗ | if (src_pitch_a) // move alpha channel from YUVA | |
| 1026 | ✗ | convert_yv24_to_rgb_sse2<4, true>(dstp, srcY, srcU, srcV, srcA, dst_pitch, src_pitch_y, src_pitch_uv, src_pitch_a, vi.width, vi.height, matrix); | |
| 1027 | else | ||
| 1028 | ✗ | convert_yv24_to_rgb_sse2<4, false>(dstp, srcY, srcU, srcV, srcA, dst_pitch, src_pitch_y, src_pitch_uv, src_pitch_a, vi.width, vi.height, matrix); | |
| 1029 | } | ||
| 1030 | else { | ||
| 1031 | ✗ | if (env->GetCPUFlags() & CPUF_SSSE3) { | |
| 1032 | ✗ | convert_yv24_to_rgb_ssse3<3, false>(dstp, srcY, srcU, srcV, srcA, dst_pitch, src_pitch_y, src_pitch_uv, src_pitch_a, vi.width, vi.height, matrix); | |
| 1033 | } | ||
| 1034 | else { | ||
| 1035 | ✗ | convert_yv24_to_rgb_sse2<3, false>(dstp, srcY, srcU, srcV, srcA, dst_pitch, src_pitch_y, src_pitch_uv, src_pitch_a, vi.width, vi.height, matrix); | |
| 1036 | } | ||
| 1037 | } | ||
| 1038 | ✗ | return dst; | |
| 1039 | } | ||
| 1040 | |||
| 1041 | #ifdef X86_32 | ||
| 1042 | // packed RGB24 and RGB32 | ||
| 1043 | if ((src_pitch_a == 0) && (env->GetCPUFlags() & CPUF_MMX)) { | ||
| 1044 | if (pixel_step == 4) { | ||
| 1045 | convert_yv24_to_rgb_mmx<4>(dstp, srcY, srcU, srcV, dst_pitch, src_pitch_y, src_pitch_uv, vi.width, vi.height, matrix); | ||
| 1046 | } | ||
| 1047 | else { | ||
| 1048 | convert_yv24_to_rgb_mmx<3>(dstp, srcY, srcU, srcV, dst_pitch, src_pitch_y, src_pitch_uv, vi.width, vi.height, matrix); | ||
| 1049 | } | ||
| 1050 | return dst; | ||
| 1051 | } | ||
| 1052 | #endif | ||
| 1053 | #endif | ||
| 1054 | |||
| 1055 | // Unoptimized C-code. | ||
| 1056 | // rgb24 or rgb32, packed RGB | ||
| 1057 | ✗ | if (pixel_step == 3 || pixel_step == 4) { | |
| 1058 | ✗ | if (pixel_step == 4) { | |
| 1059 | ✗ | if (src_pitch_a) // move alpha channel from YUVA | |
| 1060 | ✗ | convert_yv24_to_rgb_c<4, true>(dstp, srcY, srcU, srcV, srcA, dst_pitch, src_pitch_y, src_pitch_uv, src_pitch_a, vi.width, vi.height, matrix); | |
| 1061 | else | ||
| 1062 | ✗ | convert_yv24_to_rgb_c<4, false>(dstp, srcY, srcU, srcV, srcA, dst_pitch, src_pitch_y, src_pitch_uv, src_pitch_a, vi.width, vi.height, matrix); | |
| 1063 | } | ||
| 1064 | else { // 3 RGB24 | ||
| 1065 | ✗ | convert_yv24_to_rgb_c<3, false>(dstp, srcY, srcU, srcV, srcA, dst_pitch, src_pitch_y, src_pitch_uv, src_pitch_a, vi.width, vi.height, matrix); | |
| 1066 | } | ||
| 1067 | ✗ | return dst; | |
| 1068 | } | ||
| 1069 | } // YV24->RGB24/RGB32 | ||
| 1070 | |||
| 1071 | // rgb48 or rgb64, packed RGB | ||
| 1072 |
2/4✓ Branch 55 → 56 taken 8 times.
✗ Branch 55 → 57 not taken.
✗ Branch 56 → 57 not taken.
✓ Branch 56 → 58 taken 8 times.
|
8 | if (pixel_step == 6 || pixel_step == 8) { |
| 1073 | // cannot happen, handled earlier, RGB48/64 are post converted from RGB(A)P16 | ||
| 1074 | ✗ | env->ThrowError("ConvertFrom 444: RGB48/64 conversion should have been handled earlier through planar RGB intermediate"); | |
| 1075 | } | ||
| 1076 | |||
| 1077 |
1/2✓ Branch 58 → 59 taken 8 times.
✗ Branch 58 → 152 not taken.
|
8 | if (pixel_step < 0) { |
| 1078 | // -1: RGBP -2:RGBAP | ||
| 1079 | // Common task: copy or fill alpha channel | ||
| 1080 | |||
| 1081 | // YUV444 -> PlanarRGB | ||
| 1082 | // YUVA444 -> PlanarRGBA | ||
| 1083 | 8 | bool targetHasAlpha = pixel_step == -2; | |
| 1084 | |||
| 1085 |
1/2✓ Branch 60 → 61 taken 8 times.
✗ Branch 60 → 156 not taken.
|
8 | BYTE *dstpG = dst->GetWritePtr(PLANAR_G); |
| 1086 |
1/2✓ Branch 62 → 63 taken 8 times.
✗ Branch 62 → 156 not taken.
|
8 | BYTE *dstpB = dst->GetWritePtr(PLANAR_B); |
| 1087 |
1/2✓ Branch 64 → 65 taken 8 times.
✗ Branch 64 → 156 not taken.
|
8 | BYTE *dstpR = dst->GetWritePtr(PLANAR_R); |
| 1088 | |||
| 1089 | // copy or fill alpha | ||
| 1090 | BYTE *dstpA; | ||
| 1091 |
2/2✓ Branch 65 → 66 taken 4 times.
✓ Branch 65 → 102 taken 4 times.
|
8 | if (targetHasAlpha) { |
| 1092 |
1/2✓ Branch 67 → 68 taken 4 times.
✗ Branch 67 → 156 not taken.
|
4 | dstpA = dst->GetWritePtr(PLANAR_A); |
| 1093 |
1/2✓ Branch 69 → 70 taken 4 times.
✗ Branch 69 → 156 not taken.
|
4 | int heightA = dst->GetHeight(PLANAR_A); |
| 1094 |
1/2✓ Branch 71 → 72 taken 4 times.
✗ Branch 71 → 156 not taken.
|
4 | int rowsizeA = dst->GetRowSize(PLANAR_A); |
| 1095 |
1/2✓ Branch 73 → 74 taken 4 times.
✗ Branch 73 → 156 not taken.
|
4 | int dst_pitchA = dst->GetPitch(PLANAR_A); |
| 1096 | // simple copy | ||
| 1097 |
3/4✓ Branch 75 → 76 taken 4 times.
✗ Branch 75 → 156 not taken.
✓ Branch 76 → 77 taken 1 time.
✓ Branch 76 → 94 taken 3 times.
|
4 | if (src->GetRowSize(PLANAR_A)) { |
| 1098 | |||
| 1099 |
1/2✓ Branch 77 → 78 taken 1 time.
✗ Branch 77 → 87 not taken.
|
1 | if (source_bit_depth == target_bit_depth) { |
| 1100 | // vi.IsYUVA() no-no! vi is already the target video type | ||
| 1101 |
5/10✓ Branch 79 → 80 taken 1 time.
✗ Branch 79 → 156 not taken.
✓ Branch 81 → 82 taken 1 time.
✗ Branch 81 → 156 not taken.
✓ Branch 83 → 84 taken 1 time.
✗ Branch 83 → 156 not taken.
✓ Branch 85 → 86 taken 1 time.
✗ Branch 85 → 156 not taken.
✓ Branch 86 → 101 taken 1 time.
✗ Branch 86 → 156 not taken.
|
1 | env->BitBlt(dstpA, dst_pitchA, src->GetReadPtr(PLANAR_A), src->GetPitch(PLANAR_A), src->GetRowSize(PLANAR_A_ALIGNED), src->GetHeight(PLANAR_A)); |
| 1102 | } | ||
| 1103 | else { | ||
| 1104 | // RGBPA target + different bit-depth | ||
| 1105 | // Alpha bit depth conversion needed, normal planes are done in-process. | ||
| 1106 | // we need only conv_function_a, proper dispatching from ConvertBits | ||
| 1107 | ✗ | conv_function_a(src->GetReadPtr(PLANAR_A), dstpA, src->GetRowSize(PLANAR_A), heightA, src->GetPitch(PLANAR_A), dst_pitchA, source_bit_depth, target_bit_depth, -1); | |
| 1108 | } | ||
| 1109 | } | ||
| 1110 | else { | ||
| 1111 | // fill default transparency | ||
| 1112 |
1/4✗ Branch 94 → 95 not taken.
✗ Branch 94 → 97 not taken.
✗ Branch 94 → 99 not taken.
✓ Branch 94 → 101 taken 3 times.
|
3 | switch (target_bit_depth) |
| 1113 | { | ||
| 1114 | ✗ | case 1: | |
| 1115 | ✗ | fill_plane<BYTE>(dstpA, heightA, rowsizeA, dst_pitchA, 255); | |
| 1116 | ✗ | break; | |
| 1117 | ✗ | case 2: | |
| 1118 | ✗ | fill_plane<uint16_t>(dstpA, heightA, rowsizeA, dst_pitchA, (1 << target_bit_depth) - 1); | |
| 1119 | ✗ | break; | |
| 1120 | ✗ | case 4: | |
| 1121 | ✗ | fill_plane<float>(dstpA, heightA, rowsizeA, dst_pitchA, 1.0f); | |
| 1122 | ✗ | break; | |
| 1123 | } | ||
| 1124 | } | ||
| 1125 | } | ||
| 1126 | |||
| 1127 |
1/2✓ Branch 103 → 104 taken 8 times.
✗ Branch 103 → 156 not taken.
|
8 | int dst_pitchG = dst->GetPitch(PLANAR_G); |
| 1128 |
1/2✓ Branch 105 → 106 taken 8 times.
✗ Branch 105 → 156 not taken.
|
8 | int dst_pitchB = dst->GetPitch(PLANAR_B); |
| 1129 |
1/2✓ Branch 107 → 108 taken 8 times.
✗ Branch 107 → 156 not taken.
|
8 | int dst_pitchR = dst->GetPitch(PLANAR_R); |
| 1130 | |||
| 1131 | // always start from source bit depth | ||
| 1132 | 8 | int bits_per_pixel = source_bit_depth; | |
| 1133 | |||
| 1134 |
3/6✓ Branch 109 → 110 taken 8 times.
✗ Branch 109 → 156 not taken.
✓ Branch 111 → 112 taken 8 times.
✗ Branch 111 → 156 not taken.
✓ Branch 113 → 114 taken 8 times.
✗ Branch 113 → 156 not taken.
|
8 | const BYTE* srcp[3] = { src->GetReadPtr(PLANAR_Y), src->GetReadPtr(PLANAR_U), src->GetReadPtr(PLANAR_V) }; |
| 1135 |
3/6✓ Branch 115 → 116 taken 8 times.
✗ Branch 115 → 156 not taken.
✓ Branch 117 → 118 taken 8 times.
✗ Branch 117 → 156 not taken.
✓ Branch 119 → 120 taken 8 times.
✗ Branch 119 → 156 not taken.
|
8 | const int srcPitch[3] = { src->GetPitch(PLANAR_Y), src->GetPitch(PLANAR_U), src->GetPitch(PLANAR_V) }; |
| 1136 | |||
| 1137 | 8 | BYTE* dstp[3] = { dstpG, dstpB, dstpR }; | |
| 1138 | 8 | int dstPitch[3] = { dst_pitchG, dst_pitchB, dst_pitchR }; | |
| 1139 | |||
| 1140 | // alpha is already handled above | ||
| 1141 | |||
| 1142 | 8 | const bool force_float = quality; | |
| 1143 | |||
| 1144 | #ifdef INTEL_INTRINSICS | ||
| 1145 | |||
| 1146 |
2/4✓ Branch 120 → 121 taken 8 times.
✗ Branch 120 → 156 not taken.
✓ Branch 121 → 122 taken 8 times.
✗ Branch 121 → 131 not taken.
|
8 | if (env->GetCPUFlags() & CPUF_AVX2) |
| 1147 | { | ||
| 1148 |
2/2✓ Branch 122 → 123 taken 3 times.
✓ Branch 122 → 124 taken 5 times.
|
8 | if (bits_per_pixel == 8) |
| 1149 |
1/2✓ Branch 123 → 130 taken 3 times.
✗ Branch 123 → 156 not taken.
|
3 | convert_yuv_to_planarrgb_avx2<ConversionDirection::YUV_TO_RGB, uint8_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); |
| 1150 |
1/2✗ Branch 124 → 125 not taken.
✓ Branch 124 → 126 taken 5 times.
|
5 | else if (bits_per_pixel < 16) |
| 1151 | ✗ | convert_yuv_to_planarrgb_avx2<ConversionDirection::YUV_TO_RGB, uint16_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); | |
| 1152 |
2/2✓ Branch 126 → 127 taken 2 times.
✓ Branch 126 → 128 taken 3 times.
|
5 | else if (bits_per_pixel == 16) |
| 1153 |
1/2✓ Branch 127 → 130 taken 2 times.
✗ Branch 127 → 156 not taken.
|
2 | convert_yuv_to_planarrgb_avx2<ConversionDirection::YUV_TO_RGB, uint16_t, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); |
| 1154 |
1/2✓ Branch 128 → 129 taken 3 times.
✗ Branch 128 → 130 not taken.
|
3 | else if (bits_per_pixel == 32) |
| 1155 |
1/2✓ Branch 129 → 130 taken 3 times.
✗ Branch 129 → 156 not taken.
|
3 | convert_yuv_to_planarrgb_avx2<ConversionDirection::YUV_TO_RGB, float, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); |
| 1156 | 8 | return dst; | |
| 1157 | } | ||
| 1158 | |||
| 1159 | ✗ | if (env->GetCPUFlags() & CPUF_SSE2) | |
| 1160 | { | ||
| 1161 | ✗ | if (bits_per_pixel == 8) | |
| 1162 | ✗ | convert_yuv_to_planarrgb_sse2<ConversionDirection::YUV_TO_RGB, uint8_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); | |
| 1163 | ✗ | else if (bits_per_pixel < 16) | |
| 1164 | ✗ | convert_yuv_to_planarrgb_sse2<ConversionDirection::YUV_TO_RGB, uint16_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); | |
| 1165 | ✗ | else if (bits_per_pixel == 16) | |
| 1166 | ✗ | convert_yuv_to_planarrgb_sse2<ConversionDirection::YUV_TO_RGB, uint16_t, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); | |
| 1167 | ✗ | else if (bits_per_pixel == 32) | |
| 1168 | ✗ | convert_yuv_to_planarrgb_sse2<ConversionDirection::YUV_TO_RGB, float, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); | |
| 1169 | ✗ | return dst; | |
| 1170 | } | ||
| 1171 | |||
| 1172 | #endif | ||
| 1173 | |||
| 1174 | ✗ | if (bits_per_pixel == 8) | |
| 1175 | ✗ | convert_yuv_to_planarrgb_c<ConversionDirection::YUV_TO_RGB, uint8_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); | |
| 1176 | ✗ | else if (bits_per_pixel < 16) | |
| 1177 | ✗ | convert_yuv_to_planarrgb_c<ConversionDirection::YUV_TO_RGB, uint16_t, true>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); | |
| 1178 | ✗ | else if (bits_per_pixel == 16) | |
| 1179 | ✗ | convert_yuv_to_planarrgb_c<ConversionDirection::YUV_TO_RGB, uint16_t, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); | |
| 1180 | ✗ | else if (bits_per_pixel == 32) | |
| 1181 | ✗ | convert_yuv_to_planarrgb_c<ConversionDirection::YUV_TO_RGB, float, false>(dstp, dstPitch, srcp, srcPitch, vi.width, vi.height, matrix, bits_per_pixel, target_bit_depth, force_float); | |
| 1182 | ✗ | return dst; | |
| 1183 | } | ||
| 1184 | ✗ | return dst; | |
| 1185 | 8 | } | |
| 1186 | |||
| 1187 | /************************************ | ||
| 1188 | * YUY2 to YV16 | ||
| 1189 | ************************************/ | ||
| 1190 | |||
| 1191 | ✗ | ConvertYUY2ToYV16_or_Y::ConvertYUY2ToYV16_or_Y(PClip src, bool _to_y, IScriptEnvironment* env) : GenericVideoFilter(src), to_y(_to_y) { | |
| 1192 | |||
| 1193 | ✗ | if (!vi.IsYUY2()) | |
| 1194 | ✗ | env->ThrowError("ConvertYUY2ToYV16/Y: Only YUY2 is allowed as input"); | |
| 1195 | |||
| 1196 | ✗ | vi.pixel_type = to_y ? VideoInfo::CS_Y8 : VideoInfo::CS_YV16; | |
| 1197 | |||
| 1198 | ✗ | } | |
| 1199 | |||
| 1200 | ✗ | static void convert_yuy2_to_y8_c(const BYTE* srcp, BYTE* dstp, size_t src_pitch, size_t dst_pitch, size_t width, size_t height) | |
| 1201 | { | ||
| 1202 | ✗ | for (int y = 0; y < height; y++) { | |
| 1203 | ✗ | for (int x = 0; x < width; x++) { | |
| 1204 | ✗ | dstp[x] = srcp[x * 2]; | |
| 1205 | } | ||
| 1206 | ✗ | srcp += src_pitch; | |
| 1207 | ✗ | dstp += dst_pitch; | |
| 1208 | } | ||
| 1209 | ✗ | } | |
| 1210 | |||
| 1211 | |||
| 1212 | ✗ | static void convert_yuy2_to_yv16_c(const BYTE *srcp, BYTE *dstp_y, BYTE *dstp_u, BYTE *dstp_v, size_t src_pitch, size_t dst_pitch_y, size_t dst_pitch_uv, size_t width, size_t height) | |
| 1213 | { | ||
| 1214 | ✗ | width /= 2; | |
| 1215 | |||
| 1216 | ✗ | for (size_t y = 0; y < height; ++y) { | |
| 1217 | ✗ | for (size_t x = 0; x < width; ++x) { | |
| 1218 | ✗ | dstp_y[x * 2] = srcp[x * 4 + 0]; | |
| 1219 | ✗ | dstp_y[x * 2 + 1] = srcp[x * 4 + 2]; | |
| 1220 | ✗ | dstp_u[x] = srcp[x * 4 + 1]; | |
| 1221 | ✗ | dstp_v[x] = srcp[x * 4 + 3]; | |
| 1222 | } | ||
| 1223 | ✗ | srcp += src_pitch; | |
| 1224 | ✗ | dstp_y += dst_pitch_y; | |
| 1225 | ✗ | dstp_u += dst_pitch_uv; | |
| 1226 | ✗ | dstp_v += dst_pitch_uv; | |
| 1227 | } | ||
| 1228 | ✗ | } | |
| 1229 | |||
| 1230 | |||
| 1231 | ✗ | PVideoFrame __stdcall ConvertYUY2ToYV16_or_Y::GetFrame(int n, IScriptEnvironment* env) { | |
| 1232 | ✗ | PVideoFrame src = child->GetFrame(n, env); | |
| 1233 | ✗ | PVideoFrame dst = env->NewVideoFrameP(vi, &src); | |
| 1234 | |||
| 1235 | ✗ | const BYTE* srcP = src->GetReadPtr(); | |
| 1236 | ✗ | BYTE* dstY = dst->GetWritePtr(PLANAR_Y); | |
| 1237 | |||
| 1238 | ✗ | if (to_y) { | |
| 1239 | ✗ | update_ChromaLocation(env->getFramePropsRW(dst), -1, env); // Y8 target: delete _ChromaLocation | |
| 1240 | // YUY2 to Y8, luma only | ||
| 1241 | #ifdef INTEL_INTRINSICS | ||
| 1242 | ✗ | if (env->GetCPUFlags() & CPUF_SSE2) { | |
| 1243 | ✗ | convert_yuy2_to_y8_sse2(srcP, dstY, src->GetPitch(), dst->GetPitch(PLANAR_Y), vi.width, vi.height); | |
| 1244 | } | ||
| 1245 | else | ||
| 1246 | #endif | ||
| 1247 | { | ||
| 1248 | ✗ | convert_yuy2_to_y8_c(srcP, dstY, src->GetPitch(), dst->GetPitch(PLANAR_Y), vi.width, vi.height); | |
| 1249 | } | ||
| 1250 | ✗ | return dst; | |
| 1251 | } | ||
| 1252 | else { | ||
| 1253 | ✗ | BYTE* dstU = dst->GetWritePtr(PLANAR_U); | |
| 1254 | ✗ | BYTE* dstV = dst->GetWritePtr(PLANAR_V); | |
| 1255 | // YUY2 to YV16, separate luma and chroma | ||
| 1256 | #ifdef INTEL_INTRINSICS | ||
| 1257 | ✗ | if (env->GetCPUFlags() & CPUF_SSE2) { | |
| 1258 | ✗ | convert_yuy2_to_yv16_sse2(srcP, dstY, dstU, dstV, src->GetPitch(), dst->GetPitch(PLANAR_Y), dst->GetPitch(PLANAR_U), vi.width, vi.height); | |
| 1259 | } | ||
| 1260 | else | ||
| 1261 | #ifdef X86_32 | ||
| 1262 | if (env->GetCPUFlags() & CPUF_MMX) { | ||
| 1263 | convert_yuy2_to_yv16_mmx(srcP, dstY, dstU, dstV, src->GetPitch(), dst->GetPitch(PLANAR_Y), dst->GetPitch(PLANAR_U), vi.width, vi.height); | ||
| 1264 | } | ||
| 1265 | else | ||
| 1266 | #endif | ||
| 1267 | #endif | ||
| 1268 | { | ||
| 1269 | ✗ | convert_yuy2_to_yv16_c(srcP, dstY, dstU, dstV, src->GetPitch(), dst->GetPitch(PLANAR_Y), dst->GetPitch(PLANAR_U), vi.width, vi.height); | |
| 1270 | } | ||
| 1271 | } | ||
| 1272 | |||
| 1273 | ✗ | return dst; | |
| 1274 | ✗ | } | |
| 1275 | |||
| 1276 | |||
| 1277 | ✗ | AVSValue __cdecl ConvertYUY2ToYV16_or_Y::Create(AVSValue args, void*, IScriptEnvironment* env) { | |
| 1278 | ✗ | PClip clip = args[0].AsClip(); | |
| 1279 | ✗ | if (clip->GetVideoInfo().IsYV16()) | |
| 1280 | ✗ | return clip; | |
| 1281 | ✗ | return new ConvertYUY2ToYV16_or_Y(clip, false /*to_y*/, env); | |
| 1282 | ✗ | } | |
| 1283 | |||
| 1284 | /************************************ | ||
| 1285 | * YV16 to YUY2 | ||
| 1286 | ************************************/ | ||
| 1287 | |||
| 1288 | ✗ | ConvertYV16ToYUY2::ConvertYV16ToYUY2(PClip src, IScriptEnvironment* env) : GenericVideoFilter(src) { | |
| 1289 | |||
| 1290 | ✗ | if (!vi.IsYV16()) | |
| 1291 | ✗ | env->ThrowError("ConvertYV16ToYUY2: Only YV16 is allowed as input"); | |
| 1292 | |||
| 1293 | ✗ | vi.pixel_type = VideoInfo::CS_YUY2; | |
| 1294 | ✗ | } | |
| 1295 | |||
| 1296 | ✗ | static void convert_yv16_to_yuy2_c(const BYTE *srcp_y, const BYTE *srcp_u, const BYTE *srcp_v, BYTE *dstp, size_t src_pitch_y, size_t src_pitch_uv, size_t dst_pitch, size_t width, size_t height) { | |
| 1297 | ✗ | for (size_t y=0; y < height; y++) { | |
| 1298 | ✗ | for (size_t x=0; x < width / 2; x++) { | |
| 1299 | ✗ | dstp[x*4+0] = srcp_y[x*2]; | |
| 1300 | ✗ | dstp[x*4+1] = srcp_u[x]; | |
| 1301 | ✗ | dstp[x*4+2] = srcp_y[x*2+1]; | |
| 1302 | ✗ | dstp[x*4+3] = srcp_v[x]; | |
| 1303 | } | ||
| 1304 | ✗ | srcp_y += src_pitch_y; | |
| 1305 | ✗ | srcp_u += src_pitch_uv; | |
| 1306 | ✗ | srcp_v += src_pitch_uv; | |
| 1307 | ✗ | dstp += dst_pitch; | |
| 1308 | } | ||
| 1309 | ✗ | } | |
| 1310 | |||
| 1311 | ✗ | PVideoFrame __stdcall ConvertYV16ToYUY2::GetFrame(int n, IScriptEnvironment* env) { | |
| 1312 | ✗ | PVideoFrame src = child->GetFrame(n, env); | |
| 1313 | ✗ | PVideoFrame dst = env->NewVideoFrameP(vi, &src); | |
| 1314 | |||
| 1315 | ✗ | const BYTE* srcY = src->GetReadPtr(PLANAR_Y); | |
| 1316 | ✗ | const BYTE* srcU = src->GetReadPtr(PLANAR_U); | |
| 1317 | ✗ | const BYTE* srcV = src->GetReadPtr(PLANAR_V); | |
| 1318 | |||
| 1319 | ✗ | BYTE* dstp = dst->GetWritePtr(); | |
| 1320 | |||
| 1321 | #ifdef INTEL_INTRINSICS | ||
| 1322 | ✗ | if (env->GetCPUFlags() & CPUF_SSE2) { | |
| 1323 | //U and V don't have to be aligned since we user movq to read from those | ||
| 1324 | ✗ | convert_yv16_to_yuy2_sse2(srcY, srcU, srcV, dstp, src->GetPitch(PLANAR_Y), src->GetPitch(PLANAR_U), dst->GetPitch(), vi.width, vi.height); | |
| 1325 | } else | ||
| 1326 | #ifdef X86_32 | ||
| 1327 | if (env->GetCPUFlags() & CPUF_MMX) { | ||
| 1328 | convert_yv16_to_yuy2_mmx(srcY, srcU, srcV, dstp, src->GetPitch(PLANAR_Y), src->GetPitch(PLANAR_U), dst->GetPitch(), vi.width, vi.height); | ||
| 1329 | } else | ||
| 1330 | #endif | ||
| 1331 | #endif | ||
| 1332 | { | ||
| 1333 | ✗ | convert_yv16_to_yuy2_c(srcY, srcU, srcV, dstp, src->GetPitch(PLANAR_Y), src->GetPitch(PLANAR_U), dst->GetPitch(), vi.width, vi.height); | |
| 1334 | } | ||
| 1335 | |||
| 1336 | ✗ | return dst; | |
| 1337 | ✗ | } | |
| 1338 | |||
| 1339 | |||
| 1340 | ✗ | AVSValue __cdecl ConvertYV16ToYUY2::Create(AVSValue args, void*, IScriptEnvironment* env) { | |
| 1341 | ✗ | PClip clip = args[0].AsClip(); | |
| 1342 | ✗ | if (clip->GetVideoInfo().IsYUY2()) | |
| 1343 | ✗ | return clip; | |
| 1344 | ✗ | return new ConvertYV16ToYUY2(clip, env); | |
| 1345 | ✗ | } | |
| 1346 | |||
| 1347 | /********************************************** | ||
| 1348 | * Converter between arbitrary planar formats | ||
| 1349 | * | ||
| 1350 | * This uses plane copy for luma, and a custom | ||
| 1351 | * resizer for chroma | ||
| 1352 | * | ||
| 1353 | * (c) Klaus Post, 2005 | ||
| 1354 | * (c) Ian Brabham, 2011 | ||
| 1355 | **********************************************/ | ||
| 1356 | |||
| 1357 | 4 | ConvertToPlanarGeneric::ConvertToPlanarGeneric( | |
| 1358 | PClip src, int dst_space, bool interlaced, | ||
| 1359 | int _ChromaLocation_In, | ||
| 1360 | const AVSValue& chromaResampler, const AVSValue& param1, const AVSValue& param2, const AVSValue& param3, | ||
| 1361 | int _ChromaLocation_Out, | ||
| 1362 | 4 | IScriptEnvironment* env) : | |
| 1363 |
4/8✓ Branch 2 → 3 taken 4 times.
✗ Branch 2 → 340 not taken.
✓ Branch 3 → 4 taken 4 times.
✗ Branch 3 → 338 not taken.
✓ Branch 5 → 6 taken 4 times.
✗ Branch 5 → 577 not taken.
✓ Branch 6 → 7 taken 4 times.
✗ Branch 6 → 575 not taken.
|
4 | GenericVideoFilter(src), ChromaLocation_In(_ChromaLocation_In), ChromaLocation_Out(_ChromaLocation_Out) |
| 1364 | { | ||
| 1365 |
1/2✓ Branch 7 → 8 taken 4 times.
✗ Branch 7 → 572 not taken.
|
4 | Yinput = vi.NumComponents() == 1; |
| 1366 |
1/2✓ Branch 8 → 9 taken 4 times.
✗ Branch 8 → 572 not taken.
|
4 | pixelsize = vi.ComponentSize(); |
| 1367 | |||
| 1368 |
1/2✗ Branch 9 → 10 not taken.
✓ Branch 9 → 15 taken 4 times.
|
4 | if (Yinput) { |
| 1369 | ✗ | vi.pixel_type = dst_space; | |
| 1370 | ✗ | if (vi.ComponentSize() != pixelsize) | |
| 1371 | ✗ | env->ThrowError("Convert: Conversion from %d to %d-byte format not supported.", pixelsize, vi.ComponentSize()); | |
| 1372 | // no more preparation here, GetFrame simply returns Y | ||
| 1373 | 3 | return; | |
| 1374 | } | ||
| 1375 | |||
| 1376 | // Y only output from any YUV: no chroma involved, GetFrame will snatch Y plane | ||
| 1377 |
4/6✓ Branch 15 → 16 taken 1 time.
✓ Branch 15 → 21 taken 3 times.
✓ Branch 16 → 17 taken 1 time.
✗ Branch 16 → 21 not taken.
✓ Branch 17 → 18 taken 1 time.
✗ Branch 17 → 21 not taken.
|
4 | if (dst_space == VideoInfo::CS_Y8 || dst_space == VideoInfo::CS_Y10 || |
| 1378 |
3/6✓ Branch 18 → 19 taken 1 time.
✗ Branch 18 → 21 not taken.
✓ Branch 19 → 20 taken 1 time.
✗ Branch 19 → 21 not taken.
✗ Branch 20 → 21 not taken.
✓ Branch 20 → 22 taken 1 time.
|
1 | dst_space == VideoInfo::CS_Y12 || dst_space == VideoInfo::CS_Y14 || dst_space == VideoInfo::CS_Y16 || |
| 1379 | dst_space == VideoInfo::CS_Y32) | ||
| 1380 | { | ||
| 1381 | 3 | vi.pixel_type = dst_space; | |
| 1382 | 3 | return; | |
| 1383 | } | ||
| 1384 | |||
| 1385 | 4 | auto Is420 = [](int pix_type) { | |
| 1386 |
2/4✓ Branch 3 → 4 taken 2 times.
✗ Branch 3 → 15 not taken.
✓ Branch 4 → 5 taken 2 times.
✗ Branch 4 → 15 not taken.
|
2 | return pix_type == VideoInfo::CS_YV12 || pix_type == VideoInfo::CS_I420 || |
| 1387 |
2/4✓ Branch 5 → 6 taken 2 times.
✗ Branch 5 → 15 not taken.
✓ Branch 6 → 7 taken 2 times.
✗ Branch 6 → 15 not taken.
|
2 | pix_type == VideoInfo::CS_YUV420P10 || pix_type == VideoInfo::CS_YUV420P12 || |
| 1388 |
2/4✓ Branch 7 → 8 taken 2 times.
✗ Branch 7 → 15 not taken.
✓ Branch 8 → 9 taken 2 times.
✗ Branch 8 → 15 not taken.
|
2 | pix_type == VideoInfo::CS_YUV420P14 || pix_type == VideoInfo::CS_YUV420P16 || |
| 1389 |
1/2✓ Branch 9 → 10 taken 2 times.
✗ Branch 9 → 15 not taken.
|
2 | pix_type == VideoInfo::CS_YUV420PS || |
| 1390 |
1/2✓ Branch 10 → 11 taken 2 times.
✗ Branch 10 → 15 not taken.
|
2 | pix_type == VideoInfo::CS_YUVA420 || |
| 1391 |
2/4✓ Branch 11 → 12 taken 2 times.
✗ Branch 11 → 15 not taken.
✓ Branch 12 → 13 taken 2 times.
✗ Branch 12 → 15 not taken.
|
2 | pix_type == VideoInfo::CS_YUVA420P10 || pix_type == VideoInfo::CS_YUVA420P12 || |
| 1392 |
4/6✓ Branch 2 → 3 taken 2 times.
✓ Branch 2 → 15 taken 2 times.
✓ Branch 13 → 14 taken 2 times.
✗ Branch 13 → 15 not taken.
✗ Branch 14 → 15 not taken.
✓ Branch 14 → 16 taken 2 times.
|
6 | pix_type == VideoInfo::CS_YUVA420P14 || pix_type == VideoInfo::CS_YUVA420P16 || |
| 1393 | 4 | pix_type == VideoInfo::CS_YUVA420PS; | |
| 1394 | }; | ||
| 1395 | |||
| 1396 |
3/6✓ Branch 23 → 24 taken 1 time.
✗ Branch 23 → 27 not taken.
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 1 time.
✗ Branch 28 → 29 not taken.
✓ Branch 28 → 30 taken 1 time.
|
1 | if (!Is420(vi.pixel_type) && !Is420(dst_space)) |
| 1397 | ✗ | interlaced = false; // Ignore, if YV12 is not involved. | |
| 1398 | //if (interlaced) env->ThrowError("Convert: Interlaced only available with 4:2:0 color spaces."); | ||
| 1399 | |||
| 1400 | // Describe input pixel positioning | ||
| 1401 | 1 | float xdInU = 0.0f, txdInU = 0.0f, bxdInU = 0.0f; | |
| 1402 | 1 | float ydInU = 0.0f, tydInU = 0.0f, bydInU = 0.0f; | |
| 1403 | 1 | float xdInV = 0.0f, txdInV = 0.0f, bxdInV = 0.0f; | |
| 1404 | 1 | float ydInV = 0.0f, tydInV = 0.0f, bydInV = 0.0f; | |
| 1405 | |||
| 1406 | /* | ||
| 1407 | "mpeg1", "center" | ||
| 1408 | - 1-1 averaging kernel (4:2:0, 4:2:2 (horizontal only)) | ||
| 1409 | "mpeg2", "left" (4:2:0, 4:2:2) | ||
| 1410 | - top-field samples are sited 1/4 sample below the luma samples (4:2:0) | ||
| 1411 | - bottom-field samples are sited 1/4 sample above the luma samples (4:2:0) | ||
| 1412 | - horizontal 1-2-1 kernel | ||
| 1413 | "dv": (4:2:0) | ||
| 1414 | Chroma samples are sited on top of luma samples, but CB and CR samples are sited on alternate lines. | ||
| 1415 | - top: V | ||
| 1416 | - bottom: U | ||
| 1417 | "top_left" (4:2:0) | ||
| 1418 | - horizontal 1-2-1 vertical 1-2-1 | ||
| 1419 | */ | ||
| 1420 | |||
| 1421 |
1/2✗ Branch 31 → 32 not taken.
✓ Branch 31 → 42 taken 1 time.
|
1 | if (Is420(vi.pixel_type)) { |
| 1422 | ✗ | switch (ChromaLocation_In) { | |
| 1423 | ✗ | case ChromaLocation_e::AVS_CHROMA_DV: // spec. avisynth | |
| 1424 | ✗ | xdInU = 0.0f; ydInU = 1.0f; txdInU = 0.0f; tydInU = 1.0f; bxdInU = 0.0f; bydInU = 1.0f; // Cb | |
| 1425 | ✗ | xdInV = 0.0f; ydInV = 0.0f; txdInV = 0.0f; tydInV = 0.0f; bxdInV = 0.0f; bydInV = 0.0f; // Cr | |
| 1426 | ✗ | break; | |
| 1427 | ✗ | case ChromaLocation_e::AVS_CHROMA_TOP: | |
| 1428 | ✗ | xdInU = 0.5f, ydInU = 0.0f; txdInU = 0.5f; tydInU = 0.0f; bxdInU = 0.5f; bydInU = 0.5f; | |
| 1429 | ✗ | xdInV = 0.5f, ydInV = 0.0f; txdInV = 0.5f; tydInV = 0.0f; bxdInV = 0.5f; bydInV = 0.5f; | |
| 1430 | ✗ | break; | |
| 1431 | ✗ | case ChromaLocation_e::AVS_CHROMA_CENTER: // mpeg1, center | |
| 1432 | ✗ | xdInU = 0.5f, ydInU = 0.5f; txdInU = 0.5f; tydInU = 0.25f; bxdInU = 0.5f; bydInU = 0.75f; | |
| 1433 | ✗ | xdInV = 0.5f, ydInV = 0.5f; txdInV = 0.5f; tydInV = 0.25f; bxdInV = 0.5f; bydInV = 0.75f; | |
| 1434 | ✗ | break; | |
| 1435 | ✗ | case ChromaLocation_e::AVS_CHROMA_BOTTOM: | |
| 1436 | ✗ | xdInU = 0.5f, ydInU = 1.0f; txdInU = 0.5f; tydInU = 0.5f; bxdInU = 0.5f; bydInU = 1.0f; | |
| 1437 | ✗ | xdInV = 0.5f, ydInV = 1.0f; txdInV = 0.5f; tydInV = 0.5f; bxdInV = 0.5f; bydInV = 1.0f; | |
| 1438 | ✗ | break; | |
| 1439 | ✗ | case ChromaLocation_e::AVS_CHROMA_TOP_LEFT: | |
| 1440 | ✗ | xdInU = 0.0f; ydInU = 0.0f; txdInU = 0.0f; tydInU = 0.0f; bxdInU = 0.0f; bydInU = 0.5f; | |
| 1441 | ✗ | xdInV = 0.0f; ydInV = 0.0f; txdInV = 0.0f; tydInV = 0.0f; bxdInV = 0.0f; bydInV = 0.5f; | |
| 1442 | ✗ | break; | |
| 1443 | ✗ | case ChromaLocation_e::AVS_CHROMA_LEFT: // left, mpeg2 | |
| 1444 | ✗ | xdInU = 0.0f; ydInU = 0.5f; txdInU = 0.0f; tydInU = 0.25f; bxdInU = 0.0f; bydInU = 0.75f; | |
| 1445 | ✗ | xdInV = 0.0f; ydInV = 0.5f; txdInV = 0.0f; tydInV = 0.25f; bxdInV = 0.0f; bydInV = 0.75f; | |
| 1446 | ✗ | break; | |
| 1447 | ✗ | case ChromaLocation_e::AVS_CHROMA_BOTTOM_LEFT: | |
| 1448 | ✗ | xdInU = 0.0f; ydInU = 1.0f; txdInU = 0.0f; tydInU = 0.5f; bxdInU = 0.0f; bydInU = 1.0f; | |
| 1449 | ✗ | xdInV = 0.0f; ydInV = 1.0f; txdInV = 0.0f; tydInV = 0.5f; bxdInV = 0.0f; bydInV = 1.0f; | |
| 1450 | ✗ | break; | |
| 1451 | ✗ | default: | |
| 1452 | ✗ | env->ThrowError("Convert: not supported ChromaPlacement for 4:2:0 input."); | |
| 1453 | } | ||
| 1454 | } | ||
| 1455 |
2/4✓ Branch 42 → 43 taken 1 time.
✗ Branch 42 → 572 not taken.
✗ Branch 43 → 44 not taken.
✓ Branch 43 → 49 taken 1 time.
|
1 | else if (vi.Is422()) { |
| 1456 | ✗ | switch (ChromaLocation_In) { | |
| 1457 | ✗ | case ChromaLocation_e::AVS_CHROMA_CENTER: // center | |
| 1458 | ✗ | xdInU = 0.5f, ydInU = 0.0f; txdInU = 0.5f; tydInU = 0.0f; bxdInU = 0.5f; bydInU = 0.0f; | |
| 1459 | ✗ | xdInV = 0.5f, ydInV = 0.0f; txdInV = 0.5f; tydInV = 0.0f; bxdInV = 0.5f; bydInV = 0.0f; | |
| 1460 | ✗ | break; | |
| 1461 | ✗ | case ChromaLocation_e::AVS_CHROMA_TOP_LEFT: // treated as left | |
| 1462 | case ChromaLocation_e::AVS_CHROMA_LEFT: // left, mpeg2 | ||
| 1463 | case ChromaLocation_e::AVS_CHROMA_BOTTOM_LEFT: // treated as left | ||
| 1464 | ✗ | xdInU = 0.0f; ydInU = 0.0f; txdInU = 0.0f; tydInU = 0.0f; bxdInU = 0.0f; bydInU = 0.0f; | |
| 1465 | ✗ | xdInV = 0.0f; ydInV = 0.0f; txdInV = 0.0f; tydInV = 0.0f; bxdInV = 0.0f; bydInV = 0.0f; | |
| 1466 | ✗ | break; | |
| 1467 | ✗ | default: | |
| 1468 | ✗ | env->ThrowError("Convert: not supported ChromaPlacement for 4:2:2 input."); | |
| 1469 | } | ||
| 1470 | } | ||
| 1471 |
2/4✓ Branch 49 → 50 taken 1 time.
✗ Branch 49 → 572 not taken.
✗ Branch 50 → 51 not taken.
✓ Branch 50 → 56 taken 1 time.
|
1 | else if (vi.IsYV411()) { |
| 1472 | ✗ | if (ChromaLocation_In >= 0 | |
| 1473 | ✗ | && ChromaLocation_In != ChromaLocation_e::AVS_CHROMA_TOP_LEFT | |
| 1474 | ✗ | && ChromaLocation_In != ChromaLocation_e::AVS_CHROMA_LEFT | |
| 1475 | ✗ | && ChromaLocation_In != ChromaLocation_e::AVS_CHROMA_BOTTOM_LEFT | |
| 1476 | ) | ||
| 1477 | { | ||
| 1478 | // if given, only the 'left'-ish versions are accepted, this is how it is treated | ||
| 1479 | ✗ | env->ThrowError("Convert: not supported ChromaPlacement for 4:1:1 input. Only 'left'-style is allowed if given."); | |
| 1480 | } | ||
| 1481 | } | ||
| 1482 |
1/2✗ Branch 56 → 57 not taken.
✓ Branch 56 → 58 taken 1 time.
|
1 | else if (ChromaLocation_In >= 0) |
| 1483 | ✗ | env->ThrowError("Convert: Input ChromaPlacement is invalid for this format."); | |
| 1484 | |||
| 1485 |
1/2✓ Branch 58 → 59 taken 1 time.
✗ Branch 58 → 572 not taken.
|
1 | const int xsIn = 1 << vi.GetPlaneWidthSubsampling(PLANAR_U); |
| 1486 |
1/2✓ Branch 59 → 60 taken 1 time.
✗ Branch 59 → 572 not taken.
|
1 | const int ysIn = 1 << vi.GetPlaneHeightSubsampling(PLANAR_U); |
| 1487 | |||
| 1488 | // change vi to the output format | ||
| 1489 | 1 | vi.pixel_type = dst_space; | |
| 1490 | |||
| 1491 |
2/4✓ Branch 60 → 61 taken 1 time.
✗ Branch 60 → 572 not taken.
✗ Branch 61 → 62 not taken.
✓ Branch 61 → 64 taken 1 time.
|
1 | if (vi.ComponentSize() != pixelsize) |
| 1492 | ✗ | env->ThrowError("Convert: Conversion from %d to %d-byte format not supported.", pixelsize, vi.ComponentSize()); | |
| 1493 | |||
| 1494 | // Describe output pixel positioning | ||
| 1495 | 1 | float xdOutU = 0.0f, txdOutU = 0.0f, bxdOutU = 0.0f; | |
| 1496 | 1 | float ydOutU = 0.0f, tydOutU = 0.0f, bydOutU = 0.0f; | |
| 1497 | 1 | float xdOutV = 0.0f, txdOutV = 0.0f, bxdOutV = 0.0f; | |
| 1498 | 1 | float ydOutV = 0.0f, tydOutV = 0.0f, bydOutV = 0.0f; | |
| 1499 | |||
| 1500 |
1/2✓ Branch 65 → 66 taken 1 time.
✗ Branch 65 → 76 not taken.
|
1 | if (Is420(vi.pixel_type)) { |
| 1501 |
1/8✗ Branch 66 → 67 not taken.
✗ Branch 66 → 68 not taken.
✗ Branch 66 → 69 not taken.
✗ Branch 66 → 70 not taken.
✗ Branch 66 → 71 not taken.
✓ Branch 66 → 72 taken 1 time.
✗ Branch 66 → 73 not taken.
✗ Branch 66 → 74 not taken.
|
1 | switch (ChromaLocation_Out) { |
| 1502 | ✗ | case ChromaLocation_e::AVS_CHROMA_DV: | |
| 1503 | ✗ | xdOutU = 0.0f; ydOutU = 1.0f; txdOutU = 0.0f; tydOutU = 1.0f; bxdOutU = 0.0f; bydOutU = 1.0f; // Cb | |
| 1504 | ✗ | xdOutV = 0.0f; ydOutV = 0.0f; txdOutV = 0.0f; tydOutV = 0.0f; bxdOutV = 0.0f; bydOutV = 0.0f; // Cr | |
| 1505 | ✗ | break; | |
| 1506 | ✗ | case ChromaLocation_e::AVS_CHROMA_TOP: | |
| 1507 | ✗ | xdOutU = 0.5f, ydOutU = 0.0f; txdOutU = 0.5f; tydOutU = 0.0f; bxdOutU = 0.5f; bydOutU = 0.5f; | |
| 1508 | ✗ | xdOutV = 0.5f, ydOutV = 0.0f; txdOutV = 0.5f; tydOutV = 0.0f; bxdOutV = 0.5f; bydOutV = 0.5f; | |
| 1509 | ✗ | break; | |
| 1510 | ✗ | case ChromaLocation_e::AVS_CHROMA_CENTER: // mpeg1, center | |
| 1511 | ✗ | xdOutU = 0.5f, ydOutU = 0.5f; txdOutU = 0.5f; tydOutU = 0.25f; bxdOutU = 0.5f; bydOutU = 0.75f; | |
| 1512 | ✗ | xdOutV = 0.5f, ydOutV = 0.5f; txdOutV = 0.5f; tydOutV = 0.25f; bxdOutV = 0.5f; bydOutV = 0.75f; | |
| 1513 | ✗ | break; | |
| 1514 | ✗ | case ChromaLocation_e::AVS_CHROMA_BOTTOM: | |
| 1515 | ✗ | xdOutU = 0.5f, ydOutU = 1.0f; txdOutU = 0.5f; tydOutU = 0.5f; bxdOutU = 0.5f; bydOutU = 1.0f; | |
| 1516 | ✗ | xdOutV = 0.5f, ydOutV = 1.0f; txdOutV = 0.5f; tydOutV = 0.5f; bxdOutV = 0.5f; bydOutV = 1.0f; | |
| 1517 | ✗ | break; | |
| 1518 | ✗ | case ChromaLocation_e::AVS_CHROMA_TOP_LEFT: | |
| 1519 | ✗ | xdOutU = 0.0f; ydOutU = 0.0f; txdOutU = 0.0f; tydOutU = 0.0f; bxdOutU = 0.0f; bydOutU = 0.5f; | |
| 1520 | ✗ | xdOutV = 0.0f; ydOutV = 0.0f; txdOutV = 0.0f; tydOutV = 0.0f; bxdOutV = 0.0f; bydOutV = 0.5f; | |
| 1521 | ✗ | break; | |
| 1522 | 1 | case ChromaLocation_e::AVS_CHROMA_LEFT: // left, mpeg2 | |
| 1523 | 1 | xdOutU = 0.0f; ydOutU = 0.5f; txdOutU = 0.0f; tydOutU = 0.25f; bxdOutU = 0.0f; bydOutU = 0.75f; | |
| 1524 | 1 | xdOutV = 0.0f; ydOutV = 0.5f; txdOutV = 0.0f; tydOutV = 0.25f; bxdOutV = 0.0f; bydOutV = 0.75f; | |
| 1525 | 1 | break; | |
| 1526 | ✗ | case ChromaLocation_e::AVS_CHROMA_BOTTOM_LEFT: | |
| 1527 | ✗ | xdOutU = 0.0f; ydOutU = 1.0f; txdOutU = 0.0f; tydOutU = 0.5f; bxdOutU = 0.0f; bydOutU = 1.0f; | |
| 1528 | ✗ | xdOutV = 0.0f; ydOutV = 1.0f; txdOutV = 0.0f; tydOutV = 0.5f; bxdOutV = 0.0f; bydOutV = 1.0f; | |
| 1529 | ✗ | break; | |
| 1530 | ✗ | default: | |
| 1531 | ✗ | env->ThrowError("Convert: not supported ChromaPlacement for 4:2:0 output."); | |
| 1532 | } | ||
| 1533 | } | ||
| 1534 | ✗ | else if (vi.Is422()) { | |
| 1535 | ✗ | switch (ChromaLocation_Out) { | |
| 1536 | ✗ | case ChromaLocation_e::AVS_CHROMA_CENTER: // mpeg1, center | |
| 1537 | ✗ | xdOutU = 0.5f, ydOutU = 0.0f; txdOutU = 0.5f; tydOutU = 0.0f; bxdOutU = 0.5f; bydOutU = 0.0f; | |
| 1538 | ✗ | xdOutV = 0.5f, ydOutV = 0.0f; txdOutV = 0.5f; tydOutV = 0.0f; bxdOutV = 0.5f; bydOutV = 0.0f; | |
| 1539 | ✗ | break; | |
| 1540 | ✗ | case ChromaLocation_e::AVS_CHROMA_TOP_LEFT: // treated as left | |
| 1541 | case ChromaLocation_e::AVS_CHROMA_LEFT: // left, mpeg2 | ||
| 1542 | case ChromaLocation_e::AVS_CHROMA_BOTTOM_LEFT: // treated as left | ||
| 1543 | ✗ | xdOutU = 0.0f; ydOutU = 0.0f; txdOutU = 0.0f; tydOutU = 0.0f; bxdOutU = 0.0f; bydOutU = 0.0f; | |
| 1544 | ✗ | xdOutV = 0.0f; ydOutV = 0.0f; txdOutV = 0.0f; tydOutV = 0.0f; bxdOutV = 0.0f; bydOutV = 0.0f; | |
| 1545 | ✗ | break; | |
| 1546 | ✗ | default: | |
| 1547 | ✗ | env->ThrowError("Convert: not supported ChromaPlacement for 4:2:2 output."); | |
| 1548 | } | ||
| 1549 | } | ||
| 1550 | ✗ | else if (ChromaLocation_Out >= 0) | |
| 1551 | ✗ | env->ThrowError("Convert: Output ChromaPlacement only available with 4:2:0 or 4:2:2 output."); | |
| 1552 | |||
| 1553 |
1/2✓ Branch 85 → 86 taken 1 time.
✗ Branch 85 → 572 not taken.
|
1 | const int xsOut = 1 << vi.GetPlaneWidthSubsampling(PLANAR_U); |
| 1554 | 1 | const int xmask = xsOut - 1; | |
| 1555 |
1/2✗ Branch 86 → 87 not taken.
✓ Branch 86 → 88 taken 1 time.
|
1 | if (vi.width & xmask) |
| 1556 | ✗ | env->ThrowError("Convert: Cannot convert if width isn't mod%d!", xsOut); | |
| 1557 | |||
| 1558 |
1/2✓ Branch 88 → 89 taken 1 time.
✗ Branch 88 → 572 not taken.
|
1 | const int ysOut = 1 << vi.GetPlaneHeightSubsampling(PLANAR_U); |
| 1559 | 1 | const int ymask = ysOut - 1; | |
| 1560 |
1/2✗ Branch 89 → 90 not taken.
✓ Branch 89 → 91 taken 1 time.
|
1 | if (vi.height & ymask) |
| 1561 | ✗ | env->ThrowError("Convert: Cannot convert if height isn't mod%d!", ysOut); | |
| 1562 | |||
| 1563 |
1/2✓ Branch 91 → 92 taken 1 time.
✗ Branch 91 → 572 not taken.
|
1 | int uv_width = vi.width >> vi.GetPlaneWidthSubsampling(PLANAR_U); |
| 1564 |
1/2✓ Branch 92 → 93 taken 1 time.
✗ Branch 92 → 572 not taken.
|
1 | int uv_height = vi.height >> vi.GetPlaneHeightSubsampling(PLANAR_U); |
| 1565 | |||
| 1566 |
5/10✓ Branch 93 → 94 taken 1 time.
✗ Branch 93 → 349 not taken.
✓ Branch 94 → 95 taken 1 time.
✗ Branch 94 → 346 not taken.
✓ Branch 95 → 96 taken 1 time.
✗ Branch 95 → 343 not taken.
✓ Branch 96 → 97 taken 1 time.
✗ Branch 96 → 341 not taken.
✓ Branch 97 → 98 taken 1 time.
✗ Branch 97 → 341 not taken.
|
1 | ResamplingFunction *filter = getResampler(chromaResampler.AsString("bicubic"), param1, param2, param3, true, env); |
| 1567 | |||
| 1568 |
1/2✓ Branch 101 → 102 taken 1 time.
✗ Branch 101 → 572 not taken.
|
1 | bool P = !lstrcmpi(chromaResampler.AsString(""), "point"); |
| 1569 | |||
| 1570 | 8 | auto ChrOffset = [P](int sIn, float dIn, int sOut, float dOut) { | |
| 1571 | // (1 - sOut/sIn)/2 + (dOut-dIn)/sIn; // Gavino Jan 2011 | ||
| 1572 |
1/2✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 8 times.
|
8 | return P ? (dOut - dIn) / sIn : 0.5f + (dOut - dIn - 0.5f*sOut) / sIn; |
| 1573 | 1 | }; | |
| 1574 | |||
| 1575 | 1 | const int force = 0; | |
| 1576 | 1 | const bool preserve_center = true; | |
| 1577 | 1 | const char *placement_name_notused = nullptr; // n/a | |
| 1578 | 1 | const int forced_chroma_placement = -1; // no force | |
| 1579 | // chroma planes are extracted, behave like Y when resized, no chroma planes involved | ||
| 1580 | |||
| 1581 |
1/2✓ Branch 102 → 103 taken 1 time.
✗ Branch 102 → 286 not taken.
|
1 | if (interlaced) { |
| 1582 | 1 | uv_height /= 2; | |
| 1583 | |||
| 1584 |
4/12✓ Branch 104 → 105 taken 1 time.
✗ Branch 104 → 350 not taken.
✓ Branch 106 → 107 taken 1 time.
✗ Branch 106 → 350 not taken.
✓ Branch 107 → 108 taken 1 time.
✗ Branch 107 → 350 not taken.
✓ Branch 108 → 109 taken 1 time.
✗ Branch 108 → 350 not taken.
✗ Branch 350 → 351 not taken.
✗ Branch 350 → 354 not taken.
✗ Branch 352 → 353 not taken.
✗ Branch 352 → 354 not taken.
|
6 | AVSValue tUsubSampling[4] = { ChrOffset(xsIn, txdInU, xsOut, txdOutU), ChrOffset(ysIn, tydInU, ysOut, tydOutU), AVSValue(), AVSValue() }; |
| 1585 |
4/12✓ Branch 110 → 111 taken 1 time.
✗ Branch 110 → 355 not taken.
✓ Branch 112 → 113 taken 1 time.
✗ Branch 112 → 355 not taken.
✓ Branch 113 → 114 taken 1 time.
✗ Branch 113 → 355 not taken.
✓ Branch 114 → 115 taken 1 time.
✗ Branch 114 → 355 not taken.
✗ Branch 355 → 356 not taken.
✗ Branch 355 → 359 not taken.
✗ Branch 357 → 358 not taken.
✗ Branch 357 → 359 not taken.
|
6 | AVSValue bUsubSampling[4] = { ChrOffset(xsIn, bxdInU, xsOut, bxdOutU), ChrOffset(ysIn, bydInU, ysOut, bydOutU), AVSValue(), AVSValue() }; |
| 1586 |
4/12✓ Branch 116 → 117 taken 1 time.
✗ Branch 116 → 360 not taken.
✓ Branch 118 → 119 taken 1 time.
✗ Branch 118 → 360 not taken.
✓ Branch 119 → 120 taken 1 time.
✗ Branch 119 → 360 not taken.
✓ Branch 120 → 121 taken 1 time.
✗ Branch 120 → 360 not taken.
✗ Branch 360 → 361 not taken.
✗ Branch 360 → 364 not taken.
✗ Branch 362 → 363 not taken.
✗ Branch 362 → 364 not taken.
|
6 | AVSValue tVsubSampling[4] = { ChrOffset(xsIn, txdInV, xsOut, txdOutV), ChrOffset(ysIn, tydInV, ysOut, tydOutV), AVSValue(), AVSValue() }; |
| 1587 |
4/12✓ Branch 122 → 123 taken 1 time.
✗ Branch 122 → 365 not taken.
✓ Branch 124 → 125 taken 1 time.
✗ Branch 124 → 365 not taken.
✓ Branch 125 → 126 taken 1 time.
✗ Branch 125 → 365 not taken.
✓ Branch 126 → 127 taken 1 time.
✗ Branch 126 → 365 not taken.
✗ Branch 365 → 366 not taken.
✗ Branch 365 → 369 not taken.
✗ Branch 367 → 368 not taken.
✗ Branch 367 → 369 not taken.
|
6 | AVSValue bVsubSampling[4] = { ChrOffset(xsIn, bxdInV, xsOut, bxdOutV), ChrOffset(ysIn, bydInV, ysOut, bydOutV), AVSValue(), AVSValue() }; |
| 1588 | |||
| 1589 |
13/32✓ Branch 127 → 128 taken 1 time.
✗ Branch 127 → 494 not taken.
✓ Branch 128 → 129 taken 1 time.
✗ Branch 128 → 384 not taken.
✓ Branch 129 → 130 taken 1 time.
✗ Branch 129 → 380 not taken.
✓ Branch 130 → 131 taken 1 time.
✗ Branch 130 → 376 not taken.
✓ Branch 131 → 132 taken 1 time.
✗ Branch 131 → 374 not taken.
✓ Branch 132 → 133 taken 1 time.
✗ Branch 132 → 374 not taken.
✓ Branch 133 → 134 taken 1 time.
✗ Branch 133 → 372 not taken.
✓ Branch 134 → 135 taken 1 time.
✗ Branch 134 → 372 not taken.
✓ Branch 135 → 136 taken 1 time.
✗ Branch 135 → 370 not taken.
✓ Branch 136 → 137 taken 1 time.
✗ Branch 136 → 370 not taken.
✗ Branch 140 → 141 not taken.
✓ Branch 140 → 142 taken 1 time.
✗ Branch 142 → 143 not taken.
✓ Branch 142 → 144 taken 1 time.
✗ Branch 144 → 145 not taken.
✓ Branch 144 → 146 taken 1 time.
✗ Branch 377 → 378 not taken.
✗ Branch 377 → 379 not taken.
✗ Branch 381 → 382 not taken.
✗ Branch 381 → 383 not taken.
✗ Branch 385 → 386 not taken.
✗ Branch 385 → 387 not taken.
|
1 | Usource = new SeparateFields(new AssumeParity(new SwapUVToY(child, SwapUVToY::UToY8, env), true), env); // also works for Y16/Y32 |
| 1590 |
13/32✓ Branch 146 → 147 taken 1 time.
✗ Branch 146 → 494 not taken.
✓ Branch 147 → 148 taken 1 time.
✗ Branch 147 → 402 not taken.
✓ Branch 148 → 149 taken 1 time.
✗ Branch 148 → 398 not taken.
✓ Branch 149 → 150 taken 1 time.
✗ Branch 149 → 394 not taken.
✓ Branch 150 → 151 taken 1 time.
✗ Branch 150 → 392 not taken.
✓ Branch 151 → 152 taken 1 time.
✗ Branch 151 → 392 not taken.
✓ Branch 152 → 153 taken 1 time.
✗ Branch 152 → 390 not taken.
✓ Branch 153 → 154 taken 1 time.
✗ Branch 153 → 390 not taken.
✓ Branch 154 → 155 taken 1 time.
✗ Branch 154 → 388 not taken.
✓ Branch 155 → 156 taken 1 time.
✗ Branch 155 → 388 not taken.
✗ Branch 159 → 160 not taken.
✓ Branch 159 → 161 taken 1 time.
✗ Branch 161 → 162 not taken.
✓ Branch 161 → 163 taken 1 time.
✗ Branch 163 → 164 not taken.
✓ Branch 163 → 165 taken 1 time.
✗ Branch 395 → 396 not taken.
✗ Branch 395 → 397 not taken.
✗ Branch 399 → 400 not taken.
✗ Branch 399 → 401 not taken.
✗ Branch 403 → 404 not taken.
✗ Branch 403 → 405 not taken.
|
1 | Vsource = new SeparateFields(new AssumeParity(new SwapUVToY(child, SwapUVToY::VToY8, env), true), env); // also works for Y16/Y32 |
| 1591 | |||
| 1592 |
1/2✓ Branch 167 → 168 taken 1 time.
✗ Branch 167 → 406 not taken.
|
2 | std::vector<PClip> tbUsource(2); // Interleave() will take ownership of these |
| 1593 |
1/2✓ Branch 171 → 172 taken 1 time.
✗ Branch 171 → 409 not taken.
|
1 | std::vector<PClip> tbVsource(2); |
| 1594 | |||
| 1595 |
7/16✓ Branch 173 → 174 taken 1 time.
✗ Branch 173 → 422 not taken.
✓ Branch 174 → 175 taken 1 time.
✗ Branch 174 → 418 not taken.
✓ Branch 175 → 176 taken 1 time.
✗ Branch 175 → 416 not taken.
✓ Branch 176 → 177 taken 1 time.
✗ Branch 176 → 416 not taken.
✓ Branch 177 → 178 taken 1 time.
✗ Branch 177 → 414 not taken.
✓ Branch 179 → 180 taken 1 time.
✗ Branch 179 → 412 not taken.
✗ Branch 183 → 184 not taken.
✓ Branch 183 → 185 taken 1 time.
✗ Branch 419 → 420 not taken.
✗ Branch 419 → 421 not taken.
|
1 | tbUsource[0] = FilteredResize::CreateResize(new SelectEvery(Usource, 2, 0, env), uv_width, uv_height, tUsubSampling, force, filter, preserve_center, placement_name_notused, forced_chroma_placement, env); |
| 1596 |
7/16✓ Branch 185 → 186 taken 1 time.
✗ Branch 185 → 434 not taken.
✓ Branch 186 → 187 taken 1 time.
✗ Branch 186 → 430 not taken.
✓ Branch 187 → 188 taken 1 time.
✗ Branch 187 → 428 not taken.
✓ Branch 188 → 189 taken 1 time.
✗ Branch 188 → 428 not taken.
✓ Branch 189 → 190 taken 1 time.
✗ Branch 189 → 426 not taken.
✓ Branch 191 → 192 taken 1 time.
✗ Branch 191 → 424 not taken.
✗ Branch 195 → 196 not taken.
✓ Branch 195 → 197 taken 1 time.
✗ Branch 431 → 432 not taken.
✗ Branch 431 → 433 not taken.
|
1 | tbUsource[1] = FilteredResize::CreateResize(new SelectEvery(Usource, 2, 1, env), uv_width, uv_height, bUsubSampling, force, filter, preserve_center, placement_name_notused, forced_chroma_placement, env); |
| 1597 |
7/16✓ Branch 197 → 198 taken 1 time.
✗ Branch 197 → 446 not taken.
✓ Branch 198 → 199 taken 1 time.
✗ Branch 198 → 442 not taken.
✓ Branch 199 → 200 taken 1 time.
✗ Branch 199 → 440 not taken.
✓ Branch 200 → 201 taken 1 time.
✗ Branch 200 → 440 not taken.
✓ Branch 201 → 202 taken 1 time.
✗ Branch 201 → 438 not taken.
✓ Branch 203 → 204 taken 1 time.
✗ Branch 203 → 436 not taken.
✗ Branch 207 → 208 not taken.
✓ Branch 207 → 209 taken 1 time.
✗ Branch 443 → 444 not taken.
✗ Branch 443 → 445 not taken.
|
1 | tbVsource[0] = FilteredResize::CreateResize(new SelectEvery(Vsource, 2, 0, env), uv_width, uv_height, tVsubSampling, force, filter, preserve_center, placement_name_notused, forced_chroma_placement, env); |
| 1598 |
7/16✓ Branch 209 → 210 taken 1 time.
✗ Branch 209 → 458 not taken.
✓ Branch 210 → 211 taken 1 time.
✗ Branch 210 → 454 not taken.
✓ Branch 211 → 212 taken 1 time.
✗ Branch 211 → 452 not taken.
✓ Branch 212 → 213 taken 1 time.
✗ Branch 212 → 452 not taken.
✓ Branch 213 → 214 taken 1 time.
✗ Branch 213 → 450 not taken.
✓ Branch 215 → 216 taken 1 time.
✗ Branch 215 → 448 not taken.
✗ Branch 219 → 220 not taken.
✓ Branch 219 → 221 taken 1 time.
✗ Branch 455 → 456 not taken.
✗ Branch 455 → 457 not taken.
|
1 | tbVsource[1] = FilteredResize::CreateResize(new SelectEvery(Vsource, 2, 1, env), uv_width, uv_height, bVsubSampling, force, filter, preserve_center, placement_name_notused, forced_chroma_placement, env); |
| 1599 | |||
| 1600 |
12/30✓ Branch 221 → 222 taken 1 time.
✗ Branch 221 → 490 not taken.
✓ Branch 222 → 223 taken 1 time.
✗ Branch 222 → 471 not taken.
✓ Branch 223 → 224 taken 1 time.
✗ Branch 223 → 467 not taken.
✓ Branch 226 → 227 taken 1 time.
✗ Branch 226 → 464 not taken.
✓ Branch 227 → 228 taken 1 time.
✗ Branch 227 → 464 not taken.
✓ Branch 228 → 229 taken 1 time.
✗ Branch 228 → 462 not taken.
✓ Branch 229 → 230 taken 1 time.
✗ Branch 229 → 462 not taken.
✓ Branch 230 → 231 taken 1 time.
✗ Branch 230 → 460 not taken.
✓ Branch 231 → 232 taken 1 time.
✗ Branch 231 → 460 not taken.
✗ Branch 234 → 235 not taken.
✓ Branch 234 → 236 taken 1 time.
✗ Branch 236 → 237 not taken.
✓ Branch 236 → 238 taken 1 time.
✗ Branch 238 → 239 not taken.
✓ Branch 238 → 240 taken 1 time.
✗ Branch 464 → 465 not taken.
✗ Branch 464 → 466 not taken.
✗ Branch 468 → 469 not taken.
✗ Branch 468 → 470 not taken.
✗ Branch 472 → 473 not taken.
✗ Branch 472 → 474 not taken.
|
2 | Usource = new SelectEvery(new DoubleWeaveFields(new Interleave(std::move(tbUsource), env)), 2, 0, env); |
| 1601 |
12/30✓ Branch 240 → 241 taken 1 time.
✗ Branch 240 → 490 not taken.
✓ Branch 241 → 242 taken 1 time.
✗ Branch 241 → 486 not taken.
✓ Branch 242 → 243 taken 1 time.
✗ Branch 242 → 482 not taken.
✓ Branch 245 → 246 taken 1 time.
✗ Branch 245 → 479 not taken.
✓ Branch 246 → 247 taken 1 time.
✗ Branch 246 → 479 not taken.
✓ Branch 247 → 248 taken 1 time.
✗ Branch 247 → 477 not taken.
✓ Branch 248 → 249 taken 1 time.
✗ Branch 248 → 477 not taken.
✓ Branch 249 → 250 taken 1 time.
✗ Branch 249 → 475 not taken.
✓ Branch 250 → 251 taken 1 time.
✗ Branch 250 → 475 not taken.
✗ Branch 253 → 254 not taken.
✓ Branch 253 → 255 taken 1 time.
✗ Branch 255 → 256 not taken.
✓ Branch 255 → 257 taken 1 time.
✗ Branch 257 → 258 not taken.
✓ Branch 257 → 259 taken 1 time.
✗ Branch 479 → 480 not taken.
✗ Branch 479 → 481 not taken.
✗ Branch 483 → 484 not taken.
✗ Branch 483 → 485 not taken.
✗ Branch 487 → 488 not taken.
✗ Branch 487 → 489 not taken.
|
2 | Vsource = new SelectEvery(new DoubleWeaveFields(new Interleave(std::move(tbVsource), env)), 2, 0, env); |
| 1602 |
8/16✓ Branch 262 → 263 taken 4 times.
✓ Branch 262 → 266 taken 1 time.
✓ Branch 268 → 269 taken 4 times.
✓ Branch 268 → 272 taken 1 time.
✓ Branch 274 → 275 taken 4 times.
✓ Branch 274 → 278 taken 1 time.
✓ Branch 280 → 281 taken 4 times.
✓ Branch 280 → 284 taken 1 time.
✗ Branch 495 → 496 not taken.
✗ Branch 495 → 499 not taken.
✗ Branch 502 → 503 not taken.
✗ Branch 502 → 506 not taken.
✗ Branch 509 → 510 not taken.
✗ Branch 509 → 513 not taken.
✗ Branch 516 → 517 not taken.
✗ Branch 516 → 520 not taken.
|
21 | } |
| 1603 | else { | ||
| 1604 | ✗ | AVSValue UsubSampling[4] = { ChrOffset(xsIn, xdInU, xsOut, xdOutU), ChrOffset(ysIn, ydInU, ysOut, ydOutU), AVSValue(), AVSValue() }; | |
| 1605 | ✗ | AVSValue VsubSampling[4] = { ChrOffset(xsIn, xdInV, xsOut, xdOutV), ChrOffset(ysIn, ydInV, ysOut, ydOutV), AVSValue(), AVSValue() }; | |
| 1606 | |||
| 1607 | ✗ | Usource = FilteredResize::CreateResize(new SwapUVToY(child, SwapUVToY::UToY8, env), uv_width, uv_height, UsubSampling, force, filter, preserve_center, placement_name_notused, forced_chroma_placement, env); | |
| 1608 | ✗ | Vsource = FilteredResize::CreateResize(new SwapUVToY(child, SwapUVToY::VToY8, env), uv_width, uv_height, VsubSampling, force, filter, preserve_center, placement_name_notused, forced_chroma_placement, env); | |
| 1609 | ✗ | } | |
| 1610 |
1/2✓ Branch 333 → 334 taken 1 time.
✗ Branch 333 → 335 not taken.
|
1 | delete filter; |
| 1611 | ✗ | } | |
| 1612 | |||
| 1613 | 3 | PVideoFrame __stdcall ConvertToPlanarGeneric::GetFrame(int n, IScriptEnvironment* env) { | |
| 1614 |
1/2✓ Branch 3 → 4 taken 3 times.
✗ Branch 3 → 135 not taken.
|
3 | PVideoFrame src = child->GetFrame(n, env); |
| 1615 | |||
| 1616 | |||
| 1617 |
2/4✓ Branch 4 → 5 taken 3 times.
✗ Branch 4 → 133 not taken.
✓ Branch 5 → 6 taken 3 times.
✗ Branch 5 → 20 not taken.
|
3 | if (vi.IsY()) { |
| 1618 | // Abuse Subframe to snatch the Y plane | ||
| 1619 |
5/12✓ Branch 7 → 8 taken 3 times.
✗ Branch 7 → 133 not taken.
✓ Branch 9 → 10 taken 3 times.
✗ Branch 9 → 133 not taken.
✓ Branch 11 → 12 taken 3 times.
✗ Branch 11 → 133 not taken.
✓ Branch 12 → 13 taken 3 times.
✗ Branch 12 → 121 not taken.
✓ Branch 13 → 14 taken 3 times.
✗ Branch 13 → 119 not taken.
✗ Branch 122 → 123 not taken.
✗ Branch 122 → 124 not taken.
|
3 | PVideoFrame dst = env->Subframe(src, 0, src->GetPitch(PLANAR_Y), src->GetRowSize(PLANAR_Y), src->GetHeight(PLANAR_Y)); |
| 1620 |
1/2✓ Branch 15 → 16 taken 3 times.
✗ Branch 15 → 122 not taken.
|
3 | auto props = env->getFramePropsRW(dst); |
| 1621 | // ChromaLocation_Out is <0 : erased | ||
| 1622 |
1/2✓ Branch 16 → 17 taken 3 times.
✗ Branch 16 → 122 not taken.
|
3 | update_ChromaLocation(props, ChromaLocation_Out, env); |
| 1623 |
1/2✗ Branch 17 → 18 not taken.
✓ Branch 17 → 19 taken 3 times.
|
3 | return dst; |
| 1624 | ✗ | } | |
| 1625 | |||
| 1626 | ✗ | PVideoFrame dst = env->NewVideoFrameP(vi, &src); | |
| 1627 | ✗ | env->BitBlt(dst->GetWritePtr(PLANAR_Y), dst->GetPitch(PLANAR_Y), src->GetReadPtr(PLANAR_Y), src->GetPitch(PLANAR_Y), | |
| 1628 | src->GetRowSize(PLANAR_Y_ALIGNED), src->GetHeight(PLANAR_Y)); | ||
| 1629 | |||
| 1630 | ✗ | auto props = env->getFramePropsRW(dst); | |
| 1631 | ✗ | update_ChromaLocation(props, ChromaLocation_Out, env); | |
| 1632 | |||
| 1633 | // alpha. if pitch is zero -> no alpha channel | ||
| 1634 | ✗ | const int rowsizeA = dst->GetRowSize(PLANAR_A); | |
| 1635 | ✗ | const int dst_pitchA = dst->GetPitch(PLANAR_A); | |
| 1636 | ✗ | BYTE* dstp_a = (dst_pitchA == 0) ? nullptr : dst->GetWritePtr(PLANAR_A); | |
| 1637 | ✗ | const int heightA = dst->GetHeight(PLANAR_A); | |
| 1638 | |||
| 1639 | ✗ | if (dst_pitchA != 0) | |
| 1640 | { | ||
| 1641 | ✗ | if (src->GetPitch(PLANAR_A) != 0) | |
| 1642 | ✗ | env->BitBlt(dstp_a, dst_pitchA, src->GetReadPtr(PLANAR_A), src->GetPitch(PLANAR_A), | |
| 1643 | src->GetRowSize(PLANAR_A_ALIGNED), src->GetHeight(PLANAR_A)); | ||
| 1644 | else { | ||
| 1645 | // e.g. ConvertToYUVA() case from Alpha-less formats | ||
| 1646 | ✗ | switch (vi.ComponentSize()) | |
| 1647 | { | ||
| 1648 | ✗ | case 1: | |
| 1649 | ✗ | fill_plane<BYTE>(dstp_a, heightA, rowsizeA, dst_pitchA, 255); | |
| 1650 | ✗ | break; | |
| 1651 | ✗ | case 2: | |
| 1652 | ✗ | fill_plane<uint16_t>(dstp_a, heightA, rowsizeA, dst_pitchA, (1 << vi.BitsPerComponent()) - 1); | |
| 1653 | ✗ | break; | |
| 1654 | ✗ | case 4: | |
| 1655 | ✗ | fill_plane<float>(dstp_a, heightA, rowsizeA, dst_pitchA, 1.0f); | |
| 1656 | ✗ | break; | |
| 1657 | } | ||
| 1658 | } | ||
| 1659 | } | ||
| 1660 | |||
| 1661 | ✗ | BYTE* dstp_u = dst->GetWritePtr(PLANAR_U); | |
| 1662 | ✗ | BYTE* dstp_v = dst->GetWritePtr(PLANAR_V); | |
| 1663 | ✗ | const int height = dst->GetHeight(PLANAR_U); | |
| 1664 | ✗ | const int rowsizeUV = dst->GetRowSize(PLANAR_U); | |
| 1665 | ✗ | const int dst_pitch = dst->GetPitch(PLANAR_U); | |
| 1666 | |||
| 1667 | ✗ | if (Yinput) { | |
| 1668 | ✗ | switch (vi.ComponentSize()) | |
| 1669 | { | ||
| 1670 | ✗ | case 1: | |
| 1671 | ✗ | fill_chroma<BYTE>(dstp_u, dstp_v, height, rowsizeUV, dst_pitch, 0x80); | |
| 1672 | ✗ | break; | |
| 1673 | ✗ | case 2: | |
| 1674 | ✗ | fill_chroma<uint16_t>(dstp_u, dstp_v, height, rowsizeUV, dst_pitch, 1 << (vi.BitsPerComponent() - 1)); | |
| 1675 | ✗ | break; | |
| 1676 | ✗ | case 4: | |
| 1677 | ✗ | const float half = 0.0f; | |
| 1678 | ✗ | fill_chroma<float>(dstp_u, dstp_v, height, rowsizeUV, dst_pitch, half); | |
| 1679 | ✗ | break; | |
| 1680 | } | ||
| 1681 | } else { | ||
| 1682 | ✗ | src = Usource->GetFrame(n, env); | |
| 1683 | ✗ | env->BitBlt(dstp_u, dst_pitch, src->GetReadPtr(PLANAR_Y), src->GetPitch(PLANAR_Y), src->GetRowSize(PLANAR_Y_ALIGNED), height); | |
| 1684 | ✗ | src = Vsource->GetFrame(n, env); | |
| 1685 | ✗ | env->BitBlt(dstp_v, dst_pitch, src->GetReadPtr(PLANAR_Y), src->GetPitch(PLANAR_Y), src->GetRowSize(PLANAR_Y_ALIGNED), height); | |
| 1686 | } | ||
| 1687 | |||
| 1688 | ✗ | return dst; | |
| 1689 | 3 | } | |
| 1690 | /* 0 1 2 3 4 5 6 7 8 9 | ||
| 1691 | { "ConvertToYUV411", BUILTIN_FUNC_PREFIX, "c[interlaced]b[matrix]s[ChromaInPlacement]s[chromaresample]s[param1]f[param2]f[param3]f[bits]i[quality]b", ConvertToPlanarGeneric::CreateYV411, (void*)1 }, // alias for ConvertToYV411, 8 bit check later | ||
| 1692 | { "ConvertToYUV444", BUILTIN_FUNC_PREFIX, "c[interlaced]b[matrix]s[ChromaInPlacement]s[chromaresample]s[param1]f[param2]f[param3]f[bits]i[quality]b", ConvertToPlanarGeneric::CreateYUV444, (void*)1 }, | ||
| 1693 | { "ConvertToYUVA444", BUILTIN_FUNC_PREFIX, "c[interlaced]b[matrix]s[ChromaInPlacement]s[chromaresample]s[param1]f[param2]f[param3]f[bits]i[quality]b", ConvertToPlanarGeneric::CreateYUV444, (void*)2 }, | ||
| 1694 | 0 1 2 3 4 5 6 7 8 9 10 | ||
| 1695 | { "ConvertToYUV420", BUILTIN_FUNC_PREFIX, "c[interlaced]b[matrix]s[ChromaInPlacement]s[chromaresample]s[ChromaOutPlacement]s[param1]f[param2]f[param3]f[bits]i[quality]b", ConvertToPlanarGeneric::CreateYUV420, (void*)1 }, | ||
| 1696 | { "ConvertToYUV422", BUILTIN_FUNC_PREFIX, "c[interlaced]b[matrix]s[ChromaInPlacement]s[chromaresample]s[ChromaOutPlacement]s[param1]f[param2]f[param3]f[bits]i[quality]b", ConvertToPlanarGeneric::CreateYUV422, (void*)1 }, | ||
| 1697 | { "ConvertToYUVA420", BUILTIN_FUNC_PREFIX, "c[interlaced]b[matrix]s[ChromaInPlacement]s[chromaresample]s[ChromaOutPlacement]s[param1]f[param2]f[param3]f[bits]i[quality]b", ConvertToPlanarGeneric::CreateYUV420, (void*)2 }, | ||
| 1698 | { "ConvertToYUVA422", BUILTIN_FUNC_PREFIX, "c[interlaced]b[matrix]s[ChromaInPlacement]s[chromaresample]s[ChromaOutPlacement]s[param1]f[param2]f[param3]f[bits]i[quality]b", ConvertToPlanarGeneric::CreateYUV422, (void*)2 }, | ||
| 1699 | 0 1 2 3 | ||
| 1700 | { "ConvertToY", BUILTIN_FUNC_PREFIX, "c[matrix]s[bits]i[quality]b", ConvertToPlanarGeneric::CreateConvertToY, (void*)1 }, // user_data == 1 -> any bit depth sources | ||
| 1701 | |||
| 1702 | */ | ||
| 1703 | 4 | AVSValue ConvertToPlanarGeneric::Create(AVSValue& args, const char* filter, bool strip_alpha_legacy_8bit, bool to_yuva, IScriptEnvironment* env) { | |
| 1704 | 4 | bool converted = false; | |
| 1705 | |||
| 1706 |
2/4✓ Branch 2 → 3 taken 4 times.
✗ Branch 2 → 638 not taken.
✓ Branch 3 → 4 taken 4 times.
✗ Branch 3 → 638 not taken.
|
4 | PClip clip = args[0].AsClip(); |
| 1707 |
1/2✓ Branch 5 → 6 taken 4 times.
✗ Branch 5 → 636 not taken.
|
4 | VideoInfo vi = clip->GetVideoInfo(); |
| 1708 | |||
| 1709 | 4 | const bool to_y = strcmp(filter, "ConvertToY") == 0; | |
| 1710 | 4 | const bool to_420 = strcmp(filter, "ConvertToYUV420") == 0; | |
| 1711 | 4 | const bool to_422 = strcmp(filter, "ConvertToYUV422") == 0; | |
| 1712 | 4 | const bool to_411 = strcmp(filter, "ConvertToYV411") == 0; | |
| 1713 | 4 | const bool to_444 = strcmp(filter, "ConvertToYUV444") == 0; | |
| 1714 | |||
| 1715 |
2/4✓ Branch 6 → 7 taken 4 times.
✗ Branch 6 → 636 not taken.
✗ Branch 7 → 8 not taken.
✓ Branch 7 → 18 taken 4 times.
|
4 | if (vi.IsYUY2()) { |
| 1716 | // use to_y: no need YV16 extra planes when our target is Y only | ||
| 1717 | ✗ | clip = new ConvertYUY2ToYV16_or_Y(clip, to_y, env); | |
| 1718 | ✗ | vi = clip->GetVideoInfo(); | |
| 1719 | } | ||
| 1720 | |||
| 1721 |
1/2✓ Branch 18 → 19 taken 4 times.
✗ Branch 18 → 636 not taken.
|
4 | AVSValue bits_arg; |
| 1722 |
1/2✓ Branch 19 → 20 taken 4 times.
✗ Branch 19 → 634 not taken.
|
4 | AVSValue quality_arg; |
| 1723 |
1/2✓ Branch 20 → 21 taken 4 times.
✗ Branch 20 → 632 not taken.
|
4 | AVSValue matrix_arg; |
| 1724 |
2/2✓ Branch 21 → 22 taken 3 times.
✓ Branch 21 → 28 taken 1 time.
|
4 | if (to_y) { |
| 1725 |
2/4✓ Branch 22 → 23 taken 3 times.
✗ Branch 22 → 630 not taken.
✓ Branch 23 → 24 taken 3 times.
✗ Branch 23 → 630 not taken.
|
3 | matrix_arg = args[1]; |
| 1726 |
2/4✓ Branch 24 → 25 taken 3 times.
✗ Branch 24 → 630 not taken.
✓ Branch 25 → 26 taken 3 times.
✗ Branch 25 → 630 not taken.
|
3 | bits_arg = args[2]; |
| 1727 |
2/4✓ Branch 26 → 27 taken 3 times.
✗ Branch 26 → 630 not taken.
✓ Branch 27 → 43 taken 3 times.
✗ Branch 27 → 630 not taken.
|
3 | quality_arg = args[3]; |
| 1728 | } | ||
| 1729 |
1/4✗ Branch 28 → 29 not taken.
✓ Branch 28 → 30 taken 1 time.
✗ Branch 29 → 30 not taken.
✗ Branch 29 → 37 not taken.
|
1 | else if (to_420 || to_422) { |
| 1730 |
2/4✓ Branch 30 → 31 taken 1 time.
✗ Branch 30 → 630 not taken.
✓ Branch 31 → 32 taken 1 time.
✗ Branch 31 → 630 not taken.
|
1 | matrix_arg = args[2]; |
| 1731 |
2/4✓ Branch 32 → 33 taken 1 time.
✗ Branch 32 → 630 not taken.
✓ Branch 33 → 34 taken 1 time.
✗ Branch 33 → 630 not taken.
|
1 | bits_arg = args[9]; |
| 1732 |
2/4✓ Branch 34 → 35 taken 1 time.
✗ Branch 34 → 630 not taken.
✓ Branch 35 → 36 taken 1 time.
✗ Branch 35 → 630 not taken.
|
1 | quality_arg = args[10]; |
| 1733 | } | ||
| 1734 | else { | ||
| 1735 | ✗ | matrix_arg = args[2]; | |
| 1736 | ✗ | bits_arg = args[8]; | |
| 1737 | ✗ | quality_arg = args[9]; | |
| 1738 | } | ||
| 1739 | |||
| 1740 |
2/4✓ Branch 43 → 44 taken 4 times.
✗ Branch 43 → 630 not taken.
✓ Branch 44 → 45 taken 4 times.
✗ Branch 44 → 630 not taken.
|
4 | const int target_bits_per_pixel = bits_arg.AsInt(vi.BitsPerComponent()); |
| 1741 |
1/2✓ Branch 45 → 46 taken 4 times.
✗ Branch 45 → 630 not taken.
|
4 | const bool quality = quality_arg.AsBool(false); // float RGB YUV inside |
| 1742 | |||
| 1743 |
1/2✓ Branch 46 → 47 taken 4 times.
✗ Branch 46 → 630 not taken.
|
4 | int bits_per_pixel = vi.BitsPerComponent(); |
| 1744 | |||
| 1745 | /* | ||
| 1746 | if (target_bits_per_pixel != bits_per_pixel && !vi.IsRGB()) { | ||
| 1747 | env->ThrowError("%s: on-thy-fly bit-depth conversion only supported from RGB formats.", filter); | ||
| 1748 | } | ||
| 1749 | */ | ||
| 1750 | 4 | bool needConvertFinalBitdepth = false; | |
| 1751 | |||
| 1752 |
2/4✓ Branch 47 → 48 taken 4 times.
✗ Branch 47 → 630 not taken.
✗ Branch 48 → 49 not taken.
✓ Branch 48 → 50 taken 4 times.
|
4 | if (target_bits_per_pixel != vi.BitsPerComponent()) { |
| 1753 | ✗ | needConvertFinalBitdepth = true; | |
| 1754 | } | ||
| 1755 | |||
| 1756 |
2/4✓ Branch 50 → 51 taken 4 times.
✗ Branch 50 → 630 not taken.
✗ Branch 51 → 52 not taken.
✓ Branch 51 → 120 taken 4 times.
|
4 | if (vi.IsRGB()) { // packed or planar source |
| 1757 | ✗ | const bool keep_packedrgb_alpha = to_yuva && (vi.IsRGB32() || vi.IsRGB64()); | |
| 1758 | // 3.7.6: We convert ALL packed RGB formats to planar RGB! | ||
| 1759 | // The only case where a RGB32->YV24 is a bit slower is: SSE2-only but no SSSE3 capable CPU. | ||
| 1760 | // All other cases are quicker, when converting to planar first and then to YUV444, than doing packed RGB->YUV444 in one step. | ||
| 1761 | // On AVX2 capable CPUs using the PlanarRGB-YUV engine, we are +80% quicker | ||
| 1762 | // doing RGB32->PlanarRGB->YUV444 than doing RGB32->YUV444 in the old SSSE3 step. | ||
| 1763 | ✗ | if (!vi.IsPlanar()) { | |
| 1764 | // we convert to intermediate PlanarRGB, RGB48/64->YUV444 is slow C, planarRGB is fast | ||
| 1765 | // Default ConvertToPlanarRGB call | ||
| 1766 | ✗ | AVSValue new_args[10] = { clip, AVSValue(), AVSValue(), AVSValue(), AVSValue(), AVSValue(), AVSValue(), AVSValue(), AVSValue(), AVSValue() }; | |
| 1767 | // clip, matrix, interlaced, chromainplacement, chromaresample, param1, param2, param3, bits, quality | ||
| 1768 | // convert to planar RGBA only if RGB64 and target is YUVA (need to keep alpha) | ||
| 1769 | ✗ | const intptr_t planar_rgb_type = keep_packedrgb_alpha ? -2 : -1; | |
| 1770 | ✗ | clip = CreateConvertToRGB(AVSValue(new_args, 10), (void *)planar_rgb_type, env).AsClip(); | |
| 1771 | ✗ | vi = clip->GetVideoInfo(); | |
| 1772 | ✗ | } | |
| 1773 | |||
| 1774 | ✗ | if (target_bits_per_pixel != vi.BitsPerComponent()) { | |
| 1775 | ✗ | needConvertFinalBitdepth = true; | |
| 1776 | } | ||
| 1777 | |||
| 1778 | ✗ | bool bitdepthConverted = false; | |
| 1779 | ✗ | if (needConvertFinalBitdepth) { | |
| 1780 | // Optional bit-depth conversion in PackedRGBtoPlanarRGB. | ||
| 1781 | // int->float full/narrow range, int-int full/narrow supported | ||
| 1782 | ✗ | clip = new ConvertRGBToYUV444(clip, matrix_arg.AsString(0) /* matrix_name */, keep_packedrgb_alpha, target_bits_per_pixel, quality, /*ref*/bitdepthConverted, to_y, env); | |
| 1783 | ✗ | vi = clip->GetVideoInfo(); | |
| 1784 | ✗ | if (bitdepthConverted) { | |
| 1785 | ✗ | needConvertFinalBitdepth = false; // done in-process | |
| 1786 | } | ||
| 1787 | } else { | ||
| 1788 | // pass -1 as finalBitdepth, signing that no bit-depth conversion required | ||
| 1789 | // output bitdepthConverted is n/a | ||
| 1790 | ✗ | clip = new ConvertRGBToYUV444(clip, matrix_arg.AsString(0) /* matrix_name */, keep_packedrgb_alpha, -1 /*no bit-depth conversion*/, quality, /*ref*/bitdepthConverted, to_y, env); | |
| 1791 | ✗ | vi = clip->GetVideoInfo(); | |
| 1792 | } | ||
| 1793 | |||
| 1794 | ✗ | vi = clip->GetVideoInfo(); | |
| 1795 | ✗ | converted = true; | |
| 1796 | } | ||
| 1797 |
2/4✓ Branch 120 → 121 taken 4 times.
✗ Branch 120 → 630 not taken.
✗ Branch 121 → 122 not taken.
✓ Branch 121 → 123 taken 4 times.
|
4 | else if (!vi.IsPlanar()) |
| 1798 | ✗ | env->ThrowError("%s: Can only convert from Planar YUV.", filter); | |
| 1799 | |||
| 1800 | // YV411 has no 8+ bits variant. | ||
| 1801 | // A bit depth changing YV411->YUV4xx conversion must be reversed: first convert th format keeping 8 bits, | ||
| 1802 | // then do the bit-depth conversion. | ||
| 1803 |
2/8✗ Branch 123 → 124 not taken.
✓ Branch 123 → 127 taken 4 times.
✗ Branch 124 → 125 not taken.
✗ Branch 124 → 630 not taken.
✗ Branch 125 → 126 not taken.
✗ Branch 125 → 127 not taken.
✗ Branch 128 → 129 not taken.
✓ Branch 128 → 147 taken 4 times.
|
4 | if (needConvertFinalBitdepth && !vi.IsYV411()) { |
| 1804 | // plain Invoke and no "new ConvertBits()": this detects and keeps source and target ranges | ||
| 1805 | ✗ | AVSValue new_args[2] = { clip, target_bits_per_pixel }; | |
| 1806 | ✗ | clip = env->Invoke("ConvertBits", AVSValue(new_args, 2)).AsClip(); | |
| 1807 | ✗ | vi = clip->GetVideoInfo(); | |
| 1808 | ✗ | needConvertFinalBitdepth = false; | |
| 1809 | ✗ | } | |
| 1810 | |||
| 1811 |
1/2✓ Branch 147 → 148 taken 4 times.
✗ Branch 147 → 630 not taken.
|
4 | bits_per_pixel = vi.BitsPerComponent(); // rgb conversion or standalone ConvertBits() would alter it. |
| 1812 | |||
| 1813 | 4 | int pixel_type = VideoInfo::CS_UNKNOWN; | |
| 1814 |
1/2✓ Branch 148 → 149 taken 4 times.
✗ Branch 148 → 630 not taken.
|
4 | AVSValue outplacement = AVSValue(); // only for ConvertToYUV420 and ConvertToYUV422 |
| 1815 | |||
| 1816 |
2/6✓ Branch 149 → 150 taken 4 times.
✗ Branch 149 → 628 not taken.
✗ Branch 150 → 151 not taken.
✓ Branch 150 → 153 taken 4 times.
✗ Branch 151 → 152 not taken.
✗ Branch 151 → 153 not taken.
|
4 | bool hasAlpha = vi.NumComponents() == 4 && !strip_alpha_legacy_8bit; |
| 1817 |
2/6✓ Branch 154 → 155 taken 4 times.
✗ Branch 154 → 628 not taken.
✗ Branch 155 → 156 not taken.
✓ Branch 155 → 158 taken 4 times.
✗ Branch 156 → 157 not taken.
✗ Branch 156 → 158 not taken.
|
4 | bool shouldStripAlpha = vi.NumComponents() == 4 && strip_alpha_legacy_8bit; |
| 1818 |
3/6✓ Branch 159 → 160 taken 4 times.
✗ Branch 159 → 628 not taken.
✓ Branch 160 → 161 taken 4 times.
✗ Branch 160 → 163 not taken.
✗ Branch 161 → 162 not taken.
✓ Branch 161 → 163 taken 4 times.
|
4 | bool shouldAddAlpha = vi.NumComponents() != 4 && to_yuva; |
| 1819 |
2/4✓ Branch 164 → 165 taken 4 times.
✗ Branch 164 → 166 not taken.
✗ Branch 165 → 166 not taken.
✓ Branch 165 → 167 taken 4 times.
|
4 | bool targethasAlpha = hasAlpha || shouldAddAlpha; |
| 1820 | |||
| 1821 | 4 | int ChromaLocation_In = -1; // invalid. Chromalocation_e::AVS_CHROMALOCATION_UNUSED | |
| 1822 | 4 | int ChromaLocation_Out = -1; // left as invalid for 444, and Y | |
| 1823 | |||
| 1824 |
2/4✓ Branch 168 → 169 taken 4 times.
✗ Branch 168 → 628 not taken.
✗ Branch 169 → 170 not taken.
✓ Branch 169 → 178 taken 4 times.
|
4 | if (vi.IsYV411()) { |
| 1825 | // ChromaInPlacement parameter exists, (default none/-1) + input frame properties; 'left'-ish _ChromaLocation is allowed, checked later | ||
| 1826 | ✗ | auto frame0 = clip->GetFrame(0, env); | |
| 1827 | ✗ | const AVSMap* props = env->getFramePropsRO(frame0); | |
| 1828 | ✗ | chromaloc_parse_merge_with_props(vi, args[3].AsString(nullptr), props, /* ref*/ChromaLocation_In, -1 /*default none chromaloc */, env); | |
| 1829 | ✗ | } | |
| 1830 |
5/10✓ Branch 178 → 179 taken 4 times.
✗ Branch 178 → 628 not taken.
✓ Branch 179 → 180 taken 4 times.
✗ Branch 179 → 182 not taken.
✓ Branch 180 → 181 taken 4 times.
✗ Branch 180 → 628 not taken.
✗ Branch 181 → 182 not taken.
✓ Branch 181 → 183 taken 4 times.
✗ Branch 184 → 185 not taken.
✓ Branch 184 → 193 taken 4 times.
|
4 | else if (vi.Is420() || vi.Is422()) { |
| 1831 | // ChromaInPlacement parameter is valid + input frame properties | ||
| 1832 | ✗ | auto frame0 = clip->GetFrame(0, env); | |
| 1833 | ✗ | const AVSMap* props = env->getFramePropsRO(frame0); | |
| 1834 | ✗ | chromaloc_parse_merge_with_props(vi, args[3].AsString(nullptr), props, /* ref*/ChromaLocation_In, ChromaLocation_e::AVS_CHROMA_LEFT /*default*/, env); | |
| 1835 | ✗ | } | |
| 1836 | |||
| 1837 |
1/2✓ Branch 193 → 194 taken 4 times.
✗ Branch 193 → 628 not taken.
|
4 | AVSValue param1; |
| 1838 |
1/2✓ Branch 194 → 195 taken 4 times.
✗ Branch 194 → 626 not taken.
|
4 | AVSValue param2; |
| 1839 |
1/2✓ Branch 195 → 196 taken 4 times.
✗ Branch 195 → 624 not taken.
|
4 | AVSValue param3; |
| 1840 |
3/4✓ Branch 196 → 197 taken 3 times.
✓ Branch 196 → 198 taken 1 time.
✗ Branch 197 → 198 not taken.
✓ Branch 197 → 208 taken 3 times.
|
4 | if (to_420 || to_422) { |
| 1841 | // ChromaOutPlacement parameter is valid | ||
| 1842 |
3/6✓ Branch 198 → 199 taken 1 time.
✗ Branch 198 → 622 not taken.
✓ Branch 199 → 200 taken 1 time.
✗ Branch 199 → 622 not taken.
✓ Branch 200 → 201 taken 1 time.
✗ Branch 200 → 622 not taken.
|
1 | chromaloc_parse_merge_with_props(vi, args[5].AsString(nullptr), nullptr, /* ref*/ChromaLocation_Out, ChromaLocation_e::AVS_CHROMA_LEFT /*default*/, env); |
| 1843 |
2/4✓ Branch 201 → 202 taken 1 time.
✗ Branch 201 → 622 not taken.
✓ Branch 202 → 203 taken 1 time.
✗ Branch 202 → 622 not taken.
|
1 | param1 = args[6]; |
| 1844 |
2/4✓ Branch 203 → 204 taken 1 time.
✗ Branch 203 → 622 not taken.
✓ Branch 204 → 205 taken 1 time.
✗ Branch 204 → 622 not taken.
|
1 | param2 = args[7]; |
| 1845 |
2/4✓ Branch 205 → 206 taken 1 time.
✗ Branch 205 → 622 not taken.
✓ Branch 206 → 207 taken 1 time.
✗ Branch 206 → 622 not taken.
|
1 | param3 = args[8]; |
| 1846 | } | ||
| 1847 |
2/4✓ Branch 208 → 209 taken 3 times.
✗ Branch 208 → 210 not taken.
✗ Branch 209 → 210 not taken.
✓ Branch 209 → 216 taken 3 times.
|
3 | else if (to_444 || to_411) { |
| 1848 | // No ChromaOutPlacement parameter, indexes skip back accordingly | ||
| 1849 | ✗ | param1 = args[5]; | |
| 1850 | ✗ | param2 = args[6]; | |
| 1851 | ✗ | param3 = args[7]; | |
| 1852 | } | ||
| 1853 | |||
| 1854 | // FIXME: no-op or almost no-op shortcuts won't exist even at 420-420 conversion if YUV-YUV matrix conversion is added | ||
| 1855 | |||
| 1856 |
2/2✓ Branch 216 → 217 taken 3 times.
✓ Branch 216 → 229 taken 1 time.
|
4 | if (to_y) { |
| 1857 |
2/4✓ Branch 217 → 218 taken 3 times.
✗ Branch 217 → 622 not taken.
✗ Branch 218 → 219 not taken.
✓ Branch 218 → 221 taken 3 times.
|
3 | if (vi.IsY()) { |
| 1858 | // After RGB->Y conversion or input as Y | ||
| 1859 | ✗ | return clip; | |
| 1860 | } | ||
| 1861 | // planar YUV original, GetFrame will return Y | ||
| 1862 |
1/7✓ Branch 221 → 222 taken 3 times.
✗ Branch 221 → 223 not taken.
✗ Branch 221 → 224 not taken.
✗ Branch 221 → 225 not taken.
✗ Branch 221 → 226 not taken.
✗ Branch 221 → 227 not taken.
✗ Branch 221 → 228 not taken.
|
3 | switch (bits_per_pixel) |
| 1863 | { | ||
| 1864 | 3 | case 8: pixel_type = VideoInfo::CS_Y8; break; | |
| 1865 | ✗ | case 10: pixel_type = VideoInfo::CS_Y10; break; | |
| 1866 | ✗ | case 12: pixel_type = VideoInfo::CS_Y12; break; | |
| 1867 | ✗ | case 14: pixel_type = VideoInfo::CS_Y14; break; | |
| 1868 | ✗ | case 16: pixel_type = VideoInfo::CS_Y16; break; | |
| 1869 | ✗ | case 32: pixel_type = VideoInfo::CS_Y32; break; | |
| 1870 | } | ||
| 1871 | } | ||
| 1872 |
1/2✓ Branch 229 → 230 taken 1 time.
✗ Branch 229 → 286 not taken.
|
1 | else if (to_420) { |
| 1873 |
2/4✓ Branch 230 → 231 taken 1 time.
✗ Branch 230 → 622 not taken.
✗ Branch 231 → 232 not taken.
✓ Branch 231 → 257 taken 1 time.
|
1 | if (vi.Is420()) { |
| 1874 | // possible shortcut | ||
| 1875 | ✗ | if (ChromaLocation_In == ChromaLocation_Out) | |
| 1876 | { | ||
| 1877 | ✗ | if (shouldStripAlpha) | |
| 1878 | ✗ | return new RemoveAlphaPlane(clip, env); | |
| 1879 | ✗ | if (shouldAddAlpha) { | |
| 1880 | // create with default alpha | ||
| 1881 | ✗ | clip = new AddAlphaPlane(clip, nullptr, 0.0f, false, env); | |
| 1882 | ✗ | vi = clip->GetVideoInfo(); | |
| 1883 | } | ||
| 1884 | ✗ | return clip; | |
| 1885 | } | ||
| 1886 | } | ||
| 1887 | |||
| 1888 |
2/4✓ Branch 257 → 258 taken 1 time.
✗ Branch 257 → 622 not taken.
✓ Branch 258 → 259 taken 1 time.
✗ Branch 258 → 622 not taken.
|
1 | outplacement = args[5]; |
| 1889 |
2/9✓ Branch 259 → 260 taken 1 time.
✗ Branch 259 → 622 not taken.
✓ Branch 260 → 261 taken 1 time.
✗ Branch 260 → 265 not taken.
✗ Branch 260 → 269 not taken.
✗ Branch 260 → 273 not taken.
✗ Branch 260 → 277 not taken.
✗ Branch 260 → 281 not taken.
✗ Branch 260 → 285 not taken.
|
1 | switch (vi.BitsPerComponent()) |
| 1890 | { | ||
| 1891 |
1/2✗ Branch 261 → 262 not taken.
✓ Branch 261 → 263 taken 1 time.
|
1 | case 8 : pixel_type = targethasAlpha ? VideoInfo::CS_YUVA420 : VideoInfo::CS_YV12; break; |
| 1892 | ✗ | case 10: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA420P10 : VideoInfo::CS_YUV420P10; break; | |
| 1893 | ✗ | case 12: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA420P12 : VideoInfo::CS_YUV420P12; break; | |
| 1894 | ✗ | case 14: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA420P14 : VideoInfo::CS_YUV420P14; break; | |
| 1895 | ✗ | case 16: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA420P16 : VideoInfo::CS_YUV420P16; break; | |
| 1896 | ✗ | case 32: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA420PS : VideoInfo::CS_YUV420PS; break; | |
| 1897 | } | ||
| 1898 | } | ||
| 1899 | ✗ | else if (to_422) { | |
| 1900 | ✗ | if (vi.Is422()) { | |
| 1901 | // possible shortcut | ||
| 1902 | ✗ | if (ChromaLocation_In == ChromaLocation_Out) | |
| 1903 | { | ||
| 1904 | ✗ | if (shouldStripAlpha) | |
| 1905 | ✗ | return new RemoveAlphaPlane(clip, env); | |
| 1906 | ✗ | if (shouldAddAlpha) { | |
| 1907 | // create with default alpha | ||
| 1908 | ✗ | clip = new AddAlphaPlane(clip, nullptr, 0.0f, false, env); | |
| 1909 | ✗ | vi = clip->GetVideoInfo(); | |
| 1910 | } | ||
| 1911 | ✗ | return clip; | |
| 1912 | } | ||
| 1913 | } | ||
| 1914 | |||
| 1915 | ✗ | outplacement = args[5]; | |
| 1916 | ✗ | switch (bits_per_pixel) | |
| 1917 | { | ||
| 1918 | ✗ | case 8 : pixel_type = targethasAlpha ? VideoInfo::CS_YUVA422 : VideoInfo::CS_YV16; break; | |
| 1919 | ✗ | case 10: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA422P10 : VideoInfo::CS_YUV422P10; break; | |
| 1920 | ✗ | case 12: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA422P12 : VideoInfo::CS_YUV422P12; break; | |
| 1921 | ✗ | case 14: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA422P14 : VideoInfo::CS_YUV422P14; break; | |
| 1922 | ✗ | case 16: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA422P16 : VideoInfo::CS_YUV422P16; break; | |
| 1923 | ✗ | case 32: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA422PS : VideoInfo::CS_YUV422PS; break; | |
| 1924 | } | ||
| 1925 | } | ||
| 1926 | ✗ | else if (to_444) { | |
| 1927 | ✗ | if (vi.Is444()) { | |
| 1928 | ✗ | if (shouldStripAlpha) | |
| 1929 | ✗ | return new RemoveAlphaPlane(clip, env); | |
| 1930 | ✗ | if (shouldAddAlpha) { | |
| 1931 | // create with default alpha | ||
| 1932 | ✗ | clip = new AddAlphaPlane(clip, nullptr, 0.0f, false, env); | |
| 1933 | ✗ | vi = clip->GetVideoInfo(); | |
| 1934 | } | ||
| 1935 | ✗ | return clip; | |
| 1936 | } | ||
| 1937 | |||
| 1938 | ✗ | switch (bits_per_pixel) | |
| 1939 | { | ||
| 1940 | ✗ | case 8 : pixel_type = targethasAlpha ? VideoInfo::CS_YUVA444 : VideoInfo::CS_YV24; break; | |
| 1941 | ✗ | case 10: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA444P10 : VideoInfo::CS_YUV444P10; break; | |
| 1942 | ✗ | case 12: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA444P12 : VideoInfo::CS_YUV444P12; break; | |
| 1943 | ✗ | case 14: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA444P14 : VideoInfo::CS_YUV444P14; break; | |
| 1944 | ✗ | case 16: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA444P16 : VideoInfo::CS_YUV444P16; break; | |
| 1945 | ✗ | case 32: pixel_type = targethasAlpha ? VideoInfo::CS_YUVA444PS : VideoInfo::CS_YUV444PS; break; | |
| 1946 | } | ||
| 1947 | } | ||
| 1948 | ✗ | else if (to_411) { | |
| 1949 | ✗ | if (target_bits_per_pixel != 8) | |
| 1950 | ✗ | env->ThrowError("%s: only bits=8 supported for YV411", filter); | |
| 1951 | ✗ | if (vi.IsYV411()) return clip; | |
| 1952 | ✗ | if(vi.ComponentSize()!=1) | |
| 1953 | ✗ | env->ThrowError("%s: 8 bit input only", filter); | |
| 1954 | |||
| 1955 | ✗ | pixel_type = VideoInfo::CS_YV411; | |
| 1956 | } | ||
| 1957 | ✗ | else env->ThrowError("Convert: unknown filter '%s'.", filter); | |
| 1958 | |||
| 1959 |
1/2✗ Branch 407 → 408 not taken.
✓ Branch 407 → 409 taken 4 times.
|
4 | if (pixel_type == VideoInfo::CS_UNKNOWN) |
| 1960 | ✗ | env->ThrowError("%s: unsupported bit depth", filter); | |
| 1961 | |||
| 1962 |
1/2✗ Branch 409 → 410 not taken.
✓ Branch 409 → 418 taken 4 times.
|
4 | if (converted) |
| 1963 | ✗ | clip = env->Invoke("Cache", AVSValue(clip)).AsClip(); | |
| 1964 | |||
| 1965 | // ConvertToPlanarGeneric's GetFrame will recognize if alpha copy or fill-with-defaults needed | ||
| 1966 |
1/2✓ Branch 418 → 419 taken 4 times.
✗ Branch 418 → 622 not taken.
|
8 | AVSValue dummy_for_to_y; |
| 1967 | |||
| 1968 |
1/4✓ Branch 431 → 432 taken 4 times.
✗ Branch 431 → 591 not taken.
✗ Branch 594 → 595 not taken.
✗ Branch 594 → 597 not taken.
|
4 | clip = new ConvertToPlanarGeneric(clip, pixel_type, |
| 1969 |
2/4✓ Branch 426 → 427 taken 1 time.
✗ Branch 426 → 594 not taken.
✓ Branch 427 → 428 taken 1 time.
✗ Branch 427 → 594 not taken.
|
1 | to_y ? false : args[1].AsBool(false), // interlaced |
| 1970 | ChromaLocation_In, | ||
| 1971 |
1/2✓ Branch 422 → 423 taken 1 time.
✗ Branch 422 → 594 not taken.
|
1 | to_y ? dummy_for_to_y : args[4], // chromaresample |
| 1972 | param1, param2, param3, | ||
| 1973 | ChromaLocation_Out, | ||
| 1974 |
8/12✓ Branch 419 → 420 taken 4 times.
✗ Branch 419 → 620 not taken.
✓ Branch 420 → 421 taken 3 times.
✓ Branch 420 → 422 taken 1 time.
✓ Branch 424 → 425 taken 3 times.
✓ Branch 424 → 426 taken 1 time.
✓ Branch 429 → 430 taken 4 times.
✗ Branch 429 → 593 not taken.
✓ Branch 430 → 431 taken 4 times.
✗ Branch 430 → 591 not taken.
✗ Branch 433 → 434 not taken.
✓ Branch 433 → 436 taken 4 times.
|
10 | env); |
| 1975 | |||
| 1976 | // If still not converted, do it now (YV411->YUVxxx 8+ bits) | ||
| 1977 |
1/2✗ Branch 436 → 437 not taken.
✓ Branch 436 → 455 taken 4 times.
|
4 | if (needConvertFinalBitdepth) { |
| 1978 | // plain Invoke and no "new ConvertBits()": this detects and keeps source and target ranges | ||
| 1979 | ✗ | AVSValue new_args[2] = { clip, target_bits_per_pixel }; | |
| 1980 | ✗ | clip = env->Invoke("ConvertBits", AVSValue(new_args, 2)).AsClip(); | |
| 1981 | ✗ | vi = clip->GetVideoInfo(); | |
| 1982 | ✗ | needConvertFinalBitdepth = false; | |
| 1983 | ✗ | } | |
| 1984 | |||
| 1985 |
1/2✓ Branch 455 → 456 taken 4 times.
✗ Branch 455 → 620 not taken.
|
4 | return clip; |
| 1986 | |||
| 1987 | 4 | } | |
| 1988 | |||
| 1989 | 1 | AVSValue __cdecl ConvertToPlanarGeneric::CreateYUV420(AVSValue args, void* user_data, IScriptEnvironment* env) { | |
| 1990 | 1 | bool only_8bit = reinterpret_cast<intptr_t>(user_data) == 0; | |
| 1991 | 1 | bool to_yuva = reinterpret_cast<intptr_t>(user_data) == 2; | |
| 1992 |
1/2✗ Branch 2 → 3 not taken.
✓ Branch 2 → 45 taken 1 time.
|
1 | if (only_8bit) { |
| 1993 | // "ConvertToYV12" syntax | ||
| 1994 | ✗ | if (args[9].Defined() && args[9].AsInt() != 8) | |
| 1995 | ✗ | env->ThrowError("ConvertToYV12: only 8 bit output supported. " | |
| 1996 | "Use ConvertToYUV420 for higher bit depth."); | ||
| 1997 | AVSValue new_args[11] = { | ||
| 1998 | args[0], args[1], args[2], args[3], args[4], | ||
| 1999 | args[5], args[6], args[7], args[8], | ||
| 2000 | AVSValue(8), // bits forced to 8 | ||
| 2001 | args[10] | ||
| 2002 | ✗ | }; | |
| 2003 | ✗ | AVSValue new_args_val(new_args, 11); // named, lives until end of scope | |
| 2004 | ✗ | return Create(new_args_val, "ConvertToYUV420", only_8bit, to_yuva, env); | |
| 2005 | ✗ | } | |
| 2006 | 1 | return Create(args, "ConvertToYUV420", only_8bit, to_yuva, env); | |
| 2007 | } | ||
| 2008 | |||
| 2009 | ✗ | AVSValue __cdecl ConvertToPlanarGeneric::CreateYUV422(AVSValue args, void* user_data, IScriptEnvironment* env) { | |
| 2010 | ✗ | bool only_8bit = reinterpret_cast<intptr_t>(user_data) == 0; | |
| 2011 | ✗ | bool to_yuva = reinterpret_cast<intptr_t>(user_data) == 2; | |
| 2012 | ✗ | if (only_8bit) { | |
| 2013 | // "ConvertToYV16" syntax | ||
| 2014 | ✗ | if (args[9].Defined() && args[9].AsInt() != 8) | |
| 2015 | ✗ | env->ThrowError("ConvertToYV16: only 8 bit output supported. " | |
| 2016 | "Use ConvertToYUV422 for higher bit depth."); | ||
| 2017 | AVSValue new_args[11] = { | ||
| 2018 | args[0], args[1], args[2], args[3], args[4], | ||
| 2019 | args[5], args[6], args[7], args[8], | ||
| 2020 | AVSValue(8), | ||
| 2021 | args[10] | ||
| 2022 | ✗ | }; | |
| 2023 | ✗ | AVSValue new_args_val(new_args, 11); | |
| 2024 | ✗ | return Create(new_args_val, "ConvertToYUV422", only_8bit, to_yuva, env); | |
| 2025 | ✗ | } | |
| 2026 | ✗ | return Create(args, "ConvertToYUV422", only_8bit, to_yuva, env); | |
| 2027 | } | ||
| 2028 | |||
| 2029 | ✗ | AVSValue __cdecl ConvertToPlanarGeneric::CreateYUV444(AVSValue args, void* user_data, IScriptEnvironment* env) { | |
| 2030 | ✗ | bool only_8bit = reinterpret_cast<intptr_t>(user_data) == 0; | |
| 2031 | ✗ | bool to_yuva = reinterpret_cast<intptr_t>(user_data) == 2; | |
| 2032 | ✗ | if (only_8bit) { | |
| 2033 | // "ConvertToYV24" syntax | ||
| 2034 | // parameter index skip back by 1 compared to 420/422, no ChromaOutPlacement parameter, bits is at index 8 instead of 9 | ||
| 2035 | ✗ | if (args[8].Defined() && args[8].AsInt() != 8) | |
| 2036 | ✗ | env->ThrowError("ConvertToYV24: only 8 bit output supported. " | |
| 2037 | "Use ConvertToYUV444 for higher bit depth."); | ||
| 2038 | AVSValue new_args[10] = { | ||
| 2039 | args[0], args[1], args[2], args[3], args[4], | ||
| 2040 | args[5], args[6], args[7], | ||
| 2041 | AVSValue(8), | ||
| 2042 | args[9] | ||
| 2043 | ✗ | }; | |
| 2044 | ✗ | AVSValue new_args_val(new_args, 10); | |
| 2045 | ✗ | return Create(new_args_val, "ConvertToYUV444", only_8bit, to_yuva, env); | |
| 2046 | ✗ | } | |
| 2047 | ✗ | return Create(args, "ConvertToYUV444", only_8bit, to_yuva, env); | |
| 2048 | } | ||
| 2049 | |||
| 2050 | ✗ | AVSValue __cdecl ConvertToPlanarGeneric::CreateYV411(AVSValue args, void* user_data, IScriptEnvironment* env) { | |
| 2051 | ✗ | bool only_8bit = reinterpret_cast<intptr_t>(user_data) == 0; | |
| 2052 | ✗ | bool to_yuva = reinterpret_cast<intptr_t>(user_data) == 2; | |
| 2053 | // parameter index skip back by 1 compared to 420/422, no ChromaOutPlacement parameter, bits is at index 8 instead of 9 | ||
| 2054 | ✗ | if (args[8].Defined() && args[8].AsInt() != 8) | |
| 2055 | ✗ | env->ThrowError("ConvertToYV411: only 8 bit output supported, " | |
| 2056 | "no high bit depth YUV411 format exists."); | ||
| 2057 | AVSValue new_args[10] = { | ||
| 2058 | args[0], args[1], args[2], args[3], args[4], | ||
| 2059 | args[5], args[6], args[7], | ||
| 2060 | AVSValue(8), | ||
| 2061 | args[9] | ||
| 2062 | ✗ | }; | |
| 2063 | ✗ | AVSValue new_args_val(new_args, 10); | |
| 2064 | ✗ | return Create(new_args_val, "ConvertToYV411", only_8bit, to_yuva, env); | |
| 2065 | ✗ | } | |
| 2066 | |||
| 2067 | ✗ | AVSValue __cdecl ConvertToPlanarGeneric::CreateConvertToYUY2(AVSValue args, void*, IScriptEnvironment* env) | |
| 2068 | { | ||
| 2069 | ✗ | PClip clip = args[0].AsClip(); | |
| 2070 | ✗ | VideoInfo vi = clip->GetVideoInfo(); | |
| 2071 | |||
| 2072 | // Fast no-op: YUY2 source, no parameters at all. | ||
| 2073 | // Do not touch frame properties - caller's responsibility. | ||
| 2074 | ✗ | if (vi.IsYUY2() | |
| 2075 | ✗ | && !args[1].Defined() // interlaced | |
| 2076 | ✗ | && !args[2].Defined() // matrix | |
| 2077 | ✗ | && !args[3].Defined() // ChromaInPlacement | |
| 2078 | ✗ | && !args[4].Defined() // chromaresample | |
| 2079 | ✗ | && !args[5].Defined() // ChromaOutPlacement | |
| 2080 | ✗ | && !args[6].Defined() // param1 | |
| 2081 | ✗ | && !args[7].Defined() // param2 | |
| 2082 | ✗ | && !args[8].Defined() // param3 | |
| 2083 | ✗ | && !args[9].Defined() // bits | |
| 2084 | ✗ | && !args[10].Defined()) // quality | |
| 2085 | ✗ | return clip; | |
| 2086 | |||
| 2087 | // YUY2 is 8-bit only: bits= must be 8 if specified. | ||
| 2088 | // We check here to give a proper ConvertToYUY2-specific error message, | ||
| 2089 | // rather than letting CreateYUV422 complain about something unrelated. | ||
| 2090 | // Source can be any bit depth - the conversion chain will downconvert. | ||
| 2091 | ✗ | if (args[9].Defined() && args[9].AsInt() != 8) | |
| 2092 | ✗ | env->ThrowError("ConvertToYUY2: bits must be 8, YUY2 is an 8-bit format"); | |
| 2093 | |||
| 2094 | // Rebuild args with bits=8 forced, so CreateYUV422 sees an explicit | ||
| 2095 | // 8-bit target regardless of source bit depth. | ||
| 2096 | // This also means the void*1 path in CreateYUV422 won't reject | ||
| 2097 | // high bit depth sources - the bits=8 in args drives the downconvert. | ||
| 2098 | AVSValue new_args[11] = { | ||
| 2099 | args[0], // clip | ||
| 2100 | args[1], // interlaced | ||
| 2101 | args[2], // matrix | ||
| 2102 | args[3], // ChromaInPlacement | ||
| 2103 | args[4], // chromaresample | ||
| 2104 | args[5], // ChromaOutPlacement | ||
| 2105 | args[6], // param1 | ||
| 2106 | args[7], // param2 | ||
| 2107 | args[8], // param3 | ||
| 2108 | AVSValue(8), // bits: always 8 for YUY2, overrides source depth | ||
| 2109 | args[10] // quality | ||
| 2110 | ✗ | }; | |
| 2111 | |||
| 2112 | // (void*)1: allow any source bit depth, bits=8 in args enforces 8-bit output. | ||
| 2113 | // The legacy (void*)0 source-depth check is not appropriate here since | ||
| 2114 | // we explicitly want to allow e.g. 10-bit YUV420 → 8-bit YUY2. | ||
| 2115 | ✗ | PClip yv16 = CreateYUV422(AVSValue(new_args, 11), (void*)1, env).AsClip(); | |
| 2116 | |||
| 2117 | // Lossless repack YV16->YUY2. | ||
| 2118 | // Frame properties preserved via NewVideoFrameP in GetFrame. | ||
| 2119 | ✗ | return new ConvertYV16ToYUY2(yv16, env); | |
| 2120 | ✗ | } | |
| 2121 | |||
| 2122 | ✗ | AVSValue __cdecl ConvertToPlanarGeneric::CreateConvertBackToYUY2(AVSValue args, void*, IScriptEnvironment* env) | |
| 2123 | { | ||
| 2124 | // ConvertBackToYUY2 was a pre-2.5 optimization for RGB roundtrip workflows. | ||
| 2125 | // It was never interlaced-aware (hardcoded interlaced=false). | ||
| 2126 | // Now obsolete - forward to ConvertToYUY2::Create with full parameter array. | ||
| 2127 | // ConvertBackToYUY2 signature: c[matrix]s | ||
| 2128 | // ConvertToYUY2 signature: c[interlaced]b[matrix]s[ChromaInPlacement]s | ||
| 2129 | // [chromaresample]s[ChromaOutPlacement]s | ||
| 2130 | // [param1]f[param2]f[param3]f[bits]i[quality]b | ||
| 2131 | AVSValue new_args[11] = { | ||
| 2132 | args[0], // clip | ||
| 2133 | AVSValue(false),// interlaced: was always false in ConvertBackToYUY2 | ||
| 2134 | args[1], // matrix: pass through | ||
| 2135 | AVSValue(), // ChromaInPlacement: not defined | ||
| 2136 | AVSValue(), // chromaresample: not defined | ||
| 2137 | AVSValue(), // ChromaOutPlacement: not defined | ||
| 2138 | AVSValue(), // param1: not defined | ||
| 2139 | AVSValue(), // param2: not defined | ||
| 2140 | AVSValue(), // param3: not defined | ||
| 2141 | AVSValue(), // bits: not defined (will be forced to 8 inside) | ||
| 2142 | AVSValue() // quality: not defined | ||
| 2143 | ✗ | }; | |
| 2144 | ✗ | return CreateConvertToYUY2(AVSValue(new_args, 11), nullptr, env); | |
| 2145 | ✗ | } | |
| 2146 | |||
| 2147 | |||
| 2148 | /* | ||
| 2149 | static int getPlacement(const AVSValue& _placement, IScriptEnvironment* env) { | ||
| 2150 | const char* placement = _placement.AsString(0); | ||
| 2151 | |||
| 2152 | if (placement) { | ||
| 2153 | if (!lstrcmpi(placement, "mpeg2") || !lstrcmpi(placement, "left")) | ||
| 2154 | return PLACEMENT_MPEG2; | ||
| 2155 | |||
| 2156 | if (!lstrcmpi(placement, "mpeg1") || !lstrcmpi(placement, "jpeg") || !lstrcmpi(placement, "center")) | ||
| 2157 | return PLACEMENT_MPEG1; | ||
| 2158 | |||
| 2159 | if (!lstrcmpi(placement, "dv")) | ||
| 2160 | return PLACEMENT_DV; | ||
| 2161 | |||
| 2162 | if (!lstrcmpi(placement, "top_left")) | ||
| 2163 | return PLACEMENT_TOP_LEFT; | ||
| 2164 | |||
| 2165 | env->ThrowError("Convert: Unknown chromaplacement"); | ||
| 2166 | } | ||
| 2167 | return PLACEMENT_MPEG2; | ||
| 2168 | } | ||
| 2169 | */ | ||
| 2170 | |||
| 2171 | |||
| 2172 | 1 | ResamplingFunction* getResampler(const char* resampler, AVSValue param1, AVSValue param2, AVSValue param3, bool throw_on_error, IScriptEnvironment* env) { | |
| 2173 |
1/2✓ Branch 2 → 3 taken 1 time.
✗ Branch 2 → 117 not taken.
|
1 | if (resampler) { |
| 2174 |
1/2✗ Branch 3 → 4 not taken.
✓ Branch 3 → 10 taken 1 time.
|
1 | if (!lstrcmpi(resampler, "point")) |
| 2175 | ✗ | return new PointFilter(); | |
| 2176 |
1/2✗ Branch 10 → 11 not taken.
✓ Branch 10 → 17 taken 1 time.
|
1 | else if (!lstrcmpi(resampler, "bilinear")) |
| 2177 | ✗ | return new TriangleFilter(); | |
| 2178 |
1/2✓ Branch 17 → 18 taken 1 time.
✗ Branch 17 → 26 not taken.
|
1 | else if (!lstrcmpi(resampler, "bicubic")) |
| 2179 |
4/10✓ Branch 19 → 20 taken 1 time.
✗ Branch 19 → 126 not taken.
✓ Branch 20 → 21 taken 1 time.
✗ Branch 20 → 126 not taken.
✓ Branch 21 → 22 taken 1 time.
✗ Branch 21 → 126 not taken.
✗ Branch 23 → 24 not taken.
✓ Branch 23 → 25 taken 1 time.
✗ Branch 126 → 127 not taken.
✗ Branch 126 → 128 not taken.
|
1 | return new MitchellNetravaliFilter(param1.AsDblDef(1.0/3), param2.AsDblDef(1.0/3)); // optional B and C as param1 and param2 |
| 2180 | ✗ | else if (!lstrcmpi(resampler, "lanczos")) | |
| 2181 | ✗ | return new LanczosFilter((int)param1.AsFloat(3)); // optional Taps as param1 | |
| 2182 | ✗ | else if (!lstrcmpi(resampler, "lanczos4")) | |
| 2183 | ✗ | return new LanczosFilter(4); | |
| 2184 | ✗ | else if (!lstrcmpi(resampler, "blackman")) | |
| 2185 | ✗ | return new BlackmanFilter((int)param1.AsFloat(4)); // optional Taps as param1 | |
| 2186 | ✗ | else if (!lstrcmpi(resampler, "spline16")) | |
| 2187 | ✗ | return new Spline16Filter(); | |
| 2188 | ✗ | else if (!lstrcmpi(resampler, "spline36")) | |
| 2189 | ✗ | return new Spline36Filter(); | |
| 2190 | ✗ | else if (!lstrcmpi(resampler, "spline64")) | |
| 2191 | ✗ | return new Spline64Filter(); | |
| 2192 | ✗ | else if (!lstrcmpi(resampler, "gauss")) | |
| 2193 | ✗ | return new GaussianFilter(param1.AsDblDef(30.0), param2.AsDblDef(2.0), param3.AsDblDef(4.0)); // optional P, B, S as param1, param2, param3 | |
| 2194 | ✗ | else if (!lstrcmpi(resampler, "sinc")) | |
| 2195 | ✗ | return new SincFilter((int)param1.AsFloat(4)); // optional Taps as param1 | |
| 2196 | ✗ | else if (!lstrcmpi(resampler, "sinpow")) | |
| 2197 | ✗ | return new SinPowerFilter(param1.AsDblDef(2.5)); // optional P as param1 | |
| 2198 | ✗ | else if (!lstrcmpi(resampler, "sinclin2")) | |
| 2199 | ✗ | return new SincLin2Filter((int)param1.AsFloat(15)); // optional Taps= as param1 | |
| 2200 | ✗ | else if (!lstrcmpi(resampler, "userdefined2")) | |
| 2201 | ✗ | return new UserDefined2Filter(param1.AsDblDef(121.0), param2.AsDblDef(19.0), param3.AsDblDef(2.3)); // optional B and C and S as param1, param2, param3 | |
| 2202 | else | ||
| 2203 | ✗ | if (throw_on_error) | |
| 2204 | ✗ | env->ThrowError("Convert: Unknown chroma resampler, '%s'", resampler); | |
| 2205 | else | ||
| 2206 | ✗ | return nullptr; // e.g. from AddBorders | |
| 2207 | } | ||
| 2208 | ✗ | return new MitchellNetravaliFilter(param1.AsDblDef(1.0/3), param2.AsDblDef(1.0/3)); // Default colorspace conversion for AviSynth | |
| 2209 | } | ||
| 2210 | |||
| 2211 | DISABLE_WARNING_POP | ||
| 2212 |