Skip to main content

singe_npp/image/
exchange_convert_core.rs

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);