From patchwork Fri Oct 1 16:10:59 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Javier Martinez Canillas X-Patchwork-Id: 14024 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 A1227BDC71 for ; Fri, 1 Oct 2021 16:11:57 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 5F877691AB; Fri, 1 Oct 2021 18:11:57 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.b="DTkMUyag"; dkim-atps=neutral Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 0965B691AC for ; Fri, 1 Oct 2021 18:11:54 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1633104710; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=8CL6ai93xmy1pTcWIK7zEjpzBBOLUmpt/YveAEX1Vqc=; b=DTkMUyagkcQYuT0ZyJsDcxy1MUZ303dKKj6x/vMQ0ysVkIVfYSpdwAvCxe0odU8jP8hL1M 6Eu1VMt3I0siv5dTncHSYHdEUEZG0Y4Oe79Cv4TPjZSPk0PkeFDFx65rmcdm2Yo5NXaamt U9tA30HHu/nn671O/LI0kzEfGQruY/0= Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-503-icnh1jaiNqm6sc2EI7k7eA-1; Fri, 01 Oct 2021 12:11:49 -0400 X-MC-Unique: icnh1jaiNqm6sc2EI7k7eA-1 Received: by mail-wm1-f69.google.com with SMTP id 200-20020a1c00d1000000b0030b3dce20e1so6187643wma.0 for ; Fri, 01 Oct 2021 09:11:49 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=8CL6ai93xmy1pTcWIK7zEjpzBBOLUmpt/YveAEX1Vqc=; b=F79jZ9TuLC+GVXjUS2rMGUpI/PeK1TdUWzuO90O8GfkUGvsEo84nBQC5u6xNU7J1Hl 9Vt9lNt5TJBwDbo1r3QAmzScs5SUwdfQyxDnD5jo2w/4HLFKy5RAntnZe+BEdU6L9O9c UIk9JwkK/X4QnWQgE64pVWAFzdZ3GI2ClI9MIrpTjYsvlbvD1slldYyr2Y8/qIMxPE11 WX5e25uchZUG4Tw8BGDLYHqeqLickkPUJSTUta3rdqDL3HvBb4ITAxZPFyAhaq7mGGlu e143bH/LaOkuVRIlpLblKbQwxh7HklqqBDP2lory9eEdbzQESdYcKf8uZb+GoFoUv1LR cYhQ== X-Gm-Message-State: AOAM532zb71UC6T4CqRnJ54Lyya115CvrZZpDvODZEAvz6t8RjjqqQlo 5pY4w9J8l9/v/gYfW1BJIRwJq7EAhgsh3yD03yeTxuzzw7bATo797ZYd/Pe8GXIfDW78NTbB9S7 QTa75Ltufybgzb9hCO4jR9t0pbIFUirhpDYmY9U1pij4fwjhkvWWriyR4D2qrp5Zqzf6CLMHtZh mTUhAsAfKo X-Received: by 2002:a1c:9dc8:: with SMTP id g191mr3075500wme.117.1633104707436; Fri, 01 Oct 2021 09:11:47 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwZwbm8zQDfzz14AFw+ro2FYi8BCdrxrTV+rejVGAeJtPhqUqQKXzeFErHeuK/XkaZxoEK2OQ== X-Received: by 2002:a1c:9dc8:: with SMTP id g191mr3075467wme.117.1633104707127; Fri, 01 Oct 2021 09:11:47 -0700 (PDT) Received: from minerva.redhat.com ([92.176.231.106]) by smtp.gmail.com with ESMTPSA id d3sm7138164wrb.36.2021.10.01.09.11.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Oct 2021 09:11:46 -0700 (PDT) From: Javier Martinez Canillas To: libcamera-devel@lists.libcamera.org Date: Fri, 1 Oct 2021 18:10:59 +0200 Message-Id: <20211001161100.1405576-1-javierm@redhat.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=javierm@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Subject: [libcamera-devel] [PATCH 1/2] gstreamer: Check if Stream configurations were generated correctly 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: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Currently, the gst_libcamera_device_new() function assumes that a call to Camera::generateConfiguration() will always succeed, but that may not be the case and the return value must to be checked. Otherwise, could lead to a NULL pointer deference if the pipeline handler failed to generate a configuration for the VideoRecording stream role. Signed-off-by: Javier Martinez Canillas Reviewed-by: Nicolas Dufresne Reviewed-by: Laurent Pinchart --- src/gstreamer/gstlibcameraprovider.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/gstreamer/gstlibcameraprovider.cpp b/src/gstreamer/gstlibcameraprovider.cpp index aee6f9a2be2..6eb0a0eb0c4 100644 --- a/src/gstreamer/gstlibcameraprovider.cpp +++ b/src/gstreamer/gstlibcameraprovider.cpp @@ -132,6 +132,10 @@ gst_libcamera_device_new(const std::shared_ptr &camera) roles.push_back(StreamRole::VideoRecording); std::unique_ptr config = camera->generateConfiguration(roles); + if (!config || config->size() != roles.size()) { + GST_ERROR("Failed to generate a default configuration for %s", name); + return nullptr; + } for (const StreamConfiguration &stream_cfg : *config) { GstCaps *sub_caps = gst_libcamera_stream_formats_to_caps(stream_cfg.formats()); @@ -189,8 +193,16 @@ gst_libcamera_provider_probe(GstDeviceProvider *provider) for (const std::shared_ptr &camera : cm->cameras()) { GST_INFO_OBJECT(self, "Found camera '%s'", camera->id().c_str()); + + GstDevice *dev = gst_libcamera_device_new(camera); + if (!dev) { + GST_ERROR_OBJECT(self, "Failed to add camera '%s'", + camera->id().c_str()); + return nullptr; + } + devices = g_list_append(devices, - g_object_ref_sink(gst_libcamera_device_new(camera))); + g_object_ref_sink(dev)); } return devices; From patchwork Fri Oct 1 16:11:00 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Javier Martinez Canillas X-Patchwork-Id: 14023 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 8DFC2BDC71 for ; Fri, 1 Oct 2021 16:11:55 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id E756A691AA; Fri, 1 Oct 2021 18:11:54 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.b="V6gCh1ZL"; dkim-atps=neutral Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id B9BFB691A6 for ; Fri, 1 Oct 2021 18:11:52 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1633104711; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=tj5sUBYDfX3+O1p+bYWOYtIHbUEPbnnKj4O1RM+2HTw=; b=V6gCh1ZLjVNcrw1PTaCD89yi75yazrqEVQAVYE3in3Ww8/hMuFEwDzH5ssqWZkl/5AlbIA NP5twsqL7rkIbavBeabj8rGKxrWqUNPKVA8en1dnhjqVPGqkFqNtwxVDTI6BuN+LvLwYOQ kaiEfLGuCubjCro0lQEGPjurWO6fYHg= Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-222-x8j_VlM1MSyUlzed_pZhqA-1; Fri, 01 Oct 2021 12:11:50 -0400 X-MC-Unique: x8j_VlM1MSyUlzed_pZhqA-1 Received: by mail-wr1-f69.google.com with SMTP id n18-20020adff092000000b001609d9081d4so35322wro.18 for ; Fri, 01 Oct 2021 09:11:50 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=tj5sUBYDfX3+O1p+bYWOYtIHbUEPbnnKj4O1RM+2HTw=; b=4iBACdQG5Am+HY89XloSeJPIvyb+ZctFghCeE2zzPIKoAzjsMLeX/iD1UwHBrceOrC wUlsNfUhYqOMV4yQqjAERZJq5toj6hXJKe/t6sdiLWCYwMgTsIo6PkF/Oa9KYM8ryeHF 3Hwn2IDDfHFu59aNDqGwNk/9a4seW9SOmPRzyIhrQLl4x/MV44e8sHdxAR9KEdblun/6 aljIJaPi6ArljoOBRwfNEXZeRExpnRFpPde7OGRjgqUJ8TjDjEHLPp6FENAY/JfVNrqU fNDGomwBdYwwwFKTX6OXRDv/IXQ1ItC39reQgdDXFxMHXQd0xooXUdkpTsb+WhvboBKE WAjQ== X-Gm-Message-State: AOAM530lcpDWYhM3KKYqfi0f186o8KzLAyUiWju7U4d+8QgiMRG4xQS/ UK/YaaoWN5VbWZ+fX3ofIYgXjAVEA188R6U/cGA/jruknE3ux+9sohgYtcFwPYhQIADzN+CKMPu YKmNJvEXNudxN4UXOX5x0RJxxUbH/mwvtmfUJbfkk5WQRWs3cIivv2xuHO5UH/b5fZIBF1cWNIC cBGQ81DEtn X-Received: by 2002:a1c:8088:: with SMTP id b130mr5473176wmd.36.1633104709052; Fri, 01 Oct 2021 09:11:49 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxQQzL1Xs0JXW4Xx/NSk20DEAcyq2jds+Q/NJ43f1psx8VQOOZjRjfzyiTBcOIi90ylXbRNYg== X-Received: by 2002:a1c:8088:: with SMTP id b130mr5473132wmd.36.1633104708669; Fri, 01 Oct 2021 09:11:48 -0700 (PDT) Received: from minerva.redhat.com ([92.176.231.106]) by smtp.gmail.com with ESMTPSA id d3sm7138164wrb.36.2021.10.01.09.11.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Oct 2021 09:11:48 -0700 (PDT) From: Javier Martinez Canillas To: libcamera-devel@lists.libcamera.org Date: Fri, 1 Oct 2021 18:11:00 +0200 Message-Id: <20211001161100.1405576-2-javierm@redhat.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211001161100.1405576-1-javierm@redhat.com> References: <20211001161100.1405576-1-javierm@redhat.com> MIME-Version: 1.0 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=javierm@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Subject: [libcamera-devel] [PATCH 2/2] android: Check if Stream configurations were generated correctly 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: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" The libcamera Android Camera HAL generates camera configurations for the StillCapture, Raw and ViewFinder stream roles. But it's only checked for the first one if the function succeeded. This could lead to a NULL pointer deference if a pipeline handler failed to generate a default configuration for one the other two stream roles. Signed-off-by: Javier Martinez Canillas Reviewed-by: Jacopo Mondi Reviewed-by: Laurent Pinchart --- src/android/camera_capabilities.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/android/camera_capabilities.cpp b/src/android/camera_capabilities.cpp index 87a6e1c6f26..baeedc11500 100644 --- a/src/android/camera_capabilities.cpp +++ b/src/android/camera_capabilities.cpp @@ -408,6 +408,11 @@ CameraCapabilities::initializeYUVResolutions(const PixelFormat &pixelFormat, std::vector supportedResolutions; std::unique_ptr cameraConfig = camera_->generateConfiguration({ StreamRole::Viewfinder }); + if (!cameraConfig) { + LOG(HAL, Error) << "Failed to get supported YUV resolutions"; + return supportedResolutions; + } + StreamConfiguration &cfg = cameraConfig->at(0); for (const Size &res : resolutions) { @@ -431,11 +436,17 @@ CameraCapabilities::initializeYUVResolutions(const PixelFormat &pixelFormat, std::vector CameraCapabilities::initializeRawResolutions(const PixelFormat &pixelFormat) { + std::vector supportedResolutions; std::unique_ptr cameraConfig = camera_->generateConfiguration({ StreamRole::Raw }); + if (!cameraConfig) { + LOG(HAL, Error) << "Failed to get supported Raw resolutions"; + return supportedResolutions; + } + StreamConfiguration &cfg = cameraConfig->at(0); const StreamFormats &formats = cfg.formats(); - std::vector supportedResolutions = formats.sizes(pixelFormat); + supportedResolutions = formats.sizes(pixelFormat); return supportedResolutions; }