diff options
author | Craig Donner <cdonner@google.com> | 2017-02-02 12:14:30 -0800 |
---|---|---|
committer | Craig Donner <cdonner@google.com> | 2017-02-03 14:24:10 -0800 |
commit | 900510642a97bc1799bf82c6e1a938d17f345c81 (patch) | |
tree | 02f22c7e8ab51c18c7e62327a311c2f245496592 /native/android/hardware_buffer.cpp | |
parent | a59b4912b441db96f392934b56eb8a1721661985 (diff) |
Use gralloc1 flags to allocate AHardwareBuffers
Bug: 34939453
Test: cts-tradefed run cts -m CtsNativeHardwareTestCases
Change-Id: I48add1b78c4e1409c0e787d6197f0582f0c3fb4c
Diffstat (limited to 'native/android/hardware_buffer.cpp')
-rw-r--r-- | native/android/hardware_buffer.cpp | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/native/android/hardware_buffer.cpp b/native/android/hardware_buffer.cpp index 2f75c10d6764..e5e928dee2a7 100644 --- a/native/android/hardware_buffer.cpp +++ b/native/android/hardware_buffer.cpp @@ -26,10 +26,11 @@ #include <android_runtime/android_hardware_HardwareBuffer.h> #include <binder/Binder.h> #include <binder/Parcel.h> -#include <cutils/native_handle.h> #include <binder/IServiceManager.h> +#include <cutils/native_handle.h> #include <gui/ISurfaceComposer.h> #include <gui/IGraphicBufferAlloc.h> +#include <hardware/gralloc1.h> #include <ui/GraphicBuffer.h> #include <utils/Flattenable.h> #include <utils/Log.h> @@ -96,10 +97,14 @@ int AHardwareBuffer_allocate(const AHardwareBuffer_Desc* desc, } status_t err; - uint32_t usage = android_hardware_HardwareBuffer_convertToGrallocUsageBits( - desc->usage0, desc->usage1); + uint64_t producerUsage = 0; + uint64_t consumerUsage = 0; + android_hardware_HardwareBuffer_convertToGrallocUsageBits(desc->usage0, + desc->usage1, &producerUsage, &consumerUsage); sp<GraphicBuffer> gbuffer = allocator->createGraphicBuffer(desc->width, - desc->height, format, desc->layers, usage, &err); + desc->height, format, desc->layers, producerUsage, consumerUsage, + std::string("AHardwareBuffer pid [") + std::to_string(getpid()) + + "]", &err); if (err != NO_ERROR) { return err; } @@ -131,7 +136,7 @@ void AHardwareBuffer_describe(const AHardwareBuffer* buffer, outDesc->layers = gbuffer->getLayerCount(); outDesc->usage0 = android_hardware_HardwareBuffer_convertFromGrallocUsageBits( - gbuffer->getUsage()); + gbuffer->getUsage(), gbuffer->getUsage()); outDesc->usage1 = 0; outDesc->format = android_hardware_HardwareBuffer_convertFromPixelFormat( static_cast<uint32_t>(gbuffer->getPixelFormat())); @@ -148,15 +153,19 @@ int AHardwareBuffer_lock(AHardwareBuffer* buffer, uint64_t usage0, return BAD_VALUE; } - uint32_t usage = android_hardware_HardwareBuffer_convertToGrallocUsageBits( - usage0, 0); + uint64_t producerUsage = 0; + uint64_t consumerUsage = 0; + android_hardware_HardwareBuffer_convertToGrallocUsageBits(usage0, 0, + &producerUsage, &consumerUsage); GraphicBuffer* gBuffer = AHardwareBuffer_to_GraphicBuffer(buffer); + Rect bounds; if (!rect) { - return gBuffer->lockAsync(usage, outVirtualAddress, fence); + bounds.set(Rect(gBuffer->getWidth(), gBuffer->getHeight())); } else { - Rect bounds(rect->left, rect->top, rect->right, rect->bottom); - return gBuffer->lockAsync(usage, bounds, outVirtualAddress, fence); + bounds.set(Rect(rect->left, rect->top, rect->right, rect->bottom)); } + return gBuffer->lockAsync(producerUsage, consumerUsage, bounds, + outVirtualAddress, fence); } int AHardwareBuffer_unlock(AHardwareBuffer* buffer, int32_t* fence) { |