Roll src/third_party/WebKit d9c6159:8139f33 (svn 201974:201975)
[chromium-blink-merge.git] / skia / ext / recursive_gaussian_convolution.h
bloba4843292e1a2a96c56929393aded499de39e3782
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"
12 namespace skia {
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 {
20 public:
21 enum Order {
22 FUNCTION,
23 FIRST_DERIVATIVE,
24 SECOND_DERIVATIVE
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_; }
34 private:
35 Order order_;
36 float q_;
37 float b_[4];
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);
69 } // namespace skia
71 #endif // SKIA_EXT_RECURSIVE_GAUSSIAN_CONVOLUTION_H_