Loading include/ui/HdrCapabilities.h +14 −8 Original line number Diff line number Diff line Loading @@ -17,11 +17,15 @@ #ifndef ANDROID_UI_HDR_CAPABILTIES_H #define ANDROID_UI_HDR_CAPABILTIES_H #include <binder/Parcelable.h> #include <stdint.h> #include <vector> #include <utils/Flattenable.h> namespace android { class HdrCapabilities : public Parcelable class HdrCapabilities : public LightFlattenable<HdrCapabilities> { public: HdrCapabilities(const std::vector<int32_t /*android_hdr_t*/>& types, Loading @@ -32,8 +36,8 @@ public: mMinLuminance(minLuminance) {} // Make this move-constructable and move-assignable HdrCapabilities(HdrCapabilities&& other) = default; HdrCapabilities& operator=(HdrCapabilities&& other) = default; HdrCapabilities(HdrCapabilities&& other); HdrCapabilities& operator=(HdrCapabilities&& other); HdrCapabilities() : mSupportedHdrTypes(), Loading @@ -41,7 +45,7 @@ public: mMaxAverageLuminance(-1.0f), mMinLuminance(-1.0f) {} virtual ~HdrCapabilities() = default; ~HdrCapabilities(); const std::vector<int32_t /*android_hdr_t*/>& getSupportedHdrTypes() const { return mSupportedHdrTypes; Loading @@ -50,9 +54,11 @@ public: float getDesiredMaxAverageLuminance() const { return mMaxAverageLuminance; } float getDesiredMinLuminance() const { return mMinLuminance; } // Parcelable interface virtual status_t writeToParcel(Parcel* parcel) const override; virtual status_t readFromParcel(const Parcel* parcel) override; // Flattenable protocol bool isFixedSize() const { return false; } size_t getFlattenedSize() const; status_t flatten(void* buffer, size_t size) const; status_t unflatten(void const* buffer, size_t size); private: std::vector<int32_t /*android_hdr_t*/> mSupportedHdrTypes; Loading libs/gui/ISurfaceComposer.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -432,7 +432,7 @@ public: } result = reply.readInt32(); if (result == NO_ERROR) { result = reply.readParcelable(outCapabilities); result = reply.read(*outCapabilities); } return result; } Loading Loading @@ -753,7 +753,7 @@ status_t BnSurfaceComposer::onTransact( result = getHdrCapabilities(display, &capabilities); reply->writeInt32(result); if (result == NO_ERROR) { reply->writeParcelable(capabilities); reply->write(capabilities); } return NO_ERROR; } Loading libs/ui/Android.bp +0 −1 Original line number Diff line number Diff line Loading @@ -67,7 +67,6 @@ cc_library_shared { "android.hardware.graphics.allocator@2.0", "android.hardware.graphics.mapper@2.0", "libnativeloader", "libbinder", "libcutils", "libhardware", "libhidlbase", Loading libs/ui/HdrCapabilities.cpp +61 −29 Original line number Diff line number Diff line Loading @@ -16,44 +16,76 @@ #include <ui/HdrCapabilities.h> #include <binder/Parcel.h> namespace android { status_t HdrCapabilities::writeToParcel(Parcel* parcel) const { status_t result = parcel->writeInt32Vector(mSupportedHdrTypes); if (result != OK) { return result; #if defined(__clang__) #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wundefined-reinterpret-cast" #endif HdrCapabilities::~HdrCapabilities() = default; HdrCapabilities::HdrCapabilities(HdrCapabilities&& other) = default; HdrCapabilities& HdrCapabilities::operator=(HdrCapabilities&& other) = default; size_t HdrCapabilities::getFlattenedSize() const { return sizeof(mMaxLuminance) + sizeof(mMaxAverageLuminance) + sizeof(mMinLuminance) + sizeof(int32_t) + mSupportedHdrTypes.size() * sizeof(int32_t); } status_t HdrCapabilities::flatten(void* buffer, size_t size) const { if (size < getFlattenedSize()) { return NO_MEMORY; } result = parcel->writeFloat(mMaxLuminance); if (result != OK) { return result; int32_t* const buf = static_cast<int32_t*>(buffer); reinterpret_cast<float&>(buf[0]) = mMaxLuminance; reinterpret_cast<float&>(buf[1]) = mMaxAverageLuminance; reinterpret_cast<float&>(buf[2]) = mMinLuminance; buf[3] = static_cast<int32_t>(mSupportedHdrTypes.size()); for (size_t i = 0, c = mSupportedHdrTypes.size(); i < c; ++i) { buf[4 + i] = mSupportedHdrTypes[i]; } result = parcel->writeFloat(mMaxAverageLuminance); if (result != OK) { return result; return NO_ERROR; } result = parcel->writeFloat(mMinLuminance); return result; status_t HdrCapabilities::unflatten(void const* buffer, size_t size) { size_t minSize = sizeof(mMaxLuminance) + sizeof(mMaxAverageLuminance) + sizeof(mMinLuminance) + sizeof(int32_t); if (size < minSize) { return NO_MEMORY; } status_t HdrCapabilities::readFromParcel(const Parcel* parcel) { status_t result = parcel->readInt32Vector(&mSupportedHdrTypes); if (result != OK) { return result; int32_t const * const buf = static_cast<int32_t const *>(buffer); const size_t itemCount = size_t(buf[3]); // check the buffer is large enough if (size < minSize + itemCount * sizeof(int32_t)) { return BAD_VALUE; } result = parcel->readFloat(&mMaxLuminance); if (result != OK) { return result; mMaxLuminance = reinterpret_cast<float const&>(buf[0]); mMaxAverageLuminance = reinterpret_cast<float const&>(buf[1]); mMinLuminance = reinterpret_cast<float const&>(buf[2]); if (itemCount) { mSupportedHdrTypes.reserve(itemCount); for (size_t i = 0; i < itemCount; ++i) { mSupportedHdrTypes[i] = buf[4 + i]; } result = parcel->readFloat(&mMaxAverageLuminance); if (result != OK) { return result; } result = parcel->readFloat(&mMinLuminance); return result; return NO_ERROR; } #if defined(__clang__) #pragma clang diagnostic pop #endif } // namespace android Loading
include/ui/HdrCapabilities.h +14 −8 Original line number Diff line number Diff line Loading @@ -17,11 +17,15 @@ #ifndef ANDROID_UI_HDR_CAPABILTIES_H #define ANDROID_UI_HDR_CAPABILTIES_H #include <binder/Parcelable.h> #include <stdint.h> #include <vector> #include <utils/Flattenable.h> namespace android { class HdrCapabilities : public Parcelable class HdrCapabilities : public LightFlattenable<HdrCapabilities> { public: HdrCapabilities(const std::vector<int32_t /*android_hdr_t*/>& types, Loading @@ -32,8 +36,8 @@ public: mMinLuminance(minLuminance) {} // Make this move-constructable and move-assignable HdrCapabilities(HdrCapabilities&& other) = default; HdrCapabilities& operator=(HdrCapabilities&& other) = default; HdrCapabilities(HdrCapabilities&& other); HdrCapabilities& operator=(HdrCapabilities&& other); HdrCapabilities() : mSupportedHdrTypes(), Loading @@ -41,7 +45,7 @@ public: mMaxAverageLuminance(-1.0f), mMinLuminance(-1.0f) {} virtual ~HdrCapabilities() = default; ~HdrCapabilities(); const std::vector<int32_t /*android_hdr_t*/>& getSupportedHdrTypes() const { return mSupportedHdrTypes; Loading @@ -50,9 +54,11 @@ public: float getDesiredMaxAverageLuminance() const { return mMaxAverageLuminance; } float getDesiredMinLuminance() const { return mMinLuminance; } // Parcelable interface virtual status_t writeToParcel(Parcel* parcel) const override; virtual status_t readFromParcel(const Parcel* parcel) override; // Flattenable protocol bool isFixedSize() const { return false; } size_t getFlattenedSize() const; status_t flatten(void* buffer, size_t size) const; status_t unflatten(void const* buffer, size_t size); private: std::vector<int32_t /*android_hdr_t*/> mSupportedHdrTypes; Loading
libs/gui/ISurfaceComposer.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -432,7 +432,7 @@ public: } result = reply.readInt32(); if (result == NO_ERROR) { result = reply.readParcelable(outCapabilities); result = reply.read(*outCapabilities); } return result; } Loading Loading @@ -753,7 +753,7 @@ status_t BnSurfaceComposer::onTransact( result = getHdrCapabilities(display, &capabilities); reply->writeInt32(result); if (result == NO_ERROR) { reply->writeParcelable(capabilities); reply->write(capabilities); } return NO_ERROR; } Loading
libs/ui/Android.bp +0 −1 Original line number Diff line number Diff line Loading @@ -67,7 +67,6 @@ cc_library_shared { "android.hardware.graphics.allocator@2.0", "android.hardware.graphics.mapper@2.0", "libnativeloader", "libbinder", "libcutils", "libhardware", "libhidlbase", Loading
libs/ui/HdrCapabilities.cpp +61 −29 Original line number Diff line number Diff line Loading @@ -16,44 +16,76 @@ #include <ui/HdrCapabilities.h> #include <binder/Parcel.h> namespace android { status_t HdrCapabilities::writeToParcel(Parcel* parcel) const { status_t result = parcel->writeInt32Vector(mSupportedHdrTypes); if (result != OK) { return result; #if defined(__clang__) #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wundefined-reinterpret-cast" #endif HdrCapabilities::~HdrCapabilities() = default; HdrCapabilities::HdrCapabilities(HdrCapabilities&& other) = default; HdrCapabilities& HdrCapabilities::operator=(HdrCapabilities&& other) = default; size_t HdrCapabilities::getFlattenedSize() const { return sizeof(mMaxLuminance) + sizeof(mMaxAverageLuminance) + sizeof(mMinLuminance) + sizeof(int32_t) + mSupportedHdrTypes.size() * sizeof(int32_t); } status_t HdrCapabilities::flatten(void* buffer, size_t size) const { if (size < getFlattenedSize()) { return NO_MEMORY; } result = parcel->writeFloat(mMaxLuminance); if (result != OK) { return result; int32_t* const buf = static_cast<int32_t*>(buffer); reinterpret_cast<float&>(buf[0]) = mMaxLuminance; reinterpret_cast<float&>(buf[1]) = mMaxAverageLuminance; reinterpret_cast<float&>(buf[2]) = mMinLuminance; buf[3] = static_cast<int32_t>(mSupportedHdrTypes.size()); for (size_t i = 0, c = mSupportedHdrTypes.size(); i < c; ++i) { buf[4 + i] = mSupportedHdrTypes[i]; } result = parcel->writeFloat(mMaxAverageLuminance); if (result != OK) { return result; return NO_ERROR; } result = parcel->writeFloat(mMinLuminance); return result; status_t HdrCapabilities::unflatten(void const* buffer, size_t size) { size_t minSize = sizeof(mMaxLuminance) + sizeof(mMaxAverageLuminance) + sizeof(mMinLuminance) + sizeof(int32_t); if (size < minSize) { return NO_MEMORY; } status_t HdrCapabilities::readFromParcel(const Parcel* parcel) { status_t result = parcel->readInt32Vector(&mSupportedHdrTypes); if (result != OK) { return result; int32_t const * const buf = static_cast<int32_t const *>(buffer); const size_t itemCount = size_t(buf[3]); // check the buffer is large enough if (size < minSize + itemCount * sizeof(int32_t)) { return BAD_VALUE; } result = parcel->readFloat(&mMaxLuminance); if (result != OK) { return result; mMaxLuminance = reinterpret_cast<float const&>(buf[0]); mMaxAverageLuminance = reinterpret_cast<float const&>(buf[1]); mMinLuminance = reinterpret_cast<float const&>(buf[2]); if (itemCount) { mSupportedHdrTypes.reserve(itemCount); for (size_t i = 0; i < itemCount; ++i) { mSupportedHdrTypes[i] = buf[4 + i]; } result = parcel->readFloat(&mMaxAverageLuminance); if (result != OK) { return result; } result = parcel->readFloat(&mMinLuminance); return result; return NO_ERROR; } #if defined(__clang__) #pragma clang diagnostic pop #endif } // namespace android