From patchwork Fri Aug 27 06:59:05 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hirokazu Honda X-Patchwork-Id: 13533 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 138CABD87D for ; Fri, 27 Aug 2021 06:59:19 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id B97F068928; Fri, 27 Aug 2021 08:59:18 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=chromium.org header.i=@chromium.org header.b="nTvWcd6k"; dkim-atps=neutral Received: from mail-pl1-x634.google.com (mail-pl1-x634.google.com [IPv6:2607:f8b0:4864:20::634]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 62FD96893B for ; Fri, 27 Aug 2021 08:59:17 +0200 (CEST) Received: by mail-pl1-x634.google.com with SMTP id m17so3360153plc.6 for ; Thu, 26 Aug 2021 23:59:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=DLwpr4LyMm5yT5+SM/lmsgbwlqucqV7ToOM4oI9bFDo=; b=nTvWcd6kaUPtYPXWDZvzHIY/Nyen0dm2IpelYuf2fHUzq1kEg/utd/jVGn0pG+omih KsdsFxUQWz3TTvfKcX8G5ry5crcW72UebxHxeF0nAuFsy89NTDiDFGF3ypPiviHvjK7L baQdPxhaROMb4zcqXYJT6l0lQQLP+Vn8gko7E= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=DLwpr4LyMm5yT5+SM/lmsgbwlqucqV7ToOM4oI9bFDo=; b=i4quke9+kYbkXHlQahvOHNtXDCj9ad3X6kn/r2KmbYBrPBnOw/N+M1PdruvWvOMxHS y+BxMO95i0E8etNv9e3L/cs0rm98NtjtYzdhkCJbX+o2mY8WNO13OYzirD5EWsZ2J+vS PSntKC2ptL4UaLoSijkJZpWmYl+6LbqNoR58NMY4i/0XI29VpQlNSVPisxNyW32OHxlB Wx0LNqTmpoUra97UX5hVB/jqcB/7Zr9P6nIjG16mLj20F/x8nqhUuX/vOK8OOMbXL8gV N5PS1cUihvRhgrBpaTli+9mov16sN81wS3mhXuB36V2LCkLBu2w3cO+yNiEU3y776k3C UesA== X-Gm-Message-State: AOAM533VWn8GKLpqlmD1xQRd9J0El1pkw65AE0IWK9MVVNGkeD2EU+zi GHzb4L81248VgPScKGIrt23pAaJTWhrB9Q== X-Google-Smtp-Source: ABdhPJyXjOTq9eIm128GCmmioRbN26TlWjCHXhKbtzDSyPTWVAdICNQLecBCW9XksDbBmG41B7/9iw== X-Received: by 2002:a17:90a:7884:: with SMTP id x4mr22077967pjk.53.1630047555636; Thu, 26 Aug 2021 23:59:15 -0700 (PDT) Received: from hiroh2.tok.corp.google.com ([2401:fa00:8f:203:e14c:e27b:81d2:aa99]) by smtp.gmail.com with ESMTPSA id l19sm4949627pjq.10.2021.08.26.23.59.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Aug 2021 23:59:15 -0700 (PDT) From: Hirokazu Honda To: libcamera-devel@lists.libcamera.org Date: Fri, 27 Aug 2021 15:59:05 +0900 Message-Id: <20210827065905.880867-3-hiroh@chromium.org> X-Mailer: git-send-email 2.33.0.259.gc128427fd7-goog In-Reply-To: <20210827065905.880867-1-hiroh@chromium.org> References: <20210827065905.880867-1-hiroh@chromium.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v4 3/3] android: camera_buffer: Add stride/offset/size function X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" This adds getter functions of stride, offset and size to CameraBuffer interface. Signed-off-by: Hirokazu Honda Reviewed-by: Laurent Pinchart Reviewed-by: Jacopo Mondi --- src/android/camera_buffer.h | 16 +++++++++++++ src/android/mm/cros_camera_buffer.cpp | 19 +++++++++++++++ src/android/mm/generic_camera_buffer.cpp | 30 ++++++++++++++++++++++++ 3 files changed, 65 insertions(+) diff --git a/src/android/camera_buffer.h b/src/android/camera_buffer.h index 87df2570..226a8f5c 100644 --- a/src/android/camera_buffer.h +++ b/src/android/camera_buffer.h @@ -31,6 +31,10 @@ public: libcamera::Span plane(unsigned int plane) const; libcamera::Span plane(unsigned int plane); + unsigned int stride(unsigned int plane) const; + unsigned int offset(unsigned int plane) const; + unsigned int size(unsigned int plane) const; + size_t jpegBufferSize(size_t maxJpegBufferSize) const; }; @@ -62,6 +66,18 @@ Span CameraBuffer::plane(unsigned int plane) \ { \ return _d()->plane(plane); \ } \ +unsigned int CameraBuffer::stride(unsigned int plane) const \ +{ \ + return _d()->stride(plane); \ +} \ +unsigned int CameraBuffer::offset(unsigned int plane) const \ +{ \ + return _d()->offset(plane); \ +} \ +unsigned int CameraBuffer::size(unsigned int plane) const \ +{ \ + return _d()->size(plane); \ +} \ size_t CameraBuffer::jpegBufferSize(size_t maxJpegBufferSize) const \ { \ return _d()->jpegBufferSize(maxJpegBufferSize); \ diff --git a/src/android/mm/cros_camera_buffer.cpp b/src/android/mm/cros_camera_buffer.cpp index ba6650cf..44993379 100644 --- a/src/android/mm/cros_camera_buffer.cpp +++ b/src/android/mm/cros_camera_buffer.cpp @@ -31,6 +31,10 @@ public: Span plane(unsigned int plane); + unsigned int stride(unsigned int plane) const; + unsigned int offset(unsigned int plane) const; + unsigned int size(unsigned int plane) const; + size_t jpegBufferSize(size_t maxJpegBufferSize) const; private: @@ -111,6 +115,21 @@ Span CameraBuffer::Private::plane(unsigned int plane) bufferManager_->GetPlaneSize(handle_, plane) }; } +unsigned int CameraBuffer::Private::stride(unsigned int plane) const +{ + return cros::CameraBufferManager::GetPlaneStride(handle_, plane); +} + +unsigned int CameraBuffer::Private::offset(unsigned int plane) const +{ + return cros::CameraBufferManager::GetPlaneOffset(handle_, plane); +} + +unsigned int CameraBuffer::Private::size(unsigned int plane) const +{ + return cros::CameraBufferManager::GetPlaneSize(handle_, plane); +} + size_t CameraBuffer::Private::jpegBufferSize([[maybe_unused]] size_t maxJpegBufferSize) const { return bufferManager_->GetPlaneSize(handle_, 0); diff --git a/src/android/mm/generic_camera_buffer.cpp b/src/android/mm/generic_camera_buffer.cpp index 6677beb9..49f4a7a7 100644 --- a/src/android/mm/generic_camera_buffer.cpp +++ b/src/android/mm/generic_camera_buffer.cpp @@ -34,10 +34,15 @@ public: Span plane(unsigned int plane); + unsigned int stride(unsigned int plane) const; + unsigned int offset(unsigned int plane) const; + unsigned int size(unsigned int plane) const; + size_t jpegBufferSize(size_t maxJpegBufferSize) const; private: struct PlaneInfo { + unsigned int stride; unsigned int offset; unsigned int size; }; @@ -114,6 +119,7 @@ CameraBuffer::Private::Private([[maybe_unused]] CameraBuffer *cameraBuffer, const unsigned int planeSize = stride * ((size.height + vertSubSample - 1) / vertSubSample); + planeInfo_[i].stride = stride; planeInfo_[i].offset = offset; planeInfo_[i].size = planeSize; @@ -148,6 +154,30 @@ Span CameraBuffer::Private::plane(unsigned int plane) return planes_[plane]; } +unsigned int CameraBuffer::Private::stride(unsigned int plane) const +{ + if (plane >= planeInfo_.size()) + return 0; + + return planeInfo_[plane].stride; +} + +unsigned int CameraBuffer::Private::offset(unsigned int plane) const +{ + if (plane >= planeInfo_.size()) + return 0; + + return planeInfo_[plane].offset; +} + +unsigned int CameraBuffer::Private::size(unsigned int plane) const +{ + if (plane >= planeInfo_.size()) + return 0; + + return planeInfo_[plane].size; +} + size_t CameraBuffer::Private::jpegBufferSize(size_t maxJpegBufferSize) const { ASSERT(bufferLength_ >= 0);