From patchwork Mon Sep 12 09:56:55 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rishikesh Donadkar X-Patchwork-Id: 17362 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 BB81FC3272 for ; Mon, 12 Sep 2022 09:57:31 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 76DBA61F91; Mon, 12 Sep 2022 11:57:31 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1662976651; bh=lQJSaQUTc8orZsX78oB9WnufDadrd7DfitQsi3JpdTo=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=yRkrVc2MbcKQN8UihCASowFt05O2ktWCygG+m+9jHfNFQgcK9X34fun9k02tZC1fq aSHJPMISRjIDwMSAr3ShBnUfuINf+0+G1+SKK7JwjVnspdZgJo8eUi+la1hqOVSo7Y bpwjyyM7xfwZiaddGyC88w20fFrl9BQRhbTh+v9IQxiRSLN8LLRr5Se66H/t1ezCHF 8/3PrlzPzoZU6trYvfTPuC1DTFg5kNuCl9DsvBPs6ZCESIkVQ8jduCuG7TNulTIGzv QpsO0Fw4asN4WltDLJZ4xjFXtJB+vBzshGqT5XJmYHOB8++veQzz1b5TkhE+O/55W1 gd2fxpJvL2Tew== Received: from mail-pg1-x52c.google.com (mail-pg1-x52c.google.com [IPv6:2607:f8b0:4864:20::52c]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 5A36E6099F for ; Mon, 12 Sep 2022 11:57:30 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="HtveaVHB"; dkim-atps=neutral Received: by mail-pg1-x52c.google.com with SMTP id bh13so7785688pgb.4 for ; Mon, 12 Sep 2022 02:57:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date; bh=5+ghm+efHEtiWjyQKatJom7BmBXXmwJFSAjK5d4VpSQ=; b=HtveaVHBytp3clHpdVEOc0XlFQb8zu5MdzXCKxJc0rnj0ezp0w1uFga3SrZJKC5S1x dVWu+xGjcuX+8BPykFOptglBpHPC+yIKkVvqZ9nuBoOR8kNM1vyygL6/+fSzvxKIY+eP Mnz2UkomxIZtVw3U5MakTLD4Rn0+UKN3ooXn6J29VzXEbMpHNnQs611ttGlF2FYHXNQ7 T0ARPJs2+iJWd7hUIQPf6WwuM5tUa3+9QKqp3+OACSpcE2NRVqrone44T8xjkLWs0LUb dLEhdYse3V2c13aAK+GXBPZt4daOCooCsgyqY8VYWM5MspKL0H17BLiWKTNuRhwQ7B55 NilQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date; bh=5+ghm+efHEtiWjyQKatJom7BmBXXmwJFSAjK5d4VpSQ=; b=bVyNrwA4u+PdLv0IvR1JAK7hz+Dzmy8ZQSoFJWDkgxRYbxi0I60j4d0Dwmnv1jmnGk oc/Lxe6YiN7gRtcdzlUspOu9kkxZ80r7Dt5YwKraL91C0/E5HsSANVxbNwg+4nqbX5F4 iaKq9+sE1CdI0LhGbV76eqEnPKmZZ4m9qRIuzqWX6Ag5gGLlg63g/HvG7SZNnQnWYNpT tYB9dl9NzGznaRRVW/P1RtTiCzTKR4QsATIb3Kd4TxeOOIsTCNUSUhPjmxoyMKqKtmIB NTdnV72Tpz8pDjXliW5GOM5V8XFCL3BSLIROuoLOoWoh629G+r56e0CkwMXsYV7G0She YbvQ== X-Gm-Message-State: ACgBeo1J9pdLxJV1hP2p74Md6L/yFfMB38PylHB8vEts1A5AKYKkIrn/ dXjurg7jWTnXlA4j9BWu3ivfL40JBf0T1g== X-Google-Smtp-Source: AA6agR7RmT2wfV4THNh5wpCfV2FhYDWqmqDLhnGKcwuh+Bfzkgiu5OUuAJBwISGQfZRXX9jM9wNI9A== X-Received: by 2002:a63:8241:0:b0:435:fa7:f0f1 with SMTP id w62-20020a638241000000b004350fa7f0f1mr19819270pgd.155.1662976648727; Mon, 12 Sep 2022 02:57:28 -0700 (PDT) Received: from localhost.localdomain ([49.36.99.4]) by smtp.googlemail.com with ESMTPSA id t14-20020aa7946e000000b00540dbae6272sm4959495pfq.213.2022.09.12.02.57.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Sep 2022 02:57:28 -0700 (PDT) To: libcamera-devel@lists.libcamera.org Date: Mon, 12 Sep 2022 15:26:55 +0530 Message-Id: <20220912095656.19013-2-rishikeshdonadkar@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220912095656.19013-1-rishikeshdonadkar@gmail.com> References: <20220912095656.19013-1-rishikeshdonadkar@gmail.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v4 1/2] gstreamer: Configure the camera before exposing the caps. 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: , X-Patchwork-Original-From: Rishikesh Donadkar via libcamera-devel From: Rishikesh Donadkar Reply-To: Rishikesh Donadkar Cc: nicolas.dufresne@collabora.com, vedantparanjape160201@gmail.com Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" In libcamerasrc capabilities are exposed on the src pad before configuring the camera. To add support to control and negotiate the framerate, the controls::FrameDuration needs to be bound checked between the min/max values that camera can support and later the applied framerate needs to be exposed along with resolutions and colorimetry through caps. Valid bounds of the controls::FrameDuration cannot be known before the configuration of the camera. Shift the camera::configure() before the for loop that is exposing resolutions, colorimetry to the GStreamer through a new CAPS event. Through this we can know the valid bounds of the FrameDuration and clam the frame_duration accordingly before applying to the camera. Through this caps can be exposed without a need of additional new CAPS event for framerate. Signed-off-by: Rishikesh Donadkar --- src/gstreamer/gstlibcamerasrc.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/gstreamer/gstlibcamerasrc.cpp b/src/gstreamer/gstlibcamerasrc.cpp index 16d70fea..1ee1d08a 100644 --- a/src/gstreamer/gstlibcamerasrc.cpp +++ b/src/gstreamer/gstlibcamerasrc.cpp @@ -515,6 +515,15 @@ gst_libcamera_src_task_enter(GstTask *task, [[maybe_unused]] GThread *thread, goto done; } + ret = state->cam_->configure(state->config_.get()); + if (ret) { + GST_ELEMENT_ERROR(self, RESOURCE, SETTINGS, + ("Failed to configure camera: %s", g_strerror(-ret)), + ("Camera::configure() failed with error code %i", ret)); + gst_task_stop(task); + return; + } + /* * Regardless if it has been modified, create clean caps and push the * caps event. Downstream will decide if the caps are acceptable. @@ -535,15 +544,6 @@ gst_libcamera_src_task_enter(GstTask *task, [[maybe_unused]] GThread *thread, gst_pad_push_event(srcpad, gst_event_new_segment(&segment)); } - ret = state->cam_->configure(state->config_.get()); - if (ret) { - GST_ELEMENT_ERROR(self, RESOURCE, SETTINGS, - ("Failed to configure camera: %s", g_strerror(-ret)), - ("Camera::configure() failed with error code %i", ret)); - gst_task_stop(task); - return; - } - self->allocator = gst_libcamera_allocator_new(state->cam_, state->config_.get()); if (!self->allocator) { GST_ELEMENT_ERROR(self, RESOURCE, NO_SPACE_LEFT,