Patch Detail
Show a patch.
GET /api/1.1/patches/17101/?format=api
{ "id": 17101, "url": "https://patchwork.libcamera.org/api/1.1/patches/17101/?format=api", "web_url": "https://patchwork.libcamera.org/patch/17101/", "project": { "id": 1, "url": "https://patchwork.libcamera.org/api/1.1/projects/1/?format=api", "name": "libcamera", "link_name": "libcamera", "list_id": "libcamera_core", "list_email": "libcamera-devel@lists.libcamera.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20220812124651.27496-6-utkarsh02t@gmail.com>", "date": "2022-08-12T12:46:45", "name": "[libcamera-devel,v2,05/11] qcam: ControlFrame: Add Current Value label", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "d2f2d284f45b5da365d0d67017027bc4975eb18f", "submitter": { "id": 114, "url": "https://patchwork.libcamera.org/api/1.1/people/114/?format=api", "name": "Utkarsh Tiwari", "email": "utkarsh02t@gmail.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/17101/mbox/", "series": [ { "id": 3410, "url": "https://patchwork.libcamera.org/api/1.1/series/3410/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=3410", "date": "2022-08-12T12:46:40", "name": "Introduce control interaction to qcam", "version": 2, "mbox": "https://patchwork.libcamera.org/series/3410/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/17101/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/17101/checks/", "tags": {}, "headers": { "Return-Path": "<libcamera-devel-bounces@lists.libcamera.org>", "X-Original-To": "parsemail@patchwork.libcamera.org", "Delivered-To": "parsemail@patchwork.libcamera.org", "Received": [ "from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 02A3BBE173\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 12 Aug 2022 12:47:17 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C243563339;\n\tFri, 12 Aug 2022 14:47:16 +0200 (CEST)", "from mail-pj1-x1029.google.com (mail-pj1-x1029.google.com\n\t[IPv6:2607:f8b0:4864:20::1029])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 8BD4763339\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 12 Aug 2022 14:47:14 +0200 (CEST)", "by mail-pj1-x1029.google.com with SMTP id\n\td65-20020a17090a6f4700b001f303a97b14so827913pjk.1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 12 Aug 2022 05:47:14 -0700 (PDT)", "from localhost.localdomain ([2404:bd00:3:dc0d:d8e:96a2:2dbe:5a83])\n\tby smtp.gmail.com with ESMTPSA id\n\te6-20020a17090a728600b001f069352d73sm1431785pjg.25.2022.08.12.05.47.11\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tFri, 12 Aug 2022 05:47:12 -0700 (PDT)" ], "DKIM-Signature": [ "v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1660308436;\n\tbh=EZyEcQ7PKeKc2DfvktgRpWMlok6oAGxXGjUsMD/mOH4=;\n\th=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:\n\tFrom;\n\tb=bNghF/TAY6ikWBjdYRPCzI1yMp2szceyrnSm+o3YJqmSqYfiyQIxkvfpmXPvteSDQ\n\tiwpSZciI5zoYMISX/Qv53nEkM2FTsuy+btZEKxHfYIoOdfODq1cBQPVJ4jZL8a+42r\n\tP27NyNiQtjof7Kp1u+buX4rFi2TjbZGLrdLCDC+roUD8SpTcb1g895NZsV/x3fLBJK\n\tk+6hSCLdxOLImjEFZLgvpkfJDBI4gUEDbk+/8rBhyqqVLNcK79nJKrMHi9goCZ3KAL\n\tgrJqfELK76mWqt9jfs1Nz8MQpnFYcdL8qTkjFbwSeTnyKoo8I4iyLpZCy0J99isTNv\n\tm0B4NQjczWvew==", "v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112;\n\th=content-transfer-encoding:mime-version:references:in-reply-to\n\t:message-id:date:subject:cc:to:from:from:to:cc;\n\tbh=X9GlEOeBAytrLDIMS7fbF23OZRtclahma2t8K369wZo=;\n\tb=AC8dmI6enb0rmyTCO2kn8Ioxl8aKL5k4/QbcdfiNQ+XGUH6UdIEgqIi6xQaS++X3M3\n\tGxmKBAsOT3CV1x9+O3eBQC1fDI2uPo986biP63LOAtauTcfgb9XL8ywqjd8ozCXQGBxm\n\t1/st+T/VHqPWpj2KyNY98V0ftPpxv9h5+NjqIw6CY8b4izXttRx8q9KP7t/1hbRvESD3\n\tY2u4Cpl5esgxSFzZEbX2nYgXtby9XJT8TRkckeB1VGT6gUIS1KbdILiMQqRAZPBz7UzZ\n\t+aHDvIF/WWLexLWjJKa3/M29ectOgOBXY26UGq7iTYv8DoKv1eFhJNlly+7C8c6CpoeI\n\tRGLQ==" ], "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (2048-bit key; \n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"AC8dmI6e\"; dkim-atps=neutral", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20210112;\n\th=content-transfer-encoding:mime-version:references:in-reply-to\n\t:message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc;\n\tbh=X9GlEOeBAytrLDIMS7fbF23OZRtclahma2t8K369wZo=;\n\tb=O78gnesJwE6Te1jvcVXWwAFy0E3Pwfl8uZVePSTSt172jM8NZXD1p+EINsM1yTnt0O\n\tm1xlXGl+yZdlFBGL8JwbrrIkfTxZJ9J0FHHjzUHqdrD+zQGbYfFSE2uqvNSgo+yxaEZ0\n\tBDHg4+9YydfZnnCh0nY+8P5F6tC3XdlqjlhKAzsMmM7/hHsRRWQZGZT8fQREww69NOJB\n\tAhluqlhV/KuCt7Nhxj4nEE3XBv0TR1XQEtt/bZT0UfBweisgxt0r+nqRI1+mg5mXtUNn\n\tp1M64upHivQR+MI02TwcHuqv8zKKv5pxxLFbZo23zaNe2vOJ8WV7hruAaUD73AKzjo4p\n\t/GbA==", "X-Gm-Message-State": "ACgBeo17/Y0g9XxmkY2wz5Ab3LdJHiTQblS9MdLqDLnisBYXtxCwbtEv\n\ttxQXvzMiMxKeVY3qKPfF1ftJ7y1VYZ0=", "X-Google-Smtp-Source": "AA6agR5TO1pxnD4HDV+xgR5t6q5vkkTg+w0zt29LUJPnkIV97skdrWD1+61aDzkQbSX1N9XJFdpoAw==", "X-Received": "by 2002:a17:90b:4a07:b0:1f5:1aff:4af with SMTP id\n\tkk7-20020a17090b4a0700b001f51aff04afmr3980374pjb.124.1660308432787; \n\tFri, 12 Aug 2022 05:47:12 -0700 (PDT)", "To": "libcamera-devel@lists.libcamera.org", "Date": "Fri, 12 Aug 2022 18:16:45 +0530", "Message-Id": "<20220812124651.27496-6-utkarsh02t@gmail.com>", "X-Mailer": "git-send-email 2.25.1", "In-Reply-To": "<20220812124651.27496-1-utkarsh02t@gmail.com>", "References": "<20220812124651.27496-1-utkarsh02t@gmail.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Subject": "[libcamera-devel] [PATCH v2 05/11] qcam: ControlFrame: Add Current\n\tValue label", "X-BeenThere": "libcamera-devel@lists.libcamera.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "<libcamera-devel.lists.libcamera.org>", "List-Unsubscribe": "<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>", "List-Archive": "<https://lists.libcamera.org/pipermail/libcamera-devel/>", "List-Post": "<mailto:libcamera-devel@lists.libcamera.org>", "List-Help": "<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>", "List-Subscribe": "<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>", "From": "Utkarsh Tiwari via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>", "Reply-To": "Utkarsh Tiwari <utkarsh02t@gmail.com>", "Errors-To": "libcamera-devel-bounces@lists.libcamera.org", "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>" }, "content": "Add a QLabel which displays the Current value of the control.\nCurrently this only supports ControlTypeBool.\n\nAt start do not display any Current value as we cannot be sure of the\nstarting conditions and the controls that have been applied.\n\nWhen a request completes succesfully completes, we use its ControlList\nto update the currentValue.\n\nThe current model for sending the controlValue is :\n\nMainWindow -> Settings -> Control Tab -> Control Frame\n\nSigned-off-by: Utkarsh Tiwari <utkarsh02t@gmail.com>\n---\n src/qcam/main_window.cpp | 10 +++++++++\n src/qcam/main_window.h | 4 ++++\n src/qcam/settings/control_frame.cpp | 32 +++++++++++++++++++++++++++++\n src/qcam/settings/control_frame.h | 4 ++++\n src/qcam/settings/controls_tab.cpp | 7 +++++++\n src/qcam/settings/controls_tab.h | 5 +++++\n src/qcam/settings/settings_dialog.h | 3 +++\n 7 files changed, 65 insertions(+)", "diff": "diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp\nindex 87cdad82..4ee3a013 100644\n--- a/src/qcam/main_window.cpp\n+++ b/src/qcam/main_window.cpp\n@@ -278,6 +278,8 @@ void MainWindow::openSettingsDialog()\n \tsettingsDialog_ = new SettingsDialog(camera_, this);\n \tconnect(settingsDialog_, &SettingsDialog::controlListChanged,\n \t\tthis, &MainWindow::controlListLatch);\n+\tconnect(this, &MainWindow::processControls,\n+\t\tsettingsDialog_, &SettingsDialog::processControls);\n \tsettingsDialog_->show();\n }\n \n@@ -795,6 +797,14 @@ void MainWindow::processCapture()\n \t\trequest = doneQueue_.dequeue();\n \t}\n \n+\t/* Process controlList for current values. */\n+\tif (settingsDialog_) {\n+\t\tif (settingsDialog_->isVisible()) {\n+\t\t\tcontrolListShared_ = std::make_shared<const libcamera::ControlList>(request->controls());\n+\t\t\tQ_EMIT processControls(controlListShared_);\n+\t\t}\n+\t}\n+\n \t/* Process buffers. */\n \tif (request->buffers().count(vfStream_))\n \t\tprocessViewfinder(request->buffers().at(vfStream_));\ndiff --git a/src/qcam/main_window.h b/src/qcam/main_window.h\nindex 8137e736..8615d22c 100644\n--- a/src/qcam/main_window.h\n+++ b/src/qcam/main_window.h\n@@ -61,6 +61,9 @@ public:\n \n \tbool event(QEvent *e) override;\n \n+Q_SIGNALS:\n+\tvoid processControls(std::shared_ptr<const libcamera::ControlList>);\n+\n private Q_SLOTS:\n \tvoid quit();\n \tvoid updateTitle();\n@@ -148,4 +151,5 @@ private:\n \tstd::unique_ptr<CaptureScript> script_;\n \tstd::string scriptPath_;\n \tlibcamera::ControlList controlList_;\n+\tstd::shared_ptr<const libcamera::ControlList> controlListShared_;\n };\ndiff --git a/src/qcam/settings/control_frame.cpp b/src/qcam/settings/control_frame.cpp\nindex 273ce79b..2554f70d 100644\n--- a/src/qcam/settings/control_frame.cpp\n+++ b/src/qcam/settings/control_frame.cpp\n@@ -32,6 +32,7 @@ ControlFrame::ControlFrame(const ControlId *control,\n \t * ownership to its parent widget.\n \t */\n \tframeVLayout->addWidget(defaultValueLabel());\n+\tframeVLayout->addWidget(currentValueLabel());\n \tframeVLayout->addWidget(controlInteraction());\n \n \tsetFrameStyle(QFrame::StyledPanel);\n@@ -82,10 +83,41 @@ QWidget *ControlFrame::controlInteraction(QWidget *parent)\n \t}\n }\n \n+QWidget *ControlFrame::currentValueLabel(QWidget *parent)\n+{\n+\tQWidget *containerWidget = new QWidget(parent);\n+\n+\tQHBoxLayout *HCurrentValueLayout = new QHBoxLayout(containerWidget);\n+\n+\tcurrentValue_ = new QLabel;\n+\n+\tHCurrentValueLayout->addWidget(new QLabel(\"Current Value: \"));\n+\tHCurrentValueLayout->addWidget(currentValue_);\n+\n+\t/* Align with ControlName. */\n+\tHCurrentValueLayout->setAlignment(Qt::AlignLeft);\n+\tHCurrentValueLayout->setMargin(0);\n+\n+\treturn containerWidget;\n+}\n /* -----------------------------------------------------------------------------\n * Qt Slots\n */\n \n+void ControlFrame::setCurrentValue(const libcamera::ControlValue controlValue)\n+{\n+\tswitch (control_->type()) {\n+\tcase ControlTypeBool:\n+\t\tif (controlValue.get<bool>())\n+\t\t\tcurrentValue_->setText(\"True\");\n+\t\telse\n+\t\t\tcurrentValue_->setText(\"False\");\n+\t\tbreak;\n+\tdefault:\n+\t\tbreak;\n+\t}\n+}\n+\n void ControlFrame::notifyControlChange()\n {\n \tControlValue controlValue = ControlValue();\ndiff --git a/src/qcam/settings/control_frame.h b/src/qcam/settings/control_frame.h\nindex 61005ea5..9c3b059b 100644\n--- a/src/qcam/settings/control_frame.h\n+++ b/src/qcam/settings/control_frame.h\n@@ -12,6 +12,7 @@\n #include <QCheckBox>\n #include <QFrame>\n #include <QLabel>\n+#include <QString>\n #include <QWidget>\n \n class ControlFrame : public QFrame\n@@ -24,6 +25,7 @@ public:\n \t\t QWidget *parent);\n \t~ControlFrame() = default;\n \n+\tvoid setCurrentValue(const libcamera::ControlValue controlValue);\n Q_SIGNALS:\n \tvoid controlChanged(const libcamera::ControlId *controlId,\n \t\t\t const libcamera::ControlValue);\n@@ -37,9 +39,11 @@ private:\n \n \t/* Widgets */\n \tQWidget *controlInteraction(QWidget *parent = nullptr);\n+\tQWidget *currentValueLabel(QWidget *parent = nullptr);\n \tQLabel *defaultValueLabel(QWidget *parent = nullptr);\n \n \tQCheckBox *controlCheckBox_;\n+\tQLabel *currentValue_;\n \n \t/* Helper Hunctions */\n \tQString getDefaultValueQStr();\ndiff --git a/src/qcam/settings/controls_tab.cpp b/src/qcam/settings/controls_tab.cpp\nindex 30899783..496b5d3b 100644\n--- a/src/qcam/settings/controls_tab.cpp\n+++ b/src/qcam/settings/controls_tab.cpp\n@@ -31,6 +31,7 @@ ControlsTab::ControlsTab(std::shared_ptr<libcamera::Camera> camera_,\n \tint controlCount = 0;\n \tfor (auto &[control, info] : camera_->controls()) {\n \t\tControlFrame *controlFrame = new ControlFrame(control, info, this);\n+\t\tcontrolFrameMap_[control->id()] = controlFrame;\n \t\tconnect(controlFrame, &ControlFrame::controlChanged,\n \t\t\tthis, &ControlsTab::controlChanged);\n \n@@ -50,6 +51,12 @@ ControlsTab::ControlsTab(std::shared_ptr<libcamera::Camera> camera_,\n * Qt Slots\n */\n \n+void ControlsTab::notifyControlFrame(std::shared_ptr<const libcamera::ControlList> controlList)\n+{\n+\tfor (auto &[id, controlValue] : *(controlList))\n+\t\tcontrolFrameMap_[id]->setCurrentValue(controlValue);\n+}\n+\n void ControlsTab::controlChanged(const libcamera::ControlId *controlId,\n \t\t\t\t const libcamera::ControlValue controlValue)\n {\ndiff --git a/src/qcam/settings/controls_tab.h b/src/qcam/settings/controls_tab.h\nindex 28efd35e..215c41fd 100644\n--- a/src/qcam/settings/controls_tab.h\n+++ b/src/qcam/settings/controls_tab.h\n@@ -7,6 +7,7 @@\n \n #pragma once\n \n+#include <map>\n #include <memory>\n \n #include <libcamera/camera.h>\n@@ -15,6 +16,8 @@\n #include <QVBoxLayout>\n #include <QWidget>\n \n+#include \"control_frame.h\"\n+\n class ControlsTab : public QScrollArea\n {\n \tQ_OBJECT\n@@ -29,7 +32,9 @@ Q_SIGNALS:\n public Q_SLOTS:\n \tvoid controlChanged(const libcamera::ControlId *controlId,\n \t\t\t const libcamera::ControlValue controlValue);\n+\tvoid notifyControlFrame(std::shared_ptr<const libcamera::ControlList> controlList);\n \n private:\n \tstd::shared_ptr<libcamera::ControlList> controlList_;\n+\tstd::map<const unsigned int, ControlFrame *> controlFrameMap_;\n };\ndiff --git a/src/qcam/settings/settings_dialog.h b/src/qcam/settings/settings_dialog.h\nindex e6efd876..f0462d89 100644\n--- a/src/qcam/settings/settings_dialog.h\n+++ b/src/qcam/settings/settings_dialog.h\n@@ -34,6 +34,8 @@ public:\n \t\tsettingTabWidget->addTab(controlsTab, \"Controls\");\n \t\tconnect(controlsTab, &ControlsTab::controlListChanged,\n \t\t\tthis, &SettingsDialog::controlListChanged);\n+\t\tconnect(this, &SettingsDialog::processControls,\n+\t\t\tcontrolsTab, &ControlsTab::notifyControlFrame);\n \n \t\tsetWindowTitle(\"Settings\");\n \t}\n@@ -41,4 +43,5 @@ public:\n \n Q_SIGNALS:\n \tvoid controlListChanged(std::shared_ptr<const libcamera::ControlList>);\n+\tvoid processControls(std::shared_ptr<const libcamera::ControlList>);\n };\n", "prefixes": [ "libcamera-devel", "v2", "05/11" ] }