Show a patch.

GET /api/1.1/patches/23378/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 23378,
    "url": "https://patchwork.libcamera.org/api/1.1/patches/23378/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/23378/",
    "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": "<20250515162536.131131-1-mzamazal@redhat.com>",
    "date": "2025-05-15T16:25:36",
    "name": "[v2] apps: cam: Skip devices without connectors",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "7819b00a804993b5892f570f1a2a5aed03483367",
    "submitter": {
        "id": 177,
        "url": "https://patchwork.libcamera.org/api/1.1/people/177/?format=api",
        "name": "Milan Zamazal",
        "email": "mzamazal@redhat.com"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/23378/mbox/",
    "series": [
        {
            "id": 5176,
            "url": "https://patchwork.libcamera.org/api/1.1/series/5176/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5176",
            "date": "2025-05-15T16:25:36",
            "name": "[v2] apps: cam: Skip devices without connectors",
            "version": 2,
            "mbox": "https://patchwork.libcamera.org/series/5176/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/23378/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/23378/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 16857C3200\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 15 May 2025 16:25:46 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 30ABF68B70;\n\tThu, 15 May 2025 18:25:45 +0200 (CEST)",
            "from us-smtp-delivery-124.mimecast.com\n\t(us-smtp-delivery-124.mimecast.com [170.10.129.124])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id D893668B4F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 15 May 2025 18:25:43 +0200 (CEST)",
            "from mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com\n\t(ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63])\n\tby relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n\tcipher=TLS_AES_256_GCM_SHA384) id us-mta-257-Ti6XJqbeNcOQcQp5y89Z6Q-1;\n\tThu, 15 May 2025 12:25:41 -0400",
            "from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com\n\t(mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com\n\t[10.30.177.111])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\tkey-exchange X25519 server-signature RSA-PSS (2048 bits)\n\tserver-digest SHA256) (No client certificate requested)\n\tby mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTPS\n\tid BC282195608C for <libcamera-devel@lists.libcamera.org>;\n\tThu, 15 May 2025 16:25:40 +0000 (UTC)",
            "from mzamazal-thinkpadp1gen7.tpbc.com (unknown [10.44.32.124])\n\tby mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTP id 9B2CF18003FD; Thu, 15 May 2025 16:25:39 +0000 (UTC)"
        ],
        "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=redhat.com header.i=@redhat.com\n\theader.b=\"fVXTf30k\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1747326342;\n\th=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n\tto:to:cc:cc:mime-version:mime-version:content-type:content-type:\n\tcontent-transfer-encoding:content-transfer-encoding;\n\tbh=1GIWu2wcaqWEm4hRg2MYgy/ypeO2bopATJGV54VDXjs=;\n\tb=fVXTf30kGFMCsIxZ7rzyAPRjL100/pUDdcqi0Ve6TT0OVQ1SyExK1slRGW1JZ8U5Io1vQ1\n\tbpkaxWFj7unnoesVkUVf1EkaXyg1i6bGLm7V8nND/KMHo863XoUA/1V8wXLVoG9noM0vXP\n\td50hyV9V6qaCq3kim5gj68Rat5UEnEg=",
        "X-MC-Unique": "Ti6XJqbeNcOQcQp5y89Z6Q-1",
        "X-Mimecast-MFC-AGG-ID": "Ti6XJqbeNcOQcQp5y89Z6Q_1747326340",
        "From": "Milan Zamazal <mzamazal@redhat.com>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Cc": "Milan Zamazal <mzamazal@redhat.com>",
        "Subject": "[PATCH v2] apps: cam: Skip devices without connectors",
        "Date": "Thu, 15 May 2025 18:25:36 +0200",
        "Message-ID": "<20250515162536.131131-1-mzamazal@redhat.com>",
        "MIME-Version": "1.0",
        "X-Scanned-By": "MIMEDefang 3.4.1 on 10.30.177.111",
        "X-Mimecast-Spam-Score": "0",
        "X-Mimecast-MFC-PROC-ID": "jhEB66hSQ2iSvG82qnwClKTrxi-ii2hUj1qRdn4xdsI_1747326340",
        "X-Mimecast-Originator": "redhat.com",
        "Content-Transfer-Encoding": "8bit",
        "content-type": "text/plain; charset=\"US-ASCII\"; x-default=true",
        "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>",
        "Errors-To": "libcamera-devel-bounces@lists.libcamera.org",
        "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"
    },
    "content": "Device::openCard() in the cam DRM helpers looks for a /dev/dri/card*\ndevice that can be opened and that doesn't fail when asked about\nDRM_CAP_DUMB_BUFFER capability (regardless whether the capability is\nsupported by the device).\n\nThere can be matching devices that are not display devices.  This can\nlead to selection of such a device and inability to use KMS output with\n`cam' application.  The ultimate goal is to display something on the\ndevice and later the KMS sink will fail if there is no connector\nattached to the device (although it can actually fail earlier, when\ntrying to set DRM_CLIENT_CAP_ATOMIC capability if this is not\nsupported).  Let's avoid selecting devices without connectors.\n\nA question is whether the added check makes the check for\nDRM_CAP_DUMB_BUFFER API redundant or not.\n\nChanges in v2:\n- Rebased on current master.\n\nSigned-off-by: Milan Zamazal <mzamazal@redhat.com>\n---\n src/apps/cam/drm.cpp | 12 ++++++++++++\n 1 file changed, 12 insertions(+)",
    "diff": "diff --git a/src/apps/cam/drm.cpp b/src/apps/cam/drm.cpp\nindex 47bbb6b0..e19e848c 100644\n--- a/src/apps/cam/drm.cpp\n+++ b/src/apps/cam/drm.cpp\n@@ -479,6 +479,18 @@ int Device::openCard()\n \t\t\tcontinue;\n \t\t}\n \n+\t\t/* Skip devices without connectors. */\n+\t\tstd::unique_ptr<drmModeRes, decltype(&drmModeFreeResources)> resources{\n+\t\t\tdrmModeGetResources(fd_),\n+\t\t\t&drmModeFreeResources\n+\t\t};\n+\t\tif (!resources || resources->count_connectors <= 0) {\n+\t\t\tresources.reset();\n+\t\t\tdrmClose(fd_);\n+\t\t\tfd_ = -1;\n+\t\t\tcontinue;\n+\t\t}\n+\n \t\tfound = true;\n \t\tbreak;\n \t}\n",
    "prefixes": [
        "v2"
    ]
}