From 62735086edb279ca4c967d66e69f3788e6902b0a Mon Sep 17 00:00:00 2001 From: Alex Ray Date: Mon, 21 Oct 2013 12:55:24 -0700 Subject: modules: camera: Metadata refactor Add* functions const to protect data being added. Initiailze metadata object from a camera_metadata_t. Remove template-specific constructor. Add convenience "add1" method to abvoid stack-allocated data. Construct templates manually (in ExampleCamera) from base. Change-Id: I3201f61e9d32841ea7a769d69242b40d8727c02e --- modules/camera/Metadata.h | 63 ++++++++++++++++------------------------------- 1 file changed, 21 insertions(+), 42 deletions(-) (limited to 'modules/camera/Metadata.h') diff --git a/modules/camera/Metadata.h b/modules/camera/Metadata.h index c0d9492..f432d04 100644 --- a/modules/camera/Metadata.h +++ b/modules/camera/Metadata.h @@ -17,11 +17,9 @@ #ifndef METADATA_H_ #define METADATA_H_ -#include +#include #include -#include #include -#include namespace default_camera_hal { // Metadata is a convenience class for dealing with libcamera_metadata @@ -29,51 +27,32 @@ class Metadata { public: Metadata(); ~Metadata(); - // Constructor used for request metadata templates - Metadata(uint8_t mode, uint8_t intent); + // Initialize with framework metadata + int init(const camera_metadata_t *metadata); - // Parse and add an entry - int addUInt8(uint32_t tag, int count, uint8_t *data); - int addInt32(uint32_t tag, int count, int32_t *data); - int addFloat(uint32_t tag, int count, float *data); - int addInt64(uint32_t tag, int count, int64_t *data); - int addDouble(uint32_t tag, int count, double *data); + // Parse and add an entry. Allocates and copies new storage for *data. + int addUInt8(uint32_t tag, int count, const uint8_t *data); + int add1UInt8(uint32_t tag, const uint8_t data); + int addInt32(uint32_t tag, int count, const int32_t *data); + int addFloat(uint32_t tag, int count, const float *data); + int addInt64(uint32_t tag, int count, const int64_t *data); + int addDouble(uint32_t tag, int count, const double *data); int addRational(uint32_t tag, int count, - camera_metadata_rational_t *data); - // Generate a camera_metadata structure and fill it with internal data - camera_metadata_t *generate(); + const camera_metadata_rational_t *data); + + // Get a handle to the current metadata + // This is not a durable handle, and may be destroyed by add*/init + camera_metadata_t* get(); private: + // Actual internal storage + camera_metadata_t* mData; + // Destroy old metadata and replace with new + void replace(camera_metadata_t *m); // Validate the tag, type and count for a metadata entry bool validate(uint32_t tag, int tag_type, int count); - // Add a verified tag with data to this Metadata structure - int add(uint32_t tag, int count, void *tag_data); - - class Entry { - public: - Entry(uint32_t tag, void *data, int count); - ~Entry(); - Entry *mNext; - Entry *mPrev; - const uint32_t mTag; - const void *mData; - const int mCount; - void insertAfter(Entry *e); - }; - // List ends - Entry *mHead; - Entry *mTail; - // Append entry to list - void push(Entry *e); - // Total of entries and entry data size - int mEntryCount; - int mDataCount; - // Save generated metadata, invalidated on update - camera_metadata_t *mGenerated; - // Flag to force metadata regeneration - bool mDirty; - // Lock protecting the Metadata object for modifications - pthread_mutex_t mMutex; + // Add a verified tag with data + int add(uint32_t tag, int count, const void *tag_data); }; } // namespace default_camera_hal -- cgit v1.1