| Index: ui/gfx/color_space.h
|
| diff --git a/ui/gfx/color_space.h b/ui/gfx/color_space.h
|
| index 798b9305a19b28d5941eae06812167aa77fd23ae..6e424f762a10ae8d4ce3e84e604178f4a59d3e28 100644
|
| --- a/ui/gfx/color_space.h
|
| +++ b/ui/gfx/color_space.h
|
| @@ -28,26 +28,17 @@ class ICCProfile;
|
| class GFX_EXPORT ColorSpace {
|
| public:
|
| enum class PrimaryID : uint16_t {
|
| - // The first 0-255 values should match the H264 specification (see Table E-3
|
| - // Colour Primaries in https://www.itu.int/rec/T-REC-H.264/en).
|
| - RESERVED0 = 0,
|
| - BT709 = 1,
|
| - UNSPECIFIED = 2,
|
| - RESERVED = 3,
|
| - BT470M = 4,
|
| - BT470BG = 5,
|
| - SMPTE170M = 6,
|
| - SMPTE240M = 7,
|
| - FILM = 8,
|
| - BT2020 = 9,
|
| - SMPTEST428_1 = 10,
|
| - SMPTEST431_2 = 11,
|
| - SMPTEST432_1 = 12,
|
| -
|
| - LAST_STANDARD_VALUE = SMPTEST432_1,
|
| -
|
| - // Chrome-specific values start at 1000.
|
| - UNKNOWN = 1000,
|
| + INVALID,
|
| + BT709,
|
| + BT470M,
|
| + BT470BG,
|
| + SMPTE170M,
|
| + SMPTE240M,
|
| + FILM,
|
| + BT2020,
|
| + SMPTEST428_1,
|
| + SMPTEST431_2,
|
| + SMPTEST432_1,
|
| XYZ_D50,
|
| ADOBE_RGB,
|
| CUSTOM,
|
| @@ -55,87 +46,58 @@ class GFX_EXPORT ColorSpace {
|
| };
|
|
|
| enum class TransferID : uint16_t {
|
| - // The first 0-255 values should match the H264 specification (see Table E-4
|
| - // Transfer Characteristics in https://www.itu.int/rec/T-REC-H.264/en).
|
| - RESERVED0 = 0,
|
| - BT709 = 1,
|
| - UNSPECIFIED = 2,
|
| - RESERVED = 3,
|
| - GAMMA22 = 4,
|
| - GAMMA28 = 5,
|
| - SMPTE170M = 6,
|
| - SMPTE240M = 7,
|
| - LINEAR = 8,
|
| - LOG = 9,
|
| - LOG_SQRT = 10,
|
| - IEC61966_2_4 = 11,
|
| - BT1361_ECG = 12,
|
| - IEC61966_2_1 = 13,
|
| - BT2020_10 = 14,
|
| - BT2020_12 = 15,
|
| - SMPTEST2084 = 16,
|
| - SMPTEST428_1 = 17,
|
| - ARIB_STD_B67 = 18, // AKA hybrid-log gamma, HLG.
|
| -
|
| - LAST_STANDARD_VALUE = SMPTEST428_1,
|
| -
|
| - // Chrome-specific values start at 1000.
|
| - UNKNOWN = 1000,
|
| + INVALID,
|
| + BT709,
|
| + GAMMA22,
|
| GAMMA24,
|
| -
|
| + GAMMA28,
|
| + SMPTE170M,
|
| + SMPTE240M,
|
| + LINEAR,
|
| + LOG,
|
| + LOG_SQRT,
|
| + IEC61966_2_4,
|
| + BT1361_ECG,
|
| + IEC61966_2_1,
|
| + BT2020_10,
|
| + BT2020_12,
|
| + SMPTEST2084,
|
| + SMPTEST428_1,
|
| + ARIB_STD_B67, // // AKA hybrid-log gamma, HLG.
|
| // This is an ad-hoc transfer function that decodes SMPTE 2084 content
|
| // into a 0-1 range more or less suitable for viewing on a non-hdr
|
| // display.
|
| SMPTEST2084_NON_HDR,
|
| -
|
| // Like LINEAR, but intended for HDR. (can go outside of 0-1)
|
| LINEAR_HDR,
|
| - // TODO(hubbe): Need to store an approximation of the gamma function(s).
|
| CUSTOM,
|
| LAST = CUSTOM,
|
| };
|
|
|
| enum class MatrixID : int16_t {
|
| - // The first 0-255 values should match the H264 specification (see Table E-5
|
| - // Matrix Coefficients in https://www.itu.int/rec/T-REC-H.264/en).
|
| - RGB = 0,
|
| - BT709 = 1,
|
| - UNSPECIFIED = 2,
|
| - RESERVED = 3,
|
| - FCC = 4,
|
| - BT470BG = 5,
|
| - SMPTE170M = 6,
|
| - SMPTE240M = 7,
|
| - YCOCG = 8,
|
| - BT2020_NCL = 9,
|
| - BT2020_CL = 10,
|
| - YDZDX = 11,
|
| -
|
| - LAST_STANDARD_VALUE = YDZDX,
|
| -
|
| - // Chrome-specific values start at 1000
|
| - UNKNOWN = 1000,
|
| - LAST = UNKNOWN,
|
| + INVALID,
|
| + RGB,
|
| + BT709,
|
| + FCC,
|
| + BT470BG,
|
| + SMPTE170M,
|
| + SMPTE240M,
|
| + YCOCG,
|
| + BT2020_NCL,
|
| + BT2020_CL,
|
| + YDZDX,
|
| + LAST = YDZDX,
|
| };
|
|
|
| - // This corresponds to the WebM Range enum which is part of WebM color data
|
| - // (see http://www.webmproject.org/docs/container/#Range).
|
| - // H.264 only uses a bool, which corresponds to the LIMITED/FULL values.
|
| - // Chrome-specific values start at 1000.
|
| enum class RangeID : int8_t {
|
| - // Range is not explicitly specified / unknown.
|
| - UNSPECIFIED = 0,
|
| -
|
| + INVALID,
|
| // Limited Rec. 709 color range with RGB values ranging from 16 to 235.
|
| - LIMITED = 1,
|
| -
|
| + LIMITED,
|
| // Full RGB color range with RGB valees from 0 to 255.
|
| - FULL = 2,
|
| -
|
| + FULL,
|
| // Range is defined by TransferID/MatrixID.
|
| - DERIVED = 3,
|
| -
|
| - LAST = DERIVED
|
| + DERIVED,
|
| + LAST = DERIVED,
|
| };
|
|
|
| ColorSpace();
|
| @@ -145,12 +107,16 @@ class GFX_EXPORT ColorSpace {
|
| MatrixID matrix,
|
| RangeID full_range);
|
| ColorSpace(const ColorSpace& other);
|
| - ColorSpace(int primaries, int transfer, int matrix, RangeID full_range);
|
| ~ColorSpace();
|
|
|
| - static PrimaryID PrimaryIDFromInt(int primary_id);
|
| - static TransferID TransferIDFromInt(int transfer_id);
|
| - static MatrixID MatrixIDFromInt(int matrix_id);
|
| + // Create a color space with primary, transfer and matrix values from the
|
| + // H264 specification (Table E-3 Colour Primaries, E-4 Transfer
|
| + // Characteristics, and E-5 Matrix Coefficients in
|
| + // https://www.itu.int/rec/T-REC-H.264/en).
|
| + static ColorSpace CreateVideo(int h264_primary,
|
| + int h264_transfer,
|
| + int h264_matrix,
|
| + RangeID range_id);
|
|
|
| // Returns true if this is not the default-constructor object.
|
| bool IsValid() const;
|
| @@ -187,10 +153,10 @@ class GFX_EXPORT ColorSpace {
|
| void GetRangeAdjustMatrix(SkMatrix44* matrix) const;
|
|
|
| private:
|
| - PrimaryID primaries_ = PrimaryID::UNSPECIFIED;
|
| - TransferID transfer_ = TransferID::UNSPECIFIED;
|
| - MatrixID matrix_ = MatrixID::UNSPECIFIED;
|
| - RangeID range_ = RangeID::LIMITED;
|
| + PrimaryID primaries_ = PrimaryID::INVALID;
|
| + TransferID transfer_ = TransferID::INVALID;
|
| + MatrixID matrix_ = MatrixID::INVALID;
|
| + RangeID range_ = RangeID::INVALID;
|
|
|
| // Only used if primaries_ is PrimaryID::CUSTOM.
|
| float custom_primary_matrix_[9] = {0, 0, 0, 0, 0, 0, 0, 0};
|
|
|