From patchwork Wed Aug 25 04:44:10 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hirokazu Honda X-Patchwork-Id: 13481 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 6D622C3242 for ; Wed, 25 Aug 2021 04:44:33 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 176AC688A3; Wed, 25 Aug 2021 06:44:33 +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="iRDMgMsO"; dkim-atps=neutral Received: from mail-pg1-x52c.google.com (mail-pg1-x52c.google.com [IPv6:2607:f8b0:4864:20::52c]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 0372268892 for ; Wed, 25 Aug 2021 06:44:29 +0200 (CEST) Received: by mail-pg1-x52c.google.com with SMTP id y23so21868289pgi.7 for ; Tue, 24 Aug 2021 21:44:28 -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=F6JI3ObfUfhlsVHyi70Z6RRucXwbz8eAI8Qdz4/n36U=; b=iRDMgMsObnDjxWJ3vLK57gbITFvdzuj0Xw8z7LBWU+v51iSn22uujs/hiwl6pzDUGe vUuKPR1cmFVh6IcDTnmLsfq4tvnLpvBPzFfIjL6gICKBarQKRibtw+Q4JONHC483JTyR Pt4RJY46uiidN0lBM/mHBaoLBQTwocVmzkRKw= 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=F6JI3ObfUfhlsVHyi70Z6RRucXwbz8eAI8Qdz4/n36U=; b=QJGv3Yeg9jrpP2ARqLj2VdbwWxI88+Vvlzu5K3GpZHqr5XDejXfwlGwuWUVH4CO4KA HXBkNYGmM5aOMvg+PVEfwoEllwo9y22ss69Bgn2kg6OzoGEIPegoX6FBA4K1Bd9/ZQ19 MvmFhQz+sqi8Fg5W0qpr/JeWgsiF0HQWM3rCDLGcbHJ5u8cBfPPpCYE1yZuW1wI3G/Rh DnxQtYp4Njk2DK2KVb696KF+xsc9tFuk1GBbL6O96RhWmH9Do8rhog/WwZVcj+C4riK5 6No2R4ZZL3kjJmZk6MTYKIREeAxxAohUQQL5XpsERTXzb6ext1c918neagJznmKfaIUN 9uVA== X-Gm-Message-State: AOAM533FWQsfS8PUuz6KktTF+1z56L1jlkJjNo57r/b0u6oSBIH17UwY jpMxfgtiD5npS411W7yIetD7OAdkFJKyPA== X-Google-Smtp-Source: ABdhPJy/uRbAMcobqh9JO8A/0lfuI/Q5ZXBWbE3YLm0OCRAEd+TeOSvY0zMGQPEvA+xiDFqKlJJ77A== X-Received: by 2002:a62:1b97:0:b0:3ed:d347:fcac with SMTP id b145-20020a621b97000000b003edd347fcacmr6727366pfb.65.1629866667363; Tue, 24 Aug 2021 21:44:27 -0700 (PDT) Received: from hiroh2.tok.corp.google.com ([2401:fa00:8f:203:ddfd:dd12:81a2:3205]) by smtp.gmail.com with ESMTPSA id n20sm2797544pfa.91.2021.08.24.21.44.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 24 Aug 2021 21:44:26 -0700 (PDT) From: Hirokazu Honda To: libcamera-devel@lists.libcamera.org Date: Wed, 25 Aug 2021 13:44:10 +0900 Message-Id: <20210825044410.2787433-4-hiroh@chromium.org> X-Mailer: git-send-email 2.33.0.rc2.250.ged5fa647cd-goog In-Reply-To: <20210825044410.2787433-1-hiroh@chromium.org> References: <20210825044410.2787433-1-hiroh@chromium.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 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 --- 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 42546d87..bdbac16f 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: @@ -112,6 +116,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 37868d26..d4f3f22b 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; }; @@ -110,6 +115,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; @@ -145,6 +151,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 { if (maps_.empty()) {