diff options
author | Jason Macnak <natsu@google.com> | 2020-04-17 11:40:29 -0700 |
---|---|---|
committer | Jason Macnak <natsu@google.com> | 2020-05-13 08:31:12 -0700 |
commit | 747f0c869290c54abcd1b27575e49b755d8a9252 (patch) | |
tree | d4f8b1a172263f1b767e61441462265235ae5be5 /devices | |
parent | e2a94baf658a9b3e334c824c9d6c5bfa2923bd22 (diff) | |
download | camera-747f0c869290c54abcd1b27575e49b755d8a9252.tar.gz |
Import gralloc buffers before use in EmulatedCamera
From mapper documentation:
"
A raw buffer handle must not be used to access the
underlying graphics buffer. It must be imported to
create an imported handle first.
"
Without this change, attempts to lock the stream
buffers fail when using Minigbm on Gralloc4 as the
buffers were never imported and Minigbm doesn't have
some state initialized for each buffer.
This worked previously because existing Cuttlefish
gralloc didn't check or enforce this requirement.
Bug: b/146515640
Test: cts -m CtsCameraTestCases
Change-Id: I0f71e02833399af0719c88755b13069272b60431
Diffstat (limited to 'devices')
-rw-r--r-- | devices/EmulatedCamera/hwl/Base.h | 1 | ||||
-rw-r--r-- | devices/EmulatedCamera/hwl/EmulatedRequestProcessor.cpp | 14 |
2 files changed, 12 insertions, 3 deletions
diff --git a/devices/EmulatedCamera/hwl/Base.h b/devices/EmulatedCamera/hwl/Base.h index 4841cc1..f0701de 100644 --- a/devices/EmulatedCamera/hwl/Base.h +++ b/devices/EmulatedCamera/hwl/Base.h @@ -96,6 +96,7 @@ struct std::default_delete<android::SensorBuffer> { if (buffer != nullptr) { if (buffer->stream_buffer.buffer != nullptr) { buffer->importer.unlock(buffer->stream_buffer.buffer); + buffer->importer.freeBuffer(buffer->stream_buffer.buffer); } if (buffer->acquire_fence_fd >= 0) { diff --git a/devices/EmulatedCamera/hwl/EmulatedRequestProcessor.cpp b/devices/EmulatedCamera/hwl/EmulatedRequestProcessor.cpp index 7acae76..f40ca10 100644 --- a/devices/EmulatedCamera/hwl/EmulatedRequestProcessor.cpp +++ b/devices/EmulatedCamera/hwl/EmulatedRequestProcessor.cpp @@ -279,13 +279,21 @@ std::unique_ptr<SensorBuffer> EmulatedRequestProcessor::CreateSensorBuffer( // In case buffer processing is successful, flip this flag accordingly buffer->stream_buffer.status = BufferStatus::kError; - auto ret = LockSensorBuffer(stream, buffer->importer, stream_buffer.buffer, - buffer.get()); - if (ret != OK) { + if (!buffer->importer.importBuffer(buffer->stream_buffer.buffer)) { + ALOGE("%s: Failed importing stream buffer!", __FUNCTION__); buffer.release(); buffer = nullptr; } + if (buffer.get() != nullptr) { + auto ret = LockSensorBuffer(stream, buffer->importer, + buffer->stream_buffer.buffer, buffer.get()); + if (ret != OK) { + buffer.release(); + buffer = nullptr; + } + } + if ((buffer.get() != nullptr) && (stream_buffer.acquire_fence != nullptr)) { auto fence_status = buffer->importer.importFence( stream_buffer.acquire_fence, buffer->acquire_fence_fd); |