1use super::*;
2
3impl_resize_sqr_pixel!(
4 resize_sqr_pixel_u8_c1,
5 u8,
6 C1,
7 nppiResizeSqrPixel_8u_C1R_Ctx
8);
9impl_resize_sqr_pixel!(
10 resize_sqr_pixel_u8_c3,
11 u8,
12 C3,
13 nppiResizeSqrPixel_8u_C3R_Ctx
14);
15impl_resize_sqr_pixel!(
16 resize_sqr_pixel_u8_c4,
17 u8,
18 C4,
19 nppiResizeSqrPixel_8u_C4R_Ctx
20);
21impl_resize_sqr_pixel!(
22 resize_sqr_pixel_u8_ac4,
23 u8,
24 AC4,
25 nppiResizeSqrPixel_8u_AC4R_Ctx
26);
27impl_resize_sqr_pixel!(
28 resize_sqr_pixel_u16_c1,
29 u16,
30 C1,
31 nppiResizeSqrPixel_16u_C1R_Ctx
32);
33impl_resize_sqr_pixel!(
34 resize_sqr_pixel_u16_c3,
35 u16,
36 C3,
37 nppiResizeSqrPixel_16u_C3R_Ctx
38);
39impl_resize_sqr_pixel!(
40 resize_sqr_pixel_u16_c4,
41 u16,
42 C4,
43 nppiResizeSqrPixel_16u_C4R_Ctx
44);
45impl_resize_sqr_pixel!(
46 resize_sqr_pixel_u16_ac4,
47 u16,
48 AC4,
49 nppiResizeSqrPixel_16u_AC4R_Ctx
50);
51impl_resize_sqr_pixel!(
52 resize_sqr_pixel_i16_c1,
53 i16,
54 C1,
55 nppiResizeSqrPixel_16s_C1R_Ctx
56);
57impl_resize_sqr_pixel!(
58 resize_sqr_pixel_i16_c3,
59 i16,
60 C3,
61 nppiResizeSqrPixel_16s_C3R_Ctx
62);
63impl_resize_sqr_pixel!(
64 resize_sqr_pixel_i16_c4,
65 i16,
66 C4,
67 nppiResizeSqrPixel_16s_C4R_Ctx
68);
69impl_resize_sqr_pixel!(
70 resize_sqr_pixel_i16_ac4,
71 i16,
72 AC4,
73 nppiResizeSqrPixel_16s_AC4R_Ctx
74);
75impl_resize_sqr_pixel!(
76 resize_sqr_pixel_f32_c1,
77 f32,
78 C1,
79 nppiResizeSqrPixel_32f_C1R_Ctx
80);
81impl_resize_sqr_pixel!(
82 resize_sqr_pixel_f32_c3,
83 f32,
84 C3,
85 nppiResizeSqrPixel_32f_C3R_Ctx
86);
87impl_resize_sqr_pixel!(
88 resize_sqr_pixel_f32_c4,
89 f32,
90 C4,
91 nppiResizeSqrPixel_32f_C4R_Ctx
92);
93impl_resize_sqr_pixel!(
94 resize_sqr_pixel_f32_ac4,
95 f32,
96 AC4,
97 nppiResizeSqrPixel_32f_AC4R_Ctx
98);
99impl_resize_sqr_pixel!(
100 resize_sqr_pixel_f64_c1,
101 f64,
102 C1,
103 nppiResizeSqrPixel_64f_C1R_Ctx
104);
105impl_resize_sqr_pixel!(
106 resize_sqr_pixel_f64_c3,
107 f64,
108 C3,
109 nppiResizeSqrPixel_64f_C3R_Ctx
110);
111impl_resize_sqr_pixel!(
112 resize_sqr_pixel_f64_c4,
113 f64,
114 C4,
115 nppiResizeSqrPixel_64f_C4R_Ctx
116);
117impl_resize_sqr_pixel!(
118 resize_sqr_pixel_f64_ac4,
119 f64,
120 AC4,
121 nppiResizeSqrPixel_64f_AC4R_Ctx
122);
123
124impl_generic_resize_sqr_pixel_operation!(
125 ResizeSqrPixelC1,
126 resize_sqr_pixel,
127 resize_sqr_pixel_c1,
128 C1,
129 [
130 u8 => resize_sqr_pixel_u8_c1,
131 u16 => resize_sqr_pixel_u16_c1,
132 i16 => resize_sqr_pixel_i16_c1,
133 f32 => resize_sqr_pixel_f32_c1,
134 f64 => resize_sqr_pixel_f64_c1,
135 ]
136);
137impl_generic_resize_sqr_pixel_operation!(
138 ResizeSqrPixelC3,
139 resize_sqr_pixel,
140 resize_sqr_pixel_c3,
141 C3,
142 [
143 u8 => resize_sqr_pixel_u8_c3,
144 u16 => resize_sqr_pixel_u16_c3,
145 i16 => resize_sqr_pixel_i16_c3,
146 f32 => resize_sqr_pixel_f32_c3,
147 f64 => resize_sqr_pixel_f64_c3,
148 ]
149);
150impl_generic_resize_sqr_pixel_operation!(
151 ResizeSqrPixelC4,
152 resize_sqr_pixel,
153 resize_sqr_pixel_c4,
154 C4,
155 [
156 u8 => resize_sqr_pixel_u8_c4,
157 u16 => resize_sqr_pixel_u16_c4,
158 i16 => resize_sqr_pixel_i16_c4,
159 f32 => resize_sqr_pixel_f32_c4,
160 f64 => resize_sqr_pixel_f64_c4,
161 ]
162);
163impl_generic_resize_sqr_pixel_operation!(
164 ResizeSqrPixelAc4,
165 resize_sqr_pixel,
166 resize_sqr_pixel_ac4,
167 AC4,
168 [
169 u8 => resize_sqr_pixel_u8_ac4,
170 u16 => resize_sqr_pixel_u16_ac4,
171 i16 => resize_sqr_pixel_i16_ac4,
172 f32 => resize_sqr_pixel_f32_ac4,
173 f64 => resize_sqr_pixel_f64_ac4,
174 ]
175);
176
177impl_resize_sqr_pixel_planar!(resize_sqr_pixel_u8_p3, u8, 3, nppiResizeSqrPixel_8u_P3R_Ctx);
178impl_resize_sqr_pixel_planar!(resize_sqr_pixel_u8_p4, u8, 4, nppiResizeSqrPixel_8u_P4R_Ctx);
179impl_resize_sqr_pixel_planar!(
180 resize_sqr_pixel_u16_p3,
181 u16,
182 3,
183 nppiResizeSqrPixel_16u_P3R_Ctx
184);
185impl_resize_sqr_pixel_planar!(
186 resize_sqr_pixel_u16_p4,
187 u16,
188 4,
189 nppiResizeSqrPixel_16u_P4R_Ctx
190);
191impl_resize_sqr_pixel_planar!(
192 resize_sqr_pixel_i16_p3,
193 i16,
194 3,
195 nppiResizeSqrPixel_16s_P3R_Ctx
196);
197impl_resize_sqr_pixel_planar!(
198 resize_sqr_pixel_i16_p4,
199 i16,
200 4,
201 nppiResizeSqrPixel_16s_P4R_Ctx
202);
203impl_resize_sqr_pixel_planar!(
204 resize_sqr_pixel_f32_p3,
205 f32,
206 3,
207 nppiResizeSqrPixel_32f_P3R_Ctx
208);
209impl_resize_sqr_pixel_planar!(
210 resize_sqr_pixel_f32_p4,
211 f32,
212 4,
213 nppiResizeSqrPixel_32f_P4R_Ctx
214);
215impl_resize_sqr_pixel_planar!(
216 resize_sqr_pixel_f64_p3,
217 f64,
218 3,
219 nppiResizeSqrPixel_64f_P3R_Ctx
220);
221impl_resize_sqr_pixel_planar!(
222 resize_sqr_pixel_f64_p4,
223 f64,
224 4,
225 nppiResizeSqrPixel_64f_P4R_Ctx
226);
227
228pub trait ResizeSqrPixelPlanar<const PLANES: usize>: DataTypeLike {
229 fn resize_sqr_pixel_planar(
230 stream_context: &StreamContext,
231 resize: &ResizeSqrPixel,
232 source: &PlanarImageView<'_, Self, PLANES>,
233 destination: &mut PlanarImageViewMut<'_, Self, PLANES>,
234 ) -> Result<()>;
235}
236
237macro_rules! impl_resize_sqr_pixel_planar_dispatch {
238 ($ty:ty, $planes:literal, $function:ident) => {
239 impl ResizeSqrPixelPlanar<$planes> for $ty {
240 fn resize_sqr_pixel_planar(
241 stream_context: &StreamContext,
242 resize: &ResizeSqrPixel,
243 source: &PlanarImageView<'_, Self, $planes>,
244 destination: &mut PlanarImageViewMut<'_, Self, $planes>,
245 ) -> Result<()> {
246 $function(stream_context, resize, source, destination)
247 }
248 }
249 };
250}
251
252impl_resize_sqr_pixel_planar_dispatch!(u8, 3, resize_sqr_pixel_u8_p3);
253impl_resize_sqr_pixel_planar_dispatch!(u8, 4, resize_sqr_pixel_u8_p4);
254impl_resize_sqr_pixel_planar_dispatch!(u16, 3, resize_sqr_pixel_u16_p3);
255impl_resize_sqr_pixel_planar_dispatch!(u16, 4, resize_sqr_pixel_u16_p4);
256impl_resize_sqr_pixel_planar_dispatch!(i16, 3, resize_sqr_pixel_i16_p3);
257impl_resize_sqr_pixel_planar_dispatch!(i16, 4, resize_sqr_pixel_i16_p4);
258impl_resize_sqr_pixel_planar_dispatch!(f32, 3, resize_sqr_pixel_f32_p3);
259impl_resize_sqr_pixel_planar_dispatch!(f32, 4, resize_sqr_pixel_f32_p4);
260impl_resize_sqr_pixel_planar_dispatch!(f64, 3, resize_sqr_pixel_f64_p3);
261impl_resize_sqr_pixel_planar_dispatch!(f64, 4, resize_sqr_pixel_f64_p4);
262
263pub fn resize_sqr_pixel_planar<T, const PLANES: usize>(
264 stream_context: &StreamContext,
265 resize: &ResizeSqrPixel,
266 source: &PlanarImageView<'_, T, PLANES>,
267 destination: &mut PlanarImageViewMut<'_, T, PLANES>,
268) -> Result<()>
269where
270 T: ResizeSqrPixelPlanar<PLANES>,
271{
272 T::resize_sqr_pixel_planar(stream_context, resize, source, destination)
273}
274
275impl_resize!(resize_u8_c1, u8, C1, nppiResize_8u_C1R_Ctx);
276impl_resize!(resize_u8_c3, u8, C3, nppiResize_8u_C3R_Ctx);
277impl_resize!(resize_u8_c4, u8, C4, nppiResize_8u_C4R_Ctx);
278impl_resize!(resize_u8_ac4, u8, AC4, nppiResize_8u_AC4R_Ctx);
279impl_resize!(resize_u16_c1, u16, C1, nppiResize_16u_C1R_Ctx);
280impl_resize!(resize_u16_c3, u16, C3, nppiResize_16u_C3R_Ctx);
281impl_resize!(resize_u16_c4, u16, C4, nppiResize_16u_C4R_Ctx);
282impl_resize!(resize_u16_ac4, u16, AC4, nppiResize_16u_AC4R_Ctx);
283impl_resize!(resize_i16_c1, i16, C1, nppiResize_16s_C1R_Ctx);
284impl_resize!(resize_i16_c3, i16, C3, nppiResize_16s_C3R_Ctx);
285impl_resize!(resize_i16_c4, i16, C4, nppiResize_16s_C4R_Ctx);
286impl_resize!(resize_i16_ac4, i16, AC4, nppiResize_16s_AC4R_Ctx);
287impl_resize!(resize_f16_c1, f16, C1, nppiResize_16f_C1R_Ctx);
288impl_resize!(resize_f16_c3, f16, C3, nppiResize_16f_C3R_Ctx);
289impl_resize!(resize_f16_c4, f16, C4, nppiResize_16f_C4R_Ctx);
290impl_resize!(resize_f32_c1, f32, C1, nppiResize_32f_C1R_Ctx);
291impl_resize!(resize_f32_c3, f32, C3, nppiResize_32f_C3R_Ctx);
292impl_resize!(resize_f32_c4, f32, C4, nppiResize_32f_C4R_Ctx);
293impl_resize!(resize_f32_ac4, f32, AC4, nppiResize_32f_AC4R_Ctx);
294
295impl_generic_resize_operation!(ResizeC1, resize, resize_c1, C1, [
296 u8 => resize_u8_c1,
297 u16 => resize_u16_c1,
298 i16 => resize_i16_c1,
299 f16 => resize_f16_c1,
300 f32 => resize_f32_c1,
301]);
302impl_generic_resize_operation!(ResizeC3, resize, resize_c3, C3, [
303 u8 => resize_u8_c3,
304 u16 => resize_u16_c3,
305 i16 => resize_i16_c3,
306 f16 => resize_f16_c3,
307 f32 => resize_f32_c3,
308]);
309impl_generic_resize_operation!(ResizeC4, resize, resize_c4, C4, [
310 u8 => resize_u8_c4,
311 u16 => resize_u16_c4,
312 i16 => resize_i16_c4,
313 f16 => resize_f16_c4,
314 f32 => resize_f32_c4,
315]);
316impl_generic_resize_operation!(ResizeAc4, resize, resize_ac4, AC4, [
317 u8 => resize_u8_ac4,
318 u16 => resize_u16_ac4,
319 i16 => resize_i16_ac4,
320 f32 => resize_f32_ac4,
321]);
322
323impl_resize_planar!(resize_u8_p3, u8, 3, nppiResize_8u_P3R_Ctx);
324impl_resize_planar!(resize_u8_p4, u8, 4, nppiResize_8u_P4R_Ctx);
325impl_resize_planar!(resize_u16_p3, u16, 3, nppiResize_16u_P3R_Ctx);
326impl_resize_planar!(resize_u16_p4, u16, 4, nppiResize_16u_P4R_Ctx);
327impl_resize_planar!(resize_i16_p3, i16, 3, nppiResize_16s_P3R_Ctx);
328impl_resize_planar!(resize_i16_p4, i16, 4, nppiResize_16s_P4R_Ctx);
329impl_resize_planar!(resize_f32_p3, f32, 3, nppiResize_32f_P3R_Ctx);
330impl_resize_planar!(resize_f32_p4, f32, 4, nppiResize_32f_P4R_Ctx);
331
332pub trait ResizePlanar<const PLANES: usize>: DataTypeLike {
333 fn resize_planar(
334 stream_context: &StreamContext,
335 resize: &Resize,
336 source: &PlanarImageView<'_, Self, PLANES>,
337 destination: &mut PlanarImageViewMut<'_, Self, PLANES>,
338 ) -> Result<()>;
339}
340
341macro_rules! impl_resize_planar_dispatch {
342 ($ty:ty, $planes:literal, $function:ident) => {
343 impl ResizePlanar<$planes> for $ty {
344 fn resize_planar(
345 stream_context: &StreamContext,
346 resize: &Resize,
347 source: &PlanarImageView<'_, Self, $planes>,
348 destination: &mut PlanarImageViewMut<'_, Self, $planes>,
349 ) -> Result<()> {
350 $function(stream_context, resize, source, destination)
351 }
352 }
353 };
354}
355
356impl_resize_planar_dispatch!(u8, 3, resize_u8_p3);
357impl_resize_planar_dispatch!(u8, 4, resize_u8_p4);
358impl_resize_planar_dispatch!(u16, 3, resize_u16_p3);
359impl_resize_planar_dispatch!(u16, 4, resize_u16_p4);
360impl_resize_planar_dispatch!(i16, 3, resize_i16_p3);
361impl_resize_planar_dispatch!(i16, 4, resize_i16_p4);
362impl_resize_planar_dispatch!(f32, 3, resize_f32_p3);
363impl_resize_planar_dispatch!(f32, 4, resize_f32_p4);
364
365pub fn resize_planar<T, const PLANES: usize>(
366 stream_context: &StreamContext,
367 resize: &Resize,
368 source: &PlanarImageView<'_, T, PLANES>,
369 destination: &mut PlanarImageViewMut<'_, T, PLANES>,
370) -> Result<()>
371where
372 T: ResizePlanar<PLANES>,
373{
374 T::resize_planar(stream_context, resize, source, destination)
375}
376
377impl_resize_batch!(resize_batch_u8_c1, u8, C1, nppiResizeBatch_8u_C1R_Ctx);
378impl_resize_batch!(resize_batch_u8_c3, u8, C3, nppiResizeBatch_8u_C3R_Ctx);
379impl_resize_batch!(resize_batch_u8_c4, u8, C4, nppiResizeBatch_8u_C4R_Ctx);
380impl_resize_batch!(resize_batch_u8_ac4, u8, AC4, nppiResizeBatch_8u_AC4R_Ctx);
381impl_resize_batch!(resize_batch_f32_c1, f32, C1, nppiResizeBatch_32f_C1R_Ctx);
382impl_resize_batch!(resize_batch_f32_c3, f32, C3, nppiResizeBatch_32f_C3R_Ctx);
383impl_resize_batch!(resize_batch_f32_c4, f32, C4, nppiResizeBatch_32f_C4R_Ctx);
384impl_resize_batch!(resize_batch_f32_ac4, f32, AC4, nppiResizeBatch_32f_AC4R_Ctx);
385
386pub trait ResizeBatchOperation<L: ChannelLayout>: DataTypeLike {
387 fn resize_batch(
388 stream_context: &StreamContext,
389 resize: &Resize,
390 sources: &[ImageView<'_, Self, L>],
391 destinations: &mut [ImageViewMut<'_, Self, L>],
392 ) -> Result<()>;
393}
394
395macro_rules! impl_resize_batch_operation {
396 ($ty:ty, $layout:ty, $function:ident) => {
397 impl ResizeBatchOperation<$layout> for $ty {
398 fn resize_batch(
399 stream_context: &StreamContext,
400 resize: &Resize,
401 sources: &[ImageView<'_, Self, $layout>],
402 destinations: &mut [ImageViewMut<'_, Self, $layout>],
403 ) -> Result<()> {
404 $function(stream_context, resize, sources, destinations)
405 }
406 }
407 };
408}
409
410impl_resize_batch_operation!(u8, C1, resize_batch_u8_c1);
411impl_resize_batch_operation!(u8, C3, resize_batch_u8_c3);
412impl_resize_batch_operation!(u8, C4, resize_batch_u8_c4);
413impl_resize_batch_operation!(u8, AC4, resize_batch_u8_ac4);
414impl_resize_batch_operation!(f32, C1, resize_batch_f32_c1);
415impl_resize_batch_operation!(f32, C3, resize_batch_f32_c3);
416impl_resize_batch_operation!(f32, C4, resize_batch_f32_c4);
417impl_resize_batch_operation!(f32, AC4, resize_batch_f32_ac4);
418
419pub fn resize_batch<T, L>(
420 stream_context: &StreamContext,
421 resize: &Resize,
422 sources: &[ImageView<'_, T, L>],
423 destinations: &mut [ImageViewMut<'_, T, L>],
424) -> Result<()>
425where
426 T: ResizeBatchOperation<L>,
427 L: ChannelLayout,
428{
429 T::resize_batch(stream_context, resize, sources, destinations)
430}
431
432impl_resize_batch_advanced!(
433 resize_batch_u8_c1_advanced,
434 u8,
435 C1,
436 nppiResizeBatch_8u_C1R_Advanced_Ctx
437);
438impl_resize_batch_advanced!(
439 resize_batch_u8_c3_advanced,
440 u8,
441 C3,
442 nppiResizeBatch_8u_C3R_Advanced_Ctx
443);
444impl_resize_batch_advanced!(
445 resize_batch_u8_c4_advanced,
446 u8,
447 C4,
448 nppiResizeBatch_8u_C4R_Advanced_Ctx
449);
450impl_resize_batch_advanced!(
451 resize_batch_u8_ac4_advanced,
452 u8,
453 AC4,
454 nppiResizeBatch_8u_AC4R_Advanced_Ctx
455);
456impl_resize_batch_advanced!(
457 resize_batch_f16_c1_advanced,
458 f16,
459 C1,
460 nppiResizeBatch_16f_C1R_Advanced_Ctx
461);
462impl_resize_batch_advanced!(
463 resize_batch_f16_c3_advanced,
464 f16,
465 C3,
466 nppiResizeBatch_16f_C3R_Advanced_Ctx
467);
468impl_resize_batch_advanced!(
469 resize_batch_f16_c4_advanced,
470 f16,
471 C4,
472 nppiResizeBatch_16f_C4R_Advanced_Ctx
473);
474impl_resize_batch_advanced!(
475 resize_batch_f32_c1_advanced,
476 f32,
477 C1,
478 nppiResizeBatch_32f_C1R_Advanced_Ctx
479);
480impl_resize_batch_advanced!(
481 resize_batch_f32_c3_advanced,
482 f32,
483 C3,
484 nppiResizeBatch_32f_C3R_Advanced_Ctx
485);
486impl_resize_batch_advanced!(
487 resize_batch_f32_c4_advanced,
488 f32,
489 C4,
490 nppiResizeBatch_32f_C4R_Advanced_Ctx
491);
492impl_resize_batch_advanced!(
493 resize_batch_f32_ac4_advanced,
494 f32,
495 AC4,
496 nppiResizeBatch_32f_AC4R_Advanced_Ctx
497);
498
499pub trait ResizeBatchAdvancedOperation<L: ChannelLayout>: DataTypeLike {
500 fn resize_batch_advanced(
501 stream_context: &StreamContext,
502 rois: &[ResizeBatchAdvanced],
503 interpolation: InterpolationMode,
504 sources: &[ImageView<'_, Self, L>],
505 destinations: &mut [ImageViewMut<'_, Self, L>],
506 ) -> Result<()>;
507}
508
509macro_rules! impl_resize_batch_advanced_operation {
510 ($ty:ty, $layout:ty, $function:ident) => {
511 impl ResizeBatchAdvancedOperation<$layout> for $ty {
512 fn resize_batch_advanced(
513 stream_context: &StreamContext,
514 rois: &[ResizeBatchAdvanced],
515 interpolation: InterpolationMode,
516 sources: &[ImageView<'_, Self, $layout>],
517 destinations: &mut [ImageViewMut<'_, Self, $layout>],
518 ) -> Result<()> {
519 $function(stream_context, rois, interpolation, sources, destinations)
520 }
521 }
522 };
523}
524
525impl_resize_batch_advanced_operation!(u8, C1, resize_batch_u8_c1_advanced);
526impl_resize_batch_advanced_operation!(u8, C3, resize_batch_u8_c3_advanced);
527impl_resize_batch_advanced_operation!(u8, C4, resize_batch_u8_c4_advanced);
528impl_resize_batch_advanced_operation!(u8, AC4, resize_batch_u8_ac4_advanced);
529impl_resize_batch_advanced_operation!(f16, C1, resize_batch_f16_c1_advanced);
530impl_resize_batch_advanced_operation!(f16, C3, resize_batch_f16_c3_advanced);
531impl_resize_batch_advanced_operation!(f16, C4, resize_batch_f16_c4_advanced);
532impl_resize_batch_advanced_operation!(f32, C1, resize_batch_f32_c1_advanced);
533impl_resize_batch_advanced_operation!(f32, C3, resize_batch_f32_c3_advanced);
534impl_resize_batch_advanced_operation!(f32, C4, resize_batch_f32_c4_advanced);
535impl_resize_batch_advanced_operation!(f32, AC4, resize_batch_f32_ac4_advanced);
536
537pub fn resize_batch_advanced<T, L>(
538 stream_context: &StreamContext,
539 rois: &[ResizeBatchAdvanced],
540 interpolation: InterpolationMode,
541 sources: &[ImageView<'_, T, L>],
542 destinations: &mut [ImageViewMut<'_, T, L>],
543) -> Result<()>
544where
545 T: ResizeBatchAdvancedOperation<L>,
546 L: ChannelLayout,
547{
548 T::resize_batch_advanced(stream_context, rois, interpolation, sources, destinations)
549}