summaryrefslogtreecommitdiff
path: root/src/android/jpeg/exif.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/android/jpeg/exif.h')
0 files changed, 0 insertions, 0 deletions
6' href='#n76'>76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
 * Copyright (C) 2019, Google Inc.
 *
 * camera_metadata.h - libcamera Android Camera Metadata Helper
 */

#pragma once

#include <stdint.h>
#include <vector>

#include <system/camera_metadata.h>

class CameraMetadata
{
public:
	CameraMetadata();
	CameraMetadata(size_t entryCapacity, size_t dataCapacity);
	CameraMetadata(const camera_metadata_t *metadata);
	CameraMetadata(const CameraMetadata &other);
	~CameraMetadata();

	CameraMetadata &operator=(const CameraMetadata &other);

	std::tuple<size_t, size_t> usage() const;
	bool resized() const { return resized_; }

	bool isValid() const { return valid_; }
	bool getEntry(uint32_t tag, camera_metadata_ro_entry_t *entry) const;

	template<typename T> bool entryContains(uint32_t tag, T value) const;

	bool hasEntry(uint32_t tag) const;

	template<typename T,
		 std::enable_if_t<std::is_arithmetic_v<T> ||
				  std::is_enum_v<T>> * = nullptr>
	bool setEntry(uint32_t tag, const T &data)
	{
		if (hasEntry(tag))
			return updateEntry(tag, &data, 1, sizeof(T));
		else
			return addEntry(tag, &data, 1, sizeof(T));
	}

	template<typename T,
		 std::enable_if_t<std::is_arithmetic_v<T> ||
				  std::is_enum_v<T>> * = nullptr>
	bool addEntry(uint32_t tag, const T &data)
	{
		return addEntry(tag, &data, 1, sizeof(T));
	}

	template<typename T, size_t size>
	bool addEntry(uint32_t tag, const T (&data)[size])
	{
		return addEntry(tag, data, size, sizeof(T));
	}

	template<typename S,
		 typename T = typename S::value_type>
	bool addEntry(uint32_t tag, const S &data)
	{
		return addEntry(tag, data.data(), data.size(), sizeof(T));
	}

	template<typename T>
	bool addEntry(uint32_t tag, const T *data, size_t count)