Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(306)

Unified Diff: ui/gfx/color_space.cc

Issue 2852953003: Use real colorspace for DirectComposition overlays.
Patch Set: rebase Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/gfx/color_space.cc
diff --git a/ui/gfx/color_space.cc b/ui/gfx/color_space.cc
index 8f72e6398abc11cff9751d149562403760f32bc2..aa4233ad18d5d3761186b736f5459c9940be9243 100644
--- a/ui/gfx/color_space.cc
+++ b/ui/gfx/color_space.cc
@@ -618,6 +618,64 @@ bool ColorSpace::GetTransferFunction(SkColorSpaceTransferFn* fn) const {
return false;
}
+bool ColorSpace::Serialize(base::Pickle* pickle) const {
+ if (!pickle->WriteUInt32(static_cast<uint32_t>(primaries_)) ||
+ !pickle->WriteUInt32(static_cast<uint32_t>(transfer_)) ||
+ !pickle->WriteUInt32(static_cast<uint32_t>(matrix_)) ||
+ !pickle->WriteUInt32(static_cast<uint32_t>(range_)) ||
+ !pickle->WriteUInt64(icc_profile_id_))
+ return false;
+ if (primaries_ == PrimaryID::CUSTOM &&
+ !pickle->WriteBytes(reinterpret_cast<const char*>(custom_primary_matrix_),
+ sizeof(custom_primary_matrix_)))
+ return false;
+ if (transfer_ == TransferID::CUSTOM &&
+ !pickle->WriteBytes(
+ reinterpret_cast<const char*>(custom_transfer_params_),
+ sizeof(custom_transfer_params_)))
+ return false;
+ return true;
+}
+
+template <typename T>
+static bool ReadValue(base::PickleIterator* iter, T* result) {
+ uint32_t value;
+ if (!iter->ReadUInt32(&value))
+ return false;
+ *result = static_cast<T>(value);
+ if (*result > T::LAST)
+ return false;
+ return true;
+}
+
+bool ColorSpace::ReadFromPickle(base::PickleIterator* iter) {
+ if (!ReadValue(iter, &primaries_))
+ return false;
+ if (!ReadValue(iter, &transfer_))
+ return false;
+ if (!ReadValue(iter, &matrix_))
+ return false;
+ if (!ReadValue(iter, &range_))
+ return false;
+ if (!iter->ReadUInt64(&icc_profile_id_))
+ return false;
+
+ if (primaries_ == PrimaryID::CUSTOM) {
+ const char* data = nullptr;
+ if (!iter->ReadBytes(&data, sizeof(custom_primary_matrix_)))
+ return false;
+ memcpy(custom_primary_matrix_, data, sizeof(custom_primary_matrix_));
+ }
+ if (transfer_ == TransferID::CUSTOM) {
+ const char* data = nullptr;
+ if (!iter->ReadBytes(&data, sizeof(custom_transfer_params_)))
+ return false;
+ memcpy(custom_transfer_params_, data, sizeof(custom_transfer_params_));
+ }
+
+ return true;
+}
+
bool ColorSpace::GetInverseTransferFunction(SkColorSpaceTransferFn* fn) const {
if (!GetTransferFunction(fn))
return false;

Powered by Google App Engine
This is Rietveld 408576698