| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2013, Google Inc. All rights reserved. | 2 * Copyright (c) 2013, Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 558 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 569 color_format32, src_pixel.get(), 1, | 569 color_format32, src_pixel.get(), 1, |
| 570 SkAlphaType::kPremul_SkAlphaType); | 570 SkAlphaType::kPremul_SkAlphaType); |
| 571 | 571 |
| 572 int compare = std::memcmp(converted_pixel.get(), transformed_pixel.get(), | 572 int compare = std::memcmp(converted_pixel.get(), transformed_pixel.get(), |
| 573 image_info.bytesPerPixel()); | 573 image_info.bytesPerPixel()); |
| 574 ASSERT_EQ(compare, 0); | 574 ASSERT_EQ(compare, 0); |
| 575 } | 575 } |
| 576 } | 576 } |
| 577 | 577 |
| 578 TEST_F(ImageBitmapTest, ImageBitmapColorSpaceConversionImageData) { | 578 TEST_F(ImageBitmapTest, ImageBitmapColorSpaceConversionImageData) { |
| 579 unsigned char data_buffer[4] = {255, 0, 0, 255}; | 579 sk_sp<SkColorSpace> src_rgb_color_space = SkColorSpace::MakeSRGB(); |
| 580 unsigned char data_buffer[4] = {32, 96, 160, 255}; |
| 580 DOMUint8ClampedArray* data = DOMUint8ClampedArray::Create(data_buffer, 4); | 581 DOMUint8ClampedArray* data = DOMUint8ClampedArray::Create(data_buffer, 4); |
| 581 ImageData* image_data = | 582 ImageDataColorSettings color_settings; |
| 582 ImageData::Create(IntSize(1, 1), NotShared<DOMUint8ClampedArray>(data)); | 583 ImageData* image_data = ImageData::Create( |
| 584 IntSize(1, 1), NotShared<DOMUint8ClampedArray>(data), &color_settings); |
| 583 std::unique_ptr<uint8_t[]> src_pixel(new uint8_t[4]()); | 585 std::unique_ptr<uint8_t[]> src_pixel(new uint8_t[4]()); |
| 584 memcpy(src_pixel.get(), image_data->data()->Data(), 4); | 586 memcpy(src_pixel.get(), image_data->data()->Data(), 4); |
| 585 | 587 |
| 586 Optional<IntRect> crop_rect = IntRect(0, 0, 1, 1); | 588 Optional<IntRect> crop_rect = IntRect(0, 0, 1, 1); |
| 587 sk_sp<SkColorSpace> color_space = nullptr; | 589 sk_sp<SkColorSpace> color_space = nullptr; |
| 588 SkColorSpaceXform::ColorFormat color_format32 = | |
| 589 (SkColorType::kN32_SkColorType == kBGRA_8888_SkColorType) | |
| 590 ? SkColorSpaceXform::ColorFormat::kBGRA_8888_ColorFormat | |
| 591 : SkColorSpaceXform::ColorFormat::kRGBA_8888_ColorFormat; | |
| 592 SkColorType color_type = SkColorType::kN32_SkColorType; | 590 SkColorType color_type = SkColorType::kN32_SkColorType; |
| 593 SkColorSpaceXform::ColorFormat color_format = color_format32; | 591 SkColorSpaceXform::ColorFormat color_format = |
| 592 SkColorSpaceXform::ColorFormat::kRGBA_8888_ColorFormat; |
| 594 | 593 |
| 595 for (uint8_t i = | 594 for (uint8_t i = |
| 596 static_cast<uint8_t>(ColorSpaceConversion::DEFAULT_COLOR_CORRECTED); | 595 static_cast<uint8_t>(ColorSpaceConversion::DEFAULT_COLOR_CORRECTED); |
| 597 i <= static_cast<uint8_t>(ColorSpaceConversion::LINEAR_RGB); i++) { | 596 i <= static_cast<uint8_t>(ColorSpaceConversion::LAST); i++) { |
| 598 ColorSpaceConversion color_space_conversion = | 597 ColorSpaceConversion color_space_conversion = |
| 599 static_cast<ColorSpaceConversion>(i); | 598 static_cast<ColorSpaceConversion>(i); |
| 600 ImageBitmapOptions options = | 599 ImageBitmapOptions options = |
| 601 PrepareBitmapOptionsAndSetRuntimeFlags(color_space_conversion); | 600 PrepareBitmapOptionsAndSetRuntimeFlags(color_space_conversion); |
| 602 ImageBitmap* image_bitmap = | 601 ImageBitmap* image_bitmap = |
| 603 ImageBitmap::Create(image_data, crop_rect, options); | 602 ImageBitmap::Create(image_data, crop_rect, options); |
| 604 | 603 |
| 605 SkImage* converted_image = | 604 SkImage* converted_image = |
| 606 image_bitmap->BitmapImage()->ImageForCurrentFrame().get(); | 605 image_bitmap->BitmapImage()->ImageForCurrentFrame().get(); |
| 607 | 606 |
| 608 switch (color_space_conversion) { | 607 switch (color_space_conversion) { |
| 609 case ColorSpaceConversion::NONE: | 608 case ColorSpaceConversion::NONE: |
| 610 NOTREACHED(); | 609 NOTREACHED(); |
| 611 break; | 610 break; |
| 612 case ColorSpaceConversion::DEFAULT_COLOR_CORRECTED: | 611 case ColorSpaceConversion::DEFAULT_COLOR_CORRECTED: |
| 613 case ColorSpaceConversion::SRGB: | 612 case ColorSpaceConversion::SRGB: |
| 614 color_space = SkColorSpace::MakeSRGB(); | 613 color_space = SkColorSpace::MakeSRGB(); |
| 615 color_format = color_format32; | |
| 616 break; | 614 break; |
| 617 case ColorSpaceConversion::LINEAR_RGB: | 615 case ColorSpaceConversion::LINEAR_RGB: |
| 618 color_space = SkColorSpace::MakeSRGBLinear(); | 616 color_space = SkColorSpace::MakeSRGBLinear(); |
| 619 color_type = SkColorType::kRGBA_F16_SkColorType; | 617 color_type = SkColorType::kRGBA_F16_SkColorType; |
| 620 color_format = SkColorSpaceXform::ColorFormat::kRGBA_F16_ColorFormat; | 618 color_format = SkColorSpaceXform::ColorFormat::kRGBA_F16_ColorFormat; |
| 621 break; | 619 break; |
| 620 case ColorSpaceConversion::P3: |
| 621 color_space = |
| 622 SkColorSpace::MakeRGB(SkColorSpace::kLinear_RenderTargetGamma, |
| 623 SkColorSpace::kDCIP3_D65_Gamut); |
| 624 color_type = SkColorType::kRGBA_F16_SkColorType; |
| 625 color_format = SkColorSpaceXform::ColorFormat::kRGBA_F16_ColorFormat; |
| 626 break; |
| 627 case ColorSpaceConversion::REC2020: |
| 628 color_space = |
| 629 SkColorSpace::MakeRGB(SkColorSpace::kLinear_RenderTargetGamma, |
| 630 SkColorSpace::kRec2020_Gamut); |
| 631 color_type = SkColorType::kRGBA_F16_SkColorType; |
| 632 color_format = SkColorSpaceXform::ColorFormat::kRGBA_F16_ColorFormat; |
| 633 break; |
| 622 default: | 634 default: |
| 623 NOTREACHED(); | 635 NOTREACHED(); |
| 624 } | 636 } |
| 625 | 637 |
| 626 SkImageInfo image_info = SkImageInfo::Make( | 638 SkImageInfo image_info = SkImageInfo::Make( |
| 627 1, 1, color_type, SkAlphaType::kUnpremul_SkAlphaType, color_space); | 639 1, 1, color_type, SkAlphaType::kUnpremul_SkAlphaType, color_space); |
| 628 std::unique_ptr<uint8_t[]> converted_pixel( | 640 std::unique_ptr<uint8_t[]> converted_pixel( |
| 629 new uint8_t[image_info.bytesPerPixel()]()); | 641 new uint8_t[image_info.bytesPerPixel()]()); |
| 630 converted_image->readPixels( | 642 converted_image->readPixels( |
| 631 image_info, converted_pixel.get(), | 643 image_info, converted_pixel.get(), |
| 632 converted_image->width() * image_info.bytesPerPixel(), 0, 0); | 644 converted_image->width() * image_info.bytesPerPixel(), 0, 0); |
| 633 | 645 |
| 634 // Transform the source pixel and check if the pixel from image bitmap has | 646 // Transform the source pixel and check if the pixel from image bitmap has |
| 635 // the same color information. | 647 // the same color information. |
| 636 std::unique_ptr<SkColorSpaceXform> color_space_xform = | 648 std::unique_ptr<SkColorSpaceXform> color_space_xform = |
| 637 SkColorSpaceXform::New(image_data->GetSkColorSpace().get(), | 649 SkColorSpaceXform::New(src_rgb_color_space.get(), color_space.get()); |
| 638 color_space.get()); | |
| 639 std::unique_ptr<uint8_t[]> transformed_pixel( | 650 std::unique_ptr<uint8_t[]> transformed_pixel( |
| 640 new uint8_t[image_info.bytesPerPixel()]()); | 651 new uint8_t[image_info.bytesPerPixel()]()); |
| 641 color_space_xform->apply(color_format, transformed_pixel.get(), | 652 color_space_xform->apply( |
| 642 color_format32, src_pixel.get(), 1, | 653 color_format, transformed_pixel.get(), |
| 643 SkAlphaType::kUnpremul_SkAlphaType); | 654 SkColorSpaceXform::ColorFormat::kRGBA_8888_ColorFormat, src_pixel.get(), |
| 655 1, SkAlphaType::kUnpremul_SkAlphaType); |
| 656 |
| 657 LOG(ERROR) << "ColorSpaceConversion: " << (int)(i); |
| 658 std::stringstream str, str2; |
| 659 for (int p = 0; p < image_info.bytesPerPixel(); p++) { |
| 660 str << (int)(converted_pixel[p]) << ", "; |
| 661 str2 << (int)(transformed_pixel[p]) << ", "; |
| 662 } |
| 663 LOG(ERROR) << "converted_pixel: " << str.str(); |
| 664 LOG(ERROR) << "transformed_pixel: " << str2.str(); |
| 665 |
| 644 int compare = std::memcmp(converted_pixel.get(), transformed_pixel.get(), | 666 int compare = std::memcmp(converted_pixel.get(), transformed_pixel.get(), |
| 645 image_info.bytesPerPixel()); | 667 image_info.bytesPerPixel()); |
| 646 ASSERT_EQ(compare, 0); | 668 ASSERT_EQ(compare, 0); |
| 647 } | 669 } |
| 648 } | 670 } |
| 649 | 671 |
| 650 } // namespace blink | 672 } // namespace blink |
| OLD | NEW |