Skip to main content

singe_npp/image/
exchange_copy_planar.rs

1use super::*;
2
3pub(crate) fn copy_u8_c3_to_p3(
4    stream_context: &StreamContext,
5    source: &ImageView<'_, u8, C3>,
6    destination: &mut PlanarImageViewMut<'_, u8, 3>,
7) -> Result<()> {
8    validate_same_size(source.size(), destination.planes()[0].size())?;
9
10    let destination_planes = destination
11        .planes_mut()
12        .each_mut()
13        .map(ImageViewMut::as_mut_ptr);
14
15    unsafe {
16        try_ffi!(sys::nppiCopy_8u_C3P3R_Ctx(
17            source.as_ptr().cast(),
18            source.step(),
19            destination_planes.as_ptr().cast(),
20            destination.planes()[0].step(),
21            source.size().into(),
22            stream_context.as_raw(),
23        ))?;
24    }
25    Ok(())
26}
27
28pub(crate) fn copy_u8_c4_to_p4(
29    stream_context: &StreamContext,
30    source: &ImageView<'_, u8, C4>,
31    destination: &mut PlanarImageViewMut<'_, u8, 4>,
32) -> Result<()> {
33    validate_same_size(source.size(), destination.planes()[0].size())?;
34
35    let destination_planes = destination
36        .planes_mut()
37        .each_mut()
38        .map(ImageViewMut::as_mut_ptr);
39
40    unsafe {
41        try_ffi!(sys::nppiCopy_8u_C4P4R_Ctx(
42            source.as_ptr().cast(),
43            source.step(),
44            destination_planes.as_ptr().cast(),
45            destination.planes()[0].step(),
46            source.size().into(),
47            stream_context.as_raw(),
48        ))?;
49    }
50    Ok(())
51}
52
53pub(crate) fn copy_u8_p3_to_c3(
54    stream_context: &StreamContext,
55    source: &PlanarImageView<'_, u8, 3>,
56    destination: &mut ImageViewMut<'_, u8, C3>,
57) -> Result<()> {
58    validate_same_size(source.planes()[0].size(), destination.size())?;
59
60    let source_planes = source.planes().map(|plane| plane.as_ptr());
61
62    unsafe {
63        try_ffi!(sys::nppiCopy_8u_P3C3R_Ctx(
64            source_planes.as_ptr().cast(),
65            source.planes()[0].step(),
66            destination.as_mut_ptr().cast(),
67            destination.step(),
68            destination.size().into(),
69            stream_context.as_raw(),
70        ))?;
71    }
72    Ok(())
73}
74
75pub(crate) fn copy_u8_p4_to_c4(
76    stream_context: &StreamContext,
77    source: &PlanarImageView<'_, u8, 4>,
78    destination: &mut ImageViewMut<'_, u8, C4>,
79) -> Result<()> {
80    validate_same_size(source.planes()[0].size(), destination.size())?;
81
82    let source_planes = source.planes().map(|plane| plane.as_ptr());
83
84    unsafe {
85        try_ffi!(sys::nppiCopy_8u_P4C4R_Ctx(
86            source_planes.as_ptr().cast(),
87            source.planes()[0].step(),
88            destination.as_mut_ptr().cast(),
89            destination.step(),
90            destination.size().into(),
91            stream_context.as_raw(),
92        ))?;
93    }
94    Ok(())
95}
96
97impl_copy_packed_to_planar!(copy_u16_c3_to_p3, u16, C3, 3, nppiCopy_16u_C3P3R_Ctx);
98impl_copy_packed_to_planar!(copy_u16_c4_to_p4, u16, C4, 4, nppiCopy_16u_C4P4R_Ctx);
99impl_copy_packed_to_planar!(copy_i16_c3_to_p3, i16, C3, 3, nppiCopy_16s_C3P3R_Ctx);
100impl_copy_packed_to_planar!(copy_i16_c4_to_p4, i16, C4, 4, nppiCopy_16s_C4P4R_Ctx);
101impl_copy_packed_to_planar!(copy_i32_c3_to_p3, i32, C3, 3, nppiCopy_32s_C3P3R_Ctx);
102impl_copy_packed_to_planar!(copy_i32_c4_to_p4, i32, C4, 4, nppiCopy_32s_C4P4R_Ctx);
103impl_copy_packed_to_planar!(copy_f32_c3_to_p3, f32, C3, 3, nppiCopy_32f_C3P3R_Ctx);
104impl_copy_packed_to_planar!(copy_f32_c4_to_p4, f32, C4, 4, nppiCopy_32f_C4P4R_Ctx);
105impl_copy_planar_to_packed!(copy_u16_p3_to_c3, u16, C3, 3, nppiCopy_16u_P3C3R_Ctx);
106impl_copy_planar_to_packed!(copy_u16_p4_to_c4, u16, C4, 4, nppiCopy_16u_P4C4R_Ctx);
107impl_copy_planar_to_packed!(copy_i16_p3_to_c3, i16, C3, 3, nppiCopy_16s_P3C3R_Ctx);
108impl_copy_planar_to_packed!(copy_i16_p4_to_c4, i16, C4, 4, nppiCopy_16s_P4C4R_Ctx);
109impl_copy_planar_to_packed!(copy_i32_p3_to_c3, i32, C3, 3, nppiCopy_32s_P3C3R_Ctx);
110impl_copy_planar_to_packed!(copy_i32_p4_to_c4, i32, C4, 4, nppiCopy_32s_P4C4R_Ctx);
111impl_copy_planar_to_packed!(copy_f32_p3_to_c3, f32, C3, 3, nppiCopy_32f_P3C3R_Ctx);
112impl_copy_planar_to_packed!(copy_f32_p4_to_c4, f32, C4, 4, nppiCopy_32f_P4C4R_Ctx);
113impl_generic_copy_packed_to_planar_operation!(
114    CopyC3ToP3,
115    copy_c3_to_p3,
116    C3,
117    3,
118    [
119        u8 => copy_u8_c3_to_p3,
120        u16 => copy_u16_c3_to_p3,
121        i16 => copy_i16_c3_to_p3,
122        i32 => copy_i32_c3_to_p3,
123        f32 => copy_f32_c3_to_p3,
124    ]
125);
126impl_generic_copy_packed_to_planar_operation!(
127    CopyC4ToP4,
128    copy_c4_to_p4,
129    C4,
130    4,
131    [
132        u8 => copy_u8_c4_to_p4,
133        u16 => copy_u16_c4_to_p4,
134        i16 => copy_i16_c4_to_p4,
135        i32 => copy_i32_c4_to_p4,
136        f32 => copy_f32_c4_to_p4,
137    ]
138);
139impl_generic_copy_planar_to_packed_operation!(
140    CopyP3ToC3,
141    copy_p3_to_c3,
142    C3,
143    3,
144    [
145        u8 => copy_u8_p3_to_c3,
146        u16 => copy_u16_p3_to_c3,
147        i16 => copy_i16_p3_to_c3,
148        i32 => copy_i32_p3_to_c3,
149        f32 => copy_f32_p3_to_c3,
150    ]
151);
152impl_generic_copy_planar_to_packed_operation!(
153    CopyP4ToC4,
154    copy_p4_to_c4,
155    C4,
156    4,
157    [
158        u8 => copy_u8_p4_to_c4,
159        u16 => copy_u16_p4_to_c4,
160        i16 => copy_i16_p4_to_c4,
161        i32 => copy_i32_p4_to_c4,
162        f32 => copy_f32_p4_to_c4,
163    ]
164);