Loading libs/gui/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -274,6 +274,7 @@ filegroup { "LayerMetadata.cpp", "LayerStatePermissions.cpp", "LayerState.cpp", "DisplayLuts.cpp", "OccupancyTracker.cpp", "StreamSplitter.cpp", "ScreenCaptureResults.cpp", Loading libs/gui/DisplayLuts.cpp 0 → 100644 +81 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "include/gui/DisplayLuts.h" #include <gui/DisplayLuts.h> #include <private/gui/ParcelUtils.h> namespace android::gui { status_t DisplayLuts::Entry::readFromParcel(const android::Parcel* parcel) { if (parcel == nullptr) { ALOGE("%s: Null parcel", __func__); return BAD_VALUE; } SAFE_PARCEL(parcel->readInt32, &dimension); SAFE_PARCEL(parcel->readInt32, &size); SAFE_PARCEL(parcel->readInt32, &samplingKey); return OK; } status_t DisplayLuts::Entry::writeToParcel(android::Parcel* parcel) const { if (parcel == nullptr) { ALOGE("%s: Null parcel", __func__); return BAD_VALUE; } SAFE_PARCEL(parcel->writeInt32, dimension); SAFE_PARCEL(parcel->writeInt32, size); SAFE_PARCEL(parcel->writeInt32, samplingKey); return OK; } status_t DisplayLuts::readFromParcel(const android::Parcel* parcel) { if (parcel == nullptr) { ALOGE("%s: Null parcel", __func__); return BAD_VALUE; } SAFE_PARCEL(parcel->readUniqueFileDescriptor, &fd); SAFE_PARCEL(parcel->readInt32Vector, &offsets); int32_t numLutProperties; SAFE_PARCEL(parcel->readInt32, &numLutProperties); lutProperties.reserve(numLutProperties); for (int32_t i = 0; i < numLutProperties; i++) { lutProperties.push_back({}); SAFE_PARCEL(lutProperties.back().readFromParcel, parcel); } return OK; } status_t DisplayLuts::writeToParcel(android::Parcel* parcel) const { if (parcel == nullptr) { ALOGE("%s: Null parcel", __func__); return BAD_VALUE; } SAFE_PARCEL(parcel->writeUniqueFileDescriptor, fd); SAFE_PARCEL(parcel->writeInt32Vector, offsets); SAFE_PARCEL(parcel->writeInt32, static_cast<int32_t>(lutProperties.size())); for (auto& entry : lutProperties) { SAFE_PARCEL(entry.writeToParcel, parcel); } return OK; } } // namespace android::gui No newline at end of file libs/gui/LayerState.cpp +15 −0 Original line number Diff line number Diff line Loading @@ -203,6 +203,12 @@ status_t layer_state_t::write(Parcel& output) const SAFE_PARCEL(output.writeParcelable, *bufferReleaseChannel); } const bool hasLuts = (luts != nullptr); SAFE_PARCEL(output.writeBool, hasLuts); if (hasLuts) { SAFE_PARCEL(output.writeParcelable, *luts); } return NO_ERROR; } Loading Loading @@ -358,6 +364,15 @@ status_t layer_state_t::read(const Parcel& input) SAFE_PARCEL(input.readParcelable, bufferReleaseChannel.get()); } bool hasLuts; SAFE_PARCEL(input.readBool, &hasLuts); if (hasLuts) { luts = std::make_shared<gui::DisplayLuts>(); SAFE_PARCEL(input.readParcelable, luts.get()); } else { luts = nullptr; } return NO_ERROR; } Loading libs/gui/SurfaceComposerClient.cpp +6 −2 Original line number Diff line number Diff line Loading @@ -1971,9 +1971,13 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setLuts( return *this; } s->what |= layer_state_t::eLutsChanged; if (lutFd.ok()) { s->luts = std::make_shared<gui::DisplayLuts>(base::unique_fd(dup(lutFd.get())), offsets, dimensions, sizes, samplingKeys); s->what |= layer_state_t::eLutsChanged; } else { s->luts = nullptr; } registerSurfaceControlForCallback(sc); return *this; Loading libs/gui/include/gui/DisplayLuts.h +14 −3 Original line number Diff line number Diff line Loading @@ -16,16 +16,24 @@ #pragma once #include <android-base/unique_fd.h> #include <binder/Parcel.h> #include <binder/Parcelable.h> #include <vector> namespace android::gui { struct DisplayLuts { struct DisplayLuts : public Parcelable { public: struct Entry { struct Entry : public Parcelable { Entry() {}; Entry(int32_t lutDimension, int32_t lutSize, int32_t lutSamplingKey) : dimension(lutDimension), size(lutSize), samplingKey(lutSamplingKey) {} int32_t dimension; int32_t size; int32_t samplingKey; status_t writeToParcel(android::Parcel* parcel) const override; status_t readFromParcel(const android::Parcel* parcel) override; }; DisplayLuts() {} Loading @@ -42,7 +50,10 @@ public: } } base::unique_fd& getLutFileDescriptor() { return fd; } status_t writeToParcel(android::Parcel* parcel) const override; status_t readFromParcel(const android::Parcel* parcel) override; const base::unique_fd& getLutFileDescriptor() const { return fd; } std::vector<Entry> lutProperties; std::vector<int32_t> offsets; Loading Loading
libs/gui/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -274,6 +274,7 @@ filegroup { "LayerMetadata.cpp", "LayerStatePermissions.cpp", "LayerState.cpp", "DisplayLuts.cpp", "OccupancyTracker.cpp", "StreamSplitter.cpp", "ScreenCaptureResults.cpp", Loading
libs/gui/DisplayLuts.cpp 0 → 100644 +81 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "include/gui/DisplayLuts.h" #include <gui/DisplayLuts.h> #include <private/gui/ParcelUtils.h> namespace android::gui { status_t DisplayLuts::Entry::readFromParcel(const android::Parcel* parcel) { if (parcel == nullptr) { ALOGE("%s: Null parcel", __func__); return BAD_VALUE; } SAFE_PARCEL(parcel->readInt32, &dimension); SAFE_PARCEL(parcel->readInt32, &size); SAFE_PARCEL(parcel->readInt32, &samplingKey); return OK; } status_t DisplayLuts::Entry::writeToParcel(android::Parcel* parcel) const { if (parcel == nullptr) { ALOGE("%s: Null parcel", __func__); return BAD_VALUE; } SAFE_PARCEL(parcel->writeInt32, dimension); SAFE_PARCEL(parcel->writeInt32, size); SAFE_PARCEL(parcel->writeInt32, samplingKey); return OK; } status_t DisplayLuts::readFromParcel(const android::Parcel* parcel) { if (parcel == nullptr) { ALOGE("%s: Null parcel", __func__); return BAD_VALUE; } SAFE_PARCEL(parcel->readUniqueFileDescriptor, &fd); SAFE_PARCEL(parcel->readInt32Vector, &offsets); int32_t numLutProperties; SAFE_PARCEL(parcel->readInt32, &numLutProperties); lutProperties.reserve(numLutProperties); for (int32_t i = 0; i < numLutProperties; i++) { lutProperties.push_back({}); SAFE_PARCEL(lutProperties.back().readFromParcel, parcel); } return OK; } status_t DisplayLuts::writeToParcel(android::Parcel* parcel) const { if (parcel == nullptr) { ALOGE("%s: Null parcel", __func__); return BAD_VALUE; } SAFE_PARCEL(parcel->writeUniqueFileDescriptor, fd); SAFE_PARCEL(parcel->writeInt32Vector, offsets); SAFE_PARCEL(parcel->writeInt32, static_cast<int32_t>(lutProperties.size())); for (auto& entry : lutProperties) { SAFE_PARCEL(entry.writeToParcel, parcel); } return OK; } } // namespace android::gui No newline at end of file
libs/gui/LayerState.cpp +15 −0 Original line number Diff line number Diff line Loading @@ -203,6 +203,12 @@ status_t layer_state_t::write(Parcel& output) const SAFE_PARCEL(output.writeParcelable, *bufferReleaseChannel); } const bool hasLuts = (luts != nullptr); SAFE_PARCEL(output.writeBool, hasLuts); if (hasLuts) { SAFE_PARCEL(output.writeParcelable, *luts); } return NO_ERROR; } Loading Loading @@ -358,6 +364,15 @@ status_t layer_state_t::read(const Parcel& input) SAFE_PARCEL(input.readParcelable, bufferReleaseChannel.get()); } bool hasLuts; SAFE_PARCEL(input.readBool, &hasLuts); if (hasLuts) { luts = std::make_shared<gui::DisplayLuts>(); SAFE_PARCEL(input.readParcelable, luts.get()); } else { luts = nullptr; } return NO_ERROR; } Loading
libs/gui/SurfaceComposerClient.cpp +6 −2 Original line number Diff line number Diff line Loading @@ -1971,9 +1971,13 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setLuts( return *this; } s->what |= layer_state_t::eLutsChanged; if (lutFd.ok()) { s->luts = std::make_shared<gui::DisplayLuts>(base::unique_fd(dup(lutFd.get())), offsets, dimensions, sizes, samplingKeys); s->what |= layer_state_t::eLutsChanged; } else { s->luts = nullptr; } registerSurfaceControlForCallback(sc); return *this; Loading
libs/gui/include/gui/DisplayLuts.h +14 −3 Original line number Diff line number Diff line Loading @@ -16,16 +16,24 @@ #pragma once #include <android-base/unique_fd.h> #include <binder/Parcel.h> #include <binder/Parcelable.h> #include <vector> namespace android::gui { struct DisplayLuts { struct DisplayLuts : public Parcelable { public: struct Entry { struct Entry : public Parcelable { Entry() {}; Entry(int32_t lutDimension, int32_t lutSize, int32_t lutSamplingKey) : dimension(lutDimension), size(lutSize), samplingKey(lutSamplingKey) {} int32_t dimension; int32_t size; int32_t samplingKey; status_t writeToParcel(android::Parcel* parcel) const override; status_t readFromParcel(const android::Parcel* parcel) override; }; DisplayLuts() {} Loading @@ -42,7 +50,10 @@ public: } } base::unique_fd& getLutFileDescriptor() { return fd; } status_t writeToParcel(android::Parcel* parcel) const override; status_t readFromParcel(const android::Parcel* parcel) override; const base::unique_fd& getLutFileDescriptor() const { return fd; } std::vector<Entry> lutProperties; std::vector<int32_t> offsets; Loading