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