From patchwork Thu Aug 13 09:53:43 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Niklas_S=C3=B6derlund?= X-Patchwork-Id: 9305 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 B381DBD87D for ; Thu, 13 Aug 2020 09:53:55 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 3724160DF1; Thu, 13 Aug 2020 11:53:55 +0200 (CEST) Received: from bin-mail-out-06.binero.net (bin-mail-out-06.binero.net [195.74.38.229]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 8450E60918 for ; Thu, 13 Aug 2020 11:53:53 +0200 (CEST) X-Halon-ID: e4036028-dd4a-11ea-92dc-005056917a89 Authorized-sender: niklas.soderlund@fsdn.se Received: from bismarck.berto.se (p54ac52a8.dip0.t-ipconnect.de [84.172.82.168]) by bin-vsp-out-01.atm.binero.net (Halon) with ESMTPA id e4036028-dd4a-11ea-92dc-005056917a89; Thu, 13 Aug 2020 11:53:51 +0200 (CEST) From: =?utf-8?q?Niklas_S=C3=B6derlund?= To: libcamera-devel@lists.libcamera.org Date: Thu, 13 Aug 2020 11:53:43 +0200 Message-Id: <20200813095344.3495212-2-niklas.soderlund@ragnatech.se> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200813095344.3495212-1-niklas.soderlund@ragnatech.se> References: <20200813095344.3495212-1-niklas.soderlund@ragnatech.se> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 1/2] libcamera: request: Declare a using directive for map of buffers 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" Declare a using directive for the map of Stream to FrameBuffer. Update all users of Request::buffers() to use the new usage directive. Signed-off-by: Niklas Söderlund Reviewed-by: Kieran Bingham --- include/libcamera/request.h | 6 ++++-- src/android/camera_device.cpp | 2 +- src/cam/capture.cpp | 2 +- src/libcamera/request.cpp | 5 +++++ src/qcam/main_window.h | 4 ++-- test/camera/buffer_import.cpp | 2 +- test/camera/capture.cpp | 2 +- 7 files changed, 15 insertions(+), 8 deletions(-) diff --git a/include/libcamera/request.h b/include/libcamera/request.h index eded68318b7dbb3c..e74f56a7d6415315 100644 --- a/include/libcamera/request.h +++ b/include/libcamera/request.h @@ -31,6 +31,8 @@ public: RequestCancelled, }; + using BufferMap = std::map; + Request(Camera *camera, uint64_t cookie = 0); Request(const Request &) = delete; Request &operator=(const Request &) = delete; @@ -38,7 +40,7 @@ public: ControlList &controls() { return *controls_; } ControlList &metadata() { return *metadata_; } - const std::map &buffers() const { return bufferMap_; } + const BufferMap &buffers() const { return bufferMap_; } int addBuffer(Stream *stream, FrameBuffer *buffer); FrameBuffer *findBuffer(Stream *stream) const; @@ -58,7 +60,7 @@ private: CameraControlValidator *validator_; ControlList *controls_; ControlList *metadata_; - std::map bufferMap_; + BufferMap bufferMap_; std::unordered_set pending_; const uint64_t cookie_; diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index d9183501228f4642..3419236a061cba57 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -1371,7 +1371,7 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques void CameraDevice::requestComplete(Request *request) { - const std::map &buffers = request->buffers(); + const Request::BufferMap &buffers = request->buffers(); camera3_buffer_status status = CAMERA3_BUFFER_STATUS_OK; std::unique_ptr resultMetadata; Camera3RequestDescriptor *descriptor = diff --git a/src/cam/capture.cpp b/src/cam/capture.cpp index 3d8e89d52c7ab68d..0720376983470f2f 100644 --- a/src/cam/capture.cpp +++ b/src/cam/capture.cpp @@ -157,7 +157,7 @@ void Capture::requestComplete(Request *request) if (request->status() == Request::RequestCancelled) return; - const std::map &buffers = request->buffers(); + const Request::BufferMap &buffers = request->buffers(); std::chrono::steady_clock::time_point now = std::chrono::steady_clock::now(); double fps = std::chrono::duration_cast(now - last_).count(); diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp index f3753514131ae394..d5f11e8c43c32766 100644 --- a/src/libcamera/request.cpp +++ b/src/libcamera/request.cpp @@ -37,6 +37,11 @@ LOG_DEFINE_CATEGORY(Request) * The request has been cancelled due to capture stop */ +/** + * \typedef Request::BufferMap + * \brief A map of Stream to FrameBuffer pointers + */ + /** * \class Request * \brief A frame capture request diff --git a/src/qcam/main_window.h b/src/qcam/main_window.h index 4606fe487ad49777..6e1bcd76a2438b4c 100644 --- a/src/qcam/main_window.h +++ b/src/qcam/main_window.h @@ -47,13 +47,13 @@ public: { } - CaptureRequest(const std::map &buffers, + CaptureRequest(const Request::BufferMap &buffers, const ControlList &metadata) : buffers_(buffers), metadata_(metadata) { } - std::map buffers_; + Request::BufferMap buffers_; ControlList metadata_; }; diff --git a/test/camera/buffer_import.cpp b/test/camera/buffer_import.cpp index 46e03746213912aa..726d2cb2fe757066 100644 --- a/test/camera/buffer_import.cpp +++ b/test/camera/buffer_import.cpp @@ -46,7 +46,7 @@ protected: if (request->status() != Request::RequestComplete) return; - const std::map &buffers = request->buffers(); + const Request::BufferMap &buffers = request->buffers(); completeRequestsCount_++; diff --git a/test/camera/capture.cpp b/test/camera/capture.cpp index ea84daeef196e349..ae572eb955753151 100644 --- a/test/camera/capture.cpp +++ b/test/camera/capture.cpp @@ -39,7 +39,7 @@ protected: if (request->status() != Request::RequestComplete) return; - const std::map &buffers = request->buffers(); + const Request::BufferMap &buffers = request->buffers(); completeRequestsCount_++; From patchwork Thu Aug 13 09:53:44 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Niklas_S=C3=B6derlund?= X-Patchwork-Id: 9306 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 1ECF5BD87E for ; Thu, 13 Aug 2020 09:53:56 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 62A3E613B1; Thu, 13 Aug 2020 11:53:55 +0200 (CEST) Received: from bin-mail-out-05.binero.net (bin-mail-out-05.binero.net [195.74.38.228]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 5BE98603D9 for ; Thu, 13 Aug 2020 11:53:54 +0200 (CEST) X-Halon-ID: e49cc835-dd4a-11ea-92dc-005056917a89 Authorized-sender: niklas.soderlund@fsdn.se Received: from bismarck.berto.se (p54ac52a8.dip0.t-ipconnect.de [84.172.82.168]) by bin-vsp-out-01.atm.binero.net (Halon) with ESMTPA id e49cc835-dd4a-11ea-92dc-005056917a89; Thu, 13 Aug 2020 11:53:52 +0200 (CEST) From: =?utf-8?q?Niklas_S=C3=B6derlund?= To: libcamera-devel@lists.libcamera.org Date: Thu, 13 Aug 2020 11:53:44 +0200 Message-Id: <20200813095344.3495212-3-niklas.soderlund@ragnatech.se> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200813095344.3495212-1-niklas.soderlund@ragnatech.se> References: <20200813095344.3495212-1-niklas.soderlund@ragnatech.se> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 2/2] libcamera: request: Make Stream pointer const 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" The Stream pointer just acts as a key in the Request object. There is no good use-case to modify a stream from a pointer retrieved from the Request, make it const. This allow pipeline handlers to better express that the Stream pointer is retrieved in a Request should just be treated as a key. Signed-off-by: Niklas Söderlund Reviewed-by: Kieran Bingham --- include/libcamera/request.h | 6 +++--- src/cam/capture.cpp | 4 ++-- src/cam/capture.h | 2 +- src/libcamera/camera.cpp | 4 ++-- src/libcamera/pipeline/ipu3/ipu3.cpp | 2 +- src/libcamera/request.cpp | 6 +++--- src/qcam/main_window.h | 2 +- test/camera/buffer_import.cpp | 2 +- test/camera/capture.cpp | 2 +- 9 files changed, 15 insertions(+), 15 deletions(-) diff --git a/include/libcamera/request.h b/include/libcamera/request.h index e74f56a7d6415315..5976ac50c9d3c42b 100644 --- a/include/libcamera/request.h +++ b/include/libcamera/request.h @@ -31,7 +31,7 @@ public: RequestCancelled, }; - using BufferMap = std::map; + using BufferMap = std::map; Request(Camera *camera, uint64_t cookie = 0); Request(const Request &) = delete; @@ -41,8 +41,8 @@ public: ControlList &controls() { return *controls_; } ControlList &metadata() { return *metadata_; } const BufferMap &buffers() const { return bufferMap_; } - int addBuffer(Stream *stream, FrameBuffer *buffer); - FrameBuffer *findBuffer(Stream *stream) const; + int addBuffer(const Stream *stream, FrameBuffer *buffer); + FrameBuffer *findBuffer(const Stream *stream) const; uint64_t cookie() const { return cookie_; } Status status() const { return status_; } diff --git a/src/cam/capture.cpp b/src/cam/capture.cpp index 0720376983470f2f..af9029b743de606b 100644 --- a/src/cam/capture.cpp +++ b/src/cam/capture.cpp @@ -169,7 +169,7 @@ void Capture::requestComplete(Request *request) info << "fps: " << std::fixed << std::setprecision(2) << fps; for (auto it = buffers.begin(); it != buffers.end(); ++it) { - Stream *stream = it->first; + const Stream *stream = it->first; FrameBuffer *buffer = it->second; const std::string &name = streamName_[stream]; @@ -209,7 +209,7 @@ void Capture::requestComplete(Request *request) } for (auto it = buffers.begin(); it != buffers.end(); ++it) { - Stream *stream = it->first; + const Stream *stream = it->first; FrameBuffer *buffer = it->second; request->addBuffer(stream, buffer); diff --git a/src/cam/capture.h b/src/cam/capture.h index 32940a2a12138887..b4e39d51fdfa9512 100644 --- a/src/cam/capture.h +++ b/src/cam/capture.h @@ -36,7 +36,7 @@ private: std::shared_ptr camera_; libcamera::CameraConfiguration *config_; - std::map streamName_; + std::map streamName_; BufferWriter *writer_; std::chrono::steady_clock::time_point last_; diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp index 820fa1e3065e5f88..afdd47750f58f190 100644 --- a/src/libcamera/camera.cpp +++ b/src/libcamera/camera.cpp @@ -279,7 +279,7 @@ public: std::shared_ptr pipe_; std::string id_; std::set streams_; - std::set activeStreams_; + std::set activeStreams_; private: bool disconnected_; @@ -889,7 +889,7 @@ int Camera::queueRequest(Request *request) } for (auto const &it : request->buffers()) { - Stream *stream = it.first; + const Stream *stream = it.first; if (p_->activeStreams_.find(stream) == p_->activeStreams_.end()) { LOG(Camera, Error) << "Invalid request"; diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp index d931ed333b4a1df6..019e50b8f444c153 100644 --- a/src/libcamera/pipeline/ipu3/ipu3.cpp +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp @@ -663,7 +663,7 @@ int PipelineHandlerIPU3::queueRequestDevice(Camera *camera, Request *request) /* Queue all buffers from the request aimed for the ImgU. */ for (auto it : request->buffers()) { - Stream *stream = static_cast(it.first); + const Stream *stream = it.first; FrameBuffer *buffer = it.second; int ret; diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp index d5f11e8c43c32766..60b306922de2fe06 100644 --- a/src/libcamera/request.cpp +++ b/src/libcamera/request.cpp @@ -127,7 +127,7 @@ Request::~Request() * \retval -EEXIST The request already contains a buffer for the stream * \retval -EINVAL The buffer does not reference a valid Stream */ -int Request::addBuffer(Stream *stream, FrameBuffer *buffer) +int Request::addBuffer(const Stream *stream, FrameBuffer *buffer) { if (!stream) { LOG(Request, Error) << "Invalid stream reference"; @@ -162,9 +162,9 @@ int Request::addBuffer(Stream *stream, FrameBuffer *buffer) * \return The buffer associated with the stream, or nullptr if the stream is * not part of this request */ -FrameBuffer *Request::findBuffer(Stream *stream) const +FrameBuffer *Request::findBuffer(const Stream *stream) const { - auto it = bufferMap_.find(stream); + const auto it = bufferMap_.find(stream); if (it == bufferMap_.end()) return nullptr; diff --git a/src/qcam/main_window.h b/src/qcam/main_window.h index 6e1bcd76a2438b4c..3d21779e3f4a7c44 100644 --- a/src/qcam/main_window.h +++ b/src/qcam/main_window.h @@ -126,7 +126,7 @@ private: bool captureRaw_; Stream *vfStream_; Stream *rawStream_; - std::map> freeBuffers_; + std::map> freeBuffers_; QQueue doneQueue_; QMutex mutex_; /* Protects freeBuffers_ and doneQueue_ */ diff --git a/test/camera/buffer_import.cpp b/test/camera/buffer_import.cpp index 726d2cb2fe757066..97a8582761a74dc6 100644 --- a/test/camera/buffer_import.cpp +++ b/test/camera/buffer_import.cpp @@ -51,7 +51,7 @@ protected: completeRequestsCount_++; /* Create a new request. */ - Stream *stream = buffers.begin()->first; + const Stream *stream = buffers.begin()->first; FrameBuffer *buffer = buffers.begin()->second; request = camera_->createRequest(); diff --git a/test/camera/capture.cpp b/test/camera/capture.cpp index ae572eb955753151..0fe3bf9be7f13f4f 100644 --- a/test/camera/capture.cpp +++ b/test/camera/capture.cpp @@ -44,7 +44,7 @@ protected: completeRequestsCount_++; /* Create a new request. */ - Stream *stream = buffers.begin()->first; + const Stream *stream = buffers.begin()->first; FrameBuffer *buffer = buffers.begin()->second; request = camera_->createRequest();