Skip to main content

singe_npp/image/
color_lookup_basic.rs

1use super::*;
2
3pub(crate) fn lookup_table_u8_c1(
4    stream_context: &StreamContext,
5    source: &ImageView<'_, u8, C1>,
6    destination: &mut ImageViewMut<'_, u8, C1>,
7    values: &DeviceMemory<i32>,
8    levels: &DeviceMemory<i32>,
9) -> Result<()> {
10    validate_same_size(source.size(), destination.size())?;
11    let level_count = validate_lookup_table(values.len(), levels.len())?;
12
13    unsafe {
14        try_ffi!(sys::nppiLUT_8u_C1R_Ctx(
15            source.as_ptr().cast(),
16            source.step(),
17            destination.as_mut_ptr().cast(),
18            destination.step(),
19            source.size().into(),
20            values.as_ptr().cast(),
21            levels.as_ptr().cast(),
22            level_count,
23            stream_context.as_raw(),
24        ))?;
25    }
26    Ok(())
27}
28
29pub(crate) fn lookup_table_u8_c1_in_place(
30    stream_context: &StreamContext,
31    image: &mut ImageViewMut<'_, u8, C1>,
32    values: &DeviceMemory<i32>,
33    levels: &DeviceMemory<i32>,
34) -> Result<()> {
35    let level_count = validate_lookup_table(values.len(), levels.len())?;
36
37    unsafe {
38        try_ffi!(sys::nppiLUT_8u_C1IR_Ctx(
39            image.as_mut_ptr().cast(),
40            image.step(),
41            image.size().into(),
42            values.as_ptr().cast(),
43            levels.as_ptr().cast(),
44            level_count,
45            stream_context.as_raw(),
46        ))?;
47    }
48    Ok(())
49}
50
51pub(crate) fn lookup_table_u16_c1(
52    stream_context: &StreamContext,
53    source: &ImageView<'_, u16, C1>,
54    destination: &mut ImageViewMut<'_, u16, C1>,
55    values: &DeviceMemory<i32>,
56    levels: &DeviceMemory<i32>,
57) -> Result<()> {
58    validate_same_size(source.size(), destination.size())?;
59    let level_count = validate_lookup_table(values.len(), levels.len())?;
60
61    unsafe {
62        try_ffi!(sys::nppiLUT_16u_C1R_Ctx(
63            source.as_ptr().cast(),
64            source.step(),
65            destination.as_mut_ptr().cast(),
66            destination.step(),
67            source.size().into(),
68            values.as_ptr().cast(),
69            levels.as_ptr().cast(),
70            level_count,
71            stream_context.as_raw(),
72        ))?;
73    }
74    Ok(())
75}
76
77pub(crate) fn lookup_table_u16_c1_in_place(
78    stream_context: &StreamContext,
79    image: &mut ImageViewMut<'_, u16, C1>,
80    values: &DeviceMemory<i32>,
81    levels: &DeviceMemory<i32>,
82) -> Result<()> {
83    let level_count = validate_lookup_table(values.len(), levels.len())?;
84
85    unsafe {
86        try_ffi!(sys::nppiLUT_16u_C1IR_Ctx(
87            image.as_mut_ptr().cast(),
88            image.step(),
89            image.size().into(),
90            values.as_ptr().cast(),
91            levels.as_ptr().cast(),
92            level_count,
93            stream_context.as_raw(),
94        ))?;
95    }
96    Ok(())
97}
98
99pub(crate) fn lookup_table_i16_c1(
100    stream_context: &StreamContext,
101    source: &ImageView<'_, i16, C1>,
102    destination: &mut ImageViewMut<'_, i16, C1>,
103    values: &DeviceMemory<i32>,
104    levels: &DeviceMemory<i32>,
105) -> Result<()> {
106    validate_same_size(source.size(), destination.size())?;
107    let level_count = validate_lookup_table(values.len(), levels.len())?;
108
109    unsafe {
110        try_ffi!(sys::nppiLUT_16s_C1R_Ctx(
111            source.as_ptr().cast(),
112            source.step(),
113            destination.as_mut_ptr().cast(),
114            destination.step(),
115            source.size().into(),
116            values.as_ptr().cast(),
117            levels.as_ptr().cast(),
118            level_count,
119            stream_context.as_raw(),
120        ))?;
121    }
122    Ok(())
123}
124
125pub(crate) fn lookup_table_i16_c1_in_place(
126    stream_context: &StreamContext,
127    image: &mut ImageViewMut<'_, i16, C1>,
128    values: &DeviceMemory<i32>,
129    levels: &DeviceMemory<i32>,
130) -> Result<()> {
131    let level_count = validate_lookup_table(values.len(), levels.len())?;
132
133    unsafe {
134        try_ffi!(sys::nppiLUT_16s_C1IR_Ctx(
135            image.as_mut_ptr().cast(),
136            image.step(),
137            image.size().into(),
138            values.as_ptr().cast(),
139            levels.as_ptr().cast(),
140            level_count,
141            stream_context.as_raw(),
142        ))?;
143    }
144    Ok(())
145}
146
147pub(crate) fn lookup_table_f32_c1(
148    stream_context: &StreamContext,
149    source: &ImageView<'_, f32, C1>,
150    destination: &mut ImageViewMut<'_, f32, C1>,
151    values: &DeviceMemory<f32>,
152    levels: &DeviceMemory<f32>,
153) -> Result<()> {
154    validate_same_size(source.size(), destination.size())?;
155    let level_count = validate_lookup_table(values.len(), levels.len())?;
156
157    unsafe {
158        try_ffi!(sys::nppiLUT_32f_C1R_Ctx(
159            source.as_ptr().cast(),
160            source.step(),
161            destination.as_mut_ptr().cast(),
162            destination.step(),
163            source.size().into(),
164            values.as_ptr().cast(),
165            levels.as_ptr().cast(),
166            level_count,
167            stream_context.as_raw(),
168        ))?;
169    }
170    Ok(())
171}
172
173pub(crate) fn lookup_table_f32_c1_in_place(
174    stream_context: &StreamContext,
175    image: &mut ImageViewMut<'_, f32, C1>,
176    values: &DeviceMemory<f32>,
177    levels: &DeviceMemory<f32>,
178) -> Result<()> {
179    let level_count = validate_lookup_table(values.len(), levels.len())?;
180
181    unsafe {
182        try_ffi!(sys::nppiLUT_32f_C1IR_Ctx(
183            image.as_mut_ptr().cast(),
184            image.step(),
185            image.size().into(),
186            values.as_ptr().cast(),
187            levels.as_ptr().cast(),
188            level_count,
189            stream_context.as_raw(),
190        ))?;
191    }
192    Ok(())
193}
194
195impl_lookup_table_packed!(lookup_table_u8_c3, u8, C3, 3, nppiLUT_8u_C3R_Ctx);
196impl_lookup_table_packed_in_place!(lookup_table_u8_c3_in_place, u8, C3, 3, nppiLUT_8u_C3IR_Ctx);
197impl_lookup_table_packed!(lookup_table_u8_c4, u8, C4, 4, nppiLUT_8u_C4R_Ctx);
198impl_lookup_table_packed_in_place!(lookup_table_u8_c4_in_place, u8, C4, 4, nppiLUT_8u_C4IR_Ctx);
199impl_lookup_table_packed!(lookup_table_u8_ac4, u8, AC4, 3, nppiLUT_8u_AC4R_Ctx);
200impl_lookup_table_packed_in_place!(
201    lookup_table_u8_ac4_in_place,
202    u8,
203    AC4,
204    3,
205    nppiLUT_8u_AC4IR_Ctx
206);
207impl_lookup_table_packed!(lookup_table_u16_c3, u16, C3, 3, nppiLUT_16u_C3R_Ctx);
208impl_lookup_table_packed_in_place!(
209    lookup_table_u16_c3_in_place,
210    u16,
211    C3,
212    3,
213    nppiLUT_16u_C3IR_Ctx
214);
215impl_lookup_table_packed!(lookup_table_u16_c4, u16, C4, 4, nppiLUT_16u_C4R_Ctx);
216impl_lookup_table_packed_in_place!(
217    lookup_table_u16_c4_in_place,
218    u16,
219    C4,
220    4,
221    nppiLUT_16u_C4IR_Ctx
222);
223impl_lookup_table_packed!(lookup_table_u16_ac4, u16, AC4, 3, nppiLUT_16u_AC4R_Ctx);
224impl_lookup_table_packed_in_place!(
225    lookup_table_u16_ac4_in_place,
226    u16,
227    AC4,
228    3,
229    nppiLUT_16u_AC4IR_Ctx
230);
231impl_lookup_table_packed!(lookup_table_i16_c3, i16, C3, 3, nppiLUT_16s_C3R_Ctx);
232impl_lookup_table_packed_in_place!(
233    lookup_table_i16_c3_in_place,
234    i16,
235    C3,
236    3,
237    nppiLUT_16s_C3IR_Ctx
238);
239impl_lookup_table_packed!(lookup_table_i16_c4, i16, C4, 4, nppiLUT_16s_C4R_Ctx);
240impl_lookup_table_packed_in_place!(
241    lookup_table_i16_c4_in_place,
242    i16,
243    C4,
244    4,
245    nppiLUT_16s_C4IR_Ctx
246);
247impl_lookup_table_packed!(lookup_table_i16_ac4, i16, AC4, 3, nppiLUT_16s_AC4R_Ctx);
248impl_lookup_table_packed_in_place!(
249    lookup_table_i16_ac4_in_place,
250    i16,
251    AC4,
252    3,
253    nppiLUT_16s_AC4IR_Ctx
254);
255impl_lookup_table_packed_f32!(lookup_table_f32_c3, C3, 3, nppiLUT_32f_C3R_Ctx);
256impl_lookup_table_packed_f32_in_place!(lookup_table_f32_c3_in_place, C3, 3, nppiLUT_32f_C3IR_Ctx);
257impl_lookup_table_packed_f32!(lookup_table_f32_c4, C4, 4, nppiLUT_32f_C4R_Ctx);
258impl_lookup_table_packed_f32_in_place!(lookup_table_f32_c4_in_place, C4, 4, nppiLUT_32f_C4IR_Ctx);
259impl_lookup_table_packed_f32!(lookup_table_f32_ac4, AC4, 3, nppiLUT_32f_AC4R_Ctx);
260impl_lookup_table_packed_f32_in_place!(
261    lookup_table_f32_ac4_in_place,
262    AC4,
263    3,
264    nppiLUT_32f_AC4IR_Ctx
265);
266
267impl_generic_lookup_table_c1!(LookupTableC1, lookup_table, lookup_table_c1, [
268    u8, i32 => lookup_table_u8_c1,
269    u16, i32 => lookup_table_u16_c1,
270    i16, i32 => lookup_table_i16_c1,
271    f32, f32 => lookup_table_f32_c1,
272]);
273impl_generic_lookup_table_c1_in_place!(
274    LookupTableC1InPlace,
275    lookup_table_in_place,
276    lookup_table_c1_in_place,
277    [
278        u8, i32 => lookup_table_u8_c1_in_place,
279        u16, i32 => lookup_table_u16_c1_in_place,
280        i16, i32 => lookup_table_i16_c1_in_place,
281        f32, f32 => lookup_table_f32_c1_in_place,
282    ]
283);
284impl_generic_lookup_table_packed!(LookupTableC3, lookup_table, lookup_table_c3, C3, 3, [
285    u8, i32 => lookup_table_u8_c3,
286    u16, i32 => lookup_table_u16_c3,
287    i16, i32 => lookup_table_i16_c3,
288    f32, f32 => lookup_table_f32_c3,
289]);
290impl_generic_lookup_table_packed_in_place!(
291    LookupTableC3InPlace,
292    lookup_table_in_place,
293    lookup_table_c3_in_place,
294    C3,
295    3,
296    [
297        u8, i32 => lookup_table_u8_c3_in_place,
298        u16, i32 => lookup_table_u16_c3_in_place,
299        i16, i32 => lookup_table_i16_c3_in_place,
300        f32, f32 => lookup_table_f32_c3_in_place,
301    ]
302);
303impl_generic_lookup_table_packed!(LookupTableC4, lookup_table, lookup_table_c4, C4, 4, [
304    u8, i32 => lookup_table_u8_c4,
305    u16, i32 => lookup_table_u16_c4,
306    i16, i32 => lookup_table_i16_c4,
307    f32, f32 => lookup_table_f32_c4,
308]);
309impl_generic_lookup_table_packed_in_place!(
310    LookupTableC4InPlace,
311    lookup_table_in_place,
312    lookup_table_c4_in_place,
313    C4,
314    4,
315    [
316        u8, i32 => lookup_table_u8_c4_in_place,
317        u16, i32 => lookup_table_u16_c4_in_place,
318        i16, i32 => lookup_table_i16_c4_in_place,
319        f32, f32 => lookup_table_f32_c4_in_place,
320    ]
321);
322impl_generic_lookup_table_packed!(LookupTableAc4, lookup_table, lookup_table_ac4, AC4, 3, [
323    u8, i32 => lookup_table_u8_ac4,
324    u16, i32 => lookup_table_u16_ac4,
325    i16, i32 => lookup_table_i16_ac4,
326    f32, f32 => lookup_table_f32_ac4,
327]);
328impl_generic_lookup_table_packed_in_place!(
329    LookupTableAc4InPlace,
330    lookup_table_in_place,
331    lookup_table_ac4_in_place,
332    AC4,
333    3,
334    [
335        u8, i32 => lookup_table_u8_ac4_in_place,
336        u16, i32 => lookup_table_u16_ac4_in_place,
337        i16, i32 => lookup_table_i16_ac4_in_place,
338        f32, f32 => lookup_table_f32_ac4_in_place,
339    ]
340);