summaryrefslogtreecommitdiff
path: root/devices
diff options
context:
space:
mode:
authorJason Macnak <natsu@google.com>2020-04-17 11:40:29 -0700
committerJason Macnak <natsu@google.com>2020-05-13 08:31:12 -0700
commit747f0c869290c54abcd1b27575e49b755d8a9252 (patch)
treed4f8b1a172263f1b767e61441462265235ae5be5 /devices
parente2a94baf658a9b3e334c824c9d6c5bfa2923bd22 (diff)
downloadcamera-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.h1
-rw-r--r--devices/EmulatedCamera/hwl/EmulatedRequestProcessor.cpp14
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);