Skip to main content

singe_npp/image/
exchange_transpose.rs

1use super::*;
2
3pub(crate) fn transpose_u8_c1(
4    stream_context: &StreamContext,
5    source: &ImageView<'_, u8, C1>,
6    destination: &mut ImageViewMut<'_, u8, C1>,
7) -> Result<()> {
8    validate_transpose_size(source.size(), destination.size())?;
9
10    unsafe {
11        try_ffi!(sys::nppiTranspose_8u_C1R_Ctx(
12            source.as_ptr().cast(),
13            source.step(),
14            destination.as_mut_ptr().cast(),
15            destination.step(),
16            source.size().into(),
17            stream_context.as_raw(),
18        ))?;
19    }
20    Ok(())
21}
22
23pub(crate) fn transpose_u8_c3(
24    stream_context: &StreamContext,
25    source: &ImageView<'_, u8, C3>,
26    destination: &mut ImageViewMut<'_, u8, C3>,
27) -> Result<()> {
28    validate_transpose_size(source.size(), destination.size())?;
29
30    unsafe {
31        try_ffi!(sys::nppiTranspose_8u_C3R_Ctx(
32            source.as_ptr().cast(),
33            source.step(),
34            destination.as_mut_ptr().cast(),
35            destination.step(),
36            source.size().into(),
37            stream_context.as_raw(),
38        ))?;
39    }
40    Ok(())
41}
42
43pub(crate) fn transpose_u8_c4(
44    stream_context: &StreamContext,
45    source: &ImageView<'_, u8, C4>,
46    destination: &mut ImageViewMut<'_, u8, C4>,
47) -> Result<()> {
48    validate_transpose_size(source.size(), destination.size())?;
49
50    unsafe {
51        try_ffi!(sys::nppiTranspose_8u_C4R_Ctx(
52            source.as_ptr().cast(),
53            source.step(),
54            destination.as_mut_ptr().cast(),
55            destination.step(),
56            source.size().into(),
57            stream_context.as_raw(),
58        ))?;
59    }
60    Ok(())
61}
62
63impl_transpose!(transpose_u16_c1, u16, C1, nppiTranspose_16u_C1R_Ctx);
64impl_transpose!(transpose_u16_c3, u16, C3, nppiTranspose_16u_C3R_Ctx);
65impl_transpose!(transpose_u16_c4, u16, C4, nppiTranspose_16u_C4R_Ctx);
66impl_transpose!(transpose_i16_c1, i16, C1, nppiTranspose_16s_C1R_Ctx);
67impl_transpose!(transpose_i16_c3, i16, C3, nppiTranspose_16s_C3R_Ctx);
68impl_transpose!(transpose_i16_c4, i16, C4, nppiTranspose_16s_C4R_Ctx);
69impl_transpose!(transpose_i32_c1, i32, C1, nppiTranspose_32s_C1R_Ctx);
70impl_transpose!(transpose_i32_c3, i32, C3, nppiTranspose_32s_C3R_Ctx);
71impl_transpose!(transpose_i32_c4, i32, C4, nppiTranspose_32s_C4R_Ctx);
72impl_transpose!(transpose_f32_c1, f32, C1, nppiTranspose_32f_C1R_Ctx);
73impl_transpose!(transpose_f32_c3, f32, C3, nppiTranspose_32f_C3R_Ctx);
74impl_transpose!(transpose_f32_c4, f32, C4, nppiTranspose_32f_C4R_Ctx);
75
76impl_generic_transpose_operation!(TransposeC1, transpose, transpose_c1, C1, [
77    u8 => transpose_u8_c1,
78    u16 => transpose_u16_c1,
79    i16 => transpose_i16_c1,
80    i32 => transpose_i32_c1,
81    f32 => transpose_f32_c1,
82]);
83impl_generic_transpose_operation!(TransposeC3, transpose, transpose_c3, C3, [
84    u8 => transpose_u8_c3,
85    u16 => transpose_u16_c3,
86    i16 => transpose_i16_c3,
87    i32 => transpose_i32_c3,
88    f32 => transpose_f32_c3,
89]);
90impl_generic_transpose_operation!(TransposeC4, transpose, transpose_c4, C4, [
91    u8 => transpose_u8_c4,
92    u16 => transpose_u16_c4,
93    i16 => transpose_i16_c4,
94    i32 => transpose_i32_c4,
95    f32 => transpose_f32_c4,
96]);