summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-09-23 14:49:46 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-09-24 13:25:33 +0300
commit9b8f4c870fa831c4c4becd4226a2eccfc84f5110 (patch)
tree067251af757e8415ee791e2c04b09a6630ab14d2
parentd4e15331cb593c1a681a79940805c008af5bcb18 (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>
-rw-r--r--src/android/camera_device.cpp18
-rw-r--r--src/android/camera_device.h7
2 files changed, 14 insertions, 11 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;
diff --git a/src/android/camera_device.h b/src/android/camera_device.h
index 296c2f18..43eb5895 100644
--- a/src/android/camera_device.h
+++ b/src/android/camera_device.h
@@ -94,9 +94,10 @@ private:
void stop();
- libcamera::FrameBuffer *createFrameBuffer(const buffer_handle_t camera3buffer,
- libcamera::PixelFormat pixelFormat,
- const libcamera::Size &size);
+ std::unique_ptr<libcamera::FrameBuffer>
+ createFrameBuffer(const buffer_handle_t camera3buffer,
+ libcamera::PixelFormat pixelFormat,
+ const libcamera::Size &size);
void abortRequest(camera3_capture_request_t *request);
bool isValidRequest(camera3_capture_request_t *request) const;
void notifyShutter(uint32_t frameNumber, uint64_t timestamp);