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