[RFC,v2,18/22,DNI] apps: cam: Use Camera::metadataAvailable signal
diff mbox series

Message ID 20250721104622.1550908-19-barnabas.pocze@ideasonboard.com
State New
Headers show
Series
  • libcamera: Add `MetadataList`
Related show

Commit Message

Barnabás Pőcze July 21, 2025, 10:46 a.m. UTC
From: Jacopo Mondi <jacopo.mondi@ideasonboard.com>

Handle the Camera::metadataAvailable signal and print the metadata
list.

Use the --metadata option of cam to validate that the metadata list
in Request::metadata() matches the accumulated results.
---
Original: https://patchwork.libcamera.org/patch/22234/
---
 src/apps/cam/camera_session.cpp | 11 +++++++++++
 1 file changed, 11 insertions(+)

Comments

Paul Elder Sept. 18, 2025, 11:28 a.m. UTC | #1
Quoting Barnabás Pőcze (2025-07-21 19:46:18)
> From: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
> 
> Handle the Camera::metadataAvailable signal and print the metadata
> list.
> 
> Use the --metadata option of cam to validate that the metadata list
> in Request::metadata() matches the accumulated results.

I personally think that this is a useful patch. This is what cam is for, isn't
it?

But there's no sob tag so I can't rb it :)

Paul

> ---
> Original: https://patchwork.libcamera.org/patch/22234/
> ---
>  src/apps/cam/camera_session.cpp | 11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/src/apps/cam/camera_session.cpp b/src/apps/cam/camera_session.cpp
> index 96ab4ca8e..16c735ef4 100644
> --- a/src/apps/cam/camera_session.cpp
> +++ b/src/apps/cam/camera_session.cpp
> @@ -299,6 +299,17 @@ int CameraSession::start()
>  
>         camera_->requestCompleted.connect(this, &CameraSession::requestComplete);
>  
> +       if (printMetadata_) {
> +               camera_->metadataAvailable.connect(this, [](Request *r, MetadataList::Diff update) {
> +                       std::cout << ">> early metadata for " << r->sequence() << " with " << update.size() << " entries {\n";
> +                       for (auto &&[tag, v] : update) {
> +                               const auto *id = controls::controls.at(tag);
> +                               std::cout << '\t' << id->name() << " = " << v << '\n';
> +                       }
> +                       std::cout << "}" << std::endl;
> +               });
> +       }
> +
>  #ifdef HAVE_KMS
>         if (options_.isSet(OptDisplay))
>                 sink_ = std::make_unique<KMSSink>(options_[OptDisplay].toString());
> -- 
> 2.50.1
>

Patch
diff mbox series

diff --git a/src/apps/cam/camera_session.cpp b/src/apps/cam/camera_session.cpp
index 96ab4ca8e..16c735ef4 100644
--- a/src/apps/cam/camera_session.cpp
+++ b/src/apps/cam/camera_session.cpp
@@ -299,6 +299,17 @@  int CameraSession::start()
 
 	camera_->requestCompleted.connect(this, &CameraSession::requestComplete);
 
+	if (printMetadata_) {
+		camera_->metadataAvailable.connect(this, [](Request *r, MetadataList::Diff update) {
+			std::cout << ">> early metadata for " << r->sequence() << " with " << update.size() << " entries {\n";
+			for (auto &&[tag, v] : update) {
+				const auto *id = controls::controls.at(tag);
+				std::cout << '\t' << id->name() << " = " << v << '\n';
+			}
+			std::cout << "}" << std::endl;
+		});
+	}
+
 #ifdef HAVE_KMS
 	if (options_.isSet(OptDisplay))
 		sink_ = std::make_unique<KMSSink>(options_[OptDisplay].toString());