From 2daf5189a8f9c28a804a550f3734c5617bac17aa Mon Sep 17 00:00:00 2001 From: Jiwen 'Steve' Cai Date: Tue, 16 Oct 2018 00:14:03 -0700 Subject: Create GraphicBuffer backed by BufferHubBuffer The newly created GraphicBuffer shall own the BufferHubBuffer object through out its life cycle. Bug: 70912269 Bug: 111976433 Test: GraphicBuffer_test Change-Id: I698573e26f85dd40d30c267aeea545e65a7e2a8b --- libs/ui/GraphicBuffer.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'libs/ui/GraphicBuffer.cpp') diff --git a/libs/ui/GraphicBuffer.cpp b/libs/ui/GraphicBuffer.cpp index 29deb010e8..e606e26f8b 100644 --- a/libs/ui/GraphicBuffer.cpp +++ b/libs/ui/GraphicBuffer.cpp @@ -22,6 +22,10 @@ #include +#ifndef LIBUI_IN_VNDK +#include +#endif // LIBUI_IN_VNDK + #include #include #include @@ -89,6 +93,21 @@ GraphicBuffer::GraphicBuffer(const native_handle_t* inHandle, HandleWrapMethod m inUsage, inStride); } +#ifndef LIBUI_IN_VNDK +GraphicBuffer::GraphicBuffer(std::unique_ptr buffer) : GraphicBuffer() { + if (buffer == nullptr) { + mInitCheck = BAD_VALUE; + return; + } + + mInitCheck = initWithHandle(buffer->DuplicateHandle(), /*method=*/TAKE_UNREGISTERED_HANDLE, + buffer->desc().width, buffer->desc().height, + static_cast(buffer->desc().format), + buffer->desc().layers, buffer->desc().usage, buffer->desc().stride); + mBufferHubBuffer = std::move(buffer); +} +#endif // LIBUI_IN_VNDK + GraphicBuffer::~GraphicBuffer() { if (handle) { @@ -483,6 +502,12 @@ status_t GraphicBuffer::unflatten( return NO_ERROR; } +#ifndef LIBUI_IN_VNDK +bool GraphicBuffer::isBufferHubBuffer() const { + return mBufferHubBuffer != nullptr; +} +#endif // LIBUI_IN_VNDK + // --------------------------------------------------------------------------- }; // namespace android -- cgit v1.2.3-59-g8ed1b