1use super::*;
2
3impl_rgb_to_gray!(rgb_to_gray_u8_c3, u8, C3, nppiRGBToGray_8u_C3C1R_Ctx);
4impl_rgb_to_gray!(rgb_to_gray_u8_ac4, u8, AC4, nppiRGBToGray_8u_AC4C1R_Ctx);
5impl_rgb_to_gray!(rgb_to_gray_u16_c3, u16, C3, nppiRGBToGray_16u_C3C1R_Ctx);
6impl_rgb_to_gray!(rgb_to_gray_u16_ac4, u16, AC4, nppiRGBToGray_16u_AC4C1R_Ctx);
7impl_rgb_to_gray!(rgb_to_gray_i16_c3, i16, C3, nppiRGBToGray_16s_C3C1R_Ctx);
8impl_rgb_to_gray!(rgb_to_gray_i16_ac4, i16, AC4, nppiRGBToGray_16s_AC4C1R_Ctx);
9impl_rgb_to_gray!(rgb_to_gray_f32_c3, f32, C3, nppiRGBToGray_32f_C3C1R_Ctx);
10impl_rgb_to_gray!(rgb_to_gray_f32_ac4, f32, AC4, nppiRGBToGray_32f_AC4C1R_Ctx);
11impl_generic_rgb_to_gray!(RgbToGrayC3, rgb_to_gray, rgb_to_gray_c3, C3, [
12 u8 => rgb_to_gray_u8_c3,
13 u16 => rgb_to_gray_u16_c3,
14 i16 => rgb_to_gray_i16_c3,
15 f32 => rgb_to_gray_f32_c3,
16]);
17impl_generic_rgb_to_gray!(RgbToGrayAC4, rgb_to_gray, rgb_to_gray_ac4, AC4, [
18 u8 => rgb_to_gray_u8_ac4,
19 u16 => rgb_to_gray_u16_ac4,
20 i16 => rgb_to_gray_i16_ac4,
21 f32 => rgb_to_gray_f32_ac4,
22]);
23impl_color_to_gray!(color_to_gray_u8_c3, u8, C3, 3, nppiColorToGray_8u_C3C1R_Ctx);
24impl_color_to_gray!(
25 color_to_gray_u8_ac4,
26 u8,
27 AC4,
28 3,
29 nppiColorToGray_8u_AC4C1R_Ctx
30);
31impl_color_to_gray!(color_to_gray_u8_c4, u8, C4, 4, nppiColorToGray_8u_C4C1R_Ctx);
32impl_color_to_gray!(
33 color_to_gray_u16_c3,
34 u16,
35 C3,
36 3,
37 nppiColorToGray_16u_C3C1R_Ctx
38);
39impl_color_to_gray!(
40 color_to_gray_u16_ac4,
41 u16,
42 AC4,
43 3,
44 nppiColorToGray_16u_AC4C1R_Ctx
45);
46impl_color_to_gray!(
47 color_to_gray_u16_c4,
48 u16,
49 C4,
50 4,
51 nppiColorToGray_16u_C4C1R_Ctx
52);
53impl_color_to_gray!(
54 color_to_gray_i16_c3,
55 i16,
56 C3,
57 3,
58 nppiColorToGray_16s_C3C1R_Ctx
59);
60impl_color_to_gray!(
61 color_to_gray_i16_ac4,
62 i16,
63 AC4,
64 3,
65 nppiColorToGray_16s_AC4C1R_Ctx
66);
67impl_color_to_gray!(
68 color_to_gray_i16_c4,
69 i16,
70 C4,
71 4,
72 nppiColorToGray_16s_C4C1R_Ctx
73);
74impl_color_to_gray!(
75 color_to_gray_f32_c3,
76 f32,
77 C3,
78 3,
79 nppiColorToGray_32f_C3C1R_Ctx
80);
81impl_color_to_gray!(
82 color_to_gray_f32_ac4,
83 f32,
84 AC4,
85 3,
86 nppiColorToGray_32f_AC4C1R_Ctx
87);
88impl_color_to_gray!(
89 color_to_gray_f32_c4,
90 f32,
91 C4,
92 4,
93 nppiColorToGray_32f_C4C1R_Ctx
94);
95impl_generic_color_to_gray!(ColorToGrayC3, color_to_gray, color_to_gray_c3, C3, 3, [
96 u8 => color_to_gray_u8_c3,
97 u16 => color_to_gray_u16_c3,
98 i16 => color_to_gray_i16_c3,
99 f32 => color_to_gray_f32_c3,
100]);
101impl_generic_color_to_gray!(
102 ColorToGrayAC4,
103 color_to_gray,
104 color_to_gray_ac4,
105 AC4,
106 3,
107 [
108 u8 => color_to_gray_u8_ac4,
109 u16 => color_to_gray_u16_ac4,
110 i16 => color_to_gray_i16_ac4,
111 f32 => color_to_gray_f32_ac4,
112 ]
113);
114impl_generic_color_to_gray!(ColorToGrayC4, color_to_gray, color_to_gray_c4, C4, 4, [
115 u8 => color_to_gray_u8_c4,
116 u16 => color_to_gray_u16_c4,
117 i16 => color_to_gray_i16_c4,
118 f32 => color_to_gray_f32_c4,
119]);
120impl_gradient_color_to_gray!(
121 gradient_color_to_gray_u8_c3,
122 u8,
123 nppiGradientColorToGray_8u_C3C1R_Ctx
124);
125impl_gradient_color_to_gray!(
126 gradient_color_to_gray_u16_c3,
127 u16,
128 nppiGradientColorToGray_16u_C3C1R_Ctx
129);
130impl_gradient_color_to_gray!(
131 gradient_color_to_gray_i16_c3,
132 i16,
133 nppiGradientColorToGray_16s_C3C1R_Ctx
134);
135impl_gradient_color_to_gray!(
136 gradient_color_to_gray_f32_c3,
137 f32,
138 nppiGradientColorToGray_32f_C3C1R_Ctx
139);
140
141pub trait GradientColorToGray: DataTypeLike {
142 fn gradient_color_to_gray(
143 stream_context: &StreamContext,
144 source: &ImageView<'_, Self, C3>,
145 destination: &mut ImageViewMut<'_, Self, C1>,
146 norm: ImageNormalization,
147 ) -> Result<()>;
148}
149
150macro_rules! impl_gradient_color_to_gray_dispatch {
151 ($ty:ty, $function:ident) => {
152 impl GradientColorToGray for $ty {
153 fn gradient_color_to_gray(
154 stream_context: &StreamContext,
155 source: &ImageView<'_, Self, C3>,
156 destination: &mut ImageViewMut<'_, Self, C1>,
157 norm: ImageNormalization,
158 ) -> Result<()> {
159 $function(stream_context, source, destination, norm)
160 }
161 }
162 };
163}
164
165impl_gradient_color_to_gray_dispatch!(u8, gradient_color_to_gray_u8_c3);
166impl_gradient_color_to_gray_dispatch!(u16, gradient_color_to_gray_u16_c3);
167impl_gradient_color_to_gray_dispatch!(i16, gradient_color_to_gray_i16_c3);
168impl_gradient_color_to_gray_dispatch!(f32, gradient_color_to_gray_f32_c3);
169
170pub fn gradient_color_to_gray<T>(
171 stream_context: &StreamContext,
172 source: &ImageView<'_, T, C3>,
173 destination: &mut ImageViewMut<'_, T, C1>,
174 norm: ImageNormalization,
175) -> Result<()>
176where
177 T: GradientColorToGray,
178{
179 T::gradient_color_to_gray(stream_context, source, destination, norm)
180}
181
182impl_cfa_to_rgb!(cfa_to_rgb_u8_c3, u8, C3, nppiCFAToRGB_8u_C1C3R_Ctx);
183impl_cfa_to_rgba!(cfa_to_rgba_u8_ac4, u8, nppiCFAToRGBA_8u_C1AC4R_Ctx);
184impl_cfa_to_rgb!(cfa_to_rgb_u16_c3, u16, C3, nppiCFAToRGB_16u_C1C3R_Ctx);
185impl_cfa_to_rgba!(cfa_to_rgba_u16_ac4, u16, nppiCFAToRGBA_16u_C1AC4R_Ctx);
186impl_cfa_to_rgb!(cfa_to_rgb_u32_c3, u32, C3, nppiCFAToRGB_32u_C1C3R_Ctx);
187impl_cfa_to_rgba!(cfa_to_rgba_u32_ac4, u32, nppiCFAToRGBA_32u_C1AC4R_Ctx);
188
189pub trait CfaToRgb: DataTypeLike {
190 fn cfa_to_rgb(
191 stream_context: &StreamContext,
192 source: &ImageView<'_, Self, C1>,
193 source_roi: Rectangle,
194 destination: &mut ImageViewMut<'_, Self, C3>,
195 grid: BayerGridPosition,
196 ) -> Result<()>;
197}
198
199macro_rules! impl_cfa_to_rgb_dispatch {
200 ($ty:ty, $function:ident) => {
201 impl CfaToRgb for $ty {
202 fn cfa_to_rgb(
203 stream_context: &StreamContext,
204 source: &ImageView<'_, Self, C1>,
205 source_roi: Rectangle,
206 destination: &mut ImageViewMut<'_, Self, C3>,
207 grid: BayerGridPosition,
208 ) -> Result<()> {
209 $function(stream_context, source, source_roi, destination, grid)
210 }
211 }
212 };
213}
214
215impl_cfa_to_rgb_dispatch!(u8, cfa_to_rgb_u8_c3);
216impl_cfa_to_rgb_dispatch!(u16, cfa_to_rgb_u16_c3);
217impl_cfa_to_rgb_dispatch!(u32, cfa_to_rgb_u32_c3);
218
219pub fn cfa_to_rgb<T>(
220 stream_context: &StreamContext,
221 source: &ImageView<'_, T, C1>,
222 source_roi: Rectangle,
223 destination: &mut ImageViewMut<'_, T, C3>,
224 grid: BayerGridPosition,
225) -> Result<()>
226where
227 T: CfaToRgb,
228{
229 T::cfa_to_rgb(stream_context, source, source_roi, destination, grid)
230}
231
232pub trait CfaToRgba: DataTypeLike {
233 fn cfa_to_rgba(
234 stream_context: &StreamContext,
235 source: &ImageView<'_, Self, C1>,
236 source_roi: Rectangle,
237 destination: &mut ImageViewMut<'_, Self, AC4>,
238 grid: BayerGridPosition,
239 alpha: Self,
240 ) -> Result<()>;
241}
242
243macro_rules! impl_cfa_to_rgba_dispatch {
244 ($ty:ty, $function:ident) => {
245 impl CfaToRgba for $ty {
246 fn cfa_to_rgba(
247 stream_context: &StreamContext,
248 source: &ImageView<'_, Self, C1>,
249 source_roi: Rectangle,
250 destination: &mut ImageViewMut<'_, Self, AC4>,
251 grid: BayerGridPosition,
252 alpha: Self,
253 ) -> Result<()> {
254 $function(stream_context, source, source_roi, destination, grid, alpha)
255 }
256 }
257 };
258}
259
260impl_cfa_to_rgba_dispatch!(u8, cfa_to_rgba_u8_ac4);
261impl_cfa_to_rgba_dispatch!(u16, cfa_to_rgba_u16_ac4);
262impl_cfa_to_rgba_dispatch!(u32, cfa_to_rgba_u32_ac4);
263
264pub fn cfa_to_rgba<T>(
265 stream_context: &StreamContext,
266 source: &ImageView<'_, T, C1>,
267 source_roi: Rectangle,
268 destination: &mut ImageViewMut<'_, T, AC4>,
269 grid: BayerGridPosition,
270 alpha: T,
271) -> Result<()>
272where
273 T: CfaToRgba,
274{
275 T::cfa_to_rgba(stream_context, source, source_roi, destination, grid, alpha)
276}