From 9b8f4c870fa831c4c4becd4226a2eccfc84f5110 Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Thu, 23 Sep 2021 14:49:46 +0300 Subject: android: camera_device: Return unique_ptr from createFrameBuffer Returning a non-managed pointer can cause leaks. Use a unique_ptr<> instead to avoid possible future issues. The std::move() for the planes argument to the FrameBuffer constructor is dropped as it's misleading. FrameBuffer has no constructor that takes an rvalue reference to planes, so the vector was copied despite the move. This only clarifies the intent, no functional change is introduced. Signed-off-by: Laurent Pinchart Reviewed-by: Jacopo Mondi Reviewed-by: Hirokazu Honda Reviewed-by: Umang Jain Reviewed-by: Paul Elder --- src/android/camera_device.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'src/android/camera_device.cpp') diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index a693dcbe..21844e51 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -774,9 +774,9 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list) return 0; } -FrameBuffer *CameraDevice::createFrameBuffer(const buffer_handle_t camera3buffer, - PixelFormat pixelFormat, - const Size &size) +std::unique_ptr +CameraDevice::createFrameBuffer(const buffer_handle_t camera3buffer, + PixelFormat pixelFormat, const Size &size) { CameraBuffer buf(camera3buffer, pixelFormat, size, PROT_READ); if (!buf.isValid()) { @@ -797,7 +797,7 @@ FrameBuffer *CameraDevice::createFrameBuffer(const buffer_handle_t camera3buffer planes[i].length = buf.size(i); } - return new FrameBuffer(std::move(planes)); + return std::make_unique(planes); } int CameraDevice::processControls(Camera3RequestDescriptor *descriptor) @@ -1002,10 +1002,12 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques * associate it with the Camera3RequestDescriptor for * lifetime management only. */ - buffer = createFrameBuffer(*camera3Buffer.buffer, - cameraStream->configuration().pixelFormat, - cameraStream->configuration().size); - descriptor.frameBuffers_.emplace_back(buffer); + descriptor.frameBuffers_.push_back( + createFrameBuffer(*camera3Buffer.buffer, + cameraStream->configuration().pixelFormat, + cameraStream->configuration().size)); + + buffer = descriptor.frameBuffers_.back().get(); LOG(HAL, Debug) << ss.str() << " (direct)"; break; -- cgit v1.2.1