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

Unified Diff: samplecode/SampleFilterFuzz.cpp

Issue 677713003: Adding color cube to fuzzer (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Fixed nit Created 6 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: samplecode/SampleFilterFuzz.cpp
diff --git a/samplecode/SampleFilterFuzz.cpp b/samplecode/SampleFilterFuzz.cpp
index e073f80b0c1c16651cd2eb47d2dc0ce6aadc6582..6ddc87c9d902d0a7ec2b9a473685a951fcf03fd8 100644
--- a/samplecode/SampleFilterFuzz.cpp
+++ b/samplecode/SampleFilterFuzz.cpp
@@ -9,6 +9,7 @@
#include "SkBitmapSource.h"
#include "SkBlurImageFilter.h"
#include "SkCanvas.h"
+#include "SkColorCubeFilter.h"
#include "SkColorFilter.h"
#include "SkColorFilterImageFilter.h"
#include "SkComposeImageFilter.h"
@@ -210,6 +211,35 @@ static const SkBitmap& make_bitmap() {
return bitmap[R(2)];
}
+static SkData* make_3Dlut(int* cubeDimension, bool invR, bool invG, bool invB) {
+ int size = 4 << R(5);
+ SkData* data = SkData::NewUninitialized(sizeof(SkColor) * size * size * size);
+ SkColor* pixels = (SkColor*)(data->writable_data());
+ SkAutoMalloc lutMemory(size);
+ SkAutoMalloc invLutMemory(size);
+ uint8_t* lut = (uint8_t*)lutMemory.get();
+ uint8_t* invLut = (uint8_t*)invLutMemory.get();
+ const int maxIndex = size - 1;
+ for (int i = 0; i < size; i++) {
+ lut[i] = (i * 255) / maxIndex;
+ invLut[i] = ((maxIndex - i) * 255) / maxIndex;
+ }
+ for (int r = 0; r < size; ++r) {
+ for (int g = 0; g < size; ++g) {
+ for (int b = 0; b < size; ++b) {
+ pixels[(size * ((size * b) + g)) + r] = SkColorSetARGB(0xFF,
+ invR ? invLut[r] : lut[r],
+ invG ? invLut[g] : lut[g],
+ invB ? invLut[b] : lut[b]);
+ }
+ }
+ }
+ if (cubeDimension) {
+ *cubeDimension = size;
+ }
+ return data;
+}
+
static void drawSomething(SkCanvas* canvas) {
SkPaint paint;
@@ -238,7 +268,7 @@ static SkImageFilter* make_image_filter(bool canBeNull = true) {
// Add a 1 in 3 chance to get a NULL input
if (canBeNull && (R(3) == 1)) { return filter; }
- enum { ALPHA_THRESHOLD, MERGE, COLOR, BLUR, MAGNIFIER,
+ enum { ALPHA_THRESHOLD, MERGE, COLOR, LUT3D, BLUR, MAGNIFIER,
DOWN_SAMPLE, XFERMODE, OFFSET, MATRIX, MATRIX_CONVOLUTION, COMPOSE,
DISTANT_LIGHT, POINT_LIGHT, SPOT_LIGHT, NOISE, DROP_SHADOW,
MORPHOLOGY, BITMAP, DISPLACE, TILE, PICTURE, NUM_FILTERS };
@@ -258,6 +288,14 @@ static SkImageFilter* make_image_filter(bool canBeNull = true) {
filter = cf.get() ? SkColorFilterImageFilter::Create(cf, make_image_filter()) : 0;
}
break;
+ case LUT3D:
+ {
+ int cubeDimension;
+ SkAutoDataUnref lut3D(make_3Dlut(&cubeDimension, (R(2) == 1), (R(2) == 1), (R(2) == 1)));
+ SkAutoTUnref<SkColorFilter> cf(SkColorCubeFilter::Create(lut3D, cubeDimension));
+ filter = cf.get() ? SkColorFilterImageFilter::Create(cf, make_image_filter()) : 0;
+ }
+ break;
case BLUR:
filter = SkBlurImageFilter::Create(make_scalar(true), make_scalar(true), make_image_filter());
break;
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698