Index: skia/ext/convolver.h |
diff --git a/skia/ext/convolver.h b/skia/ext/convolver.h |
index 14974e52938690f340fb67a2f157ab035ff76c67..f4501b158bfb917db46957c378f35d6adef98cb0 100644 |
--- a/skia/ext/convolver.h |
+++ b/skia/ext/convolver.h |
@@ -10,6 +10,7 @@ |
#include "base/basictypes.h" |
#include "base/cpu.h" |
+#include "third_party/skia/include/core/SkSize.h" |
Stephen White
2013/04/10 15:20:31
I think you could forward-declare SkISize instead
motek.
2013/04/11 16:18:38
SkISize is declared:
typedef struct SkTSize<int> S
Stephen White
2013/04/11 17:16:38
Ahh, you're right. I'd forgotten it was a typedef
|
#include "third_party/skia/include/core/SkTypes.h" |
#if defined(ARCH_CPU_X86_FAMILY) |
@@ -107,6 +108,25 @@ class ConvolutionFilter1D { |
return &filter_values_[filter.data_location]; |
} |
+ // Retrieves the filter for the offset 0, presumed to be the one and only. |
+ // The offset and length of the filter values are put into the corresponding |
+ // out arguments (see AddFilter). Note that |filter_legth| and |
+ // |specified_filter_size| may be different if leading/trailing zeros of the |
Stephen White
2013/04/10 15:20:31
Maybe this comment should be on the declaration fo
motek.
2013/04/11 16:18:38
Added it there.
|
+ // original floating point form were clipped. |
+ // There will be |filter_length| values in the return array. |
reed1
2013/04/09 15:43:18
Do you want to comment that this can return NULL (
motek.
2013/04/11 16:18:38
Done.
|
+ inline const Fixed* GetSingleFilter(int* specified_filter_size, |
Stephen White
2013/04/10 15:20:31
Nit: prefer out-of-line here unless performance i
motek.
2013/04/11 16:18:38
The original is processed in a loop, so I assume t
|
+ int* filter_offset, |
+ int* filter_length) const { |
+ const FilterInstance& filter = filters_[0]; |
+ *filter_offset = filter.offset; |
+ *filter_length = filter.length; |
+ *specified_filter_size = filter.filter_size; |
+ if (filter.length == 0) { |
+ return NULL; |
+ } |
+ return &filter_values_[filter.data_location]; |
+ } |
+ |
inline void PaddingForSIMD(int padding_count) { |
// Padding |padding_count| of more dummy coefficients after the coefficients |
@@ -128,6 +148,9 @@ class ConvolutionFilter1D { |
// Number of values in this filter instance. |
int length; |
+ |
+ // Given filter size. |
+ int filter_size; |
Stephen White
2013/04/10 15:20:31
A bit confusing.. maybe filter_size -> length, and
motek.
2013/04/11 16:18:38
Done.
|
}; |
// Stores the information for each filter added to this class. |
@@ -168,6 +191,39 @@ SK_API void BGRAConvolve2D(const unsigned char* source_data, |
int output_byte_row_stride, |
unsigned char* output, |
bool use_sse2); |
+ |
+// Does a 1D convolution of the given source image along the X dimension on |
+// a single channel of the bitmap. |
+// |
+// The function uses the same convolution kernel for each pixel. That kernel |
+// must be added to |filter| at offset 0. This is a most straightforward |
+// implementation of convolution, intended chiefly for development purposes. |
+SK_API void SingleChannelConvolve1D_X(const unsigned char* source_data, |
Stephen White
2013/04/10 15:20:31
Style guide says no underscores in function names,
motek.
2013/04/11 16:18:38
Renamed as suggested.
As for the other suggestio
|
+ int source_byte_row_stride, |
+ int input_channel_index, |
+ int input_channel_count, |
+ const ConvolutionFilter1D& filter, |
+ const SkISize& image_size, |
+ unsigned char* output, |
+ int output_byte_row_stride, |
+ int output_channel_index, |
+ int output_channel_count, |
+ bool absolute_values); |
+ |
+// Does a 1D convolution of the given source image along the Y dimension on |
+// a single channel of the bitmap. |
+SK_API void SingleChannelConvolve1D_Y(const unsigned char* source_data, |
+ int source_byte_row_stride, |
+ int input_channel_index, |
+ int input_channel_count, |
+ const ConvolutionFilter1D& filter, |
+ const SkISize& image_size, |
+ unsigned char* output, |
+ int output_byte_row_stride, |
+ int output_channel_index, |
+ int output_channel_count, |
+ bool absolute_values); |
+ |
} // namespace skia |
#endif // SKIA_EXT_CONVOLVER_H_ |