[libcamera-devel] [PATCH v2] android: CameraBuffer: Mark as invalid if cros::CameraBufferManager::Register() fails
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Sat Apr 3 02:05:33 CEST 2021
Hi Hiro,
Thank you for the patch.
I'd write the subject line as "android: mm: cros: Handle buffer
registration failure" to shorten it.
On Fri, Apr 02, 2021 at 01:03:40PM +0900, Hirokazu Honda wrote:
> cros::CameraBufferManager::Register() fails if a buffer handle
> is invalid. We should mark CameraBuffer as invalid on the failure
> of Register().
>
> Signed-off-by: Hirokazu Honda <hiroh at chromium.org>
> ---
> src/android/mm/cros_camera_buffer.cpp | 12 ++++++++----
> 1 file changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/src/android/mm/cros_camera_buffer.cpp b/src/android/mm/cros_camera_buffer.cpp
> index 7df4f47c..5f98ee44 100644
> --- a/src/android/mm/cros_camera_buffer.cpp
> +++ b/src/android/mm/cros_camera_buffer.cpp
> @@ -53,12 +53,16 @@ CameraBuffer::Private::Private(CameraBuffer *cameraBuffer,
> {
> bufferManager_ = cros::CameraBufferManager::GetInstance();
>
> - bufferManager_->Register(camera3Buffer);
> + int ret = bufferManager_->Register(camera3Buffer);
> + if (ret) {
> + LOG(HAL, Error) << "Failed registering a buffer: " << ret;
s/a buffer/buffer/
This looks good,
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
I'll apply the patch if you're OK with the proposed changes.
One additional question though. The CameraBuffer::Private destructors
calls
bufferManager_->Unlock(handle_);
bufferManager_->Deregister(handle_);
unconditionally. Is that safe to do if the buffer hasn't been registered
and locked properly ?
> + return;
> + }
>
> numPlanes_ = bufferManager_->GetNumPlanes(camera3Buffer);
> switch (numPlanes_) {
> case 1: {
> - int ret = bufferManager_->Lock(handle_, 0, 0, 0, 0, 0, &mem.addr);
> + ret = bufferManager_->Lock(handle_, 0, 0, 0, 0, 0, &mem.addr);
> if (ret) {
> LOG(HAL, Error) << "Single plane buffer mapping failed";
> return;
> @@ -67,8 +71,8 @@ CameraBuffer::Private::Private(CameraBuffer *cameraBuffer,
> }
> case 2:
> case 3: {
> - int ret = bufferManager_->LockYCbCr(handle_, 0, 0, 0, 0, 0,
> - &mem.ycbcr);
> + ret = bufferManager_->LockYCbCr(handle_, 0, 0, 0, 0, 0,
> + &mem.ycbcr);
> if (ret) {
> LOG(HAL, Error) << "YCbCr buffer mapping failed";
> return;
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list