Show a cover letter.

GET /api/covers/27504/?format=api
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 27504,
    "url": "https://patchwork.libcamera.org/api/covers/27504/?format=api",
    "web_url": "https://patchwork.libcamera.org/cover/27504/",
    "project": {
        "id": 1,
        "url": "https://patchwork.libcamera.org/api/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": "<20260724174705.9411-1-magdum.foss@gmail.com>",
    "date": "2026-07-24T17:47:00",
    "name": "[RFC,0/1] Add NVIDIA Tegra VI pipeline handler",
    "submitter": {
        "id": 453,
        "url": "https://patchwork.libcamera.org/api/people/453/?format=api",
        "name": "Magdum",
        "email": "magdum.foss@gmail.com"
    },
    "mbox": "https://patchwork.libcamera.org/cover/27504/mbox/",
    "series": [
        {
            "id": 6080,
            "url": "https://patchwork.libcamera.org/api/series/6080/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=6080",
            "date": "2026-07-24T17:47:00",
            "name": "Add NVIDIA Tegra VI pipeline handler",
            "version": 1,
            "mbox": "https://patchwork.libcamera.org/series/6080/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/covers/27504/comments/",
    "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 5B7D4BDE17\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 24 Jul 2026 17:47:13 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 5F73E67F3B;\n\tFri, 24 Jul 2026 19:47:12 +0200 (CEST)",
            "from mail-wm1-x336.google.com (mail-wm1-x336.google.com\n\t[IPv6:2a00:1450:4864:20::336])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id D0F8167F22\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 24 Jul 2026 19:47:10 +0200 (CEST)",
            "by mail-wm1-x336.google.com with SMTP id\n\t5b1f17b1804b1-4953de5be0aso5135525e9.0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 24 Jul 2026 10:47:10 -0700 (PDT)",
            "from magdum-System-Product-Name.vodafone.ultrahub\n\t([2a02:810d:4b14:4600:38a1:bd9f:46a9:a191])\n\tby smtp.gmail.com with ESMTPSA id\n\t5b1f17b1804b1-496b4eecb4fsm814055e9.7.2026.07.24.10.47.09\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tFri, 24 Jul 2026 10:47:09 -0700 (PDT)"
        ],
        "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"K0qHcgYn\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=gmail.com; s=20251104; t=1784915230; x=1785520030;\n\tdarn=lists.libcamera.org; \n\th=content-transfer-encoding:content-type:mime-version:message-id:date\n\t:subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to\n\t:content-type; bh=2NSRGwIK5TYaXCX0S1KwdIRLoygO3yhNTvIHaiTWplo=;\n\tb=K0qHcgYnWF+qI3apoxulf5RkD3q2q0M58HFVciNqDfIc1e3NWR2aLEfLd67BauoydG\n\tDgw0aq5L/f8jZ5a+BXRzz9M26vg+2QIoU+G9FMyXD0bGbi79DKYcuZsHgtChHZRoPD80\n\tWy2/YEFp+NVnR/U4gUQsZQ3rf8z1brKroSewxW0frunFUHLasomcLrPxyukUsQoztYxq\n\tNyfOpqFyYeHmNL0T0Vm7wqlTK4v03ff4/51EaYjErwXg3CIQkxMmmXM/kOi86HCNIXNo\n\tP1Gz5vZ69Zz5QrKqBzDac9ha2pJeQzcOYMMUe2affM9HS1GYsxnTjHyOkY939PieM+9n\n\t/c6w==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20251104; t=1784915230; x=1785520030;\n\th=content-transfer-encoding:content-type:mime-version:message-id:date\n\t:subject:cc:to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject\n\t:date:message-id:reply-to:content-type;\n\tbh=2NSRGwIK5TYaXCX0S1KwdIRLoygO3yhNTvIHaiTWplo=;\n\tb=DiIecjylJOv6ar04yyKIBY3A/Uuny0CgB1I8HPbKxFHX/QBiOVMVUG5s4NToX87HQS\n\tMyKnIFremsdV8JGzPQ/tTromivmVBBxr+LRTsqk6mBDfFMLa8mxzAUg3Y/vqrqxtk3an\n\t/aTBZAQh3kd4QirVUEFWVU/6lFIq+6F1h49MhJVyMEsYFALoolO1wuLY0u9QUekjXBja\n\tWEqgnSAM5nYPPBYBYWSf85MDH0Lx+k0BRgwCqKu8nkx4tM0fYOG4Ecah73ABDAhwJkty\n\tG3H9PbzDbAqWU209mk83aqapehwMkhF0BvICJgU3aq1wzeCAhytetZ1IwXBYXVIcE3uz\n\tdwSA==",
        "X-Gm-Message-State": "AOJu0YyMnM3u3X60Fat2PQjB435dENi6PlPrXWga3LYFRSLDzjQ6TlS1\n\tB2DcWI1sAD560TG9gsxYHTfcSmZHy4TreDqgjyj5hhxcjBqJ5jnEj5f+cidG2SmIc0c=",
        "X-Gm-Gg": "AR+sD10D5gflYFig74b8FRuf5t8on/icIm+wA5l6VyCfr30VBju88Z4LZoA2Lmz76Br\n\ticgmAPMr1qQu1dkJHK4F/8G9UKXbBsmko/wMBvUJ7ZjpUbhhnC4fi7l1f4RKltJ6YRytqmx2cFU\n\tpgCykvACqdHFhL0wlmO5VyfGRJwf7JbBpjrt0HqdbBiXkfWH034rWA722fHSFtlR+u6Bw9elyOQ\n\t1w0jyGt5y2D0VUbM3cU+DsXXzhhGIhgp2cjccckaLiI4ROGxcZThlM7Z5NZB7HX/BOUOm34LUg0\n\t4CTzSQOreObe86qZHfenWbkjvOtb450lqJdaso9eSUiJ045gECqSa1pjFHxPOmjDt7GPyXU2Jv3\n\tZmWyoojXbgcZbdxpV/lT61hkIkKIsP/v632e9XFz4SvNpb1bQbBjhAk2UUaW6gHcprrunDxwrnb\n\tcWDD72EKfCxBh5BV7ycGY7O92kARrpwH1CS2A5JGAqTqc6tK2Pxhpr",
        "X-Received": "by 2002:a05:600c:46c8:b0:495:6713:9aa3 with SMTP id\n\t5b1f17b1804b1-4957a6e9f55mr61531175e9.30.1784915229921; \n\tFri, 24 Jul 2026 10:47:09 -0700 (PDT)",
        "From": "Magdum <magdum.foss@gmail.com>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Cc": "Magdum <magdum.foss@gmail.com>",
        "Subject": "[RFC PATCH 0/1] Add NVIDIA Tegra VI pipeline handler",
        "Date": "Fri, 24 Jul 2026 19:47:00 +0200",
        "Message-ID": "<20260724174705.9411-1-magdum.foss@gmail.com>",
        "X-Mailer": "git-send-email 2.43.0",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=UTF-8",
        "Content-Transfer-Encoding": "8bit",
        "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": "***\nI have written a new libcamera pipeline handler for NVIDIA Tegra-based\nJetson boards (Nano, TX2, Xavier NX, AGX Xavier, AGX Orin). Before\nsubmitting it upstream I need real-hardware test reports.\n\nIf you have a Jetson board with a CSI camera attached and a mainline\nkernel, **your help would be greatly appreciated**.\n\n---\n\n## What this patch does\n\nAdds support for the Tegra VI (Video Input) camera pipeline to libcamera,\ncovering:\n\n- Jetson Nano / TX2 / Xavier (tegra-vi driver)\n- Jetson AGX Orin / Orin NX / Orin Nano (tegra234-vi driver)\n\nThe pipeline routes raw Bayer frames from the sensor through the CSI\nbridge into VI capture buffers, then uses libcamera's SoftwareISP to\ndebayer and apply AGC/AWB/CCM so the application receives a usable RGB\nor YUV frame.\n\n---\n\n## Prerequisites\n\n### Hardware\n- Any Jetson board (Nano / TX2 / Xavier NX / AGX Xavier / AGX Orin)\n- A CSI camera module with an upstream kernel sensor driver\n\n### Kernel\n- **Mainline kernel 6.x** (not NVIDIA's downstream BSP kernel).\n  The tegra-video driver must be present and the sensor driver loaded.\n\n  Verify with:\n  ```bash\n  # Should list a tegra-vi or tegra234-vi media device\n  media-ctl -p\n\n  # Should show your sensor as a V4L2 subdevice\n  v4l2-ctl --list-devices\n  ```\n\n### Software dependencies\n```bash\n# Ubuntu / Debian\nsudo apt install \\\n    meson ninja-build pkg-config \\\n    libglib2.0-dev libudev-dev libyaml-dev \\\n    python3-yaml python3-ply python3-jinja2 \\\n    libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \\\n    qtbase5-dev  # optional, needed only for qcam GUI\n```\n\n---\n\n## Build instructions\n\n```bash\ngit clone https://git.libcamera.org/libcamera/libcamera.git\ncd libcamera\n\n# Apply the provided tegra patch\ngit am 0001-pipeline-Add-NVIDIA-Tegra-VI-pipeline-handler.patch\n\nmeson setup build \\\n    -Dpipelines=tegra \\\n    -Dipas=simple \\\n    -Ddocumentation=disabled\n\nninja -C build\n```\n\n---\n\n## Test procedure\n\n### 1. Verify the camera is detected\n\n```bash\n./build/src/apps/cam/cam --list\n```\n\nExpected output (sensor name will vary):\n```\nAvailable cameras:\n1: /base/soc/cam0_regulator/... (imx219)\n```\n\nIf no cameras are listed, check `dmesg` for errors from `tegra-csi`,\n`tegra-vi`, or the sensor driver.\n\n---\n\n### 2. Basic capture smoke test\n\n```bash\n# Capture 30 frames, no output file — just check for errors\n./build/src/apps/cam/cam \\\n    -c 1 \\\n    -s width=1280,height=720,pixelformat=RGB888 \\\n    --capture=30\n```\n\nExpected: no error messages, final line reports 30 frames completed.\n\n---\n\n### 3. Save frames to disk and inspect\n\n```bash\n./build/src/apps/cam/cam \\\n    -c 1 \\\n    -s width=1920,height=1080,pixelformat=RGB888 \\\n    --capture=10 \\\n    --file=/tmp/frame-#.ppm\n\n# Open a frame (any image viewer works)\neog /tmp/frame-0.ppm\n```\n\nExpected: a recognisable, correctly-coloured image of the scene.  It may\nbe slightly dark or slightly over-exposed in the first few frames while\nAGC converges — that is normal.\n\n---\n\n### 4. Live preview (optional, requires Qt)\n\n```bash\n./build/src/apps/qcam/qcam\n```\n\nExpected: a live preview window showing the camera feed.\n\n---\n\n### 5. Stress / reliability test\n\n```bash\n# 20 start/stop cycles — tests cleanup and resource release\nfor i in $(seq 1 20); do\n    ./build/src/apps/cam/cam \\\n        -c 1 \\\n        -s width=1280,height=720,pixelformat=RGB888 \\\n        --capture=5\ndone\n\n# Check dmesg for warnings or errors after the run\ndmesg | grep -i \"tegra\\|csi\\|isp\\|cam\" | tail -20\n```\n\n---\n\n## What to report back\n\nPlease reply with the following information:\n\n```\nBoard:        e.g. Jetson Nano 4GB / AGX Orin 32GB\nKernel:       e.g. 6.8.0 mainline\nCamera:       e.g. IMX219 (Raspberry Pi Camera v2)\nDriver:       tegra-vi  /  tegra234-vi\n\nTest 1 – cam --list:          PASS / FAIL\nTest 2 – 30-frame capture:    PASS / FAIL\nTest 3 – PPM image quality:   PASS / FAIL / (describe issues)\nTest 4 – Live preview:        PASS / FAIL / SKIP\nTest 5 – Stress test:         PASS / FAIL\n\ndmesg errors (if any):\n<paste relevant lines>\n\nAdditional notes:\n<anything unusual you observed>\n```\n\n---\n\n## Known limitations\n\n- Only a single output stream is supported per camera.\n- Hardware rotation/flip is not supported (Rotate0 only).\n- Hardware ISP (ISP7 on Tegra234/Orin) is not yet supported — frames are\n  processed by the CPU-based SoftwareISP.  This means image quality and\n  CPU load will be lower and higher respectively than a hardware ISP path.\n  ISP7 support will be added in a follow-up once the upstream kernel driver\n  is available.\n\n---\n\n## Contact\n\nPlease send test results to the libcamera mailing list:\n**libcamera-devel@lists.libcamera.org**\n\nOr open a discussion on the libcamera GitLab:\n**https://gitlab.freedesktop.org/camera/libcamera**\n\nThank you for your time!\n***\n\nMagdum (1):\n  pipeline: Add NVIDIA Tegra VI pipeline handler\n\n include/libcamera/ipa/meson.build        |    1 +\n meson_options.txt                        |    1 +\n src/libcamera/pipeline/tegra/meson.build |    5 +\n src/libcamera/pipeline/tegra/tegra.cpp   | 1102 ++++++++++++++++++++++\n src/libcamera/software_isp/meson.build   |    2 +-\n 5 files changed, 1110 insertions(+), 1 deletion(-)\n create mode 100644 src/libcamera/pipeline/tegra/meson.build\n create mode 100644 src/libcamera/pipeline/tegra/tegra.cpp"
}