Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: src/effects/SkMatrixConvolutionImageFilter.cpp

Issue 23021015: Initial error handling code (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Simplified SkRect/SkIRect validity tests Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright 2012 The Android Open Source Project 2 * Copyright 2012 The Android Open Source Project
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkMatrixConvolutionImageFilter.h" 8 #include "SkMatrixConvolutionImageFilter.h"
9 #include "SkBitmap.h" 9 #include "SkBitmap.h"
10 #include "SkColorPriv.h" 10 #include "SkColorPriv.h"
11 #include "SkFlattenableBuffers.h" 11 #include "SkFlattenableBuffers.h"
12 #include "SkRect.h" 12 #include "SkRect.h"
13 #include "SkUnPreMultiply.h" 13 #include "SkUnPreMultiply.h"
14 14
15 #if SK_SUPPORT_GPU 15 #if SK_SUPPORT_GPU
16 #include "gl/GrGLEffect.h" 16 #include "gl/GrGLEffect.h"
17 #include "gl/GrGLEffectMatrix.h" 17 #include "gl/GrGLEffectMatrix.h"
18 #include "effects/GrSingleTextureEffect.h" 18 #include "effects/GrSingleTextureEffect.h"
19 #include "GrTBackendEffectFactory.h" 19 #include "GrTBackendEffectFactory.h"
20 #include "GrTexture.h" 20 #include "GrTexture.h"
21 #include "SkMatrix.h" 21 #include "SkMatrix.h"
22 22
23 #endif 23 #endif
24 24
25 namespace {
26
27 bool TileModeIsValid(SkMatrixConvolutionImageFilter::TileMode tileMode) {
28 switch (tileMode) {
29 case SkMatrixConvolutionImageFilter::kClamp_TileMode:
30 case SkMatrixConvolutionImageFilter::kRepeat_TileMode:
31 case SkMatrixConvolutionImageFilter::kClampToBlack_TileMode:
32 return true;
33 default:
34 break;
35 }
36 return false;
37 }
38
39 }
40
25 SkMatrixConvolutionImageFilter::SkMatrixConvolutionImageFilter(const SkISize& ke rnelSize, const SkScalar* kernel, SkScalar gain, SkScalar bias, const SkIPoint& target, TileMode tileMode, bool convolveAlpha, SkImageFilter* input) 41 SkMatrixConvolutionImageFilter::SkMatrixConvolutionImageFilter(const SkISize& ke rnelSize, const SkScalar* kernel, SkScalar gain, SkScalar bias, const SkIPoint& target, TileMode tileMode, bool convolveAlpha, SkImageFilter* input)
26 : INHERITED(input), 42 : INHERITED(input),
27 fKernelSize(kernelSize), 43 fKernelSize(kernelSize),
28 fGain(gain), 44 fGain(gain),
29 fBias(bias), 45 fBias(bias),
30 fTarget(target), 46 fTarget(target),
31 fTileMode(tileMode), 47 fTileMode(tileMode),
32 fConvolveAlpha(convolveAlpha) { 48 fConvolveAlpha(convolveAlpha) {
33 uint32_t size = fKernelSize.fWidth * fKernelSize.fHeight; 49 uint32_t size = fKernelSize.fWidth * fKernelSize.fHeight;
34 fKernel = SkNEW_ARRAY(SkScalar, size); 50 fKernel = SkNEW_ARRAY(SkScalar, size);
35 memcpy(fKernel, kernel, size * sizeof(SkScalar)); 51 memcpy(fKernel, kernel, size * sizeof(SkScalar));
36 SkASSERT(kernelSize.fWidth >= 1 && kernelSize.fHeight >= 1); 52 SkASSERT(kernelSize.fWidth >= 1 && kernelSize.fHeight >= 1);
37 SkASSERT(target.fX >= 0 && target.fX < kernelSize.fWidth); 53 SkASSERT(target.fX >= 0 && target.fX < kernelSize.fWidth);
38 SkASSERT(target.fY >= 0 && target.fY < kernelSize.fHeight); 54 SkASSERT(target.fY >= 0 && target.fY < kernelSize.fHeight);
39 } 55 }
40 56
41 SkMatrixConvolutionImageFilter::SkMatrixConvolutionImageFilter(SkFlattenableRead Buffer& buffer) : INHERITED(buffer) { 57 SkMatrixConvolutionImageFilter::SkMatrixConvolutionImageFilter(SkFlattenableRead Buffer& buffer) : INHERITED(buffer) {
42 fKernelSize.fWidth = buffer.readInt(); 58 fKernelSize.fWidth = buffer.readInt();
43 fKernelSize.fHeight = buffer.readInt(); 59 fKernelSize.fHeight = buffer.readInt();
44 uint32_t size = fKernelSize.fWidth * fKernelSize.fHeight; 60 uint32_t size = fKernelSize.fWidth * fKernelSize.fHeight;
45 fKernel = SkNEW_ARRAY(SkScalar, size); 61 fKernel = SkNEW_ARRAY(SkScalar, size);
Stephen White 2013/09/09 17:43:00 We should probably add some test cases with imposs
46 SkDEBUGCODE(uint32_t readSize = )buffer.readScalarArray(fKernel); 62 SkDEBUGCODE(uint32_t readSize = )buffer.readScalarArray(fKernel);
47 SkASSERT(readSize == size); 63 SkASSERT(readSize == size);
48 fGain = buffer.readScalar(); 64 fGain = buffer.readScalar();
49 fBias = buffer.readScalar(); 65 fBias = buffer.readScalar();
50 fTarget.fX = buffer.readInt(); 66 fTarget.fX = buffer.readInt();
51 fTarget.fY = buffer.readInt(); 67 fTarget.fY = buffer.readInt();
52 fTileMode = (TileMode) buffer.readInt(); 68 fTileMode = (TileMode) buffer.readInt();
53 fConvolveAlpha = buffer.readBool(); 69 fConvolveAlpha = buffer.readBool();
Stephen White 2013/09/09 17:43:00 Can readBool() ever get weird values? Or does it i
70 buffer.validateData(SkScalarIsFinite(fGain) &&
71 SkScalarIsFinite(fBias) &&
72 TileModeIsValid(fTileMode));
54 } 73 }
55 74
56 void SkMatrixConvolutionImageFilter::flatten(SkFlattenableWriteBuffer& buffer) c onst { 75 void SkMatrixConvolutionImageFilter::flatten(SkFlattenableWriteBuffer& buffer) c onst {
57 this->INHERITED::flatten(buffer); 76 this->INHERITED::flatten(buffer);
58 buffer.writeInt(fKernelSize.fWidth); 77 buffer.writeInt(fKernelSize.fWidth);
59 buffer.writeInt(fKernelSize.fHeight); 78 buffer.writeInt(fKernelSize.fHeight);
60 buffer.writeScalarArray(fKernel, fKernelSize.fWidth * fKernelSize.fHeight); 79 buffer.writeScalarArray(fKernel, fKernelSize.fWidth * fKernelSize.fHeight);
61 buffer.writeScalar(fGain); 80 buffer.writeScalar(fGain);
62 buffer.writeScalar(fBias); 81 buffer.writeScalar(fBias);
63 buffer.writeInt(fTarget.fX); 82 buffer.writeInt(fTarget.fX);
(...skipping 509 matching lines...) Expand 10 before | Expand all | Expand 10 after
573 fBias, 592 fBias,
574 fTarget, 593 fTarget,
575 fTileMode, 594 fTileMode,
576 fConvolveAlpha); 595 fConvolveAlpha);
577 return true; 596 return true;
578 } 597 }
579 598
580 /////////////////////////////////////////////////////////////////////////////// 599 ///////////////////////////////////////////////////////////////////////////////
581 600
582 #endif 601 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698