[libcamera-devel] [PATCH v2 2/2] android: jpeg: exif: Set timezone information
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Tue Sep 29 04:54:09 CEST 2020
Hi Umang,
Thank you for the patch.
On Fri, Sep 25, 2020 at 12:06:42AM +0530, Umang Jain wrote:
> The EXIF specification defines three timezone related tags namely,
s/timezone related/timezone-related/
s/ namely,/, namely/
> OffsetTime, OffsetTimeOriginal and OffsetTimeDigitized. However,
> these are not supported by libexif (as of v0.6.21) hence, carry
> the tags' positional values in our implementation until we get
> this support from libexif itself.
>
> Since these tags were introduced in EXIF specification v2.31, set
> the exif version number explicitly too.
>
> Signed-off-by: Umang Jain <email at uajain.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
> src/android/jpeg/exif.cpp | 29 +++++++++++++++++++++++++++++
> 1 file changed, 29 insertions(+)
>
> diff --git a/src/android/jpeg/exif.cpp b/src/android/jpeg/exif.cpp
> index a5674b3..32cf897 100644
> --- a/src/android/jpeg/exif.cpp
> +++ b/src/android/jpeg/exif.cpp
> @@ -13,6 +13,16 @@ using namespace libcamera;
>
> LOG_DEFINE_CATEGORY(EXIF)
>
> +/*
> + * List of EXIF tags that we set directly because they are not supported
> + * by libexif version 0.6.21.
> + */
> +enum class _ExifTag {
> + OFFSET_TIME = 0x9010,
> + OFFSET_TIME_ORIGINAL = 0x9011,
> + OFFSET_TIME_DIGITIZED = 0x9012,
> +};
> +
> /*
> * The Exif class should be instantiated and specific properties set
> * through the exposed public API.
> @@ -51,6 +61,9 @@ Exif::Exif()
> */
> exif_data_set_byte_order(data_, EXIF_BYTE_ORDER_INTEL);
>
> + setString(EXIF_IFD_EXIF, EXIF_TAG_EXIF_VERSION,
> + EXIF_FORMAT_UNDEFINED, "0231");
> +
> /* Create the mandatory EXIF fields with default data. */
> exif_data_fix(data_);
> }
> @@ -197,6 +210,22 @@ void Exif::setTimestamp(time_t timestamp)
> setString(EXIF_IFD_0, EXIF_TAG_DATE_TIME, EXIF_FORMAT_ASCII, ts);
> setString(EXIF_IFD_EXIF, EXIF_TAG_DATE_TIME_ORIGINAL, EXIF_FORMAT_ASCII, ts);
> setString(EXIF_IFD_EXIF, EXIF_TAG_DATE_TIME_DIGITIZED, EXIF_FORMAT_ASCII, ts);
> +
> + /* Query and set timezone information if available. */
> + int r = strftime(str, sizeof(str), "%z", &tm);
> + if (r > 0) {
> + std::string tz(str);
> + tz.insert(3, 1, ':');
> + setString(EXIF_IFD_EXIF,
> + static_cast<ExifTag>(_ExifTag::OFFSET_TIME),
> + EXIF_FORMAT_ASCII, tz);
> + setString(EXIF_IFD_EXIF,
> + static_cast<ExifTag>(_ExifTag::OFFSET_TIME_ORIGINAL),
> + EXIF_FORMAT_ASCII, tz);
> + setString(EXIF_IFD_EXIF,
> + static_cast<ExifTag>(_ExifTag::OFFSET_TIME_DIGITIZED),
> + EXIF_FORMAT_ASCII, tz);
> + }
> }
>
> void Exif::setOrientation(int orientation)
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list