Show a patch.

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

{
    "id": 11510,
    "url": "https://patchwork.libcamera.org/api/patches/11510/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/11510/",
    "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": "<20210308101356.59333-2-paul.elder@ideasonboard.com>",
    "date": "2021-03-08T10:13:53",
    "name": "[libcamera-devel,1/4] android: jpeg: exif: Fix and expand setRational",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "72b1df6d2861170e015cba43fa3264cf6adf236a",
    "submitter": {
        "id": 17,
        "url": "https://patchwork.libcamera.org/api/people/17/?format=api",
        "name": "Paul Elder",
        "email": "paul.elder@ideasonboard.com"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/11510/mbox/",
    "series": [
        {
            "id": 1767,
            "url": "https://patchwork.libcamera.org/api/series/1767/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=1767",
            "date": "2021-03-08T10:13:52",
            "name": "android: jpeg: exif: Fix GPS altitude",
            "version": 1,
            "mbox": "https://patchwork.libcamera.org/series/1767/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/11510/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/11510/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 9756FBD1F1\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon,  8 Mar 2021 10:14:10 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 562F268A9C;\n\tMon,  8 Mar 2021 11:14:10 +0100 (CET)",
            "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 2F15B68A99\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  8 Mar 2021 11:14:08 +0100 (CET)",
            "from pyrite.rasen.tech (unknown\n\t[IPv6:2400:4051:61:600:2c71:1b79:d06d:5032])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 9D5F38A3;\n\tMon,  8 Mar 2021 11:14:06 +0100 (CET)"
        ],
        "Authentication-Results": "lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"b/6nKtBV\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1615198447;\n\tbh=6xfJtuj/oum/b10JoZZyGFiXQYYdF0o/iJE6ATxdV58=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=b/6nKtBVMHxR7s+TL5qTt/RyHnXSi2e6Ku6ZQzmsafJgzUQ6OAIReJFfdzjfLokfW\n\tZwIealst9Fc7KH5WSUmrS3rMoeq93X4oMp1mtMF/bL/P0ihHCe9g57MhEYHBNIPg1v\n\tFa7WTgT2oWwlekrzv0KbWUj8Uzy2/9DkeMw7ky00=",
        "From": "Paul Elder <paul.elder@ideasonboard.com>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Date": "Mon,  8 Mar 2021 19:13:53 +0900",
        "Message-Id": "<20210308101356.59333-2-paul.elder@ideasonboard.com>",
        "X-Mailer": "git-send-email 2.27.0",
        "In-Reply-To": "<20210308101356.59333-1-paul.elder@ideasonboard.com>",
        "References": "<20210308101356.59333-1-paul.elder@ideasonboard.com>",
        "MIME-Version": "1.0",
        "Subject": "[libcamera-devel] [PATCH 1/4] android: jpeg: exif: Fix and expand\n\tsetRational",
        "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>",
        "Content-Type": "text/plain; charset=\"us-ascii\"",
        "Content-Transfer-Encoding": "7bit",
        "Errors-To": "libcamera-devel-bounces@lists.libcamera.org",
        "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"
    },
    "content": "setRational was not working properly for EXIF tags in the GPS IFD.\nManually specify the size of the EXIF entry to fix this. While at it,\nadd support for setting multiple rationals, as that is a common use case\nfor rational EXIF tags.\n\nThis allows the GPS altitude to be set properly, and is part of the fix\nto allow the following CTS test to pass:\n- android.hardware.cts.CameraTest#testJpegExif\n\nSigned-off-by: Paul Elder <paul.elder@ideasonboard.com>\n---\n src/android/jpeg/exif.cpp | 13 +++++++++++--\n src/android/jpeg/exif.h   |  2 ++\n 2 files changed, 13 insertions(+), 2 deletions(-)",
    "diff": "diff --git a/src/android/jpeg/exif.cpp b/src/android/jpeg/exif.cpp\nindex fdd46070..e5a3e448 100644\n--- a/src/android/jpeg/exif.cpp\n+++ b/src/android/jpeg/exif.cpp\n@@ -187,11 +187,20 @@ void Exif::setLong(ExifIfd ifd, ExifTag tag, uint32_t item)\n \n void Exif::setRational(ExifIfd ifd, ExifTag tag, ExifRational item)\n {\n-\tExifEntry *entry = createEntry(ifd, tag);\n+\tExifRational items[] = { item };\n+\tsetRational(ifd, tag, 1, items);\n+}\n+\n+void Exif::setRational(ExifIfd ifd, ExifTag tag, uint32_t count, ExifRational items[])\n+{\n+\tExifEntry *entry = createEntry(ifd, tag, EXIF_FORMAT_RATIONAL,\n+\t\t\t\t       count, count * sizeof(ExifRational));\n \tif (!entry)\n \t\treturn;\n \n-\texif_set_rational(entry->data, order_, item);\n+\tfor (size_t i = 0; i < count; i++)\n+\t\texif_set_rational(entry->data + i * sizeof(ExifRational),\n+\t\t\t\t  order_, items[i]);\n \texif_entry_unref(entry);\n }\n \ndiff --git a/src/android/jpeg/exif.h b/src/android/jpeg/exif.h\nindex b0d61402..e283d3fc 100644\n--- a/src/android/jpeg/exif.h\n+++ b/src/android/jpeg/exif.h\n@@ -89,6 +89,8 @@ private:\n \t\t       const std::string &item,\n \t\t       StringEncoding encoding = NoEncoding);\n \tvoid setRational(ExifIfd ifd, ExifTag tag, ExifRational item);\n+\tvoid setRational(ExifIfd ifd, ExifTag tag, uint32_t count,\n+\t\t\t ExifRational items[]);\n \n \tstd::tuple<int, int, int> degreesToDMS(double decimalDegrees);\n \tvoid setGPSDMS(ExifIfd ifd, ExifTag tag, int deg, int min, int sec);\n",
    "prefixes": [
        "libcamera-devel",
        "1/4"
    ]
}