diff options
author | 2022-12-14 20:24:14 +0000 | |
---|---|---|
committer | 2022-12-14 20:24:14 +0000 | |
commit | be80b60636daaf6a541fa8179947941aa37d78a3 (patch) | |
tree | ac9eca3f1223c208e9d9ad8873244a266e0bbea0 /libs/nativewindow/AHardwareBuffer.cpp | |
parent | 80170d5f74fc642b8abb74a6aa0ab62d14f29c2e (diff) | |
parent | 19055a2e2c06fef1b2f7854048fca70de1f4fe88 (diff) |
Merge changes from topic "c2aidl"
* changes:
Make ANativeWindow available over stable AIDL
Support AHB in AIDL
Diffstat (limited to 'libs/nativewindow/AHardwareBuffer.cpp')
-rw-r--r-- | libs/nativewindow/AHardwareBuffer.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/libs/nativewindow/AHardwareBuffer.cpp b/libs/nativewindow/AHardwareBuffer.cpp index 4a1784ea0b..435095a29d 100644 --- a/libs/nativewindow/AHardwareBuffer.cpp +++ b/libs/nativewindow/AHardwareBuffer.cpp @@ -16,6 +16,8 @@ #define LOG_TAG "AHardwareBuffer" +#include <android/hardware_buffer.h> +#include <android/hardware_buffer_aidl.h> #include <vndk/hardware_buffer.h> #include <errno.h> @@ -32,6 +34,9 @@ #include <android/hardware/graphics/common/1.1/types.h> #include <aidl/android/hardware/graphics/common/PixelFormat.h> +// TODO: Better way to handle this +#include "../binder/ndk/parcel_internal.h" + static constexpr int kFdBufferSize = 128 * sizeof(int); // 128 ints using namespace android; @@ -412,6 +417,25 @@ int AHardwareBuffer_getId(const AHardwareBuffer* buffer, uint64_t* outId) { return OK; } +binder_status_t AHardwareBuffer_readFromParcel(const AParcel* _Nonnull parcel, + AHardwareBuffer* _Nullable* _Nonnull outBuffer) { + if (!parcel || !outBuffer) return STATUS_BAD_VALUE; + auto buffer = sp<GraphicBuffer>::make(); + status_t status = parcel->get()->read(*buffer); + if (status != STATUS_OK) return status; + *outBuffer = AHardwareBuffer_from_GraphicBuffer(buffer.get()); + AHardwareBuffer_acquire(*outBuffer); + return STATUS_OK; +} + +binder_status_t AHardwareBuffer_writeToParcel(const AHardwareBuffer* _Nonnull buffer, + AParcel* _Nonnull parcel) { + const GraphicBuffer* gb = AHardwareBuffer_to_GraphicBuffer(buffer); + if (!gb) return STATUS_BAD_VALUE; + if (!parcel) return STATUS_BAD_VALUE; + return parcel->get()->write(*gb); +} + // ---------------------------------------------------------------------------- // VNDK functions // ---------------------------------------------------------------------------- |