From 84c0b9dd0a2e022631c5cb93e9ef60c511af55a4 Mon Sep 17 00:00:00 2001 From: Jaslo Ziska Date: Tue, 22 Jul 2025 12:39:29 +0200 Subject: [PATCH] gstreamer: Log and check adjusted camera configuration As CameraConfiguration::validate() might alter the configuration previously negotiated with downstream, log an info when this happens as GStreamer source elements are not supposed to do that. Also check if downstream can accept this new stream configuration and if not, return a not-negotiated error. Signed-off-by: Jaslo Ziska Reviewed-by: Nicolas Dufresne Reviewed-by: Kieran Bingham Reviewed-by: Umang Jain Signed-off-by: Laurent Pinchart --- src/gstreamer/gstlibcamerasrc.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/gstreamer/gstlibcamerasrc.cpp b/src/gstreamer/gstlibcamerasrc.cpp index 7f4a39ec..79a025a5 100644 --- a/src/gstreamer/gstlibcamerasrc.cpp +++ b/src/gstreamer/gstlibcamerasrc.cpp @@ -617,8 +617,13 @@ gst_libcamera_src_negotiate(GstLibcameraSrc *self) } /* Validate the configuration. */ - if (state->config_->validate() == CameraConfiguration::Invalid) + CameraConfiguration::Status status = state->config_->validate(); + if (status == CameraConfiguration::Invalid) return false; + else if (status == CameraConfiguration::Adjusted) + GST_ELEMENT_INFO(self, RESOURCE, SETTINGS, + ("Configuration was adjusted"), + ("CameraConfiguration::validate() returned CameraConfiguration::Adjusted")); int ret = state->cam_->configure(state->config_.get()); if (ret) { @@ -643,6 +648,10 @@ gst_libcamera_src_negotiate(GstLibcameraSrc *self) g_autoptr(GstCaps) caps = gst_libcamera_stream_configuration_to_caps(stream_cfg, transfer[i]); gst_libcamera_framerate_to_caps(caps, element_caps); + if (status == CameraConfiguration::Adjusted && + !gst_pad_peer_query_accept_caps(srcpad, caps)) + return false; + if (!gst_pad_push_event(srcpad, gst_event_new_caps(caps))) return false; }