1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef SKIA_EXT_RECURSIVE_GAUSSIAN_CONVOLUTION_H_
6 #define SKIA_EXT_RECURSIVE_GAUSSIAN_CONVOLUTION_H_
8 #include "skia/ext/convolver.h"
9 #include "third_party/skia/include/core/SkSize.h"
10 #include "third_party/skia/include/core/SkTypes.h"
14 // RecursiveFilter, paired with SingleChannelRecursiveGaussianX and
15 // SingleChannelRecursiveGaussianY routines below implement recursive filters as
16 // described in 'Recursive implementation of the Gaussian filter' (Young, Vliet)
17 // (1995). Single-letter variable names mirror exactly the usage in the paper to
18 // ease reading and analysis.
19 class RecursiveFilter
{
27 static float qFromSigma(float sigma
);
28 static void computeCoefficients(float q
, float b
[4]);
29 SK_API
RecursiveFilter(float sigma
, Order order
);
31 Order
order() const { return order_
; }
32 const float* b() const { return b_
; }
40 // Applies a gaussian recursive filter given as |filter| to a single channel at
41 // |input_channel_index| to image given in |source_data| along X axis.
42 // The output is placed into |output| into channel |output_channel_index|.
43 SK_API
unsigned char SingleChannelRecursiveGaussianX(
44 const unsigned char* source_data
,
45 int source_byte_row_stride
,
46 int input_channel_index
,
47 int input_channel_count
,
48 const RecursiveFilter
& filter
,
49 const SkISize
& image_size
,
50 unsigned char* output
,
51 int output_byte_row_stride
,
52 int output_channel_index
,
53 int output_channel_count
,
54 bool absolute_values
);
56 // Applies a gaussian recursive filter along Y axis.
57 SK_API
unsigned char SingleChannelRecursiveGaussianY(
58 const unsigned char* source_data
,
59 int source_byte_row_stride
,
60 int input_channel_index
,
61 int input_channel_count
,
62 const RecursiveFilter
& filter
,
63 const SkISize
& image_size
,
64 unsigned char* output
,
65 int output_byte_row_stride
,
66 int output_channel_index
,
67 int output_channel_count
,
68 bool absolute_values
);
71 #endif // SKIA_EXT_RECURSIVE_GAUSSIAN_CONVOLUTION_H_