@@ -161,17 +161,15 @@ ImagingFilter3x3(Imaging imOut, Imaging im, const float *kernel, float offset) {
161161 }
162162 out [x ] = in0 [x ];
163163 }
164- } else {
164+ } else if ( im -> type == IMAGING_TYPE_I16 ) {
165165 int bigendian = 0 ;
166- if (im -> type == IMAGING_TYPE_I16 ) {
167- if (
168- im -> mode == IMAGING_MODE_I_16B
166+ if (
167+ im -> mode == IMAGING_MODE_I_16B
169168#ifdef WORDS_BIGENDIAN
170- || im -> mode == IMAGING_MODE_I_16N
169+ || im -> mode == IMAGING_MODE_I_16N
171170#endif
172- ) {
173- bigendian = 1 ;
174- }
171+ ) {
172+ bigendian = 1 ;
175173 }
176174 for (y = 1 ; y < ysize - 1 ; y ++ ) {
177175 UINT8 * restrict in_1 = (UINT8 * )im -> image [y - 1 ];
@@ -180,32 +178,36 @@ ImagingFilter3x3(Imaging imOut, Imaging im, const float *kernel, float offset) {
180178 UINT8 * restrict out = (UINT8 * )imOut -> image [y ];
181179
182180 out [0 ] = in0 [0 ];
183- if (im -> type == IMAGING_TYPE_I16 ) {
184- out [1 ] = in0 [1 ];
185- }
181+ out [1 ] = in0 [1 ];
186182 for (x = 1 ; x < xsize - 1 ; x ++ ) {
187183 float ss = offset ;
188- if (im -> type == IMAGING_TYPE_I16 ) {
189- ss += kernel_i16 (3 , in1 , x , & kernel [0 ], bigendian );
190- ss += kernel_i16 (3 , in0 , x , & kernel [3 ], bigendian );
191- ss += kernel_i16 (3 , in_1 , x , & kernel [6 ], bigendian );
192- // NOT rounding here because `offset` already has a +0.5 bias.
193- int ss_int = clip16 (ss );
194- out [x * 2 + (bigendian ? 1 : 0 )] = (UINT8 )(ss_int & 0xff );
195- out [x * 2 + (bigendian ? 0 : 1 )] = (UINT8 )(ss_int >> 8 );
196- } else {
197- ss += KERNEL1x3 (in1 , x , & kernel [0 ], 1 );
198- ss += KERNEL1x3 (in0 , x , & kernel [3 ], 1 );
199- ss += KERNEL1x3 (in_1 , x , & kernel [6 ], 1 );
200- out [x ] = clip8 (ss );
201- }
184+ ss += kernel_i16 (3 , in1 , x , & kernel [0 ], bigendian );
185+ ss += kernel_i16 (3 , in0 , x , & kernel [3 ], bigendian );
186+ ss += kernel_i16 (3 , in_1 , x , & kernel [6 ], bigendian );
187+ // NOT rounding here because `offset` already has a +0.5 bias.
188+ int ss_int = clip16 (ss );
189+ out [x * 2 + (bigendian ? 1 : 0 )] = (UINT8 )(ss_int & 0xff );
190+ out [x * 2 + (bigendian ? 0 : 1 )] = (UINT8 )(ss_int >> 8 );
202191 }
203- if (im -> type == IMAGING_TYPE_I16 ) {
204- out [x * 2 ] = in0 [x * 2 ];
205- out [x * 2 + 1 ] = in0 [x * 2 + 1 ];
206- } else {
207- out [x ] = in0 [x ];
192+ out [x * 2 ] = in0 [x * 2 ];
193+ out [x * 2 + 1 ] = in0 [x * 2 + 1 ];
194+ }
195+ } else {
196+ for (y = 1 ; y < ysize - 1 ; y ++ ) {
197+ UINT8 * restrict in_1 = (UINT8 * )im -> image [y - 1 ];
198+ UINT8 * restrict in0 = (UINT8 * )im -> image [y ];
199+ UINT8 * restrict in1 = (UINT8 * )im -> image [y + 1 ];
200+ UINT8 * restrict out = (UINT8 * )imOut -> image [y ];
201+
202+ out [0 ] = in0 [0 ];
203+ for (x = 1 ; x < xsize - 1 ; x ++ ) {
204+ float ss = offset ;
205+ ss += KERNEL1x3 (in1 , x , & kernel [0 ], 1 );
206+ ss += KERNEL1x3 (in0 , x , & kernel [3 ], 1 );
207+ ss += KERNEL1x3 (in_1 , x , & kernel [6 ], 1 );
208+ out [x ] = clip8 (ss );
208209 }
210+ out [x ] = in0 [x ];
209211 }
210212 }
211213 } else {
@@ -322,17 +324,15 @@ ImagingFilter5x5(Imaging imOut, Imaging im, const float *kernel, float offset) {
322324 out [x + 0 ] = in0 [x + 0 ];
323325 out [x + 1 ] = in0 [x + 1 ];
324326 }
325- } else {
327+ } else if ( im -> type == IMAGING_TYPE_I16 ) {
326328 int bigendian = 0 ;
327- if (im -> type == IMAGING_TYPE_I16 ) {
328- if (
329- im -> mode == IMAGING_MODE_I_16B
329+ if (
330+ im -> mode == IMAGING_MODE_I_16B
330331#ifdef WORDS_BIGENDIAN
331- || im -> mode == IMAGING_MODE_I_16N
332+ || im -> mode == IMAGING_MODE_I_16N
332333#endif
333- ) {
334- bigendian = 1 ;
335- }
334+ ) {
335+ bigendian = 1 ;
336336 }
337337 for (y = 2 ; y < ysize - 2 ; y ++ ) {
338338 UINT8 * restrict in_2 = (UINT8 * )im -> image [y - 2 ];
@@ -344,40 +344,47 @@ ImagingFilter5x5(Imaging imOut, Imaging im, const float *kernel, float offset) {
344344
345345 out [0 ] = in0 [0 ];
346346 out [1 ] = in0 [1 ];
347- if (im -> type == IMAGING_TYPE_I16 ) {
348- out [2 ] = in0 [2 ];
349- out [3 ] = in0 [3 ];
350- }
347+ out [2 ] = in0 [2 ];
348+ out [3 ] = in0 [3 ];
351349 for (x = 2 ; x < xsize - 2 ; x ++ ) {
352350 float ss = offset ;
353- if (im -> type == IMAGING_TYPE_I16 ) {
354- ss += kernel_i16 (5 , in2 , x , & kernel [0 ], bigendian );
355- ss += kernel_i16 (5 , in1 , x , & kernel [5 ], bigendian );
356- ss += kernel_i16 (5 , in0 , x , & kernel [10 ], bigendian );
357- ss += kernel_i16 (5 , in_1 , x , & kernel [15 ], bigendian );
358- ss += kernel_i16 (5 , in_2 , x , & kernel [20 ], bigendian );
359- // NOT rounding here because `offset` already has a +0.5 bias.
360- int ss_int = clip16 (ss );
361- out [x * 2 + (bigendian ? 1 : 0 )] = (UINT8 )(ss_int & 0xff );
362- out [x * 2 + (bigendian ? 0 : 1 )] = (UINT8 )(ss_int >> 8 );
363- } else {
364- ss += KERNEL1x5 (in2 , x , & kernel [0 ], 1 );
365- ss += KERNEL1x5 (in1 , x , & kernel [5 ], 1 );
366- ss += KERNEL1x5 (in0 , x , & kernel [10 ], 1 );
367- ss += KERNEL1x5 (in_1 , x , & kernel [15 ], 1 );
368- ss += KERNEL1x5 (in_2 , x , & kernel [20 ], 1 );
369- out [x ] = clip8 (ss );
370- }
351+ ss += kernel_i16 (5 , in2 , x , & kernel [0 ], bigendian );
352+ ss += kernel_i16 (5 , in1 , x , & kernel [5 ], bigendian );
353+ ss += kernel_i16 (5 , in0 , x , & kernel [10 ], bigendian );
354+ ss += kernel_i16 (5 , in_1 , x , & kernel [15 ], bigendian );
355+ ss += kernel_i16 (5 , in_2 , x , & kernel [20 ], bigendian );
356+ // NOT rounding here because `offset` already has a +0.5 bias.
357+ int ss_int = clip16 (ss );
358+ out [x * 2 + (bigendian ? 1 : 0 )] = (UINT8 )(ss_int & 0xff );
359+ out [x * 2 + (bigendian ? 0 : 1 )] = (UINT8 )(ss_int >> 8 );
371360 }
372- if (im -> type == IMAGING_TYPE_I16 ) {
373- out [x * 2 + 0 ] = in0 [x * 2 + 0 ];
374- out [x * 2 + 1 ] = in0 [x * 2 + 1 ];
375- out [x * 2 + 2 ] = in0 [x * 2 + 2 ];
376- out [x * 2 + 3 ] = in0 [x * 2 + 3 ];
377- } else {
378- out [x + 0 ] = in0 [x + 0 ];
379- out [x + 1 ] = in0 [x + 1 ];
361+ out [x * 2 + 0 ] = in0 [x * 2 + 0 ];
362+ out [x * 2 + 1 ] = in0 [x * 2 + 1 ];
363+ out [x * 2 + 2 ] = in0 [x * 2 + 2 ];
364+ out [x * 2 + 3 ] = in0 [x * 2 + 3 ];
365+ }
366+ } else {
367+ for (y = 2 ; y < ysize - 2 ; y ++ ) {
368+ UINT8 * restrict in_2 = (UINT8 * )im -> image [y - 2 ];
369+ UINT8 * restrict in_1 = (UINT8 * )im -> image [y - 1 ];
370+ UINT8 * restrict in0 = (UINT8 * )im -> image [y ];
371+ UINT8 * restrict in1 = (UINT8 * )im -> image [y + 1 ];
372+ UINT8 * restrict in2 = (UINT8 * )im -> image [y + 2 ];
373+ UINT8 * restrict out = (UINT8 * )imOut -> image [y ];
374+
375+ out [0 ] = in0 [0 ];
376+ out [1 ] = in0 [1 ];
377+ for (x = 2 ; x < xsize - 2 ; x ++ ) {
378+ float ss = offset ;
379+ ss += KERNEL1x5 (in2 , x , & kernel [0 ], 1 );
380+ ss += KERNEL1x5 (in1 , x , & kernel [5 ], 1 );
381+ ss += KERNEL1x5 (in0 , x , & kernel [10 ], 1 );
382+ ss += KERNEL1x5 (in_1 , x , & kernel [15 ], 1 );
383+ ss += KERNEL1x5 (in_2 , x , & kernel [20 ], 1 );
384+ out [x ] = clip8 (ss );
380385 }
386+ out [x + 0 ] = in0 [x + 0 ];
387+ out [x + 1 ] = in0 [x + 1 ];
381388 }
382389 }
383390 } else {
0 commit comments