Skip to main content

singe_npp/image/
exchange_copy_border.rs

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