1use super::*;
2
3pub(crate) fn convert_u8_to_f32_c1(
4 stream_context: &StreamContext,
5 source: &ImageView<'_, u8, C1>,
6 destination: &mut ImageViewMut<'_, f32, C1>,
7) -> Result<()> {
8 validate_same_size(source.size(), destination.size())?;
9
10 unsafe {
11 try_ffi!(sys::nppiConvert_8u32f_C1R_Ctx(
12 source.as_ptr().cast(),
13 source.step(),
14 destination.as_mut_ptr().cast(),
15 destination.step(),
16 destination.size().into(),
17 stream_context.as_raw(),
18 ))?;
19 }
20 Ok(())
21}
22
23pub(crate) fn convert_u8_to_f32_c3(
24 stream_context: &StreamContext,
25 source: &ImageView<'_, u8, C3>,
26 destination: &mut ImageViewMut<'_, f32, C3>,
27) -> Result<()> {
28 validate_same_size(source.size(), destination.size())?;
29
30 unsafe {
31 try_ffi!(sys::nppiConvert_8u32f_C3R_Ctx(
32 source.as_ptr().cast(),
33 source.step(),
34 destination.as_mut_ptr().cast(),
35 destination.step(),
36 destination.size().into(),
37 stream_context.as_raw(),
38 ))?;
39 }
40 Ok(())
41}
42
43pub(crate) fn convert_u8_to_f32_c4(
44 stream_context: &StreamContext,
45 source: &ImageView<'_, u8, C4>,
46 destination: &mut ImageViewMut<'_, f32, C4>,
47) -> Result<()> {
48 validate_same_size(source.size(), destination.size())?;
49
50 unsafe {
51 try_ffi!(sys::nppiConvert_8u32f_C4R_Ctx(
52 source.as_ptr().cast(),
53 source.step(),
54 destination.as_mut_ptr().cast(),
55 destination.step(),
56 destination.size().into(),
57 stream_context.as_raw(),
58 ))?;
59 }
60 Ok(())
61}
62
63pub(crate) fn convert_u8_to_f32_ac4(
64 stream_context: &StreamContext,
65 source: &ImageView<'_, u8, AC4>,
66 destination: &mut ImageViewMut<'_, f32, AC4>,
67) -> Result<()> {
68 validate_same_size(source.size(), destination.size())?;
69
70 unsafe {
71 try_ffi!(sys::nppiConvert_8u32f_AC4R_Ctx(
72 source.as_ptr().cast(),
73 source.step(),
74 destination.as_mut_ptr().cast(),
75 destination.step(),
76 destination.size().into(),
77 stream_context.as_raw(),
78 ))?;
79 }
80 Ok(())
81}
82
83impl_convert!(convert_u8_to_u16_c1, u8, u16, C1, nppiConvert_8u16u_C1R_Ctx);
84impl_convert!(convert_u8_to_u16_c3, u8, u16, C3, nppiConvert_8u16u_C3R_Ctx);
85impl_convert!(convert_u8_to_u16_c4, u8, u16, C4, nppiConvert_8u16u_C4R_Ctx);
86impl_convert!(
87 convert_u8_to_u16_ac4,
88 u8,
89 u16,
90 AC4,
91 nppiConvert_8u16u_AC4R_Ctx
92);
93impl_convert!(convert_u8_to_i16_c1, u8, i16, C1, nppiConvert_8u16s_C1R_Ctx);
94impl_convert!(convert_u8_to_i16_c3, u8, i16, C3, nppiConvert_8u16s_C3R_Ctx);
95impl_convert!(convert_u8_to_i16_c4, u8, i16, C4, nppiConvert_8u16s_C4R_Ctx);
96impl_convert!(
97 convert_u8_to_i16_ac4,
98 u8,
99 i16,
100 AC4,
101 nppiConvert_8u16s_AC4R_Ctx
102);
103impl_convert!(convert_u8_to_i32_c1, u8, i32, C1, nppiConvert_8u32s_C1R_Ctx);
104impl_convert!(convert_u8_to_i32_c3, u8, i32, C3, nppiConvert_8u32s_C3R_Ctx);
105impl_convert!(convert_u8_to_i32_c4, u8, i32, C4, nppiConvert_8u32s_C4R_Ctx);
106impl_convert!(
107 convert_u8_to_i32_ac4,
108 u8,
109 i32,
110 AC4,
111 nppiConvert_8u32s_AC4R_Ctx
112);
113impl_convert!(convert_u16_to_u8_c1, u16, u8, C1, nppiConvert_16u8u_C1R_Ctx);
114impl_convert!(convert_u16_to_u8_c3, u16, u8, C3, nppiConvert_16u8u_C3R_Ctx);
115impl_convert!(convert_u16_to_u8_c4, u16, u8, C4, nppiConvert_16u8u_C4R_Ctx);
116impl_convert!(
117 convert_u16_to_u8_ac4,
118 u16,
119 u8,
120 AC4,
121 nppiConvert_16u8u_AC4R_Ctx
122);
123impl_convert!(convert_i16_to_u8_c1, i16, u8, C1, nppiConvert_16s8u_C1R_Ctx);
124impl_convert!(convert_i16_to_u8_c3, i16, u8, C3, nppiConvert_16s8u_C3R_Ctx);
125impl_convert!(convert_i16_to_u8_c4, i16, u8, C4, nppiConvert_16s8u_C4R_Ctx);
126impl_convert!(
127 convert_i16_to_u8_ac4,
128 i16,
129 u8,
130 AC4,
131 nppiConvert_16s8u_AC4R_Ctx
132);
133impl_convert!(convert_i32_to_u8_c1, i32, u8, C1, nppiConvert_32s8u_C1R_Ctx);
134impl_convert!(convert_i32_to_u8_c3, i32, u8, C3, nppiConvert_32s8u_C3R_Ctx);
135impl_convert!(convert_i32_to_u8_c4, i32, u8, C4, nppiConvert_32s8u_C4R_Ctx);
136impl_convert!(
137 convert_i32_to_u8_ac4,
138 i32,
139 u8,
140 AC4,
141 nppiConvert_32s8u_AC4R_Ctx
142);
143impl_convert!(
144 convert_u16_to_i32_c1,
145 u16,
146 i32,
147 C1,
148 nppiConvert_16u32s_C1R_Ctx
149);
150impl_convert!(
151 convert_u16_to_i32_c3,
152 u16,
153 i32,
154 C3,
155 nppiConvert_16u32s_C3R_Ctx
156);
157impl_convert!(
158 convert_u16_to_i32_c4,
159 u16,
160 i32,
161 C4,
162 nppiConvert_16u32s_C4R_Ctx
163);
164impl_convert!(
165 convert_u16_to_i32_ac4,
166 u16,
167 i32,
168 AC4,
169 nppiConvert_16u32s_AC4R_Ctx
170);
171impl_convert!(
172 convert_u16_to_f32_c1,
173 u16,
174 f32,
175 C1,
176 nppiConvert_16u32f_C1R_Ctx
177);
178impl_convert!(
179 convert_u16_to_f32_c3,
180 u16,
181 f32,
182 C3,
183 nppiConvert_16u32f_C3R_Ctx
184);
185impl_convert!(
186 convert_u16_to_f32_c4,
187 u16,
188 f32,
189 C4,
190 nppiConvert_16u32f_C4R_Ctx
191);
192impl_convert!(
193 convert_u16_to_f32_ac4,
194 u16,
195 f32,
196 AC4,
197 nppiConvert_16u32f_AC4R_Ctx
198);
199impl_convert!(
200 convert_i16_to_i32_c1,
201 i16,
202 i32,
203 C1,
204 nppiConvert_16s32s_C1R_Ctx
205);
206impl_convert!(
207 convert_i16_to_i32_c3,
208 i16,
209 i32,
210 C3,
211 nppiConvert_16s32s_C3R_Ctx
212);
213impl_convert!(
214 convert_i16_to_i32_c4,
215 i16,
216 i32,
217 C4,
218 nppiConvert_16s32s_C4R_Ctx
219);
220impl_convert!(
221 convert_i16_to_i32_ac4,
222 i16,
223 i32,
224 AC4,
225 nppiConvert_16s32s_AC4R_Ctx
226);
227impl_convert!(
228 convert_i16_to_f32_c1,
229 i16,
230 f32,
231 C1,
232 nppiConvert_16s32f_C1R_Ctx
233);
234impl_convert!(
235 convert_i16_to_f32_c3,
236 i16,
237 f32,
238 C3,
239 nppiConvert_16s32f_C3R_Ctx
240);
241impl_convert!(
242 convert_i16_to_f32_c4,
243 i16,
244 f32,
245 C4,
246 nppiConvert_16s32f_C4R_Ctx
247);
248impl_convert!(
249 convert_i16_to_f32_ac4,
250 i16,
251 f32,
252 AC4,
253 nppiConvert_16s32f_AC4R_Ctx
254);
255impl_convert!(
256 convert_f16_to_f32_c1,
257 f16,
258 f32,
259 C1,
260 nppiConvert_16f32f_C1R_Ctx
261);
262impl_convert!(
263 convert_f16_to_f32_c3,
264 f16,
265 f32,
266 C3,
267 nppiConvert_16f32f_C3R_Ctx
268);
269impl_convert!(
270 convert_f16_to_f32_c4,
271 f16,
272 f32,
273 C4,
274 nppiConvert_16f32f_C4R_Ctx
275);
276impl_convert!(
277 convert_f16_to_f32_ac4,
278 f16,
279 f32,
280 AC4,
281 nppiConvert_16f32f_AC4R_Ctx
282);
283impl_convert!(
284 convert_u16_to_u32_c1,
285 u16,
286 u32,
287 C1,
288 nppiConvert_16u32u_C1R_Ctx
289);
290impl_convert_round!(
291 convert_f32_to_u16_c1,
292 f32,
293 u16,
294 C1,
295 nppiConvert_32f16u_C1R_Ctx
296);
297impl_convert_round!(
298 convert_f32_to_u16_c3,
299 f32,
300 u16,
301 C3,
302 nppiConvert_32f16u_C3R_Ctx
303);
304impl_convert_round!(
305 convert_f32_to_u16_c4,
306 f32,
307 u16,
308 C4,
309 nppiConvert_32f16u_C4R_Ctx
310);
311impl_convert_round!(
312 convert_f32_to_u16_ac4,
313 f32,
314 u16,
315 AC4,
316 nppiConvert_32f16u_AC4R_Ctx
317);
318impl_convert_round!(
319 convert_f32_to_i16_c1,
320 f32,
321 i16,
322 C1,
323 nppiConvert_32f16s_C1R_Ctx
324);
325impl_convert_round!(
326 convert_f32_to_i16_c3,
327 f32,
328 i16,
329 C3,
330 nppiConvert_32f16s_C3R_Ctx
331);
332impl_convert_round!(
333 convert_f32_to_i16_c4,
334 f32,
335 i16,
336 C4,
337 nppiConvert_32f16s_C4R_Ctx
338);
339impl_convert_round!(
340 convert_f32_to_i16_ac4,
341 f32,
342 i16,
343 AC4,
344 nppiConvert_32f16s_AC4R_Ctx
345);
346impl_convert_round!(
347 convert_f32_to_f16_c1,
348 f32,
349 f16,
350 C1,
351 nppiConvert_32f16f_C1R_Ctx
352);
353impl_convert_round!(
354 convert_f32_to_f16_c3,
355 f32,
356 f16,
357 C3,
358 nppiConvert_32f16f_C3R_Ctx
359);
360impl_convert_round!(
361 convert_f32_to_f16_c4,
362 f32,
363 f16,
364 C4,
365 nppiConvert_32f16f_C4R_Ctx
366);
367impl_convert_round!(
368 convert_f32_to_f16_ac4,
369 f32,
370 f16,
371 AC4,
372 nppiConvert_32f16f_AC4R_Ctx
373);
374impl_generic_convert_to_operation!(
375 ConvertToU16C1,
376 convert_to_u16_c1,
377 u16,
378 C1,
379 [
380 u8 => convert_u8_to_u16_c1,
381 i8 => convert_i8_to_u16_c1,
382 i16 => convert_i16_to_u16_c1,
383 ]
384);
385impl_generic_convert_to_operation!(
386 ConvertToU16C3,
387 convert_to_u16_c3,
388 u16,
389 C3,
390 [u8 => convert_u8_to_u16_c3]
391);
392impl_generic_convert_to_operation!(
393 ConvertToU16C4,
394 convert_to_u16_c4,
395 u16,
396 C4,
397 [u8 => convert_u8_to_u16_c4]
398);
399impl_generic_convert_to_operation!(
400 ConvertToU16AC4,
401 convert_to_u16_ac4,
402 u16,
403 AC4,
404 [u8 => convert_u8_to_u16_ac4]
405);
406impl_generic_convert_round_to_operation!(
407 ConvertRoundToU16C1,
408 convert_round_to_u16_c1,
409 u16,
410 C1,
411 [f32 => convert_f32_to_u16_c1]
412);
413impl_generic_convert_round_to_operation!(
414 ConvertRoundToU16C3,
415 convert_round_to_u16_c3,
416 u16,
417 C3,
418 [f32 => convert_f32_to_u16_c3]
419);
420impl_generic_convert_round_to_operation!(
421 ConvertRoundToU16C4,
422 convert_round_to_u16_c4,
423 u16,
424 C4,
425 [f32 => convert_f32_to_u16_c4]
426);
427impl_generic_convert_round_to_operation!(
428 ConvertRoundToU16AC4,
429 convert_round_to_u16_ac4,
430 u16,
431 AC4,
432 [f32 => convert_f32_to_u16_ac4]
433);
434impl_generic_convert_to_operation!(
435 ConvertToI16C1,
436 convert_to_i16_c1,
437 i16,
438 C1,
439 [
440 u8 => convert_u8_to_i16_c1,
441 i8 => convert_i8_to_i16_c1,
442 ]
443);
444impl_generic_convert_to_operation!(
445 ConvertToI16C3,
446 convert_to_i16_c3,
447 i16,
448 C3,
449 [u8 => convert_u8_to_i16_c3]
450);
451impl_generic_convert_to_operation!(
452 ConvertToI16C4,
453 convert_to_i16_c4,
454 i16,
455 C4,
456 [u8 => convert_u8_to_i16_c4]
457);
458impl_generic_convert_to_operation!(
459 ConvertToI16AC4,
460 convert_to_i16_ac4,
461 i16,
462 AC4,
463 [u8 => convert_u8_to_i16_ac4]
464);
465impl_generic_convert_round_to_operation!(
466 ConvertRoundToI16C1,
467 convert_round_to_i16_c1,
468 i16,
469 C1,
470 [f32 => convert_f32_to_i16_c1]
471);
472impl_generic_convert_round_to_operation!(
473 ConvertRoundToI16C3,
474 convert_round_to_i16_c3,
475 i16,
476 C3,
477 [f32 => convert_f32_to_i16_c3]
478);
479impl_generic_convert_round_to_operation!(
480 ConvertRoundToI16C4,
481 convert_round_to_i16_c4,
482 i16,
483 C4,
484 [f32 => convert_f32_to_i16_c4]
485);
486impl_generic_convert_round_to_operation!(
487 ConvertRoundToI16AC4,
488 convert_round_to_i16_ac4,
489 i16,
490 AC4,
491 [f32 => convert_f32_to_i16_ac4]
492);