diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2021-09-23 14:49:46 +0300 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2021-09-24 13:25:33 +0300 |
commit | 9b8f4c870fa831c4c4becd4226a2eccfc84f5110 (patch) | |
tree | 067251af757e8415ee791e2c04b09a6630ab14d2 /src/android/camera_device.cpp | |
parent | d4e15331cb593c1a681a79940805c008af5bcb18 (diff) |
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 <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Hirokazu Honda <hiroh@chromium.org>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Diffstat (limited to 'src/android/camera_device.cpp')
-rw-r--r-- | src/android/camera_device.cpp | 18 |
1 files changed, 10 insertions, 8 deletions
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<FrameBuffer> +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<FrameBuffer>(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; |