Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5c0a87e5 authored by Mathias Agopian's avatar Mathias Agopian Committed by Android (Google) Code Review
Browse files

Merge "Break dependency of libui on libbinder"

parents 21f9b57d e1f5e6fd
Loading
Loading
Loading
Loading
+14 −8
Original line number Diff line number Diff line
@@ -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,
@@ -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(),
@@ -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;
@@ -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;
+2 −2
Original line number Diff line number Diff line
@@ -432,7 +432,7 @@ public:
        }
        result = reply.readInt32();
        if (result == NO_ERROR) {
            result = reply.readParcelable(outCapabilities);
            result = reply.read(*outCapabilities);
        }
        return result;
    }
@@ -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;
        }
+0 −1
Original line number Diff line number Diff line
@@ -67,7 +67,6 @@ cc_library_shared {
        "android.hardware.graphics.allocator@2.0",
        "android.hardware.graphics.mapper@2.0",
        "libnativeloader",
        "libbinder",
        "libcutils",
        "libhardware",
        "libhidlbase",
+61 −29
Original line number Diff line number Diff line
@@ -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