summaryrefslogtreecommitdiff
path: root/include/android/metadata/system
AgeCommit message (Collapse)Author
2019-08-12include: android: Add SPDX tagsJacopo Mondi
Add SPDX indentifier to Apache-2.0 licensed android headers. Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2019-08-12include: android: Add Android headers from CrosJacopo Mondi
Copy the Android Camera3 HAL headers from the ChromiumOS build system and define a new inclusion directive in the meson build system for them. The header files have been copied from: https://chromium.googlesource.com/chromiumos/platform2 at revision 9e65ddd2c496e712f005ada9715decd2ff8e4a03 and provide: 1) Android CameraHAL3 HAL headers in include/android/hardware/ 2) The Android system headers in include/android/system/ 3) The Android camera metadata headers in include/android/metadata/ The original path in the Cros platform2/ repository is, respectively: camera/android/header_files/include/hardware camera/android/header_files/include/system camera/android/libcamera_metadata/include/ Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
#n64'>64 65 66 67 68 69 70 71 72 73 74 75 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
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
 * Copyright (C) 2020, Google Inc.
 *
 * class.h - Utilities and helpers for classes
 */
#ifndef __LIBCAMERA_CLASS_H__
#define __LIBCAMERA_CLASS_H__

#include <memory>

namespace libcamera {

#ifndef __DOXYGEN__
#define LIBCAMERA_DISABLE_COPY(klass)  \
	klass(const klass &) = delete; \
	klass &operator=(const klass &) = delete;

#define LIBCAMERA_DISABLE_MOVE(klass) \
	klass(klass &&) = delete;     \
	klass &operator=(klass &&) = delete;

#define LIBCAMERA_DISABLE_COPY_AND_MOVE(klass) \
	LIBCAMERA_DISABLE_COPY(klass)          \
	LIBCAMERA_DISABLE_MOVE(klass)
#else
#define LIBCAMERA_DISABLE_COPY(klass)
#define LIBCAMERA_DISABLE_MOVE(klass)
#define LIBCAMERA_DISABLE_COPY_AND_MOVE(klass)
#endif

#ifndef __DOXYGEN__
#define LIBCAMERA_DECLARE_PRIVATE(klass)				\
public:									\
	class Private;							\
	friend class Private;

#define LIBCAMERA_DECLARE_PUBLIC(klass)					\
	friend class klass;						\
	using Public = klass;

#define LIBCAMERA_D_PTR()						\
	_d<Private>();

#define LIBCAMERA_O_PTR()						\
	_o<Public>();

#else
#define LIBCAMERA_DECLARE_PRIVATE(klass)
#define LIBCAMERA_DECLARE_PUBLIC(klass)
#define LIBCAMERA_D_PTR(klass)
#define LIBCAMERA_O_PTR(klass)
#endif

class Extensible
{
public:
	class Private
	{
	public:
		Private(Extensible *o);
		virtual ~Private();

#ifndef __DOXYGEN__
		template<typename T>
		const T *_o() const
		{
			return static_cast<const T *>(o_);
		}

		template<typename T>
		T *_o()
		{
			return static_cast<T *>(o_);
		}
#endif

	private:
		Extensible *const o_;
	};

	Extensible(Private *d);

protected:
#ifndef __DOXYGEN__
	template<typename T>
	const T *_d() const
	{
		return static_cast<const T *>(d_.get());
	}

	template<typename T>
	T *_d()
	{
		return static_cast<T *>(d_.get());
	}
#endif

private:
	const std::unique_ptr<Private> d_;
};

} /* namespace libcamera */

#endif /* __LIBCAMERA_CLASS_H__ */