[{"id":15569,"web_url":"https://patchwork.libcamera.org/comment/15569/","msgid":"<20210309131629.u22brewgk7coogb6@uno.localdomain>","date":"2021-03-09T13:16:29","subject":"Re: [libcamera-devel] [PATCH v2 1/4] android: jpeg: exif: Fix and\n\texpand setRational","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"On Tue, Mar 09, 2021 at 05:52:32PM +0900, Paul Elder wrote:\n> setRational was not working properly for EXIF tags in the GPS IFD due to\n> libexif not supporting those tags in exif_entry_initialize().  Manually\n> specify the size of the EXIF entry to fix this. While at it, add support\n> for setting multiple rationals, as that is a common use case for\n> rational EXIF tags.\n>\n> As Rational types are no longer initialized by libexif directly, the\n> EXIF_TAG_{X,Y}_RESOLUTION exif tags will not have their default values\n> populated.\n>\n> This allows the GPS altitude to be set properly, and is part of the fix\n> to allow the following CTS test to pass:\n> - android.hardware.cts.CameraTest#testJpegExif\n>\n> Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>\n> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n>\n> ---\n> Changes in v2:\n> - use span instead of size + array\n> - expand commit message\n> ---\n>  src/android/jpeg/exif.cpp | 15 +++++++++++++--\n>  src/android/jpeg/exif.h   |  2 ++\n>  2 files changed, 15 insertions(+), 2 deletions(-)\n>\n> diff --git a/src/android/jpeg/exif.cpp b/src/android/jpeg/exif.cpp\n> index fdd46070..929ac542 100644\n> --- a/src/android/jpeg/exif.cpp\n> +++ b/src/android/jpeg/exif.cpp\n> @@ -14,6 +14,8 @@\n>  #include <tuple>\n>  #include <uchar.h>\n>\n> +#include <libcamera/span.h>\n> +\n\nspan.h is already included in exif.h so you can drop it here I guess\n\n>  #include \"libcamera/internal/log.h\"\n>  #include \"libcamera/internal/utils.h\"\n>\n> @@ -187,11 +189,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> +\tsetRational(ifd, tag, Span<const ExifRational>{ &item, 1 });\n\nand you can write this as\n\tsetRational(ifd, tag, { &item, 1 });\n\naccording to my compiler :)\n\nThe rest looks good\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n  j\n\n> +}\n> +\n> +void Exif::setRational(ExifIfd ifd, ExifTag tag, Span<const ExifRational> items)\n> +{\n> +\tExifEntry *entry = createEntry(ifd, tag, EXIF_FORMAT_RATIONAL,\n> +\t\t\t\t       items.size(),\n> +\t\t\t\t       items.size() * sizeof(ExifRational));\n>  \tif (!entry)\n>  \t\treturn;\n>\n> -\texif_set_rational(entry->data, order_, item);\n> +\tfor (size_t i = 0; i < items.size(); 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>\n> diff --git a/src/android/jpeg/exif.h b/src/android/jpeg/exif.h\n> index b0d61402..8aa1b123 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,\n> +\t\t\t libcamera::Span<const 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> --\n> 2.27.0\n>\n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel","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 C0146BD1F1\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  9 Mar 2021 13:16:02 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 0F0F468AA3;\n\tTue,  9 Mar 2021 14:16:02 +0100 (CET)","from relay9-d.mail.gandi.net (relay9-d.mail.gandi.net\n\t[217.70.183.199])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id D199A68A99\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  9 Mar 2021 14:16:00 +0100 (CET)","from uno.localdomain (host-79-22-58-175.retail.telecomitalia.it\n\t[79.22.58.175]) (Authenticated sender: jacopo@jmondi.org)\n\tby relay9-d.mail.gandi.net (Postfix) with ESMTPSA id ED404FF819;\n\tTue,  9 Mar 2021 13:15:59 +0000 (UTC)"],"X-Originating-IP":"79.22.58.175","Date":"Tue, 9 Mar 2021 14:16:29 +0100","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Paul Elder <paul.elder@ideasonboard.com>","Message-ID":"<20210309131629.u22brewgk7coogb6@uno.localdomain>","References":"<20210309085235.106691-1-paul.elder@ideasonboard.com>\n\t<20210309085235.106691-2-paul.elder@ideasonboard.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20210309085235.106691-2-paul.elder@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v2 1/4] android: jpeg: exif: Fix and\n\texpand setRational","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>","Cc":"libcamera-devel@lists.libcamera.org","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>"}}]