mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-12 23:09:45 +03:00
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>
This commit is contained in:
parent
d4e15331cb
commit
9b8f4c870f
2 changed files with 14 additions and 11 deletions
|
@ -774,9 +774,9 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
FrameBuffer *CameraDevice::createFrameBuffer(const buffer_handle_t camera3buffer,
|
std::unique_ptr<FrameBuffer>
|
||||||
PixelFormat pixelFormat,
|
CameraDevice::createFrameBuffer(const buffer_handle_t camera3buffer,
|
||||||
const Size &size)
|
PixelFormat pixelFormat, const Size &size)
|
||||||
{
|
{
|
||||||
CameraBuffer buf(camera3buffer, pixelFormat, size, PROT_READ);
|
CameraBuffer buf(camera3buffer, pixelFormat, size, PROT_READ);
|
||||||
if (!buf.isValid()) {
|
if (!buf.isValid()) {
|
||||||
|
@ -797,7 +797,7 @@ FrameBuffer *CameraDevice::createFrameBuffer(const buffer_handle_t camera3buffer
|
||||||
planes[i].length = buf.size(i);
|
planes[i].length = buf.size(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new FrameBuffer(std::move(planes));
|
return std::make_unique<FrameBuffer>(planes);
|
||||||
}
|
}
|
||||||
|
|
||||||
int CameraDevice::processControls(Camera3RequestDescriptor *descriptor)
|
int CameraDevice::processControls(Camera3RequestDescriptor *descriptor)
|
||||||
|
@ -1002,10 +1002,12 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques
|
||||||
* associate it with the Camera3RequestDescriptor for
|
* associate it with the Camera3RequestDescriptor for
|
||||||
* lifetime management only.
|
* lifetime management only.
|
||||||
*/
|
*/
|
||||||
buffer = createFrameBuffer(*camera3Buffer.buffer,
|
descriptor.frameBuffers_.push_back(
|
||||||
cameraStream->configuration().pixelFormat,
|
createFrameBuffer(*camera3Buffer.buffer,
|
||||||
cameraStream->configuration().size);
|
cameraStream->configuration().pixelFormat,
|
||||||
descriptor.frameBuffers_.emplace_back(buffer);
|
cameraStream->configuration().size));
|
||||||
|
|
||||||
|
buffer = descriptor.frameBuffers_.back().get();
|
||||||
LOG(HAL, Debug) << ss.str() << " (direct)";
|
LOG(HAL, Debug) << ss.str() << " (direct)";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -94,9 +94,10 @@ private:
|
||||||
|
|
||||||
void stop();
|
void stop();
|
||||||
|
|
||||||
libcamera::FrameBuffer *createFrameBuffer(const buffer_handle_t camera3buffer,
|
std::unique_ptr<libcamera::FrameBuffer>
|
||||||
libcamera::PixelFormat pixelFormat,
|
createFrameBuffer(const buffer_handle_t camera3buffer,
|
||||||
const libcamera::Size &size);
|
libcamera::PixelFormat pixelFormat,
|
||||||
|
const libcamera::Size &size);
|
||||||
void abortRequest(camera3_capture_request_t *request);
|
void abortRequest(camera3_capture_request_t *request);
|
||||||
bool isValidRequest(camera3_capture_request_t *request) const;
|
bool isValidRequest(camera3_capture_request_t *request) const;
|
||||||
void notifyShutter(uint32_t frameNumber, uint64_t timestamp);
|
void notifyShutter(uint32_t frameNumber, uint64_t timestamp);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue