1use super::*;
2
3pub(crate) fn copy_u8_c1(
4 stream_context: &StreamContext,
5 source: &ImageView<'_, u8, C1>,
6 destination: &mut ImageViewMut<'_, u8, C1>,
7) -> Result<()> {
8 validate_same_size(source.size(), destination.size())?;
9
10 unsafe {
11 try_ffi!(sys::nppiCopy_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 copy_u8_c3(
24 stream_context: &StreamContext,
25 source: &ImageView<'_, u8, C3>,
26 destination: &mut ImageViewMut<'_, u8, C3>,
27) -> Result<()> {
28 validate_same_size(source.size(), destination.size())?;
29
30 unsafe {
31 try_ffi!(sys::nppiCopy_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 copy_u8_c4(
44 stream_context: &StreamContext,
45 source: &ImageView<'_, u8, C4>,
46 destination: &mut ImageViewMut<'_, u8, C4>,
47) -> Result<()> {
48 validate_same_size(source.size(), destination.size())?;
49
50 unsafe {
51 try_ffi!(sys::nppiCopy_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
63pub(crate) fn copy_u8_ac4(
64 stream_context: &StreamContext,
65 source: &ImageView<'_, u8, AC4>,
66 destination: &mut ImageViewMut<'_, u8, AC4>,
67) -> Result<()> {
68 validate_same_size(source.size(), destination.size())?;
69
70 unsafe {
71 try_ffi!(sys::nppiCopy_8u_AC4R_Ctx(
72 source.as_ptr().cast(),
73 source.step(),
74 destination.as_mut_ptr().cast(),
75 destination.step(),
76 source.size().into(),
77 stream_context.as_raw(),
78 ))?;
79 }
80 Ok(())
81}
82
83impl_copy!(copy_i8_c1, i8, C1, nppiCopy_8s_C1R_Ctx);
84impl_copy!(copy_i8_c2, i8, C2, nppiCopy_8s_C2R_Ctx);
85impl_copy!(copy_i8_c3, i8, C3, nppiCopy_8s_C3R_Ctx);
86impl_copy!(copy_i8_c4, i8, C4, nppiCopy_8s_C4R_Ctx);
87impl_copy!(copy_i8_ac4, i8, AC4, nppiCopy_8s_AC4R_Ctx);
88impl_copy!(copy_u16_c1, u16, C1, nppiCopy_16u_C1R_Ctx);
89impl_copy!(copy_u16_c3, u16, C3, nppiCopy_16u_C3R_Ctx);
90impl_copy!(copy_u16_c4, u16, C4, nppiCopy_16u_C4R_Ctx);
91impl_copy!(copy_u16_ac4, u16, AC4, nppiCopy_16u_AC4R_Ctx);
92impl_copy!(copy_i16_c1, i16, C1, nppiCopy_16s_C1R_Ctx);
93impl_copy!(copy_i16_c3, i16, C3, nppiCopy_16s_C3R_Ctx);
94impl_copy!(copy_i16_c4, i16, C4, nppiCopy_16s_C4R_Ctx);
95impl_copy!(copy_i16_ac4, i16, AC4, nppiCopy_16s_AC4R_Ctx);
96impl_copy!(copy_u32_c1, u32, C1, nppiCopy_32s_C1R_Ctx);
97impl_copy!(copy_u32_ac4, u32, AC4, nppiCopy_32s_AC4R_Ctx);
98impl_copy!(copy_i32_c1, i32, C1, nppiCopy_32s_C1R_Ctx);
99impl_copy!(copy_i32_c3, i32, C3, nppiCopy_32s_C3R_Ctx);
100impl_copy!(copy_i32_c4, i32, C4, nppiCopy_32s_C4R_Ctx);
101impl_copy!(copy_i32_ac4, i32, AC4, nppiCopy_32s_AC4R_Ctx);
102impl_copy!(copy_f16_c1, f16, C1, nppiCopy_16f_C1R_Ctx);
103impl_copy!(copy_f16_c3, f16, C3, nppiCopy_16f_C3R_Ctx);
104impl_copy!(copy_f16_c4, f16, C4, nppiCopy_16f_C4R_Ctx);
105impl_copy!(copy_f32_c1, f32, C1, nppiCopy_32f_C1R_Ctx);
106impl_copy!(copy_f32_c3, f32, C3, nppiCopy_32f_C3R_Ctx);
107impl_copy!(copy_f32_c4, f32, C4, nppiCopy_32f_C4R_Ctx);
108impl_copy!(copy_f32_ac4, f32, AC4, nppiCopy_32f_AC4R_Ctx);
109impl_copy!(copy_i16_complex_c1, ComplexI16, C1, nppiCopy_16sc_C1R_Ctx);
110impl_copy!(copy_i16_complex_c2, ComplexI16, C2, nppiCopy_16sc_C2R_Ctx);
111impl_copy!(copy_i16_complex_c3, ComplexI16, C3, nppiCopy_16sc_C3R_Ctx);
112impl_copy!(copy_i16_complex_c4, ComplexI16, C4, nppiCopy_16sc_C4R_Ctx);
113impl_copy!(
114 copy_i16_complex_ac4,
115 ComplexI16,
116 AC4,
117 nppiCopy_16sc_AC4R_Ctx
118);
119impl_copy!(copy_f32_complex_c1, Complex32, C1, nppiCopy_32fc_C1R_Ctx);
120impl_copy!(copy_f32_complex_c2, Complex32, C2, nppiCopy_32fc_C2R_Ctx);
121impl_copy!(copy_f32_complex_c3, Complex32, C3, nppiCopy_32fc_C3R_Ctx);
122impl_copy!(copy_f32_complex_c4, Complex32, C4, nppiCopy_32fc_C4R_Ctx);
123impl_copy!(copy_f32_complex_ac4, Complex32, AC4, nppiCopy_32fc_AC4R_Ctx);
124impl_copy!(copy_i32_complex_c1, ComplexI32, C1, nppiCopy_32sc_C1R_Ctx);
125impl_copy!(copy_i32_complex_c2, ComplexI32, C2, nppiCopy_32sc_C2R_Ctx);
126impl_copy!(copy_i32_complex_c3, ComplexI32, C3, nppiCopy_32sc_C3R_Ctx);
127impl_copy!(copy_i32_complex_c4, ComplexI32, C4, nppiCopy_32sc_C4R_Ctx);
128impl_copy!(
129 copy_i32_complex_ac4,
130 ComplexI32,
131 AC4,
132 nppiCopy_32sc_AC4R_Ctx
133);
134
135impl_generic_copy_operation!(CopyC1, copy, copy_c1, C1, [
136 u8 => copy_u8_c1,
137 i8 => copy_i8_c1,
138 u16 => copy_u16_c1,
139 i16 => copy_i16_c1,
140 u32 => copy_u32_c1,
141 i32 => copy_i32_c1,
142 f16 => copy_f16_c1,
143 f32 => copy_f32_c1,
144 ComplexI16 => copy_i16_complex_c1,
145 Complex32 => copy_f32_complex_c1,
146 ComplexI32 => copy_i32_complex_c1,
147]);
148impl_generic_copy_operation!(CopyC2, copy, copy_c2, C2, [
149 i8 => copy_i8_c2,
150 ComplexI16 => copy_i16_complex_c2,
151 Complex32 => copy_f32_complex_c2,
152 ComplexI32 => copy_i32_complex_c2,
153]);
154impl_generic_copy_operation!(CopyC3, copy, copy_c3, C3, [
155 u8 => copy_u8_c3,
156 i8 => copy_i8_c3,
157 u16 => copy_u16_c3,
158 i16 => copy_i16_c3,
159 i32 => copy_i32_c3,
160 f16 => copy_f16_c3,
161 f32 => copy_f32_c3,
162 ComplexI16 => copy_i16_complex_c3,
163 Complex32 => copy_f32_complex_c3,
164 ComplexI32 => copy_i32_complex_c3,
165]);
166impl_generic_copy_operation!(CopyC4, copy, copy_c4, C4, [
167 u8 => copy_u8_c4,
168 i8 => copy_i8_c4,
169 u16 => copy_u16_c4,
170 i16 => copy_i16_c4,
171 i32 => copy_i32_c4,
172 f16 => copy_f16_c4,
173 f32 => copy_f32_c4,
174 ComplexI16 => copy_i16_complex_c4,
175 Complex32 => copy_f32_complex_c4,
176 ComplexI32 => copy_i32_complex_c4,
177]);
178impl_generic_copy_operation!(CopyAc4, copy, copy_ac4, AC4, [
179 u8 => copy_u8_ac4,
180 i8 => copy_i8_ac4,
181 u16 => copy_u16_ac4,
182 i16 => copy_i16_ac4,
183 u32 => copy_u32_ac4,
184 i32 => copy_i32_ac4,
185 f32 => copy_f32_ac4,
186 ComplexI16 => copy_i16_complex_ac4,
187 Complex32 => copy_f32_complex_ac4,
188 ComplexI32 => copy_i32_complex_ac4,
189]);
190
191pub(crate) fn copy_masked_u8_c1(
192 stream_context: &StreamContext,
193 source: &ImageView<'_, u8, C1>,
194 destination: &mut ImageViewMut<'_, u8, C1>,
195 mask: &MaskView<'_>,
196) -> Result<()> {
197 validate_same_size(source.size(), destination.size())?;
198 validate_mask_size(source.size(), mask.size())?;
199
200 unsafe {
201 try_ffi!(sys::nppiCopy_8u_C1MR_Ctx(
202 source.as_ptr().cast(),
203 source.step(),
204 destination.as_mut_ptr().cast(),
205 destination.step(),
206 source.size().into(),
207 mask.as_ptr().cast(),
208 mask.step(),
209 stream_context.as_raw(),
210 ))?;
211 }
212 Ok(())
213}
214
215pub(crate) fn copy_masked_u8_c3(
216 stream_context: &StreamContext,
217 source: &ImageView<'_, u8, C3>,
218 destination: &mut ImageViewMut<'_, u8, C3>,
219 mask: &MaskView<'_>,
220) -> Result<()> {
221 validate_same_size(source.size(), destination.size())?;
222 validate_mask_size(source.size(), mask.size())?;
223
224 unsafe {
225 try_ffi!(sys::nppiCopy_8u_C3MR_Ctx(
226 source.as_ptr().cast(),
227 source.step(),
228 destination.as_mut_ptr().cast(),
229 destination.step(),
230 source.size().into(),
231 mask.as_ptr().cast(),
232 mask.step(),
233 stream_context.as_raw(),
234 ))?;
235 }
236 Ok(())
237}
238
239pub(crate) fn copy_masked_u8_c4(
240 stream_context: &StreamContext,
241 source: &ImageView<'_, u8, C4>,
242 destination: &mut ImageViewMut<'_, u8, C4>,
243 mask: &MaskView<'_>,
244) -> Result<()> {
245 validate_same_size(source.size(), destination.size())?;
246 validate_mask_size(source.size(), mask.size())?;
247
248 unsafe {
249 try_ffi!(sys::nppiCopy_8u_C4MR_Ctx(
250 source.as_ptr().cast(),
251 source.step(),
252 destination.as_mut_ptr().cast(),
253 destination.step(),
254 source.size().into(),
255 mask.as_ptr().cast(),
256 mask.step(),
257 stream_context.as_raw(),
258 ))?;
259 }
260 Ok(())
261}
262
263pub(crate) fn copy_masked_u8_ac4(
264 stream_context: &StreamContext,
265 source: &ImageView<'_, u8, AC4>,
266 destination: &mut ImageViewMut<'_, u8, AC4>,
267 mask: &MaskView<'_>,
268) -> Result<()> {
269 validate_same_size(source.size(), destination.size())?;
270 validate_mask_size(source.size(), mask.size())?;
271
272 unsafe {
273 try_ffi!(sys::nppiCopy_8u_AC4MR_Ctx(
274 source.as_ptr().cast(),
275 source.step(),
276 destination.as_mut_ptr().cast(),
277 destination.step(),
278 source.size().into(),
279 mask.as_ptr().cast(),
280 mask.step(),
281 stream_context.as_raw(),
282 ))?;
283 }
284 Ok(())
285}
286
287impl_copy_masked!(copy_masked_u16_c1, u16, C1, nppiCopy_16u_C1MR_Ctx);
288impl_copy_masked!(copy_masked_u16_c3, u16, C3, nppiCopy_16u_C3MR_Ctx);
289impl_copy_masked!(copy_masked_u16_c4, u16, C4, nppiCopy_16u_C4MR_Ctx);
290impl_copy_masked!(copy_masked_u16_ac4, u16, AC4, nppiCopy_16u_AC4MR_Ctx);
291impl_copy_masked!(copy_masked_i16_c1, i16, C1, nppiCopy_16s_C1MR_Ctx);
292impl_copy_masked!(copy_masked_i16_c3, i16, C3, nppiCopy_16s_C3MR_Ctx);
293impl_copy_masked!(copy_masked_i16_c4, i16, C4, nppiCopy_16s_C4MR_Ctx);
294impl_copy_masked!(copy_masked_i16_ac4, i16, AC4, nppiCopy_16s_AC4MR_Ctx);
295impl_copy_masked!(copy_masked_i32_c1, i32, C1, nppiCopy_32s_C1MR_Ctx);
296impl_copy_masked!(copy_masked_i32_c3, i32, C3, nppiCopy_32s_C3MR_Ctx);
297impl_copy_masked!(copy_masked_i32_c4, i32, C4, nppiCopy_32s_C4MR_Ctx);
298impl_copy_masked!(copy_masked_i32_ac4, i32, AC4, nppiCopy_32s_AC4MR_Ctx);
299impl_copy_masked!(copy_masked_f32_c1, f32, C1, nppiCopy_32f_C1MR_Ctx);
300impl_copy_masked!(copy_masked_f32_c3, f32, C3, nppiCopy_32f_C3MR_Ctx);
301impl_copy_masked!(copy_masked_f32_c4, f32, C4, nppiCopy_32f_C4MR_Ctx);
302impl_copy_masked!(copy_masked_f32_ac4, f32, AC4, nppiCopy_32f_AC4MR_Ctx);
303
304impl_generic_copy_masked_operation!(CopyMaskedC1, copy_masked, copy_masked_c1, C1, [
305 u8 => copy_masked_u8_c1,
306 u16 => copy_masked_u16_c1,
307 i16 => copy_masked_i16_c1,
308 i32 => copy_masked_i32_c1,
309 f32 => copy_masked_f32_c1,
310]);
311impl_generic_copy_masked_operation!(CopyMaskedC3, copy_masked, copy_masked_c3, C3, [
312 u8 => copy_masked_u8_c3,
313 u16 => copy_masked_u16_c3,
314 i16 => copy_masked_i16_c3,
315 i32 => copy_masked_i32_c3,
316 f32 => copy_masked_f32_c3,
317]);
318impl_generic_copy_masked_operation!(CopyMaskedC4, copy_masked, copy_masked_c4, C4, [
319 u8 => copy_masked_u8_c4,
320 u16 => copy_masked_u16_c4,
321 i16 => copy_masked_i16_c4,
322 i32 => copy_masked_i32_c4,
323 f32 => copy_masked_f32_c4,
324]);
325impl_generic_copy_masked_operation!(CopyMaskedAc4, copy_masked, copy_masked_ac4, AC4, [
326 u8 => copy_masked_u8_ac4,
327 u16 => copy_masked_u16_ac4,
328 i16 => copy_masked_i16_ac4,
329 i32 => copy_masked_i32_ac4,
330 f32 => copy_masked_f32_ac4,
331]);