cameraserver: Fix stream specific HAL buffer manager for HIDL devices
Move use_hal_buf_manager assignment out of AIDL specific code so that
HIDL doesn't get incorrectly reset.
Bug: 324053126
Test: Vendor Testing
Test: CTS on AIDL camera HAL devices
Test: CTS on cuttlefish with session specific HAL buffer manager
Change-Id: I285beabe50dd679e78c49e7ea6e4a7541b18cace
Signed-off-by: Jayant Chowdhary <jchowdhary@google.com>
diff --git a/services/camera/libcameraservice/device3/Camera3Device.cpp b/services/camera/libcameraservice/device3/Camera3Device.cpp
index c0a0544..ab968e3 100644
--- a/services/camera/libcameraservice/device3/Camera3Device.cpp
+++ b/services/camera/libcameraservice/device3/Camera3Device.cpp
@@ -2531,10 +2531,13 @@
config.streams = streams.editArray();
config.hal_buffer_managed_streams = mHalBufManagedStreamIds;
+ config.use_hal_buf_manager = mUseHalBufManager;
// Do the HAL configuration; will potentially touch stream
- // max_buffers, usage, and priv fields, as well as data_space and format
- // fields for IMPLEMENTATION_DEFINED formats.
+ // max_buffers, usage, priv fields, data_space and format
+ // fields for IMPLEMENTATION_DEFINED formats as well as hal buffer managed
+ // streams and use_hal_buf_manager (in case aconfig flag session_hal_buf_manager
+ // is not enabled but the HAL supports session specific hal buffer manager).
int64_t logId = mCameraServiceProxyWrapper->getCurrentLogIdForCamera(mId);
const camera_metadata_t *sessionBuffer = sessionParams.getAndLock();
@@ -2554,6 +2557,8 @@
strerror(-res), res);
return res;
}
+ // It is possible that use hal buffer manager behavior was changed by the
+ // configureStreams call.
mUseHalBufManager = config.use_hal_buf_manager;
if (flags::session_hal_buf_manager()) {
bool prevSessionHalBufManager = (mHalBufManagedStreamIds.size() != 0);
diff --git a/services/camera/libcameraservice/device3/aidl/AidlCamera3Device.cpp b/services/camera/libcameraservice/device3/aidl/AidlCamera3Device.cpp
index 13c500f..e8ef692 100644
--- a/services/camera/libcameraservice/device3/aidl/AidlCamera3Device.cpp
+++ b/services/camera/libcameraservice/device3/aidl/AidlCamera3Device.cpp
@@ -913,7 +913,6 @@
std::set<int> activeStreams;
camera::device::StreamConfiguration requestedConfiguration;
requestedConfiguration.streams.resize(config->num_streams);
- config->use_hal_buf_manager = mUseHalBufManager;
for (size_t i = 0; i < config->num_streams; i++) {
camera::device::Stream &dst = requestedConfiguration.streams[i];
camera3::camera_stream_t *src = config->streams[i];