android: jpeg: Add EXIF infrastructure

Provide helper classes to utilise the libexif interfaces and link
against libexif to support tag additions when creating JPEG images.

Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Umang Jain <email@uajain.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Kieran Bingham 2020-09-09 16:44:44 +05:30 committed by Laurent Pinchart
parent e917655d06
commit c3d1329b93
3 changed files with 236 additions and 0 deletions

46
src/android/jpeg/exif.h Normal file
View file

@ -0,0 +1,46 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* Copyright (C) 2020, Google Inc.
*
* exif.h - EXIF tag creator using libexif
*/
#ifndef __ANDROID_JPEG_EXIF_H__
#define __ANDROID_JPEG_EXIF_H__
#include <ctime>
#include <string>
#include <libexif/exif-data.h>
#include <libcamera/span.h>
class Exif
{
public:
Exif();
~Exif();
libcamera::Span<const uint8_t> data() const { return { exifData_, size_ }; }
[[nodiscard]] int generate();
private:
ExifEntry *createEntry(ExifIfd ifd, ExifTag tag);
ExifEntry *createEntry(ExifIfd ifd, ExifTag tag, ExifFormat format,
unsigned long components, unsigned int size);
void setShort(ExifIfd ifd, ExifTag tag, uint16_t item);
void setLong(ExifIfd ifd, ExifTag tag, uint32_t item);
void setString(ExifIfd ifd, ExifTag tag, ExifFormat format,
const std::string &item);
void setRational(ExifIfd ifd, ExifTag tag, ExifRational item);
bool valid_;
ExifData *data_;
ExifMem *mem_;
unsigned char *exifData_;
unsigned int size_;
};
#endif /* __ANDROID_JPEG_EXIF_H__ */