1use super::*;
2
3pub(crate) fn copy_replicate_border_u8_c1(
4 stream_context: &StreamContext,
5 source: &ImageView<'_, u8, C1>,
6 destination: &mut ImageViewMut<'_, u8, C1>,
7 top: usize,
8 left: usize,
9) -> Result<()> {
10 let (top, left) = validate_border_placement(source.size(), destination.size(), top, left)?;
11
12 unsafe {
13 try_ffi!(sys::nppiCopyReplicateBorder_8u_C1R_Ctx(
14 source.as_ptr().cast(),
15 source.step(),
16 source.size().into(),
17 destination.as_mut_ptr().cast(),
18 destination.step(),
19 destination.size().into(),
20 top,
21 left,
22 stream_context.as_raw(),
23 ))?;
24 }
25 Ok(())
26}
27
28pub(crate) fn copy_replicate_border_u8_c3(
29 stream_context: &StreamContext,
30 source: &ImageView<'_, u8, C3>,
31 destination: &mut ImageViewMut<'_, u8, C3>,
32 top: usize,
33 left: usize,
34) -> Result<()> {
35 let (top, left) = validate_border_placement(source.size(), destination.size(), top, left)?;
36
37 unsafe {
38 try_ffi!(sys::nppiCopyReplicateBorder_8u_C3R_Ctx(
39 source.as_ptr().cast(),
40 source.step(),
41 source.size().into(),
42 destination.as_mut_ptr().cast(),
43 destination.step(),
44 destination.size().into(),
45 top,
46 left,
47 stream_context.as_raw(),
48 ))?;
49 }
50 Ok(())
51}
52
53pub(crate) fn copy_replicate_border_u8_c4(
54 stream_context: &StreamContext,
55 source: &ImageView<'_, u8, C4>,
56 destination: &mut ImageViewMut<'_, u8, C4>,
57 top: usize,
58 left: usize,
59) -> Result<()> {
60 let (top, left) = validate_border_placement(source.size(), destination.size(), top, left)?;
61
62 unsafe {
63 try_ffi!(sys::nppiCopyReplicateBorder_8u_C4R_Ctx(
64 source.as_ptr().cast(),
65 source.step(),
66 source.size().into(),
67 destination.as_mut_ptr().cast(),
68 destination.step(),
69 destination.size().into(),
70 top,
71 left,
72 stream_context.as_raw(),
73 ))?;
74 }
75 Ok(())
76}
77
78pub(crate) fn copy_replicate_border_u8_ac4(
79 stream_context: &StreamContext,
80 source: &ImageView<'_, u8, AC4>,
81 destination: &mut ImageViewMut<'_, u8, AC4>,
82 top: usize,
83 left: usize,
84) -> Result<()> {
85 let (top, left) = validate_border_placement(source.size(), destination.size(), top, left)?;
86
87 unsafe {
88 try_ffi!(sys::nppiCopyReplicateBorder_8u_AC4R_Ctx(
89 source.as_ptr().cast(),
90 source.step(),
91 source.size().into(),
92 destination.as_mut_ptr().cast(),
93 destination.step(),
94 destination.size().into(),
95 top,
96 left,
97 stream_context.as_raw(),
98 ))?;
99 }
100 Ok(())
101}
102
103impl_copy_border!(
104 copy_replicate_border_u16_c1,
105 u16,
106 C1,
107 nppiCopyReplicateBorder_16u_C1R_Ctx
108);
109impl_copy_border!(
110 copy_replicate_border_u16_c3,
111 u16,
112 C3,
113 nppiCopyReplicateBorder_16u_C3R_Ctx
114);
115impl_copy_border!(
116 copy_replicate_border_u16_c4,
117 u16,
118 C4,
119 nppiCopyReplicateBorder_16u_C4R_Ctx
120);
121impl_copy_border!(
122 copy_replicate_border_u16_ac4,
123 u16,
124 AC4,
125 nppiCopyReplicateBorder_16u_AC4R_Ctx
126);
127impl_copy_border!(
128 copy_replicate_border_i16_c1,
129 i16,
130 C1,
131 nppiCopyReplicateBorder_16s_C1R_Ctx
132);
133impl_copy_border!(
134 copy_replicate_border_i16_c3,
135 i16,
136 C3,
137 nppiCopyReplicateBorder_16s_C3R_Ctx
138);
139impl_copy_border!(
140 copy_replicate_border_i16_c4,
141 i16,
142 C4,
143 nppiCopyReplicateBorder_16s_C4R_Ctx
144);
145impl_copy_border!(
146 copy_replicate_border_i16_ac4,
147 i16,
148 AC4,
149 nppiCopyReplicateBorder_16s_AC4R_Ctx
150);
151impl_copy_border!(
152 copy_replicate_border_i32_c1,
153 i32,
154 C1,
155 nppiCopyReplicateBorder_32s_C1R_Ctx
156);
157impl_copy_border!(
158 copy_replicate_border_i32_c3,
159 i32,
160 C3,
161 nppiCopyReplicateBorder_32s_C3R_Ctx
162);
163impl_copy_border!(
164 copy_replicate_border_i32_c4,
165 i32,
166 C4,
167 nppiCopyReplicateBorder_32s_C4R_Ctx
168);
169impl_copy_border!(
170 copy_replicate_border_i32_ac4,
171 i32,
172 AC4,
173 nppiCopyReplicateBorder_32s_AC4R_Ctx
174);
175impl_copy_border!(
176 copy_replicate_border_f32_c1,
177 f32,
178 C1,
179 nppiCopyReplicateBorder_32f_C1R_Ctx
180);
181impl_copy_border!(
182 copy_replicate_border_f32_c3,
183 f32,
184 C3,
185 nppiCopyReplicateBorder_32f_C3R_Ctx
186);
187impl_copy_border!(
188 copy_replicate_border_f32_c4,
189 f32,
190 C4,
191 nppiCopyReplicateBorder_32f_C4R_Ctx
192);
193impl_copy_border!(
194 copy_replicate_border_f32_ac4,
195 f32,
196 AC4,
197 nppiCopyReplicateBorder_32f_AC4R_Ctx
198);
199impl_generic_copy_border_operation!(
200 CopyReplicateBorderC1,
201 copy_replicate_border_c1,
202 C1,
203 [
204 u8 => copy_replicate_border_u8_c1,
205 u16 => copy_replicate_border_u16_c1,
206 i16 => copy_replicate_border_i16_c1,
207 i32 => copy_replicate_border_i32_c1,
208 f32 => copy_replicate_border_f32_c1,
209 ]
210);
211impl_generic_copy_border_operation!(
212 CopyReplicateBorderC3,
213 copy_replicate_border_c3,
214 C3,
215 [
216 u8 => copy_replicate_border_u8_c3,
217 u16 => copy_replicate_border_u16_c3,
218 i16 => copy_replicate_border_i16_c3,
219 i32 => copy_replicate_border_i32_c3,
220 f32 => copy_replicate_border_f32_c3,
221 ]
222);
223impl_generic_copy_border_operation!(
224 CopyReplicateBorderC4,
225 copy_replicate_border_c4,
226 C4,
227 [
228 u8 => copy_replicate_border_u8_c4,
229 u16 => copy_replicate_border_u16_c4,
230 i16 => copy_replicate_border_i16_c4,
231 i32 => copy_replicate_border_i32_c4,
232 f32 => copy_replicate_border_f32_c4,
233 ]
234);
235impl_generic_copy_border_operation!(
236 CopyReplicateBorderAC4,
237 copy_replicate_border_ac4,
238 AC4,
239 [
240 u8 => copy_replicate_border_u8_ac4,
241 u16 => copy_replicate_border_u16_ac4,
242 i16 => copy_replicate_border_i16_ac4,
243 i32 => copy_replicate_border_i32_ac4,
244 f32 => copy_replicate_border_f32_ac4,
245 ]
246);
247
248pub(crate) fn copy_wrap_border_u8_c1(
249 stream_context: &StreamContext,
250 source: &ImageView<'_, u8, C1>,
251 destination: &mut ImageViewMut<'_, u8, C1>,
252 top: usize,
253 left: usize,
254) -> Result<()> {
255 let (top, left) = validate_border_placement(source.size(), destination.size(), top, left)?;
256
257 unsafe {
258 try_ffi!(sys::nppiCopyWrapBorder_8u_C1R_Ctx(
259 source.as_ptr().cast(),
260 source.step(),
261 source.size().into(),
262 destination.as_mut_ptr().cast(),
263 destination.step(),
264 destination.size().into(),
265 top,
266 left,
267 stream_context.as_raw(),
268 ))?;
269 }
270 Ok(())
271}
272
273pub(crate) fn copy_wrap_border_u8_c3(
274 stream_context: &StreamContext,
275 source: &ImageView<'_, u8, C3>,
276 destination: &mut ImageViewMut<'_, u8, C3>,
277 top: usize,
278 left: usize,
279) -> Result<()> {
280 let (top, left) = validate_border_placement(source.size(), destination.size(), top, left)?;
281
282 unsafe {
283 try_ffi!(sys::nppiCopyWrapBorder_8u_C3R_Ctx(
284 source.as_ptr().cast(),
285 source.step(),
286 source.size().into(),
287 destination.as_mut_ptr().cast(),
288 destination.step(),
289 destination.size().into(),
290 top,
291 left,
292 stream_context.as_raw(),
293 ))?;
294 }
295 Ok(())
296}
297
298pub(crate) fn copy_wrap_border_u8_c4(
299 stream_context: &StreamContext,
300 source: &ImageView<'_, u8, C4>,
301 destination: &mut ImageViewMut<'_, u8, C4>,
302 top: usize,
303 left: usize,
304) -> Result<()> {
305 let (top, left) = validate_border_placement(source.size(), destination.size(), top, left)?;
306
307 unsafe {
308 try_ffi!(sys::nppiCopyWrapBorder_8u_C4R_Ctx(
309 source.as_ptr().cast(),
310 source.step(),
311 source.size().into(),
312 destination.as_mut_ptr().cast(),
313 destination.step(),
314 destination.size().into(),
315 top,
316 left,
317 stream_context.as_raw(),
318 ))?;
319 }
320 Ok(())
321}
322
323pub(crate) fn copy_wrap_border_u8_ac4(
324 stream_context: &StreamContext,
325 source: &ImageView<'_, u8, AC4>,
326 destination: &mut ImageViewMut<'_, u8, AC4>,
327 top: usize,
328 left: usize,
329) -> Result<()> {
330 let (top, left) = validate_border_placement(source.size(), destination.size(), top, left)?;
331
332 unsafe {
333 try_ffi!(sys::nppiCopyWrapBorder_8u_AC4R_Ctx(
334 source.as_ptr().cast(),
335 source.step(),
336 source.size().into(),
337 destination.as_mut_ptr().cast(),
338 destination.step(),
339 destination.size().into(),
340 top,
341 left,
342 stream_context.as_raw(),
343 ))?;
344 }
345 Ok(())
346}
347
348impl_copy_border!(
349 copy_wrap_border_u16_c1,
350 u16,
351 C1,
352 nppiCopyWrapBorder_16u_C1R_Ctx
353);
354impl_copy_border!(
355 copy_wrap_border_u16_c3,
356 u16,
357 C3,
358 nppiCopyWrapBorder_16u_C3R_Ctx
359);
360impl_copy_border!(
361 copy_wrap_border_u16_c4,
362 u16,
363 C4,
364 nppiCopyWrapBorder_16u_C4R_Ctx
365);
366impl_copy_border!(
367 copy_wrap_border_u16_ac4,
368 u16,
369 AC4,
370 nppiCopyWrapBorder_16u_AC4R_Ctx
371);
372impl_copy_border!(
373 copy_wrap_border_i16_c1,
374 i16,
375 C1,
376 nppiCopyWrapBorder_16s_C1R_Ctx
377);
378impl_copy_border!(
379 copy_wrap_border_i16_c3,
380 i16,
381 C3,
382 nppiCopyWrapBorder_16s_C3R_Ctx
383);
384impl_copy_border!(
385 copy_wrap_border_i16_c4,
386 i16,
387 C4,
388 nppiCopyWrapBorder_16s_C4R_Ctx
389);
390impl_copy_border!(
391 copy_wrap_border_i16_ac4,
392 i16,
393 AC4,
394 nppiCopyWrapBorder_16s_AC4R_Ctx
395);
396impl_copy_border!(
397 copy_wrap_border_i32_c1,
398 i32,
399 C1,
400 nppiCopyWrapBorder_32s_C1R_Ctx
401);
402impl_copy_border!(
403 copy_wrap_border_i32_c3,
404 i32,
405 C3,
406 nppiCopyWrapBorder_32s_C3R_Ctx
407);
408impl_copy_border!(
409 copy_wrap_border_i32_c4,
410 i32,
411 C4,
412 nppiCopyWrapBorder_32s_C4R_Ctx
413);
414impl_copy_border!(
415 copy_wrap_border_i32_ac4,
416 i32,
417 AC4,
418 nppiCopyWrapBorder_32s_AC4R_Ctx
419);
420impl_copy_border!(
421 copy_wrap_border_f32_c1,
422 f32,
423 C1,
424 nppiCopyWrapBorder_32f_C1R_Ctx
425);
426impl_copy_border!(
427 copy_wrap_border_f32_c3,
428 f32,
429 C3,
430 nppiCopyWrapBorder_32f_C3R_Ctx
431);
432impl_copy_border!(
433 copy_wrap_border_f32_c4,
434 f32,
435 C4,
436 nppiCopyWrapBorder_32f_C4R_Ctx
437);
438impl_copy_border!(
439 copy_wrap_border_f32_ac4,
440 f32,
441 AC4,
442 nppiCopyWrapBorder_32f_AC4R_Ctx
443);
444impl_generic_copy_border_operation!(
445 CopyWrapBorderC1,
446 copy_wrap_border_c1,
447 C1,
448 [
449 u8 => copy_wrap_border_u8_c1,
450 u16 => copy_wrap_border_u16_c1,
451 i16 => copy_wrap_border_i16_c1,
452 i32 => copy_wrap_border_i32_c1,
453 f32 => copy_wrap_border_f32_c1,
454 ]
455);
456impl_generic_copy_border_operation!(
457 CopyWrapBorderC3,
458 copy_wrap_border_c3,
459 C3,
460 [
461 u8 => copy_wrap_border_u8_c3,
462 u16 => copy_wrap_border_u16_c3,
463 i16 => copy_wrap_border_i16_c3,
464 i32 => copy_wrap_border_i32_c3,
465 f32 => copy_wrap_border_f32_c3,
466 ]
467);
468impl_generic_copy_border_operation!(
469 CopyWrapBorderC4,
470 copy_wrap_border_c4,
471 C4,
472 [
473 u8 => copy_wrap_border_u8_c4,
474 u16 => copy_wrap_border_u16_c4,
475 i16 => copy_wrap_border_i16_c4,
476 i32 => copy_wrap_border_i32_c4,
477 f32 => copy_wrap_border_f32_c4,
478 ]
479);
480impl_generic_copy_border_operation!(
481 CopyWrapBorderAC4,
482 copy_wrap_border_ac4,
483 AC4,
484 [
485 u8 => copy_wrap_border_u8_ac4,
486 u16 => copy_wrap_border_u16_ac4,
487 i16 => copy_wrap_border_i16_ac4,
488 i32 => copy_wrap_border_i32_ac4,
489 f32 => copy_wrap_border_f32_ac4,
490 ]
491);