Index: ui/gfx/color_space.h |
diff --git a/ui/gfx/color_space.h b/ui/gfx/color_space.h |
index 798b9305a19b28d5941eae06812167aa77fd23ae..c605a1aee9eff7c17f575d83392064bc594c6a8b 100644 |
--- a/ui/gfx/color_space.h |
+++ b/ui/gfx/color_space.h |
@@ -28,59 +28,52 @@ 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, |
+ RESERVED0 = 1000, |
+ FIRST_VIDEO_VALUE = RESERVED0, |
+ BT709 = 1001, |
+ UNSPECIFIED = 1002, |
+ RESERVED = 1003, |
+ BT470M = 1004, |
+ BT470BG = 1005, |
+ SMPTE170M = 1006, |
+ SMPTE240M = 1007, |
+ FILM = 1008, |
+ BT2020 = 1009, |
+ SMPTEST428_1 = 1010, |
+ SMPTEST431_2 = 1011, |
+ SMPTEST432_1 = 1012, |
+ LAST_VIDEO_VALUE = SMPTEST432_1, |
+ |
XYZ_D50, |
ADOBE_RGB, |
CUSTOM, |
- LAST = CUSTOM |
+ INVALID, |
+ LAST = INVALID |
}; |
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, |
+ RESERVED0 = 1000, |
hubbe
2017/02/16 05:02:39
Actually, this is really weird to me.
Either we em
|
+ FIRST_VIDEO_VALUE = RESERVED0, |
+ BT709 = 1001, |
+ UNSPECIFIED = 1002, |
+ RESERVED = 1003, |
+ GAMMA22 = 1004, |
+ GAMMA28 = 1005, |
+ SMPTE170M = 1006, |
+ SMPTE240M = 1007, |
+ LINEAR = 1008, |
+ LOG = 1009, |
+ LOG_SQRT = 1010, |
+ IEC61966_2_4 = 1011, |
+ BT1361_ECG = 1012, |
+ IEC61966_2_1 = 1013, |
+ BT2020_10 = 1014, |
+ BT2020_12 = 1015, |
+ SMPTEST2084 = 1016, |
+ SMPTEST428_1 = 1017, |
+ ARIB_STD_B67 = 1018, // AKA hybrid-log gamma, HLG. |
+ LAST_VIDEO_VALUE = ARIB_STD_B67, |
+ |
GAMMA24, |
// This is an ad-hoc transfer function that decodes SMPTE 2084 content |
@@ -90,38 +83,30 @@ class GFX_EXPORT ColorSpace { |
// 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, |
+ INVALID, |
+ LAST = INVALID, |
}; |
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, |
+ RGB = 1000, |
+ FIRST_VIDEO_VALUE = RGB, |
+ BT709 = 1001, |
+ UNSPECIFIED = 1002, |
+ RESERVED = 1003, |
+ FCC = 1004, |
+ BT470BG = 1005, |
+ SMPTE170M = 1006, |
+ SMPTE240M = 1007, |
+ YCOCG = 1008, |
+ BT2020_NCL = 1009, |
+ BT2020_CL = 1010, |
+ YDZDX = 1011, |
+ LAST_VIDEO_VALUE = YDZDX, |
+ INVALID, |
+ LAST = INVALID, |
}; |
- // 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, |
@@ -135,7 +120,8 @@ class GFX_EXPORT ColorSpace { |
// Range is defined by TransferID/MatrixID. |
DERIVED = 3, |
- LAST = DERIVED |
+ INVALID, |
+ LAST = INVALID |
}; |
ColorSpace(); |
@@ -145,12 +131,21 @@ 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); |
+ // Retrieve the H264 parameters. |
+ void GetVideoParameters(int* h264_primary, |
hubbe
2017/02/16 05:02:39
I'd rather have four individual accessors.
|
+ int* h264_transfer, |
+ int* h264_matrix, |
+ bool* full_range); |
// Returns true if this is not the default-constructor object. |
bool IsValid() const; |
@@ -187,10 +182,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}; |