From patchwork Sun Aug 18 01:13:16 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 1838 Return-Path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 8DA3560BE5 for ; Sun, 18 Aug 2019 03:13:40 +0200 (CEST) Received: from pendragon.bb.dnainternet.fi (dfj612yhrgyx302h3jwwy-3.rev.dnainternet.fi [IPv6:2001:14ba:21f5:5b00:ce28:277f:58d7:3ca4]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 2FE3151C for ; Sun, 18 Aug 2019 03:13:40 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1566090820; bh=EtA2zifYgF6BN90UB7nIsX8Hx2plVerw6hPUqCtqL1Y=; h=From:To:Subject:Date:In-Reply-To:References:From; b=upve5TIHRU6XOifIKfA/zJnWwryR8gBhuzSdCqw6kPQnn/1fCZVtQNXnirDy71Z8N BqotifBL5980koZEzI8hCVsIEMxTUzgeivRxWS98+GCa42HoiucFdQFcbiQpWTEn7q XIuD/8SXdbW3LkFZvdRqcpOW9CkrCwVFHBlj+I3w= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Date: Sun, 18 Aug 2019 04:13:16 +0300 Message-Id: <20190818011329.14499-2-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190818011329.14499-1-laurent.pinchart@ideasonboard.com> References: <20190818011329.14499-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 01/14] libcamera: device_enumerator: Print media device name in error message X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 18 Aug 2019 01:13:40 -0000 The device enumerator logs an error message when a media device is removed while still in use. Add the device name to the message to help debugging. Signed-off-by: Laurent Pinchart Reviewed-by: Jacopo Mondi --- src/libcamera/device_enumerator.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libcamera/device_enumerator.cpp b/src/libcamera/device_enumerator.cpp index 6fcbae76b64e..60c918f0e26f 100644 --- a/src/libcamera/device_enumerator.cpp +++ b/src/libcamera/device_enumerator.cpp @@ -166,7 +166,8 @@ DeviceEnumerator::~DeviceEnumerator() for (std::shared_ptr media : devices_) { if (media->busy()) LOG(DeviceEnumerator, Error) - << "Removing media device while still in use"; + << "Removing media device " << media->deviceNode() + << " while still in use"; } } From patchwork Sun Aug 18 01:13:17 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 1839 Return-Path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 018EF60BE5 for ; Sun, 18 Aug 2019 03:13:41 +0200 (CEST) Received: from pendragon.bb.dnainternet.fi (dfj612yhrgyx302h3jwwy-3.rev.dnainternet.fi [IPv6:2001:14ba:21f5:5b00:ce28:277f:58d7:3ca4]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 908EF2AF for ; Sun, 18 Aug 2019 03:13:40 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1566090820; bh=vvmW1RbYdLnl447BMgqSdazGzQ/LgAaB1ZKSpCju4ss=; h=From:To:Subject:Date:In-Reply-To:References:From; b=cdvuNUGuuVkLNzxle/CJpBQlenM+kxG4Ee7Gy+/dFa19/xz4Y3KdyD4ZumF2VQXyi nOPkCFbTze25FoZcIkt9bjGO0jkHutX3AH/6SsHmJKXzL+xq3Ovj7AEj8q4Tu1fID/ uSb7tAtJWjPE/h8nCQGMEfPhcYCnZzX8GU/3kHho= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Date: Sun, 18 Aug 2019 04:13:17 +0300 Message-Id: <20190818011329.14499-3-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190818011329.14499-1-laurent.pinchart@ideasonboard.com> References: <20190818011329.14499-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 02/14] libcamera: proxy: Get event dispatcher from current thread X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 18 Aug 2019 01:13:41 -0000 Get the event dispatcher from the current thread instead of the camera manager. This prepares for the removal of CameraManager::instance(). Signed-off-by: Laurent Pinchart Reviewed-by: Jacopo Mondi --- src/libcamera/proxy/worker/ipa_proxy_linux_worker.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libcamera/proxy/worker/ipa_proxy_linux_worker.cpp b/src/libcamera/proxy/worker/ipa_proxy_linux_worker.cpp index c43b088ac39c..ffba3ae4de80 100644 --- a/src/libcamera/proxy/worker/ipa_proxy_linux_worker.cpp +++ b/src/libcamera/proxy/worker/ipa_proxy_linux_worker.cpp @@ -9,7 +9,6 @@ #include #include -#include #include #include #include @@ -17,6 +16,7 @@ #include "ipa_module.h" #include "ipc_unixsocket.h" #include "log.h" +#include "thread.h" #include "utils.h" using namespace libcamera; @@ -81,7 +81,7 @@ int main(int argc, char **argv) LOG(IPAProxyLinuxWorker, Debug) << "Proxy worker successfully started"; /* \todo upgrade listening loop */ - EventDispatcher *dispatcher = CameraManager::instance()->eventDispatcher(); + EventDispatcher *dispatcher = Thread::current()->eventDispatcher(); while (1) dispatcher->processEvents(); From patchwork Sun Aug 18 01:13:18 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 1840 Return-Path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 5058761927 for ; Sun, 18 Aug 2019 03:13:41 +0200 (CEST) Received: from pendragon.bb.dnainternet.fi (dfj612yhrgyx302h3jwwy-3.rev.dnainternet.fi [IPv6:2001:14ba:21f5:5b00:ce28:277f:58d7:3ca4]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id E967951C for ; Sun, 18 Aug 2019 03:13:40 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1566090821; bh=n8k4rxyGHyNhVlMeZCxR/E2C+eK05yCYzNFBEdQIJf0=; h=From:To:Subject:Date:In-Reply-To:References:From; b=C5v9FjmU80qrkKIeCmlbJO185obXeQTyulgFJTN3ApglfjDPeRC4K5PXE/9vVO6Ym ya5chm3e00QTYwz7zLyJBNK3vNACjvgAXAuVDvGzHuX1Witx/QAq2138REnWVNGHjY 0woPVP7fF6zTt2osx8FRwQdj6jA3Kqr/274BLdeM= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Date: Sun, 18 Aug 2019 04:13:18 +0300 Message-Id: <20190818011329.14499-4-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190818011329.14499-1-laurent.pinchart@ideasonboard.com> References: <20190818011329.14499-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 03/14] qcam: Remove double stop of the camera manager X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 18 Aug 2019 01:13:41 -0000 The camera manager is stopped both in the destructor of the MainWindow class and in the main() function. This double stop isn't needed, remove the former and keep the latter as the manager is started in the main() function. Signed-off-by: Laurent Pinchart Reviewed-by: Jacopo Mondi --- src/qcam/main_window.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp index dcb653e81a29..33fde8b10fd8 100644 --- a/src/qcam/main_window.cpp +++ b/src/qcam/main_window.cpp @@ -51,8 +51,6 @@ MainWindow::~MainWindow() camera_->release(); camera_.reset(); } - - CameraManager::instance()->stop(); } void MainWindow::updateTitle() From patchwork Sun Aug 18 01:13:19 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 1841 Return-Path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id AA0A461927 for ; Sun, 18 Aug 2019 03:13:41 +0200 (CEST) Received: from pendragon.bb.dnainternet.fi (dfj612yhrgyx302h3jwwy-3.rev.dnainternet.fi [IPv6:2001:14ba:21f5:5b00:ce28:277f:58d7:3ca4]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 4D3472AF for ; Sun, 18 Aug 2019 03:13:41 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1566090821; bh=79g8zplm2yqjHVhgw8g1CBhk0Qf8+hiFQ6MvHv/zW5k=; h=From:To:Subject:Date:In-Reply-To:References:From; b=woHO4YTe0TcMLCE+cQbs7tDi4se8+cImrOMklSYIhdIyieDppmUiojR9XP+akDbdP 6Jz9qAn546VLIamoiIfuxb0lOBDOmGWShV4RToWxwsd1Z17yy8X2+pAGBgbjX6CbY2 iiP7JTw1eWZRycAPCeQaQW7zjFkyycbQWN1KrMxM= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Date: Sun, 18 Aug 2019 04:13:19 +0300 Message-Id: <20190818011329.14499-5-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190818011329.14499-1-laurent.pinchart@ideasonboard.com> References: <20190818011329.14499-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 04/14] qcam: Pass camera manager to MainWindow class X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 18 Aug 2019 01:13:41 -0000 Pass the CameraManager instance from the main() function to the MainWindow class instead of accessing it through CameraManager::instance(). This prepares for the removal of the CameraManager::instance() method. Signed-off-by: Laurent Pinchart Reviewed-by: Jacopo Mondi --- src/qcam/main.cpp | 2 +- src/qcam/main_window.cpp | 7 +++---- src/qcam/main_window.h | 5 +++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/qcam/main.cpp b/src/qcam/main.cpp index da942f3daed6..05d3b77e9edb 100644 --- a/src/qcam/main.cpp +++ b/src/qcam/main.cpp @@ -73,7 +73,7 @@ int main(int argc, char **argv) return EXIT_FAILURE; } - MainWindow *mainWindow = new MainWindow(options); + MainWindow *mainWindow = new MainWindow(cm, options); mainWindow->show(); ret = app.exec(); delete mainWindow; diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp index 33fde8b10fd8..ef4ad4a22dca 100644 --- a/src/qcam/main_window.cpp +++ b/src/qcam/main_window.cpp @@ -21,7 +21,7 @@ using namespace libcamera; -MainWindow::MainWindow(const OptionsParser::Options &options) +MainWindow::MainWindow(CameraManager *cm, const OptionsParser::Options &options) : options_(options), isCapturing_(false) { int ret; @@ -35,7 +35,7 @@ MainWindow::MainWindow(const OptionsParser::Options &options) viewfinder_->setFixedSize(500, 500); adjustSize(); - ret = openCamera(); + ret = openCamera(cm); if (!ret) ret = startCapture(); @@ -66,9 +66,8 @@ void MainWindow::updateTitle() setWindowTitle(title_ + " : " + QString::number(fps, 'f', 2) + " fps"); } -int MainWindow::openCamera() +int MainWindow::openCamera(CameraManager *cm) { - CameraManager *cm = CameraManager::instance(); std::string cameraName; if (!options_.isSet(OptCamera)) { diff --git a/src/qcam/main_window.h b/src/qcam/main_window.h index b45cbca725fa..6873155aaa03 100644 --- a/src/qcam/main_window.h +++ b/src/qcam/main_window.h @@ -16,6 +16,7 @@ #include #include +#include #include #include "../cam/options.h" @@ -35,14 +36,14 @@ class MainWindow : public QMainWindow Q_OBJECT public: - MainWindow(const OptionsParser::Options &options); + MainWindow(CameraManager *cm, const OptionsParser::Options &options); ~MainWindow(); private Q_SLOTS: void updateTitle(); private: - int openCamera(); + int openCamera(CameraManager *cm); int startCapture(); void stopCapture(); From patchwork Sun Aug 18 01:13:20 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 1842 Return-Path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 1908C61927 for ; Sun, 18 Aug 2019 03:13:42 +0200 (CEST) Received: from pendragon.bb.dnainternet.fi (dfj612yhrgyx302h3jwwy-3.rev.dnainternet.fi [IPv6:2001:14ba:21f5:5b00:ce28:277f:58d7:3ca4]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id A70C751C for ; Sun, 18 Aug 2019 03:13:41 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1566090821; bh=NoI7cpVUBaCdLyk4InjmEZC6yarc1sUEg+2lwoUWwp0=; h=From:To:Subject:Date:In-Reply-To:References:From; b=khIJzJydLVmCGsxnzVvZAhcUIaNv01PsF3iTmHxfwV/bHiXEo31goatiRgtTPO361 WneRuxEnnxIVr/u2QLT8k1YMIiC7NX23pI1nBIyYKA+lloaqPS04GDEJ4wgtyLcK4/ lJEEYHUXu/yzgZMSugNywRfwbRX3u4A/ZJqhU0mc= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Date: Sun, 18 Aug 2019 04:13:20 +0300 Message-Id: <20190818011329.14499-6-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190818011329.14499-1-laurent.pinchart@ideasonboard.com> References: <20190818011329.14499-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 05/14] test: event-thread: Fix compilation on Chromium OS X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 18 Aug 2019 01:13:43 -0000 Commit 92b4af98cd67 ("test: Add EventNotifier thread move test") causes the build to fail in the Chromium OS build environment, because the return values of the pipe() function marked with the __warn_unused_result__ attribute is ignored. Fix this. Signed-off-by: Laurent Pinchart Reviewed-by: Paul Elder Reviewed-by: Jacopo Mondi --- test/event-thread.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/event-thread.cpp b/test/event-thread.cpp index 714bc9845820..01120733eca4 100644 --- a/test/event-thread.cpp +++ b/test/event-thread.cpp @@ -25,7 +25,11 @@ public: EventHandler() : notified_(false) { - pipe(pipefd_); + int ret = pipe(pipefd_); + if (ret < 0) { + ret = errno; + cout << "pipe() failed: " << strerror(ret) << endl; + } notifier_ = new EventNotifier(pipefd_[0], EventNotifier::Read, this); notifier_->activated.connect(this, &EventHandler::readReady); From patchwork Sun Aug 18 01:13:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 1843 Return-Path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 7C9ED60BE5 for ; Sun, 18 Aug 2019 03:13:42 +0200 (CEST) Received: from pendragon.bb.dnainternet.fi (dfj612yhrgyx302h3jwwy-3.rev.dnainternet.fi [IPv6:2001:14ba:21f5:5b00:ce28:277f:58d7:3ca4]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 0DC0D2AF for ; Sun, 18 Aug 2019 03:13:41 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1566090822; bh=AHm283RMqqXE9LDCjTE1mmhybUBrvdO6VyxbIpkq128=; h=From:To:Subject:Date:In-Reply-To:References:From; b=F/k0D7Wbh+UR5CNieTfXM8sBVN32kgSmtMssAwhYCzvKfLvQ7SYCehAd+fb1w6nLD YRLFG0+NyOluO8+0AC8jpnPT3lrC0vwh3gOh0KB6Ath1WEhf0kmAIuHlqvvx5KWsI/ wqMZPLwLbiCe1W1GmV7L6hMX4p7Ub9TnVh86iPSk= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Date: Sun, 18 Aug 2019 04:13:21 +0300 Message-Id: <20190818011329.14499-7-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190818011329.14499-1-laurent.pinchart@ideasonboard.com> References: <20190818011329.14499-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 06/14] test: unixsocket: Fix typo in error message X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 18 Aug 2019 01:13:43 -0000 Signed-off-by: Laurent Pinchart Reviewed-by: Jacopo Mondi --- test/ipc/unixsocket.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/ipc/unixsocket.cpp b/test/ipc/unixsocket.cpp index eeef64842a75..40a3a84a87d2 100644 --- a/test/ipc/unixsocket.cpp +++ b/test/ipc/unixsocket.cpp @@ -370,7 +370,7 @@ protected: /* Test reversing a string, this test sending only data. */ if (testReverse()) { - cerr << "Reveres array test failed" << endl; + cerr << "Reverse array test failed" << endl; return TestFail; } From patchwork Sun Aug 18 01:13:22 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 1844 Return-Path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 1D8A161923 for ; Sun, 18 Aug 2019 03:13:43 +0200 (CEST) Received: from pendragon.bb.dnainternet.fi (dfj612yhrgyx302h3jwwy-3.rev.dnainternet.fi [IPv6:2001:14ba:21f5:5b00:ce28:277f:58d7:3ca4]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 7ABE251C for ; Sun, 18 Aug 2019 03:13:42 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1566090822; bh=NmWlxoS6nKWRc6n3yGCqBZ1zLdgwbLjHHdiIv8Oh2fk=; h=From:To:Subject:Date:In-Reply-To:References:From; b=wGpbrxiLEAgA7paYvgfca+T2dD9VxFwc3ESQ3IOAWs7Ip3sw4MYGBXMLHxCzqeSQR kpTgR5S0/iSiMBjcc1Orq39rzY+q0aev+j3f1s3KHw/xApn7PQWrcM8KRjdLpWwIvj z1s+fcM7sRGTja7NtyrgAXcR1Bu2r9z57eVHLYZA= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Date: Sun, 18 Aug 2019 04:13:22 +0300 Message-Id: <20190818011329.14499-8-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190818011329.14499-1-laurent.pinchart@ideasonboard.com> References: <20190818011329.14499-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 07/14] test: Get event dispatcher from current thread X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 18 Aug 2019 01:13:43 -0000 For all tests that don't otherwise require access to the camera manager, get the event dispatcher from the current thread instead of the camera manager. This prepares for the removal of CameraManager::instance(). Signed-off-by: Laurent Pinchart Reviewed-by: Jacopo Mondi --- test/event-dispatcher.cpp | 4 ++-- test/event.cpp | 4 ++-- test/ipc/unixsocket.cpp | 6 +++--- test/log/log_process.cpp | 4 ++-- test/meson.build | 6 +++--- test/object-invoke.cpp | 3 +-- test/process/process_test.cpp | 4 ++-- test/timer.cpp | 4 ++-- test/v4l2_videodevice/buffer_sharing.cpp | 4 ++-- test/v4l2_videodevice/capture_async.cpp | 4 ++-- test/v4l2_videodevice/v4l2_m2mdevice.cpp | 4 ++-- 11 files changed, 23 insertions(+), 24 deletions(-) diff --git a/test/event-dispatcher.cpp b/test/event-dispatcher.cpp index e8818dcab4ad..f243ec39bc28 100644 --- a/test/event-dispatcher.cpp +++ b/test/event-dispatcher.cpp @@ -9,11 +9,11 @@ #include #include -#include #include #include #include "test.h" +#include "thread.h" using namespace std; using namespace libcamera; @@ -33,7 +33,7 @@ protected: int init() { - dispatcher = CameraManager::instance()->eventDispatcher(); + dispatcher = Thread::current()->eventDispatcher(); struct sigaction sa = {}; sa.sa_handler = &sigAlarmHandler; diff --git a/test/event.cpp b/test/event.cpp index 9bd876153a18..816060cc44a2 100644 --- a/test/event.cpp +++ b/test/event.cpp @@ -9,12 +9,12 @@ #include #include -#include #include #include #include #include "test.h" +#include "thread.h" using namespace std; using namespace libcamera; @@ -35,7 +35,7 @@ protected: int run() { - EventDispatcher *dispatcher = CameraManager::instance()->eventDispatcher(); + EventDispatcher *dispatcher = Thread::current()->eventDispatcher(); std::string data("H2G2"); Timer timeout; ssize_t ret; diff --git a/test/ipc/unixsocket.cpp b/test/ipc/unixsocket.cpp index 40a3a84a87d2..f53042b88720 100644 --- a/test/ipc/unixsocket.cpp +++ b/test/ipc/unixsocket.cpp @@ -15,12 +15,12 @@ #include #include -#include #include #include #include "ipc_unixsocket.h" #include "test.h" +#include "thread.h" #include "utils.h" #define CMD_CLOSE 0 @@ -47,7 +47,7 @@ public: UnixSocketTestSlave() : exitCode_(EXIT_FAILURE), exit_(false) { - dispatcher_ = CameraManager::instance()->eventDispatcher(); + dispatcher_ = Thread::current()->eventDispatcher(); ipc_.readyRead.connect(this, &UnixSocketTestSlave::readyRead); } @@ -436,7 +436,7 @@ private: return -ETIMEDOUT; } - CameraManager::instance()->eventDispatcher()->processEvents(); + Thread::current()->eventDispatcher()->processEvents(); } callResponse_ = nullptr; diff --git a/test/log/log_process.cpp b/test/log/log_process.cpp index 36d25b27bfea..2df4aa43713c 100644 --- a/test/log/log_process.cpp +++ b/test/log/log_process.cpp @@ -14,7 +14,6 @@ #include #include -#include #include #include #include @@ -22,6 +21,7 @@ #include "log.h" #include "process.h" #include "test.h" +#include "thread.h" #include "utils.h" using namespace std; @@ -65,7 +65,7 @@ protected: int run() { - EventDispatcher *dispatcher = CameraManager::instance()->eventDispatcher(); + EventDispatcher *dispatcher = Thread::current()->eventDispatcher(); Timer timeout; int exitCode = 42; diff --git a/test/meson.build b/test/meson.build index 05265b7d4976..84722cceb35d 100644 --- a/test/meson.build +++ b/test/meson.build @@ -13,22 +13,22 @@ subdir('v4l2_subdevice') subdir('v4l2_videodevice') public_tests = [ - ['event', 'event.cpp'], - ['event-dispatcher', 'event-dispatcher.cpp'], ['geometry', 'geometry.cpp'], ['list-cameras', 'list-cameras.cpp'], ['signal', 'signal.cpp'], - ['timer', 'timer.cpp'], ] internal_tests = [ ['camera-sensor', 'camera-sensor.cpp'], + ['event', 'event.cpp'], + ['event-dispatcher', 'event-dispatcher.cpp'], ['event-thread', 'event-thread.cpp'], ['message', 'message.cpp'], ['object', 'object.cpp'], ['object-invoke', 'object-invoke.cpp'], ['signal-threads', 'signal-threads.cpp'], ['threads', 'threads.cpp'], + ['timer', 'timer.cpp'], ['timer-thread', 'timer-thread.cpp'], ] diff --git a/test/object-invoke.cpp b/test/object-invoke.cpp index 7221930f4380..9fb93e140305 100644 --- a/test/object-invoke.cpp +++ b/test/object-invoke.cpp @@ -9,7 +9,6 @@ #include #include -#include #include #include @@ -61,7 +60,7 @@ class ObjectInvokeTest : public Test protected: int run() { - EventDispatcher *dispatcher = CameraManager::instance()->eventDispatcher(); + EventDispatcher *dispatcher = Thread::current()->eventDispatcher(); InvokedObject object; /* diff --git a/test/process/process_test.cpp b/test/process/process_test.cpp index acb161454e2e..d264555e545f 100644 --- a/test/process/process_test.cpp +++ b/test/process/process_test.cpp @@ -9,12 +9,12 @@ #include #include -#include #include #include #include "process.h" #include "test.h" +#include "thread.h" #include "utils.h" using namespace std; @@ -41,7 +41,7 @@ public: protected: int run() { - EventDispatcher *dispatcher = CameraManager::instance()->eventDispatcher(); + EventDispatcher *dispatcher = Thread::current()->eventDispatcher(); Timer timeout; int exitCode = 42; diff --git a/test/timer.cpp b/test/timer.cpp index addebce3c784..c30709d4109a 100644 --- a/test/timer.cpp +++ b/test/timer.cpp @@ -7,11 +7,11 @@ #include -#include #include #include #include "test.h" +#include "thread.h" using namespace std; using namespace libcamera; @@ -62,7 +62,7 @@ protected: int run() { - EventDispatcher *dispatcher = CameraManager::instance()->eventDispatcher(); + EventDispatcher *dispatcher = Thread::current()->eventDispatcher(); ManagedTimer timer; ManagedTimer timer2; diff --git a/test/v4l2_videodevice/buffer_sharing.cpp b/test/v4l2_videodevice/buffer_sharing.cpp index 12ec88f2d8e6..1629f34cfa6c 100644 --- a/test/v4l2_videodevice/buffer_sharing.cpp +++ b/test/v4l2_videodevice/buffer_sharing.cpp @@ -13,10 +13,10 @@ #include #include -#include #include #include +#include "thread.h" #include "v4l2_videodevice_test.h" class BufferSharingTest : public V4L2VideoDeviceTest @@ -116,7 +116,7 @@ protected: int run() { - EventDispatcher *dispatcher = CameraManager::instance()->eventDispatcher(); + EventDispatcher *dispatcher = Thread::current()->eventDispatcher(); Timer timeout; int ret; diff --git a/test/v4l2_videodevice/capture_async.cpp b/test/v4l2_videodevice/capture_async.cpp index 4909f71a3f34..17eb528b12fd 100644 --- a/test/v4l2_videodevice/capture_async.cpp +++ b/test/v4l2_videodevice/capture_async.cpp @@ -6,12 +6,12 @@ */ #include -#include #include #include #include +#include "thread.h" #include "v4l2_videodevice_test.h" class CaptureAsyncTest : public V4L2VideoDeviceTest @@ -34,7 +34,7 @@ protected: { const unsigned int bufferCount = 8; - EventDispatcher *dispatcher = CameraManager::instance()->eventDispatcher(); + EventDispatcher *dispatcher = Thread::current()->eventDispatcher(); Timer timeout; int ret; diff --git a/test/v4l2_videodevice/v4l2_m2mdevice.cpp b/test/v4l2_videodevice/v4l2_m2mdevice.cpp index d132b1db2432..4d3644c2d287 100644 --- a/test/v4l2_videodevice/v4l2_m2mdevice.cpp +++ b/test/v4l2_videodevice/v4l2_m2mdevice.cpp @@ -8,12 +8,12 @@ #include #include -#include #include #include #include "device_enumerator.h" #include "media_device.h" +#include "thread.h" #include "v4l2_videodevice.h" #include "test.h" @@ -80,7 +80,7 @@ protected: { constexpr unsigned int bufferCount = 4; - EventDispatcher *dispatcher = CameraManager::instance()->eventDispatcher(); + EventDispatcher *dispatcher = Thread::current()->eventDispatcher(); int ret; MediaEntity *entity = media_->getEntityByName("vim2m-source"); From patchwork Sun Aug 18 01:13:23 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 1845 Return-Path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 8A95861924 for ; Sun, 18 Aug 2019 03:13:43 +0200 (CEST) Received: from pendragon.bb.dnainternet.fi (dfj612yhrgyx302h3jwwy-3.rev.dnainternet.fi [IPv6:2001:14ba:21f5:5b00:ce28:277f:58d7:3ca4]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 259BD734 for ; Sun, 18 Aug 2019 03:13:43 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1566090823; bh=LCZ7qAECO8SDRROe5LwZlUPot5Oh7jYrekN9Wtih9d0=; h=From:To:Subject:Date:In-Reply-To:References:From; b=N8JNZYsBUHmmx1KEks8VscymofYtTqDeuLf4gVyARfBuaEtlEI+ipVPbfKDCn4l/R SvaMxs++pBh3erCcfpZLxhbJPiKrm0G5A0I7GhHpKP3LgJtdF5iqqWDQq3JOd6xRQ7 iW9w+adO/HZ/l9mgcd0PvlkIZnr9U0d1ADdwew04= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Date: Sun, 18 Aug 2019 04:13:23 +0300 Message-Id: <20190818011329.14499-9-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190818011329.14499-1-laurent.pinchart@ideasonboard.com> References: <20190818011329.14499-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 08/14] test: camera: Use the CameraManager from the CameraTest base class X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 18 Aug 2019 01:13:44 -0000 Make the camera manager a protected field of the CameraTest class, and use it instead of CameraManager::instance() in the camera tests. This prepares for the removal of CameraManager::instance(). Signed-off-by: Laurent Pinchart --- test/camera/buffer_import.cpp | 2 +- test/camera/camera_test.h | 4 +--- test/camera/capture.cpp | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/test/camera/buffer_import.cpp b/test/camera/buffer_import.cpp index 98786469428f..9364e3d1bc44 100644 --- a/test/camera/buffer_import.cpp +++ b/test/camera/buffer_import.cpp @@ -375,7 +375,7 @@ protected: return TestFail; } - EventDispatcher *dispatcher = CameraManager::instance()->eventDispatcher(); + EventDispatcher *dispatcher = cm_->eventDispatcher(); Timer timer; timer.start(5000); diff --git a/test/camera/camera_test.h b/test/camera/camera_test.h index ffc8a485bfaf..e57b05eb28a9 100644 --- a/test/camera/camera_test.h +++ b/test/camera/camera_test.h @@ -23,10 +23,8 @@ protected: int init(); void cleanup(); - std::shared_ptr camera_; - -private: CameraManager *cm_; + std::shared_ptr camera_; }; #endif /* __LIBCAMERA_CAMERA_TEST_H__ */ diff --git a/test/camera/capture.cpp b/test/camera/capture.cpp index e6bf7a8d9ebb..791ccad15f70 100644 --- a/test/camera/capture.cpp +++ b/test/camera/capture.cpp @@ -120,7 +120,7 @@ protected: } } - EventDispatcher *dispatcher = CameraManager::instance()->eventDispatcher(); + EventDispatcher *dispatcher = cm_->eventDispatcher(); Timer timer; timer.start(1000); From patchwork Sun Aug 18 01:13:24 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 1846 X-Patchwork-Delegate: laurent.pinchart@ideasonboard.com Return-Path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 0D06C61927 for ; Sun, 18 Aug 2019 03:13:44 +0200 (CEST) Received: from pendragon.bb.dnainternet.fi (dfj612yhrgyx302h3jwwy-3.rev.dnainternet.fi [IPv6:2001:14ba:21f5:5b00:ce28:277f:58d7:3ca4]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 8745651C for ; Sun, 18 Aug 2019 03:13:43 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1566090823; bh=9kg8EUxK5zBDKVa8ZhVkZ7QFPLtbsSMOGu7jdf198lU=; h=From:To:Subject:Date:In-Reply-To:References:From; b=Fz2AdRFnufT3++GY4iBp4HV5+n9dXQOa8ktORofKQlFAQ8Wu2m2cA6OOCqYGuJ0rV PDOC7r5nJVoD92FxxJlklNw+BKVGaWJ8xmUeF6+dOjJntPufQ8UEzUuVGDmkiM6PTS VpPCPhGEqWKJBLAwwgr7OabohAvVkkNEWdLQfmGE= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Date: Sun, 18 Aug 2019 04:13:24 +0300 Message-Id: <20190818011329.14499-10-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190818011329.14499-1-laurent.pinchart@ideasonboard.com> References: <20190818011329.14499-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 09/14] android: Pass Camera shared pointer to CameraDevice by const reference X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 18 Aug 2019 01:13:44 -0000 The CameraDevice is constructed with a Camera instance passed through a shared pointer. It makes an internal copy of the pointer, which can be passed by const reference instead of value. This optimises the constructor slightly. Signed-off-by: Laurent Pinchart Reviewed-by: Jacopo Mondi --- src/android/camera_device.cpp | 2 +- src/android/camera_device.h | 2 +- src/android/camera_proxy.cpp | 2 +- src/android/camera_proxy.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index 999c51e6ba4a..9acfed694abc 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -49,7 +49,7 @@ CameraDevice::Camera3RequestDescriptor::~Camera3RequestDescriptor() * to the framework using the designated callbacks. */ -CameraDevice::CameraDevice(unsigned int id, std::shared_ptr &camera) +CameraDevice::CameraDevice(unsigned int id, const std::shared_ptr &camera) : running_(false), camera_(camera), staticMetadata_(nullptr), requestTemplate_(nullptr) { diff --git a/src/android/camera_device.h b/src/android/camera_device.h index 4d834ceb08a5..7897ba9dc5c7 100644 --- a/src/android/camera_device.h +++ b/src/android/camera_device.h @@ -31,7 +31,7 @@ class ThreadRpc; class CameraDevice : public libcamera::Object { public: - CameraDevice(unsigned int id, std::shared_ptr &camera); + CameraDevice(unsigned int id, const std::shared_ptr &camera); ~CameraDevice(); void call(ThreadRpc *rpc); diff --git a/src/android/camera_proxy.cpp b/src/android/camera_proxy.cpp index 3eb2f9fbcffb..4f5c0a024903 100644 --- a/src/android/camera_proxy.cpp +++ b/src/android/camera_proxy.cpp @@ -113,7 +113,7 @@ static camera3_device_ops hal_dev_ops = { .reserved = { nullptr }, }; -CameraProxy::CameraProxy(unsigned int id, std::shared_ptr camera) +CameraProxy::CameraProxy(unsigned int id, const std::shared_ptr &camera) : id_(id) { cameraDevice_ = new CameraDevice(id, camera); diff --git a/src/android/camera_proxy.h b/src/android/camera_proxy.h index da63bfa79fc9..7940eac4e376 100644 --- a/src/android/camera_proxy.h +++ b/src/android/camera_proxy.h @@ -19,7 +19,7 @@ class ThreadRpc; class CameraProxy { public: - CameraProxy(unsigned int id, std::shared_ptr camera); + CameraProxy(unsigned int id, const std::shared_ptr &camera); ~CameraProxy(); int open(const hw_module_t *hardwareModule); From patchwork Sun Aug 18 01:13:25 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 1847 Return-Path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 5D6E161940 for ; Sun, 18 Aug 2019 03:13:44 +0200 (CEST) Received: from pendragon.bb.dnainternet.fi (dfj612yhrgyx302h3jwwy-3.rev.dnainternet.fi [IPv6:2001:14ba:21f5:5b00:ce28:277f:58d7:3ca4]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id E048E11C0 for ; Sun, 18 Aug 2019 03:13:43 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1566090824; bh=JXS6Uhz0hvmSrZttXF8SpMbmnCyXVT6kiCOJ+T1OmAA=; h=From:To:Subject:Date:In-Reply-To:References:From; b=aWspm82K2oSRUDpqqHYyTTOKifdcFObMdWUOSwfP84IvWzDaoHU4NkJHNl3ychf3f lVCj2/WO2rViCdMWqlxRe7VwlpahnfJ4IW1NbQItRjBKss0GMXbPlkua5ErrUFGvQi MXk9/IuNi3NCxVF/VK5Qv+iHZRM4xYoKj3KcRi4o= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Date: Sun, 18 Aug 2019 04:13:25 +0300 Message-Id: <20190818011329.14499-11-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190818011329.14499-1-laurent.pinchart@ideasonboard.com> References: <20190818011329.14499-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 10/14] android: camera_hal_manager: Stop thread when destroying X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 18 Aug 2019 01:13:45 -0000 The CameraHalManager starts a thread that is never stopped. This leads to the thread being destroyed while running, which causes a crash. Fix this by stopping the thread and waiting for it to finish in the destructor of the CameraHalManager. Signed-off-by: Laurent Pinchart Reviewed-by: Jacopo Mondi --- src/android/camera_hal_manager.cpp | 9 +++++++++ src/android/camera_hal_manager.h | 2 ++ 2 files changed, 11 insertions(+) diff --git a/src/android/camera_hal_manager.cpp b/src/android/camera_hal_manager.cpp index 37ba01355258..063080a0746b 100644 --- a/src/android/camera_hal_manager.cpp +++ b/src/android/camera_hal_manager.cpp @@ -28,6 +28,15 @@ LOG_DECLARE_CATEGORY(HAL); * their static information and to open and close camera devices. */ +CameraHalManager::~CameraHalManager() +{ + if (isRunning()) { + exit(0); + /* \todo Wait with a timeout, just in case. */ + wait(); + } +} + int CameraHalManager::init() { /* diff --git a/src/android/camera_hal_manager.h b/src/android/camera_hal_manager.h index 8228623aba90..502115cf056f 100644 --- a/src/android/camera_hal_manager.h +++ b/src/android/camera_hal_manager.h @@ -24,6 +24,8 @@ class CameraProxy; class CameraHalManager : public libcamera::Thread { public: + ~CameraHalManager(); + int init(); CameraProxy *open(unsigned int id, const hw_module_t *module); From patchwork Sun Aug 18 01:13:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 1848 Return-Path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id AD1CC61E16 for ; Sun, 18 Aug 2019 03:13:44 +0200 (CEST) Received: from pendragon.bb.dnainternet.fi (dfj612yhrgyx302h3jwwy-3.rev.dnainternet.fi [IPv6:2001:14ba:21f5:5b00:ce28:277f:58d7:3ca4]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 4E2C151C for ; Sun, 18 Aug 2019 03:13:44 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1566090824; bh=2D6Je0AOyo9melpLTWk7Ye1dlCCxtrM+8W6fKGrzoa0=; h=From:To:Subject:Date:In-Reply-To:References:From; b=tiOq+0iie2K9sQ1gSfs8ek3ocRcxBScqi42rG3LfGs0Vuvy7cl0GpoCu0zmr6OLLh UHJdwxg5f/vTGwsSDVzWE2qFRv8ioGFIFotHdPl2tHR3RA30wxnFTbwrzlXUjP2Qeo uXH/7MTm8d0OAeaWPRq8CY1+gIJRk5eeHMHcA0Eg= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Date: Sun, 18 Aug 2019 04:13:26 +0300 Message-Id: <20190818011329.14499-12-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190818011329.14499-1-laurent.pinchart@ideasonboard.com> References: <20190818011329.14499-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 11/14] android: camera_hal_manager: Remove unused close() method X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 18 Aug 2019 01:13:46 -0000 The CameraHalManager::close() method isn't used, remove it. Signed-off-by: Laurent Pinchart Reviewed-by: Jacopo Mondi --- src/android/camera_hal_manager.cpp | 10 +--------- src/android/camera_hal_manager.h | 1 - 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/src/android/camera_hal_manager.cpp b/src/android/camera_hal_manager.cpp index 063080a0746b..a1ffb3713d7e 100644 --- a/src/android/camera_hal_manager.cpp +++ b/src/android/camera_hal_manager.cpp @@ -25,7 +25,7 @@ LOG_DECLARE_CATEGORY(HAL); * and spawns its own thread where libcamera related events are dispatched to. * It wraps the libcamera CameraManager operations and provides helpers for the * camera_module_t operations, to retrieve the number of cameras in the system, - * their static information and to open and close camera devices. + * their static information and to open camera devices. */ CameraHalManager::~CameraHalManager() @@ -109,14 +109,6 @@ CameraProxy *CameraHalManager::open(unsigned int id, return proxy; } -int CameraHalManager::close(CameraProxy *proxy) -{ - proxy->close(); - LOG(HAL, Info) << "Close camera '" << proxy->id() << "'"; - - return 0; -} - unsigned int CameraHalManager::numCameras() const { return cameraManager_->cameras().size(); diff --git a/src/android/camera_hal_manager.h b/src/android/camera_hal_manager.h index 502115cf056f..c23abd1c00af 100644 --- a/src/android/camera_hal_manager.h +++ b/src/android/camera_hal_manager.h @@ -29,7 +29,6 @@ public: int init(); CameraProxy *open(unsigned int id, const hw_module_t *module); - int close(CameraProxy *proxy); unsigned int numCameras() const; int getCameraInfo(unsigned int id, struct camera_info *info); From patchwork Sun Aug 18 01:13:27 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 1849 Return-Path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 0CCF06193A for ; Sun, 18 Aug 2019 03:13:45 +0200 (CEST) Received: from pendragon.bb.dnainternet.fi (dfj612yhrgyx302h3jwwy-3.rev.dnainternet.fi [IPv6:2001:14ba:21f5:5b00:ce28:277f:58d7:3ca4]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id A78AE734 for ; Sun, 18 Aug 2019 03:13:44 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1566090824; bh=Fcw3hNXCiERtZaj4yAZIDVZ1rC+qk8sK2j7uLQ6xJQc=; h=From:To:Subject:Date:In-Reply-To:References:From; b=P2iWVhb1g+dlirpIEW/AkqKIOZiqDTk6uGdPmU3gzlWJl0xWqr29vQeaNMyInddDF xlWrtYCEy24KHvIysfPzXBz5iY8Kjl9XQ16WER/EzzD0o3YBe6JzbXl63jfbJ95ODI i5y0fTb7cGpHc2CWDUa52VYSnvJ4t8VKCuSKrKAA= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Date: Sun, 18 Aug 2019 04:13:27 +0300 Message-Id: <20190818011329.14499-13-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190818011329.14499-1-laurent.pinchart@ideasonboard.com> References: <20190818011329.14499-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 12/14] android: camera_hal_manager: Clean up resources when terminating X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 18 Aug 2019 01:13:46 -0000 The CameraHalManager starts the libcamera CameraManager and creates CameraProxy instances for each camera in the system. Clean up those resources when the CameraHalManager terminates. Signed-off-by: Laurent Pinchart Reviewed-by: Jacopo Mondi --- src/android/camera_hal_manager.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/android/camera_hal_manager.cpp b/src/android/camera_hal_manager.cpp index a1ffb3713d7e..cf981720bca4 100644 --- a/src/android/camera_hal_manager.cpp +++ b/src/android/camera_hal_manager.cpp @@ -90,6 +90,10 @@ void CameraHalManager::run() /* Now start processing events and messages. */ exec(); + + /* Clean up the resources we have allocated. */ + proxies_.clear(); + cameraManager_->stop(); } CameraProxy *CameraHalManager::open(unsigned int id, From patchwork Sun Aug 18 01:13:28 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 1850 Return-Path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 7E67860BE5 for ; Sun, 18 Aug 2019 03:13:45 +0200 (CEST) Received: from pendragon.bb.dnainternet.fi (dfj612yhrgyx302h3jwwy-3.rev.dnainternet.fi [IPv6:2001:14ba:21f5:5b00:ce28:277f:58d7:3ca4]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 0BC622AF for ; Sun, 18 Aug 2019 03:13:44 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1566090825; bh=Ozo/tS4KTXpJmvT8yIP7zAbZeCOkEqc3vN922bFYEZ8=; h=From:To:Subject:Date:In-Reply-To:References:From; b=BT3AYMeJDWblWlRna+Xo710fYwXe2/K9CjyTpAgiRB3dzNum/lGWizHmVkc0SISGD IFFLi9af21qnAk6SHCqnpWRIy4gQKDMfDT+57raNi5ZG6CqaUWHFcNtUA4valmcDkY SyA8Hjrd8/CwYbdDTgy0Peqw4HbkYA1yXh5eOR3c= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Date: Sun, 18 Aug 2019 04:13:28 +0300 Message-Id: <20190818011329.14499-14-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190818011329.14499-1-laurent.pinchart@ideasonboard.com> References: <20190818011329.14499-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 13/14] libcamera: camera_manager: Construct CameraManager instances manually X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 18 Aug 2019 01:13:46 -0000 The CameraManager class is not supposed to be instantiated multiple times, which led to a singleton implementation. This requires a global instance of the CameraManager, which is destroyed when the global destructors are executed. Relying on global instances causes issues with cleanup, as the order in which the global destructors are run can't be controlled. In particular, the Android camera HAL implementation ends up destroying the CameraHalManager after the CameraManager, which leads to use-after-free problems. To solve this, remove the CameraManager::instance() method and make the CameraManager class instantiable directly. Multiple instances are still not allowed, and this is enforced by storing the instance pointer internally to be checked when an instance is created. Signed-off-by: Laurent Pinchart Reviewed-by: Jacopo Mondi --- include/libcamera/camera_manager.h | 12 ++++---- src/android/camera_hal_manager.cpp | 5 +++- src/cam/main.cpp | 8 ++++- src/libcamera/camera_manager.cpp | 36 ++++++++++------------- src/qcam/main.cpp | 4 ++- test/camera/camera_test.cpp | 3 +- test/controls/control_list.cpp | 3 +- test/list-cameras.cpp | 11 +++---- test/pipeline/ipu3/ipu3_pipeline_test.cpp | 3 +- 9 files changed, 48 insertions(+), 37 deletions(-) diff --git a/include/libcamera/camera_manager.h b/include/libcamera/camera_manager.h index ff7d4c7c6745..8331898c4219 100644 --- a/include/libcamera/camera_manager.h +++ b/include/libcamera/camera_manager.h @@ -23,6 +23,11 @@ class PipelineHandler; class CameraManager : public Object { public: + CameraManager(); + CameraManager(const CameraManager &) = delete; + CameraManager &operator=(const CameraManager &) = delete; + ~CameraManager(); + int start(); void stop(); @@ -32,23 +37,18 @@ public: void addCamera(std::shared_ptr camera); void removeCamera(Camera *camera); - static CameraManager *instance(); static const std::string &version() { return version_; } void setEventDispatcher(std::unique_ptr dispatcher); EventDispatcher *eventDispatcher(); private: - CameraManager(); - CameraManager(const CameraManager &) = delete; - CameraManager &operator=(const CameraManager &) = delete; - ~CameraManager(); - std::unique_ptr enumerator_; std::vector> pipes_; std::vector> cameras_; static const std::string version_; + static CameraManager *self_; }; } /* namespace libcamera */ diff --git a/src/android/camera_hal_manager.cpp b/src/android/camera_hal_manager.cpp index cf981720bca4..22f0323b3ff0 100644 --- a/src/android/camera_hal_manager.cpp +++ b/src/android/camera_hal_manager.cpp @@ -59,7 +59,7 @@ void CameraHalManager::run() * order to bind them to the camera HAL manager thread that * executes the event dispatcher. */ - cameraManager_ = libcamera::CameraManager::instance(); + cameraManager_ = new CameraManager(); int ret = cameraManager_->start(); if (ret) { @@ -93,7 +93,10 @@ void CameraHalManager::run() /* Clean up the resources we have allocated. */ proxies_.clear(); + cameraManager_->stop(); + delete cameraManager_; + cameraManager_ = nullptr; } CameraProxy *CameraHalManager::open(unsigned int id, diff --git a/src/cam/main.cpp b/src/cam/main.cpp index 77bb20e9622e..9d99f5587cbb 100644 --- a/src/cam/main.cpp +++ b/src/cam/main.cpp @@ -23,6 +23,7 @@ class CamApp { public: CamApp(); + ~CamApp(); static CamApp *instance(); @@ -54,6 +55,11 @@ CamApp::CamApp() CamApp::app_ = this; } +CamApp::~CamApp() +{ + delete cm_; +} + CamApp *CamApp::instance() { return CamApp::app_; @@ -67,7 +73,7 @@ int CamApp::init(int argc, char **argv) if (ret < 0) return ret; - cm_ = CameraManager::instance(); + cm_ = new CameraManager(); ret = cm_->start(); if (ret) { diff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp index 4a880684c5cb..12cb5a0be859 100644 --- a/src/libcamera/camera_manager.cpp +++ b/src/libcamera/camera_manager.cpp @@ -35,11 +35,14 @@ LOG_DEFINE_CATEGORY(Camera) * in the system to applications. The manager owns all Camera objects and * handles hot-plugging and hot-unplugging to manage the lifetime of cameras. * - * To interact with libcamera, an application retrieves the camera manager - * instance with CameraManager::instance(). The manager is initially stopped, - * and shall be configured before being started. In particular a custom event - * dispatcher shall be installed if needed with - * CameraManager::setEventDispatcher(). + * To interact with libcamera, an application starts by creating a camera + * manager instance. Only a single instance of the camera manager may exist at + * a time. Attempting to create a second instance without first deleting the + * existing instance results in undefined behaviour. + * + * The manager is initially stopped, and shall be configured before being + * started. In particular a custom event dispatcher shall be installed if + * needed with CameraManager::setEventDispatcher(). * * Once the camera manager is configured, it shall be started with start(). * This will enumerate all the cameras present in the system, which can then be @@ -56,13 +59,21 @@ LOG_DEFINE_CATEGORY(Camera) * removed due to hot-unplug. */ +CameraManager *CameraManager::self_ = nullptr; + CameraManager::CameraManager() : enumerator_(nullptr) { + if (self_) + LOG(Camera, Fatal) + << "Multiple CameraManager objects are not allowed"; + + self_ = this; } CameraManager::~CameraManager() { + self_ = nullptr; } /** @@ -212,21 +223,6 @@ void CameraManager::removeCamera(Camera *camera) } } -/** - * \brief Retrieve the camera manager instance - * - * The CameraManager is a singleton and can't be constructed manually. This - * function shall instead be used to retrieve the single global instance of the - * manager. - * - * \return The camera manager instance - */ -CameraManager *CameraManager::instance() -{ - static CameraManager manager; - return &manager; -} - /** * \fn const std::string &CameraManager::version() * \brief Retrieve the libcamera version string diff --git a/src/qcam/main.cpp b/src/qcam/main.cpp index 05d3b77e9edb..a7ff5c52663b 100644 --- a/src/qcam/main.cpp +++ b/src/qcam/main.cpp @@ -63,7 +63,7 @@ int main(int argc, char **argv) sigaction(SIGINT, &sa, nullptr); std::unique_ptr dispatcher(new QtEventDispatcher()); - CameraManager *cm = CameraManager::instance(); + CameraManager *cm = new CameraManager(); cm->setEventDispatcher(std::move(dispatcher)); ret = cm->start(); @@ -79,5 +79,7 @@ int main(int argc, char **argv) delete mainWindow; cm->stop(); + delete cm; + return ret; } diff --git a/test/camera/camera_test.cpp b/test/camera/camera_test.cpp index 24ff5fe0c64d..0e105414bf46 100644 --- a/test/camera/camera_test.cpp +++ b/test/camera/camera_test.cpp @@ -14,7 +14,7 @@ using namespace std; int CameraTest::init() { - cm_ = CameraManager::instance(); + cm_ = new CameraManager(); if (cm_->start()) { cout << "Failed to start camera manager" << endl; @@ -44,4 +44,5 @@ void CameraTest::cleanup() } cm_->stop(); + delete cm_; }; diff --git a/test/controls/control_list.cpp b/test/controls/control_list.cpp index c834edc352f5..f1d79ff8fcfd 100644 --- a/test/controls/control_list.cpp +++ b/test/controls/control_list.cpp @@ -21,7 +21,7 @@ class ControlListTest : public Test protected: int init() { - cm_ = CameraManager::instance(); + cm_ = new CameraManager(); if (cm_->start()) { cout << "Failed to start camera manager" << endl; @@ -203,6 +203,7 @@ protected: } cm_->stop(); + delete cm_; } private: diff --git a/test/list-cameras.cpp b/test/list-cameras.cpp index 070cbf2be977..55551d7e7e10 100644 --- a/test/list-cameras.cpp +++ b/test/list-cameras.cpp @@ -20,8 +20,8 @@ class ListTest : public Test protected: int init() { - cm = CameraManager::instance(); - cm->start(); + cm_ = new CameraManager(); + cm_->start(); return 0; } @@ -30,7 +30,7 @@ protected: { unsigned int count = 0; - for (const std::shared_ptr &camera : cm->cameras()) { + for (const std::shared_ptr &camera : cm_->cameras()) { cout << "- " << camera->name() << endl; count++; } @@ -40,11 +40,12 @@ protected: void cleanup() { - cm->stop(); + cm_->stop(); + delete cm_; } private: - CameraManager *cm; + CameraManager *cm_; }; TEST_REGISTER(ListTest) diff --git a/test/pipeline/ipu3/ipu3_pipeline_test.cpp b/test/pipeline/ipu3/ipu3_pipeline_test.cpp index 1d4cc4d4950b..8bfcd609a071 100644 --- a/test/pipeline/ipu3/ipu3_pipeline_test.cpp +++ b/test/pipeline/ipu3/ipu3_pipeline_test.cpp @@ -92,7 +92,7 @@ int IPU3PipelineTest::init() enumerator.reset(nullptr); - cameraManager_ = CameraManager::instance(); + cameraManager_ = new CameraManager(); ret = cameraManager_->start(); if (ret) { cerr << "Failed to start the CameraManager" << endl; @@ -120,6 +120,7 @@ int IPU3PipelineTest::run() void IPU3PipelineTest::cleanup() { cameraManager_->stop(); + delete cameraManager_; } TEST_REGISTER(IPU3PipelineTest) From patchwork Sun Aug 18 01:13:29 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 1851 Return-Path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id E38E161929 for ; Sun, 18 Aug 2019 03:13:45 +0200 (CEST) Received: from pendragon.bb.dnainternet.fi (dfj612yhrgyx302h3jwwy-3.rev.dnainternet.fi [IPv6:2001:14ba:21f5:5b00:ce28:277f:58d7:3ca4]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 7CB6051C for ; Sun, 18 Aug 2019 03:13:45 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1566090825; bh=rktlRI8NhJhkP4pGa7foujYjoTlOhpZQf+vZ+qjb5jM=; h=From:To:Subject:Date:In-Reply-To:References:From; b=FQW7g58Q172ZSBGyIW0Asm2yue1TpGmk1KPZYDQIzLxETukm56xuBhgUXO4Zi/1uM XqJQnawredeS6Azb1eeUuKzGRJr3ro1hBNzHSuUEyub7fgXh4JRKoSckVn61VqFxCe V2tZuEdOo4x+7yF/gPj3omoJnVXvG040Bf95oFww= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Date: Sun, 18 Aug 2019 04:13:29 +0300 Message-Id: <20190818011329.14499-15-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190818011329.14499-1-laurent.pinchart@ideasonboard.com> References: <20190818011329.14499-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 14/14] android: camera_device: Store static metadata in cache X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 18 Aug 2019 01:13:46 -0000 The CameraDevice class has a mechanism to cache static metadata, but doesn't use it. Fix it. Signed-off-by: Laurent Pinchart Reviewed-by: Jacopo Mondi --- src/android/camera_device.cpp | 42 +++++++++++++++++------------------ 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index 9acfed694abc..c27175ac090d 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -131,14 +131,14 @@ camera_metadata_t *CameraDevice::getStaticMetadata() /* \todo Use correct sizes */ #define STATIC_ENTRY_CAP 256 #define STATIC_DATA_CAP 6688 - camera_metadata_t *staticMetadata = - allocate_camera_metadata(STATIC_ENTRY_CAP, STATIC_DATA_CAP); + staticMetadata_ = allocate_camera_metadata(STATIC_ENTRY_CAP, + STATIC_DATA_CAP); /* Sensor static metadata. */ int32_t pixelArraySize[] = { 2592, 1944, }; - ret = add_camera_metadata_entry(staticMetadata, + ret = add_camera_metadata_entry(staticMetadata_, ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE, &pixelArraySize, 2); METADATA_ASSERT(ret); @@ -146,7 +146,7 @@ camera_metadata_t *CameraDevice::getStaticMetadata() int32_t sensorSizes[] = { 0, 0, 2560, 1920, }; - ret = add_camera_metadata_entry(staticMetadata, + ret = add_camera_metadata_entry(staticMetadata_, ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE, &sensorSizes, 4); METADATA_ASSERT(ret); @@ -154,13 +154,13 @@ camera_metadata_t *CameraDevice::getStaticMetadata() int32_t sensitivityRange[] = { 32, 2400, }; - ret = add_camera_metadata_entry(staticMetadata, + ret = add_camera_metadata_entry(staticMetadata_, ANDROID_SENSOR_INFO_SENSITIVITY_RANGE, &sensitivityRange, 2); METADATA_ASSERT(ret); uint16_t filterArr = ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GRBG; - ret = add_camera_metadata_entry(staticMetadata, + ret = add_camera_metadata_entry(staticMetadata_, ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT, &filterArr, 1); METADATA_ASSERT(ret); @@ -168,33 +168,33 @@ camera_metadata_t *CameraDevice::getStaticMetadata() int64_t exposureTimeRange[] = { 100000, 200000000, }; - ret = add_camera_metadata_entry(staticMetadata, + ret = add_camera_metadata_entry(staticMetadata_, ANDROID_SENSOR_INFO_EXPOSURE_TIME_RANGE, &exposureTimeRange, 2); METADATA_ASSERT(ret); int32_t orientation = 0; - ret = add_camera_metadata_entry(staticMetadata, + ret = add_camera_metadata_entry(staticMetadata_, ANDROID_SENSOR_ORIENTATION, &orientation, 1); METADATA_ASSERT(ret); /* Flash static metadata. */ char flashAvailable = ANDROID_FLASH_INFO_AVAILABLE_FALSE; - ret = add_camera_metadata_entry(staticMetadata, + ret = add_camera_metadata_entry(staticMetadata_, ANDROID_FLASH_INFO_AVAILABLE, &flashAvailable, 1); METADATA_ASSERT(ret); /* Lens static metadata. */ float fn = 2.53 / 100; - ret = add_camera_metadata_entry(staticMetadata, + ret = add_camera_metadata_entry(staticMetadata_, ANDROID_LENS_INFO_AVAILABLE_APERTURES, &fn, 1); METADATA_ASSERT(ret); /* Control metadata. */ char controlMetadata = ANDROID_CONTROL_MODE_AUTO; - ret = add_camera_metadata_entry(staticMetadata, + ret = add_camera_metadata_entry(staticMetadata_, ANDROID_CONTROL_AVAILABLE_MODES, &controlMetadata, 1); METADATA_ASSERT(ret); @@ -205,7 +205,7 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ANDROID_CONTROL_AE_ANTIBANDING_MODE_60HZ, ANDROID_CONTROL_AE_ANTIBANDING_MODE_AUTO, }; - ret = add_camera_metadata_entry(staticMetadata, + ret = add_camera_metadata_entry(staticMetadata_, ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES, availableAntiBandingModes, 4); METADATA_ASSERT(ret); @@ -214,19 +214,19 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ANDROID_CONTROL_AE_MODE_ON, ANDROID_CONTROL_AE_MODE_OFF, }; - ret = add_camera_metadata_entry(staticMetadata, + ret = add_camera_metadata_entry(staticMetadata_, ANDROID_CONTROL_AE_AVAILABLE_MODES, aeAvailableModes, 2); METADATA_ASSERT(ret); controlMetadata = ANDROID_CONTROL_AE_LOCK_AVAILABLE_TRUE; - ret = add_camera_metadata_entry(staticMetadata, + ret = add_camera_metadata_entry(staticMetadata_, ANDROID_CONTROL_AE_LOCK_AVAILABLE, &controlMetadata, 1); METADATA_ASSERT(ret); uint8_t awbLockAvailable = ANDROID_CONTROL_AWB_LOCK_AVAILABLE_FALSE; - ret = add_camera_metadata_entry(staticMetadata, + ret = add_camera_metadata_entry(staticMetadata_, ANDROID_CONTROL_AWB_LOCK_AVAILABLE, &awbLockAvailable, 1); @@ -236,7 +236,7 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ANDROID_SCALER_AVAILABLE_FORMATS_YCbCr_420_888, ANDROID_SCALER_AVAILABLE_FORMATS_IMPLEMENTATION_DEFINED, }; - ret = add_camera_metadata_entry(staticMetadata, + ret = add_camera_metadata_entry(staticMetadata_, ANDROID_SCALER_AVAILABLE_FORMATS, availableStreamFormats.data(), availableStreamFormats.size()); @@ -250,7 +250,7 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ANDROID_SCALER_AVAILABLE_FORMATS_IMPLEMENTATION_DEFINED, 2560, 1920, ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT, }; - ret = add_camera_metadata_entry(staticMetadata, + ret = add_camera_metadata_entry(staticMetadata_, ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS, availableStreamConfigurations.data(), availableStreamConfigurations.size()); @@ -259,7 +259,7 @@ camera_metadata_t *CameraDevice::getStaticMetadata() std::vector availableStallDurations = { ANDROID_SCALER_AVAILABLE_FORMATS_BLOB, 2560, 1920, 33333333, }; - ret = add_camera_metadata_entry(staticMetadata, + ret = add_camera_metadata_entry(staticMetadata_, ANDROID_SCALER_AVAILABLE_STALL_DURATIONS, availableStallDurations.data(), availableStallDurations.size()); @@ -270,18 +270,18 @@ camera_metadata_t *CameraDevice::getStaticMetadata() ANDROID_SCALER_AVAILABLE_FORMATS_IMPLEMENTATION_DEFINED, 2560, 1920, 33333333, ANDROID_SCALER_AVAILABLE_FORMATS_YCbCr_420_888, 2560, 1920, 33333333, }; - ret = add_camera_metadata_entry(staticMetadata, + ret = add_camera_metadata_entry(staticMetadata_, ANDROID_SCALER_AVAILABLE_MIN_FRAME_DURATIONS, minFrameDurations.data(), minFrameDurations.size()); METADATA_ASSERT(ret); /* Info static metadata. */ uint8_t supportedHWLevel = ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED; - ret = add_camera_metadata_entry(staticMetadata, + ret = add_camera_metadata_entry(staticMetadata_, ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL, &supportedHWLevel, 1); - return staticMetadata; + return staticMetadata_; } /*