diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/bindings/core/v8/serialization/serialized_color_params.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/bindings/core/v8/serialization/serialized_color_params.cc | 258 |
1 files changed, 146 insertions, 112 deletions
diff --git a/chromium/third_party/blink/renderer/bindings/core/v8/serialization/serialized_color_params.cc b/chromium/third_party/blink/renderer/bindings/core/v8/serialization/serialized_color_params.cc index 2eacec18fa6..1732c2b027b 100644 --- a/chromium/third_party/blink/renderer/bindings/core/v8/serialization/serialized_color_params.cc +++ b/chromium/third_party/blink/renderer/bindings/core/v8/serialization/serialized_color_params.cc @@ -8,47 +8,45 @@ namespace blink { -SerializedColorParams::SerializedColorParams() - : color_space_(SerializedColorSpace::kSRGB), - pixel_format_(SerializedPixelFormat::kRGBA8), - opacity_mode_(SerializedOpacityMode::kNonOpaque), - storage_format_(SerializedImageDataStorageFormat::kUint8Clamped) {} - -SerializedColorParams::SerializedColorParams(CanvasColorParams color_params) { - switch (color_params.ColorSpace()) { +namespace { + +SerializedColorSpace SerializeColorSpace(CanvasColorSpace color_space) { + switch (color_space) { case CanvasColorSpace::kSRGB: - color_space_ = SerializedColorSpace::kSRGB; - break; + return SerializedColorSpace::kSRGB; case CanvasColorSpace::kRec2020: - color_space_ = SerializedColorSpace::kRec2020; - break; + return SerializedColorSpace::kRec2020; case CanvasColorSpace::kP3: - color_space_ = SerializedColorSpace::kP3; - break; + return SerializedColorSpace::kP3; } + NOTREACHED(); + return SerializedColorSpace::kSRGB; +} - switch (color_params.PixelFormat()) { - case CanvasPixelFormat::kRGBA8: - pixel_format_ = SerializedPixelFormat::kRGBA8; - break; - case CanvasPixelFormat::kBGRA8: - pixel_format_ = SerializedPixelFormat::kBGRA8; - break; - case CanvasPixelFormat::kF16: - pixel_format_ = SerializedPixelFormat::kF16; - break; +CanvasColorSpace DeserializeColorSpace( + SerializedColorSpace serialized_color_space) { + switch (serialized_color_space) { + case SerializedColorSpace::kLegacyObsolete: + case SerializedColorSpace::kSRGB: + return CanvasColorSpace::kSRGB; + case SerializedColorSpace::kRec2020: + return CanvasColorSpace::kRec2020; + case SerializedColorSpace::kP3: + return CanvasColorSpace::kP3; } - - opacity_mode_ = SerializedOpacityMode::kNonOpaque; - if (color_params.GetOpacityMode() == blink::kOpaque) - opacity_mode_ = SerializedOpacityMode::kOpaque; - storage_format_ = SerializedImageDataStorageFormat::kUint8Clamped; + NOTREACHED(); + return CanvasColorSpace::kSRGB; } -SerializedColorParams::SerializedColorParams( - CanvasColorParams color_params, +} // namespace + +//////////////////////////////////////////////////////////////////////////////// +// SerializedImageDataSettings + +SerializedImageDataSettings::SerializedImageDataSettings( + CanvasColorSpace color_space, ImageDataStorageFormat storage_format) - : SerializedColorParams(color_params) { + : color_space_(SerializeColorSpace(color_space)) { switch (storage_format) { case kUint8ClampedArrayStorageFormat: storage_format_ = SerializedImageDataStorageFormat::kUint8Clamped; @@ -62,64 +60,16 @@ SerializedColorParams::SerializedColorParams( } } -SerializedColorParams::SerializedColorParams( +SerializedImageDataSettings::SerializedImageDataSettings( SerializedColorSpace color_space, - SerializedPixelFormat pixel_format, - SerializedOpacityMode opacity_mode, - SerializedImageDataStorageFormat storage_format) { - SetSerializedColorSpace(color_space); - SetSerializedPixelFormat(pixel_format); - SetSerializedOpacityMode(opacity_mode); - SetSerializedImageDataStorageFormat(storage_format); -} + SerializedImageDataStorageFormat storage_format) + : color_space_(color_space), storage_format_(storage_format) {} -CanvasColorParams SerializedColorParams::GetCanvasColorParams() const { - CanvasColorSpace color_space = CanvasColorSpace::kSRGB; - switch (color_space_) { - case SerializedColorSpace::kLegacyObsolete: - case SerializedColorSpace::kSRGB: - color_space = CanvasColorSpace::kSRGB; - break; - case SerializedColorSpace::kRec2020: - color_space = CanvasColorSpace::kRec2020; - break; - case SerializedColorSpace::kP3: - color_space = CanvasColorSpace::kP3; - break; - } - - CanvasPixelFormat pixel_format = CanvasPixelFormat::kRGBA8; - switch (pixel_format_) { - case SerializedPixelFormat::kNative8_LegacyObsolete: -#if defined(OS_ANDROID) - pixel_format = CanvasPixelFormat::kRGBA8; -#else - pixel_format = CanvasPixelFormat::kBGRA8; -#endif - break; - case SerializedPixelFormat::kRGBA8: - pixel_format = CanvasPixelFormat::kRGBA8; - break; - case SerializedPixelFormat::kBGRA8: - pixel_format = CanvasPixelFormat::kBGRA8; - break; - case SerializedPixelFormat::kF16: - pixel_format = CanvasPixelFormat::kF16; - break; - } - - blink::OpacityMode opacity_mode = blink::kNonOpaque; - if (opacity_mode_ == SerializedOpacityMode::kOpaque) - opacity_mode = blink::kOpaque; - - return CanvasColorParams(color_space, pixel_format, opacity_mode); -} - -CanvasColorSpace SerializedColorParams::GetColorSpace() const { - return GetCanvasColorParams().ColorSpace(); +CanvasColorSpace SerializedImageDataSettings::GetColorSpace() const { + return DeserializeColorSpace(color_space_); } -ImageDataStorageFormat SerializedColorParams::GetStorageFormat() const { +ImageDataStorageFormat SerializedImageDataSettings::GetStorageFormat() const { switch (storage_format_) { case SerializedImageDataStorageFormat::kUint8Clamped: return kUint8ClampedArrayStorageFormat; @@ -132,41 +82,125 @@ ImageDataStorageFormat SerializedColorParams::GetStorageFormat() const { return kUint8ClampedArrayStorageFormat; } -void SerializedColorParams::SetSerializedColorSpace( - SerializedColorSpace color_space) { - color_space_ = color_space; +ImageDataSettings* SerializedImageDataSettings::GetImageDataSettings() const { + ImageDataSettings* settings = ImageDataSettings::Create(); + switch (DeserializeColorSpace(color_space_)) { + case CanvasColorSpace::kSRGB: + settings->setColorSpace(kSRGBCanvasColorSpaceName); + break; + case CanvasColorSpace::kRec2020: + settings->setColorSpace(kRec2020CanvasColorSpaceName); + break; + case CanvasColorSpace::kP3: + settings->setColorSpace(kP3CanvasColorSpaceName); + break; + } + switch (storage_format_) { + case SerializedImageDataStorageFormat::kUint8Clamped: + settings->setStorageFormat(kUint8ClampedArrayStorageFormatName); + break; + case SerializedImageDataStorageFormat::kUint16: + settings->setStorageFormat(kUint16ArrayStorageFormatName); + break; + case SerializedImageDataStorageFormat::kFloat32: + settings->setStorageFormat(kFloat32ArrayStorageFormatName); + break; + } + return settings; } -void SerializedColorParams::SetSerializedPixelFormat( - SerializedPixelFormat pixel_format) { - pixel_format_ = pixel_format; -} +//////////////////////////////////////////////////////////////////////////////// +// SerializedImageBitmapSettings -void SerializedColorParams::SetSerializedOpacityMode( - SerializedOpacityMode opacity_mode) { - opacity_mode_ = opacity_mode; -} +SerializedImageBitmapSettings::SerializedImageBitmapSettings() = default; -void SerializedColorParams::SetSerializedImageDataStorageFormat( - SerializedImageDataStorageFormat storage_format) { - storage_format_ = storage_format; -} +SerializedImageBitmapSettings::SerializedImageBitmapSettings(SkImageInfo info) { + color_space_ = + SerializeColorSpace(CanvasColorSpaceFromSkColorSpace(info.colorSpace())); -SerializedColorSpace SerializedColorParams::GetSerializedColorSpace() const { - return color_space_; -} + switch (info.colorType()) { + default: + case kRGBA_8888_SkColorType: + pixel_format_ = SerializedPixelFormat::kRGBA8; + break; + case kBGRA_8888_SkColorType: + pixel_format_ = SerializedPixelFormat::kBGRA8; + break; + case kRGB_888x_SkColorType: + pixel_format_ = SerializedPixelFormat::kRGBX8; + break; + case kRGBA_F16_SkColorType: + pixel_format_ = SerializedPixelFormat::kF16; + break; + } -SerializedPixelFormat SerializedColorParams::GetSerializedPixelFormat() const { - return pixel_format_; + switch (info.alphaType()) { + case kUnknown_SkAlphaType: + case kPremul_SkAlphaType: + opacity_mode_ = SerializedOpacityMode::kNonOpaque; + is_premultiplied_ = true; + break; + case kUnpremul_SkAlphaType: + opacity_mode_ = SerializedOpacityMode::kNonOpaque; + is_premultiplied_ = false; + break; + case kOpaque_SkAlphaType: + opacity_mode_ = SerializedOpacityMode::kOpaque; + is_premultiplied_ = true; + break; + } } -SerializedOpacityMode SerializedColorParams::GetSerializedOpacityMode() const { - return opacity_mode_; -} +SerializedImageBitmapSettings::SerializedImageBitmapSettings( + SerializedColorSpace color_space, + SerializedPixelFormat pixel_format, + SerializedOpacityMode opacity_mode, + uint32_t is_premultiplied) + : color_space_(color_space), + pixel_format_(pixel_format), + opacity_mode_(opacity_mode), + is_premultiplied_(is_premultiplied) {} + +SkImageInfo SerializedImageBitmapSettings::GetSkImageInfo( + uint32_t width, + uint32_t height) const { + sk_sp<SkColorSpace> sk_color_space = + CanvasColorSpaceToSkColorSpace(DeserializeColorSpace(color_space_)); + + SkColorType sk_color_type = kRGBA_8888_SkColorType; + switch (pixel_format_) { + case SerializedPixelFormat::kNative8_LegacyObsolete: + sk_color_type = kN32_SkColorType; + break; + case SerializedPixelFormat::kRGBA8: + sk_color_type = kRGBA_8888_SkColorType; + break; + case SerializedPixelFormat::kBGRA8: + sk_color_type = kBGRA_8888_SkColorType; + break; + case SerializedPixelFormat::kRGBX8: + sk_color_type = kRGB_888x_SkColorType; + break; + case SerializedPixelFormat::kF16: + sk_color_type = kRGBA_F16_SkColorType; + break; + } + + SkAlphaType sk_alpha_type = kPremul_SkAlphaType; + if (opacity_mode_ == SerializedOpacityMode::kOpaque) { + sk_alpha_type = kOpaque_SkAlphaType; + } else if (is_premultiplied_) { + sk_alpha_type = kPremul_SkAlphaType; + } else { + sk_alpha_type = kUnpremul_SkAlphaType; + } + + blink::OpacityMode opacity_mode = blink::kNonOpaque; + if (opacity_mode_ == SerializedOpacityMode::kOpaque) + opacity_mode = blink::kOpaque; -SerializedImageDataStorageFormat -SerializedColorParams::GetSerializedImageDataStorageFormat() const { - return storage_format_; + return SkImageInfo::Make(width, height, sk_color_type, sk_alpha_type, + std::move(sk_color_space)); } } // namespace blink |