1use super::*;
2
3impl_color_convert_planar_to_planar!(rgb_to_yuv_u8_p3, u8, 3, nppiRGBToYUV_8u_P3R_Ctx);
4impl_color_convert_same_layout!(bgr_to_yuv_u8_c3, u8, C3, nppiBGRToYUV_8u_C3R_Ctx);
5impl_color_convert_same_layout!(bgr_to_yuv_u8_ac4, u8, AC4, nppiBGRToYUV_8u_AC4R_Ctx);
6impl_generic_color_convert_same_layout!(BgrToYuvC3, bgr_to_yuv, bgr_to_yuv_c3, C3, [
7 u8 => bgr_to_yuv_u8_c3,
8]);
9impl_generic_color_convert_same_layout!(BgrToYuvAC4, bgr_to_yuv, bgr_to_yuv_ac4, AC4, [
10 u8 => bgr_to_yuv_u8_ac4,
11]);
12impl_color_convert_planar_to_planar!(bgr_to_yuv_u8_p3, u8, 3, nppiBGRToYUV_8u_P3R_Ctx);
13impl_color_convert_planar_to_planar!(yuv_to_rgb_u8_p3, u8, 3, nppiYUVToRGB_8u_P3R_Ctx);
14impl_color_convert_same_layout!(yuv_to_bgr_u8_c3, u8, C3, nppiYUVToBGR_8u_C3R_Ctx);
15impl_color_convert_same_layout!(yuv_to_bgr_u8_ac4, u8, AC4, nppiYUVToBGR_8u_AC4R_Ctx);
16impl_generic_color_convert_same_layout!(YuvToBgrC3, yuv_to_bgr, yuv_to_bgr_c3, C3, [
17 u8 => yuv_to_bgr_u8_c3,
18]);
19impl_generic_color_convert_same_layout!(YuvToBgrAC4, yuv_to_bgr, yuv_to_bgr_ac4, AC4, [
20 u8 => yuv_to_bgr_u8_ac4,
21]);
22impl_color_convert_batch_same_layout!(yuv_to_bgr_batch_u8_c3, u8, C3, nppiYUVToBGRBatch_8u_C3R_Ctx);
23impl_color_convert_batch_same_layout_advanced!(
24 yuv_to_bgr_batch_u8_c3_advanced,
25 u8,
26 C3,
27 nppiYUVToBGRBatch_8u_C3R_Advanced_Ctx
28);
29
30macro_rules! impl_color_convert_batch_c3_dispatch {
31 ($trait:ident, $method:ident, $function:ident, [$($ty:ty => $direct:ident),* $(,)?]) => {
32 pub trait $trait: DataTypeLike {
33 fn $method(
34 stream_context: &StreamContext,
35 sources: &[ImageView<'_, Self, C3>],
36 destinations: &mut [ImageViewMut<'_, Self, C3>],
37 ) -> Result<()>;
38 }
39
40 pub fn $function<T>(
41 stream_context: &StreamContext,
42 sources: &[ImageView<'_, T, C3>],
43 destinations: &mut [ImageViewMut<'_, T, C3>],
44 ) -> Result<()>
45 where
46 T: $trait,
47 {
48 T::$method(stream_context, sources, destinations)
49 }
50
51 $(
52 impl $trait for $ty {
53 fn $method(
54 stream_context: &StreamContext,
55 sources: &[ImageView<'_, Self, C3>],
56 destinations: &mut [ImageViewMut<'_, Self, C3>],
57 ) -> Result<()> {
58 $direct(stream_context, sources, destinations)
59 }
60 }
61 )*
62 };
63}
64
65impl_color_convert_batch_c3_dispatch!(YuvToRgbBatchC3, yuv_to_rgb_batch, yuv_to_rgb_batch_c3, [
66 u8 => yuv_to_rgb_batch_u8_c3,
67]);
68impl_color_convert_batch_c3_dispatch!(
69 YuvToRgbBatchAdvancedC3,
70 yuv_to_rgb_batch_advanced,
71 yuv_to_rgb_batch_c3_advanced,
72 [u8 => yuv_to_rgb_batch_u8_c3_advanced]
73);
74impl_color_convert_batch_c3_dispatch!(
75 YcbcrToRgbBatchC3,
76 ycbcr_to_rgb_batch,
77 ycbcr_to_rgb_batch_c3,
78 [u8 => ycbcr_to_rgb_batch_u8_c3]
79);
80impl_color_convert_batch_c3_dispatch!(
81 YcbcrToRgbBatchAdvancedC3,
82 ycbcr_to_rgb_batch_advanced,
83 ycbcr_to_rgb_batch_c3_advanced,
84 [u8 => ycbcr_to_rgb_batch_u8_c3_advanced]
85);
86impl_color_convert_batch_c3_dispatch!(
87 YcbcrToBgrBatchC3,
88 ycbcr_to_bgr_batch,
89 ycbcr_to_bgr_batch_c3,
90 [u8 => ycbcr_to_bgr_batch_u8_c3]
91);
92impl_color_convert_batch_c3_dispatch!(
93 YcbcrToBgrBatchAdvancedC3,
94 ycbcr_to_bgr_batch_advanced,
95 ycbcr_to_bgr_batch_c3_advanced,
96 [u8 => ycbcr_to_bgr_batch_u8_c3_advanced]
97);
98impl_color_convert_batch_c3_dispatch!(YuvToBgrBatchC3, yuv_to_bgr_batch, yuv_to_bgr_batch_c3, [
99 u8 => yuv_to_bgr_batch_u8_c3,
100]);
101impl_color_convert_batch_c3_dispatch!(
102 YuvToBgrBatchAdvancedC3,
103 yuv_to_bgr_batch_advanced,
104 yuv_to_bgr_batch_c3_advanced,
105 [u8 => yuv_to_bgr_batch_u8_c3_advanced]
106);
107
108impl_color_convert_batch_planar_to_packed!(
109 yuv_to_bgr_batch_u8_p3_to_c3,
110 u8,
111 3,
112 C3,
113 nppiYUVToBGRBatch_8u_P3C3R_Ctx
114);
115impl_color_convert_batch_planar_to_packed_advanced!(
116 yuv_to_bgr_batch_u8_p3_to_c3_advanced,
117 u8,
118 3,
119 C3,
120 nppiYUVToBGRBatch_8u_P3C3R_Advanced_Ctx
121);
122
123macro_rules! impl_color_convert_batch_p3_to_c3_dispatch {
124 ($trait:ident, $method:ident, $function:ident, [$($ty:ty => $direct:ident),* $(,)?]) => {
125 pub trait $trait: DataTypeLike {
126 fn $method(
127 stream_context: &StreamContext,
128 sources: &[PlanarImageView<'_, Self, 3>],
129 destinations: &mut [ImageViewMut<'_, Self, C3>],
130 ) -> Result<()>;
131 }
132
133 pub fn $function<T>(
134 stream_context: &StreamContext,
135 sources: &[PlanarImageView<'_, T, 3>],
136 destinations: &mut [ImageViewMut<'_, T, C3>],
137 ) -> Result<()>
138 where
139 T: $trait,
140 {
141 T::$method(stream_context, sources, destinations)
142 }
143
144 $(
145 impl $trait for $ty {
146 fn $method(
147 stream_context: &StreamContext,
148 sources: &[PlanarImageView<'_, Self, 3>],
149 destinations: &mut [ImageViewMut<'_, Self, C3>],
150 ) -> Result<()> {
151 $direct(stream_context, sources, destinations)
152 }
153 }
154 )*
155 };
156}
157
158impl_color_convert_batch_p3_to_c3_dispatch!(
159 YuvToRgbBatchP3ToC3,
160 yuv_to_rgb_batch_p3_to_c3,
161 yuv_to_rgb_batch_p3_to_c3,
162 [u8 => yuv_to_rgb_batch_u8_p3_to_c3]
163);
164impl_color_convert_batch_p3_to_c3_dispatch!(
165 YuvToRgbBatchP3ToC3Advanced,
166 yuv_to_rgb_batch_p3_to_c3_advanced,
167 yuv_to_rgb_batch_p3_to_c3_advanced,
168 [u8 => yuv_to_rgb_batch_u8_p3_to_c3_advanced]
169);
170impl_color_convert_batch_p3_to_c3_dispatch!(
171 YcbcrToRgbBatchP3ToC3,
172 ycbcr_to_rgb_batch_p3_to_c3,
173 ycbcr_to_rgb_batch_p3_to_c3,
174 [u8 => ycbcr_to_rgb_batch_u8_p3_to_c3]
175);
176impl_color_convert_batch_p3_to_c3_dispatch!(
177 YcbcrToRgbBatchP3ToC3Advanced,
178 ycbcr_to_rgb_batch_p3_to_c3_advanced,
179 ycbcr_to_rgb_batch_p3_to_c3_advanced,
180 [u8 => ycbcr_to_rgb_batch_u8_p3_to_c3_advanced]
181);
182impl_color_convert_batch_p3_to_c3_dispatch!(
183 YcbcrToBgrBatchP3ToC3,
184 ycbcr_to_bgr_batch_p3_to_c3,
185 ycbcr_to_bgr_batch_p3_to_c3,
186 [u8 => ycbcr_to_bgr_batch_u8_p3_to_c3]
187);
188impl_color_convert_batch_p3_to_c3_dispatch!(
189 YcbcrToBgrBatchP3ToC3Advanced,
190 ycbcr_to_bgr_batch_p3_to_c3_advanced,
191 ycbcr_to_bgr_batch_p3_to_c3_advanced,
192 [u8 => ycbcr_to_bgr_batch_u8_p3_to_c3_advanced]
193);
194impl_color_convert_batch_p3_to_c3_dispatch!(
195 YuvToBgrBatchP3ToC3,
196 yuv_to_bgr_batch_p3_to_c3,
197 yuv_to_bgr_batch_p3_to_c3,
198 [u8 => yuv_to_bgr_batch_u8_p3_to_c3]
199);
200impl_color_convert_batch_p3_to_c3_dispatch!(
201 YuvToBgrBatchP3ToC3Advanced,
202 yuv_to_bgr_batch_p3_to_c3_advanced,
203 yuv_to_bgr_batch_p3_to_c3_advanced,
204 [u8 => yuv_to_bgr_batch_u8_p3_to_c3_advanced]
205);
206
207impl_subsampled_color_convert_batch_planar_to_packed!(
208 yuv422_to_bgr_batch_u8_p3_to_c3,
209 u8,
210 C3,
211 nppiYUV422ToBGRBatch_8u_P3C3R_Ctx,
212 2,
213 1
214);
215impl_subsampled_color_convert_batch_planar_to_packed_advanced!(
216 yuv422_to_bgr_batch_u8_p3_to_c3_advanced,
217 u8,
218 C3,
219 nppiYUV422ToBGRBatch_8u_P3C3R_Advanced_Ctx,
220 2,
221 1
222);
223impl_subsampled_color_convert_batch_planar_to_packed!(
224 yuv420_to_bgr_batch_u8_p3_to_c3,
225 u8,
226 C3,
227 nppiYUV420ToBGRBatch_8u_P3C3R_Ctx,
228 2,
229 2
230);
231impl_subsampled_color_convert_batch_planar_to_packed_advanced!(
232 yuv420_to_bgr_batch_u8_p3_to_c3_advanced,
233 u8,
234 C3,
235 nppiYUV420ToBGRBatch_8u_P3C3R_Advanced_Ctx,
236 2,
237 2
238);
239
240macro_rules! impl_subsampled_color_convert_batch_p3_to_c3_dispatch {
241 ($trait:ident, $method:ident, $function:ident, [$($ty:ty => $direct:ident),* $(,)?]) => {
242 pub trait $trait: DataTypeLike {
243 fn $method(
244 stream_context: &StreamContext,
245 source_plane_0: &[ImageView<'_, Self, C1>],
246 source_plane_1: &[ImageView<'_, Self, C1>],
247 source_plane_2: &[ImageView<'_, Self, C1>],
248 destinations: &mut [ImageViewMut<'_, Self, C3>],
249 ) -> Result<()>;
250 }
251
252 pub fn $function<T>(
253 stream_context: &StreamContext,
254 source_plane_0: &[ImageView<'_, T, C1>],
255 source_plane_1: &[ImageView<'_, T, C1>],
256 source_plane_2: &[ImageView<'_, T, C1>],
257 destinations: &mut [ImageViewMut<'_, T, C3>],
258 ) -> Result<()>
259 where
260 T: $trait,
261 {
262 T::$method(
263 stream_context,
264 source_plane_0,
265 source_plane_1,
266 source_plane_2,
267 destinations,
268 )
269 }
270
271 $(
272 impl $trait for $ty {
273 fn $method(
274 stream_context: &StreamContext,
275 source_plane_0: &[ImageView<'_, Self, C1>],
276 source_plane_1: &[ImageView<'_, Self, C1>],
277 source_plane_2: &[ImageView<'_, Self, C1>],
278 destinations: &mut [ImageViewMut<'_, Self, C3>],
279 ) -> Result<()> {
280 $direct(
281 stream_context,
282 source_plane_0,
283 source_plane_1,
284 source_plane_2,
285 destinations,
286 )
287 }
288 }
289 )*
290 };
291}
292
293impl_subsampled_color_convert_batch_p3_to_c3_dispatch!(
294 Yuv422ToRgbBatchP3ToC3,
295 yuv422_to_rgb_batch_p3_to_c3,
296 yuv422_to_rgb_batch_p3_to_c3,
297 [u8 => yuv422_to_rgb_batch_u8_p3_to_c3]
298);
299impl_subsampled_color_convert_batch_p3_to_c3_dispatch!(
300 Yuv422ToRgbBatchP3ToC3Advanced,
301 yuv422_to_rgb_batch_p3_to_c3_advanced,
302 yuv422_to_rgb_batch_p3_to_c3_advanced,
303 [u8 => yuv422_to_rgb_batch_u8_p3_to_c3_advanced]
304);
305impl_subsampled_color_convert_batch_p3_to_c3_dispatch!(
306 Yuv420ToRgbBatchP3ToC3,
307 yuv420_to_rgb_batch_p3_to_c3,
308 yuv420_to_rgb_batch_p3_to_c3,
309 [u8 => yuv420_to_rgb_batch_u8_p3_to_c3]
310);
311impl_subsampled_color_convert_batch_p3_to_c3_dispatch!(
312 Yuv420ToRgbBatchP3ToC3Advanced,
313 yuv420_to_rgb_batch_p3_to_c3_advanced,
314 yuv420_to_rgb_batch_p3_to_c3_advanced,
315 [u8 => yuv420_to_rgb_batch_u8_p3_to_c3_advanced]
316);
317impl_subsampled_color_convert_batch_p3_to_c3_dispatch!(
318 Ycbcr422ToRgbBatchP3ToC3,
319 ycbcr422_to_rgb_batch_p3_to_c3,
320 ycbcr422_to_rgb_batch_p3_to_c3,
321 [u8 => ycbcr422_to_rgb_batch_u8_p3_to_c3]
322);
323impl_subsampled_color_convert_batch_p3_to_c3_dispatch!(
324 Ycbcr422ToRgbBatchP3ToC3Advanced,
325 ycbcr422_to_rgb_batch_p3_to_c3_advanced,
326 ycbcr422_to_rgb_batch_p3_to_c3_advanced,
327 [u8 => ycbcr422_to_rgb_batch_u8_p3_to_c3_advanced]
328);
329impl_subsampled_color_convert_batch_p3_to_c3_dispatch!(
330 Ycbcr420ToRgbBatchP3ToC3,
331 ycbcr420_to_rgb_batch_p3_to_c3,
332 ycbcr420_to_rgb_batch_p3_to_c3,
333 [u8 => ycbcr420_to_rgb_batch_u8_p3_to_c3]
334);
335impl_subsampled_color_convert_batch_p3_to_c3_dispatch!(
336 Ycbcr420ToRgbBatchP3ToC3Advanced,
337 ycbcr420_to_rgb_batch_p3_to_c3_advanced,
338 ycbcr420_to_rgb_batch_p3_to_c3_advanced,
339 [u8 => ycbcr420_to_rgb_batch_u8_p3_to_c3_advanced]
340);
341impl_subsampled_color_convert_batch_p3_to_c3_dispatch!(
342 Ycbcr422ToBgrBatchP3ToC3,
343 ycbcr422_to_bgr_batch_p3_to_c3,
344 ycbcr422_to_bgr_batch_p3_to_c3,
345 [u8 => ycbcr422_to_bgr_batch_u8_p3_to_c3]
346);
347impl_subsampled_color_convert_batch_p3_to_c3_dispatch!(
348 Ycbcr422ToBgrBatchP3ToC3Advanced,
349 ycbcr422_to_bgr_batch_p3_to_c3_advanced,
350 ycbcr422_to_bgr_batch_p3_to_c3_advanced,
351 [u8 => ycbcr422_to_bgr_batch_u8_p3_to_c3_advanced]
352);
353impl_subsampled_color_convert_batch_p3_to_c3_dispatch!(
354 Ycbcr420ToBgrBatchP3ToC3,
355 ycbcr420_to_bgr_batch_p3_to_c3,
356 ycbcr420_to_bgr_batch_p3_to_c3,
357 [u8 => ycbcr420_to_bgr_batch_u8_p3_to_c3]
358);
359impl_subsampled_color_convert_batch_p3_to_c3_dispatch!(
360 Ycbcr420ToBgrBatchP3ToC3Advanced,
361 ycbcr420_to_bgr_batch_p3_to_c3_advanced,
362 ycbcr420_to_bgr_batch_p3_to_c3_advanced,
363 [u8 => ycbcr420_to_bgr_batch_u8_p3_to_c3_advanced]
364);
365impl_subsampled_color_convert_batch_p3_to_c3_dispatch!(
366 Yuv422ToBgrBatchP3ToC3,
367 yuv422_to_bgr_batch_p3_to_c3,
368 yuv422_to_bgr_batch_p3_to_c3,
369 [u8 => yuv422_to_bgr_batch_u8_p3_to_c3]
370);
371impl_subsampled_color_convert_batch_p3_to_c3_dispatch!(
372 Yuv422ToBgrBatchP3ToC3Advanced,
373 yuv422_to_bgr_batch_p3_to_c3_advanced,
374 yuv422_to_bgr_batch_p3_to_c3_advanced,
375 [u8 => yuv422_to_bgr_batch_u8_p3_to_c3_advanced]
376);
377impl_subsampled_color_convert_batch_p3_to_c3_dispatch!(
378 Yuv420ToBgrBatchP3ToC3,
379 yuv420_to_bgr_batch_p3_to_c3,
380 yuv420_to_bgr_batch_p3_to_c3,
381 [u8 => yuv420_to_bgr_batch_u8_p3_to_c3]
382);
383impl_subsampled_color_convert_batch_p3_to_c3_dispatch!(
384 Yuv420ToBgrBatchP3ToC3Advanced,
385 yuv420_to_bgr_batch_p3_to_c3_advanced,
386 yuv420_to_bgr_batch_p3_to_c3_advanced,
387 [u8 => yuv420_to_bgr_batch_u8_p3_to_c3_advanced]
388);
389
390impl_color_convert_planar_to_planar!(yuv_to_bgr_u8_p3, u8, 3, nppiYUVToBGR_8u_P3R_Ctx);
391impl_color_convert_packed_to_planar!(bgr_to_yuv_u8_c3_to_p3, u8, C3, 3, nppiBGRToYUV_8u_C3P3R_Ctx);
392impl_color_convert_packed_to_planar!(
393 bgr_to_yuv_u8_ac4_to_p4,
394 u8,
395 AC4,
396 4,
397 nppiBGRToYUV_8u_AC4P4R_Ctx
398);
399impl_color_convert_planar_to_packed!(yuv_to_bgr_u8_p3_to_c3, u8, 3, C3, nppiYUVToBGR_8u_P3C3R_Ctx);
400
401macro_rules! impl_color_convert_packed_c3_to_planar_dispatch {
402 ($trait:ident, $method:ident, $function:ident, $planes:literal, [$($ty:ty => $direct:ident),* $(,)?]) => {
403 pub trait $trait: DataTypeLike {
404 fn $method(
405 stream_context: &StreamContext,
406 source: &ImageView<'_, Self, C3>,
407 destination: &mut PlanarImageViewMut<'_, Self, $planes>,
408 ) -> Result<()>;
409 }
410
411 pub fn $function<T>(
412 stream_context: &StreamContext,
413 source: &ImageView<'_, T, C3>,
414 destination: &mut PlanarImageViewMut<'_, T, $planes>,
415 ) -> Result<()>
416 where
417 T: $trait,
418 {
419 T::$method(stream_context, source, destination)
420 }
421
422 $(
423 impl $trait for $ty {
424 fn $method(
425 stream_context: &StreamContext,
426 source: &ImageView<'_, Self, C3>,
427 destination: &mut PlanarImageViewMut<'_, Self, $planes>,
428 ) -> Result<()> {
429 $direct(stream_context, source, destination)
430 }
431 }
432 )*
433 };
434}
435
436macro_rules! impl_color_convert_planar_to_packed_c3_dispatch {
437 ($trait:ident, $method:ident, $function:ident, $planes:literal, [$($ty:ty => $direct:ident),* $(,)?]) => {
438 pub trait $trait: DataTypeLike {
439 fn $method(
440 stream_context: &StreamContext,
441 source: &PlanarImageView<'_, Self, $planes>,
442 destination: &mut ImageViewMut<'_, Self, C3>,
443 ) -> Result<()>;
444 }
445
446 pub fn $function<T>(
447 stream_context: &StreamContext,
448 source: &PlanarImageView<'_, T, $planes>,
449 destination: &mut ImageViewMut<'_, T, C3>,
450 ) -> Result<()>
451 where
452 T: $trait,
453 {
454 T::$method(stream_context, source, destination)
455 }
456
457 $(
458 impl $trait for $ty {
459 fn $method(
460 stream_context: &StreamContext,
461 source: &PlanarImageView<'_, Self, $planes>,
462 destination: &mut ImageViewMut<'_, Self, C3>,
463 ) -> Result<()> {
464 $direct(stream_context, source, destination)
465 }
466 }
467 )*
468 };
469}
470
471macro_rules! impl_color_convert_planar_to_planar_dispatch {
472 ($trait:ident, $method:ident, $function:ident, $planes:literal, [$($ty:ty => $direct:ident),* $(,)?]) => {
473 pub trait $trait: DataTypeLike {
474 fn $method(
475 stream_context: &StreamContext,
476 source: &PlanarImageView<'_, Self, $planes>,
477 destination: &mut PlanarImageViewMut<'_, Self, $planes>,
478 ) -> Result<()>;
479 }
480
481 pub fn $function<T>(
482 stream_context: &StreamContext,
483 source: &PlanarImageView<'_, T, $planes>,
484 destination: &mut PlanarImageViewMut<'_, T, $planes>,
485 ) -> Result<()>
486 where
487 T: $trait,
488 {
489 T::$method(stream_context, source, destination)
490 }
491
492 $(
493 impl $trait for $ty {
494 fn $method(
495 stream_context: &StreamContext,
496 source: &PlanarImageView<'_, Self, $planes>,
497 destination: &mut PlanarImageViewMut<'_, Self, $planes>,
498 ) -> Result<()> {
499 $direct(stream_context, source, destination)
500 }
501 }
502 )*
503 };
504}
505
506impl_color_convert_packed_c3_to_planar_dispatch!(
507 RgbToYuvC3ToP3,
508 rgb_to_yuv_c3_to_p3,
509 rgb_to_yuv_c3_to_p3,
510 3,
511 [u8 => rgb_to_yuv_u8_c3_to_p3]
512);
513impl_color_convert_packed_c3_to_planar_dispatch!(
514 BgrToYuvC3ToP3,
515 bgr_to_yuv_c3_to_p3,
516 bgr_to_yuv_c3_to_p3,
517 3,
518 [u8 => bgr_to_yuv_u8_c3_to_p3]
519);
520impl_color_convert_planar_to_packed_c3_dispatch!(
521 YuvToRgbP3ToC3,
522 yuv_to_rgb_p3_to_c3,
523 yuv_to_rgb_p3_to_c3,
524 3,
525 [u8 => yuv_to_rgb_u8_p3_to_c3]
526);
527impl_color_convert_planar_to_packed_c3_dispatch!(
528 YuvToBgrP3ToC3,
529 yuv_to_bgr_p3_to_c3,
530 yuv_to_bgr_p3_to_c3,
531 3,
532 [u8 => yuv_to_bgr_u8_p3_to_c3]
533);
534impl_color_convert_planar_to_planar_dispatch!(RgbToYuvP3, rgb_to_yuv_p3, rgb_to_yuv_p3, 3, [
535 u8 => rgb_to_yuv_u8_p3,
536]);
537impl_color_convert_planar_to_planar_dispatch!(BgrToYuvP3, bgr_to_yuv_p3, bgr_to_yuv_p3, 3, [
538 u8 => bgr_to_yuv_u8_p3,
539]);
540impl_color_convert_planar_to_planar_dispatch!(YuvToRgbP3, yuv_to_rgb_p3, yuv_to_rgb_p3, 3, [
541 u8 => yuv_to_rgb_u8_p3,
542]);
543impl_color_convert_planar_to_planar_dispatch!(YuvToBgrP3, yuv_to_bgr_p3, yuv_to_bgr_p3, 3, [
544 u8 => yuv_to_bgr_u8_p3,
545]);