From patchwork Thu Aug 26 08:00:21 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hirokazu Honda X-Patchwork-Id: 13500 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 0A97FBD87C for ; Thu, 26 Aug 2021 08:00:39 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id B95DD688A3; Thu, 26 Aug 2021 10:00:38 +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="YS5oVT3v"; dkim-atps=neutral Received: from mail-pl1-x631.google.com (mail-pl1-x631.google.com [IPv6:2607:f8b0:4864:20::631]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 813D368919 for ; Thu, 26 Aug 2021 10:00:35 +0200 (CEST) Received: by mail-pl1-x631.google.com with SMTP id q3so1312519plx.4 for ; Thu, 26 Aug 2021 01:00:35 -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=yGO7hdszu0loHkLXpQ+gtTaw/bY/r+07vfYg6W0bFDY=; b=YS5oVT3vzpcIZr+FYXze0Yy/Px47K0YYpF3QmDGAlxPdYceXoZZ5GgVkxNz5Nww46o KKIT79x7G1Glv9kcCcCSJZHPUx7kZWyUcIIDp/ICLHPq0HPmfHfSKJIgwK9h1Z6zX7P3 kBb1g8SQMoNhSQ0Pes2dsJAgIeIRX4dznezh8= 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=yGO7hdszu0loHkLXpQ+gtTaw/bY/r+07vfYg6W0bFDY=; b=JWqxl5jixl5U+V4S2BNuVcp/JbYG+/Ux7Y5Mj+aKCD5H7A3veE+1rhtZJ80KAU8UGQ t0gFE80xc8ElMDxM+TXtVQZJFEVtC2D1s4iS454aR563MzkshKSutwq3jn50LjZUFYwD sC3fZXDnQlag50hJLKAf8+/dyrAOZM1K5hEVfjtfMLR8s0qjKttXb3lax8EkmM/eAX1b T6qBSTNdmKnZqNRhnYNyrI0PHRfU84kFy1vT1gnImNsthLC1cmJTxMkSYwmvhZdupX/5 0+dmQCU7nJGj9p+vV+wuGdSkDJv2LgrOEXa6J0BeGIQETWE74kFUB7YrvW8ee2tWUOCk pYeg== X-Gm-Message-State: AOAM5329TFvXC9XyU5sWZ2ByHdlDJuKWCR/wL2GE7JXrnoixP7x8Xj4l Xu2AqourHRj73vK0BdQ1krPR+TM/CU46Ow== X-Google-Smtp-Source: ABdhPJwOjL9HFA5EiPsvGhgWoTWiAMcGhKRu3bu2F42JHwGoP4Afmkqp4KHY/GkhR6DqUgBXzaCkNA== X-Received: by 2002:a17:902:bf4c:b0:137:b460:1349 with SMTP id u12-20020a170902bf4c00b00137b4601349mr2487503pls.23.1629964833171; Thu, 26 Aug 2021 01:00:33 -0700 (PDT) Received: from hiroh2.tok.corp.google.com ([2401:fa00:8f:203:a5bc:b3dd:7208:bec1]) by smtp.gmail.com with ESMTPSA id g3sm2570805pgj.66.2021.08.26.01.00.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Aug 2021 01:00:32 -0700 (PDT) From: Hirokazu Honda To: libcamera-devel@lists.libcamera.org Date: Thu, 26 Aug 2021 17:00:21 +0900 Message-Id: <20210826080021.3454520-4-hiroh@chromium.org> X-Mailer: git-send-email 2.33.0.rc2.250.ged5fa647cd-goog In-Reply-To: <20210826080021.3454520-1-hiroh@chromium.org> References: <20210826080021.3454520-1-hiroh@chromium.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v3 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 cfe55b69..4f0a3207 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);