| Index: tools/skpdiff/SkPMetric.cpp
|
| diff --git a/tools/skpdiff/SkPMetric.cpp b/tools/skpdiff/SkPMetric.cpp
|
| index 5b770b08bdbdee7e5803eb36a9dd317d4d69b6c9..0ca8ee1ec33d01ec0ed7fc007182ba533352a578 100644
|
| --- a/tools/skpdiff/SkPMetric.cpp
|
| +++ b/tools/skpdiff/SkPMetric.cpp
|
| @@ -123,8 +123,14 @@ static void adobergb_to_cielab(float r, float g, float b, LAB* lab) {
|
| }
|
|
|
| /// Converts a 8888 bitmap to LAB color space and puts it into the output
|
| -static void bitmap_to_cielab(const SkBitmap* bitmap, ImageLAB* outImageLAB) {
|
| - SkASSERT(bitmap->config() == SkBitmap::kARGB_8888_Config);
|
| +static bool bitmap_to_cielab(const SkBitmap* bitmap, ImageLAB* outImageLAB) {
|
| + SkBitmap bm8888;
|
| + if (bitmap->config() != SkBitmap::kARGB_8888_Config) {
|
| + if (!bitmap->copyTo(&bm8888, SkBitmap::kARGB_8888_Config)) {
|
| + return false;
|
| + }
|
| + bitmap = &bm8888;
|
| + }
|
|
|
| int width = bitmap->width();
|
| int height = bitmap->height();
|
| @@ -146,6 +152,7 @@ static void bitmap_to_cielab(const SkBitmap* bitmap, ImageLAB* outImageLAB) {
|
| }
|
| }
|
| bitmap->unlockPixels();
|
| + return true;
|
| }
|
|
|
| // From Barten SPIE 1989
|
| @@ -269,6 +276,12 @@ static double pmetric(const ImageLAB* baselineLAB, const ImageLAB* testLAB, SkTD
|
| maxLevels++;
|
| }
|
|
|
| + // We'll be creating new arrays with maxLevels - 2, and ImageL3D requires maxLevels > 0,
|
| + // so just return failure if we're less than 3.
|
| + if (maxLevels <= 2) {
|
| + return 0.0;
|
| + }
|
| +
|
| const float fov = SK_ScalarPI / 180.0f * 45.0f;
|
| float contrastSensitivityMax = contrast_sensitivity(3.248f, 100.0f);
|
| float pixelsPerDegree = width / (2.0f * tanf(fov * 0.5f) * 180.0f / SK_ScalarPI);
|
| @@ -450,8 +463,9 @@ int SkPMetric::queueDiff(SkBitmap* baseline, SkBitmap* test) {
|
| ImageLAB baselineLAB(baseline->width(), baseline->height());
|
| ImageLAB testLAB(baseline->width(), baseline->height());
|
|
|
| - bitmap_to_cielab(baseline, &baselineLAB);
|
| - bitmap_to_cielab(test, &testLAB);
|
| + if (!bitmap_to_cielab(baseline, &baselineLAB) || !bitmap_to_cielab(test, &testLAB)) {
|
| + return diffID;
|
| + }
|
|
|
| diff.result = pmetric(&baselineLAB, &testLAB, &diff.poi);
|
|
|
|
|