chromium/skia/public/mojom/image_info.mojom

// Copyright 2015 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

module skia.mojom;

// Mirror of SkColorType. Unsupported values and `UNKNOWN` will raise
// serialization and deserialization errors.
[Stable, Extensible]
enum ColorType {
  [Default] UNKNOWN,
  ALPHA_8,
  RGB_565,
  ARGB_4444,
  RGBA_8888,
  BGRA_8888,
  // Note: this will fail traits deserialization.
  DEPRECATED_INDEX_8,
  GRAY_8,
};

// Mirror of SkAlphaType. Unsupported values and `UNKNOWN` will raise
// serialization and deserialization errors.
[Stable, Extensible]
enum AlphaType {
  [Default] UNKNOWN,
  ALPHA_TYPE_OPAQUE,
  PREMUL,
  UNPREMUL,
};

// Mirror of SkImageInfo.
[Stable]
struct ImageInfo {
  ColorType color_type;
  AlphaType alpha_type;
  uint32 width;
  uint32 height;

  // Note that both `color_transfer_function` and `color_to_xyz_matrix` must
  // either both be set or both be unset. Unfortunately, this struct is marked
  // Stable so it's no longer possible to fix this...

  // Color transfer function mapping encoded values to linear values,
  // represented by this 7-parameter piecewise function:
  //   linear = sign(encoded) *  (c*|encoded| + f)       , 0 <= |encoded| < d
  //          = sign(encoded) * ((a*|encoded| + b)^g + e), d <= |encoded|
  // (A simple gamma transfer function sets g to gamma and a to 1.)
  // See SkColorSpace and skcms_TransferFunction. Null if the image has no
  // explicit color space. Parameters are serialized as: g, a, b, c, d, e, f.
  array<float, 7>? color_transfer_function;

  // Color transformation matrix to convert colors to XYZ D50, represented as
  // a row-major 3x3 matrix. See SkColorSpace::MakeRGB(). Null if the image has
  // no explicit color space.
  array<float, 9>? color_to_xyz_matrix;
};

// Similar to ImageInfo, but is used when only N32 ColorType is allowed. As such
// the ColorType is not transmitted over the wire at all.
struct BitmapN32ImageInfo {
  AlphaType alpha_type;
  uint32 width;
  uint32 height;

  // Color transfer function mapping encoded values to linear values,
  // represented by this 7-parameter piecewise function:
  //   linear = sign(encoded) *  (c*|encoded| + f)       , 0 <= |encoded| < d
  //          = sign(encoded) * ((a*|encoded| + b)^g + e), d <= |encoded|
  // (A simple gamma transfer function sets g to gamma and a to 1.)
  // See SkColorSpace and skcms_TransferFunction. Null if the image has no
  // explicit color space. Parameters are serialized as: g, a, b, c, d, e, f.
  array<float, 7>? color_transfer_function;

  // Color transformation matrix to convert colors to XYZ D50, represented as
  // a row-major 3x3 matrix. See SkColorSpace::MakeRGB(). Null if the image has
  // no explicit color space.
  array<float, 9>? color_to_xyz_matrix;
};