[libcamera-devel] [PATCH v6 6/9] android: Add CameraMetadata helper class

Laurent Pinchart laurent.pinchart at ideasonboard.com
Thu Sep 5 11:37:34 CEST 2019


Hi Jacopo,

On Thu, Sep 05, 2019 at 09:58:11AM +0200, Jacopo Mondi wrote:
> On Thu, Sep 05, 2019 at 09:47:33AM +0200, Jacopo Mondi wrote:
> > From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> >
> > The new CameraMetadata helper class wraps the Android camera_metadata_t
> > to simplify its usage.
> >
> > Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > ---
> >  src/android/camera_metadata.cpp | 63 +++++++++++++++++++++++++++++++++
> >  src/android/camera_metadata.h   | 31 ++++++++++++++++
> >  src/android/meson.build         |  1 +
> >  3 files changed, 95 insertions(+)
> >  create mode 100644 src/android/camera_metadata.cpp
> >  create mode 100644 src/android/camera_metadata.h
> >
> > diff --git a/src/android/camera_metadata.cpp b/src/android/camera_metadata.cpp
> > new file mode 100644
> > index 000000000000..c261e1f01a20
> > --- /dev/null
> > +++ b/src/android/camera_metadata.cpp
> > @@ -0,0 +1,63 @@
> > +/* SPDX-License-Identifier: LGPL-2.1-or-later */
> > +/*
> > + * Copyright (C) 2019, Google Inc.
> > + *
> > + * camera_metadata.cpp - libcamera Android Camera Metadata Helper
> > + */
> > +
> > +#include "camera_metadata.h"
> > +
> > +#include "log.h"
> > +
> > +using namespace libcamera;
> > +
> > +LOG_DEFINE_CATEGORY(CameraMetadata);
> > +
> > +CameraMetadata::CameraMetadata(size_t entryCapacity, size_t dataCapacity)
> > +{
> > +	metadata_ = allocate_camera_metadata(entryCapacity, dataCapacity);
> > +	valid_ = metadata_ != nullptr;
> > +}
> > +
> > +CameraMetadata::~CameraMetadata()
> > +{
> > +	if (metadata_)
> > +		free_camera_metadata(metadata_);
> > +}
> > +
> > +bool CameraMetadata::addEntry(uint32_t tag, const void *data, size_t count)
> > +{
> > +	if (!valid_)
> > +		return false;
> > +
> > +	if (!add_camera_metadata_entry(metadata_, tag, data, count))
> > +		return true;
> > +
> > +	const char *name = get_camera_metadata_tag_name(tag);
> > +	if (name)
> > +		LOG(CameraMetadata, Error)
> > +			<< "Failed to add tag " << name;
> > +	else
> > +		LOG(CameraMetadata, Error)
> > +			<< "Failed to add unknown tag " << tag;
> > +
> > +	valid_ = false;
> > +
> > +	return false;
> > +}
> > +
> > +camera_metadata_t *CameraMetadata::get()
> > +{
> > +	return valid_ ? metadata_ : nullptr;
> > +}
> > +
> > +camera_metadata_t *CameraMetadata::release()
> > +{
> > +	if (!valid_)
> > +		return nullptr;
> > +
> > +	camera_metadata_t *metadata = metadata_;
> > +	valid_ = false;
> > +	metadata_ = nullptr;
> > +	return metadata;
> > +}
> 
> I would remove this operation as it is unused.

It was used in a previous version of the code, but not anymore. Feel
free to remove it.

> Otherwise
> Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
> 
> > diff --git a/src/android/camera_metadata.h b/src/android/camera_metadata.h
> > new file mode 100644
> > index 000000000000..43a5598c6463
> > --- /dev/null
> > +++ b/src/android/camera_metadata.h
> > @@ -0,0 +1,31 @@
> > +/* SPDX-License-Identifier: LGPL-2.1-or-later */
> > +/*
> > + * Copyright (C) 2019, Google Inc.
> > + *
> > + * camera_metadata.h - libcamera Android Camera Metadata Helper
> > + */
> > +#ifndef __ANDROID_CAMERA_METADATA_H__
> > +#define __ANDROID_CAMERA_METADATA_H__
> > +
> > +#include <stdint.h>
> > +
> > +#include <system/camera_metadata.h>
> > +
> > +class CameraMetadata
> > +{
> > +public:
> > +	CameraMetadata(size_t entryCapacity, size_t dataCapacity);
> > +	~CameraMetadata();
> > +
> > +	bool isValid() { return valid_; }
> > +	bool addEntry(uint32_t tag, const void *data, size_t data_count);
> > +
> > +	camera_metadata_t *get();
> > +	camera_metadata_t *release();
> > +
> > +private:
> > +	camera_metadata_t *metadata_;
> > +	bool valid_;
> > +};
> > +
> > +#endif /* __ANDROID_CAMERA_METADATA_H__ */
> > diff --git a/src/android/meson.build b/src/android/meson.build
> > index 26537794bc29..b5e4eeeb73a8 100644
> > --- a/src/android/meson.build
> > +++ b/src/android/meson.build
> > @@ -2,6 +2,7 @@ android_hal_sources = files([
> >      'camera3_hal.cpp',
> >      'camera_hal_manager.cpp',
> >      'camera_device.cpp',
> > +    'camera_metadata.cpp',
> >      'camera_proxy.cpp',
> >      'thread_rpc.cpp'
> >  ])

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list