diff options
author | Alex Ray <aray@google.com> | 2013-10-21 12:55:24 -0700 |
---|---|---|
committer | Alex Ray <aray@google.com> | 2013-10-28 14:40:28 -0700 |
commit | 62735086edb279ca4c967d66e69f3788e6902b0a (patch) | |
tree | 9531af524df7fb4819e89f487bd81fea05e6fef5 /modules/camera/Metadata.h | |
parent | 69f1f9166adea3579353fd3bc14b6a23c43de024 (diff) | |
download | hardware_libhardware-62735086edb279ca4c967d66e69f3788e6902b0a.zip hardware_libhardware-62735086edb279ca4c967d66e69f3788e6902b0a.tar.gz hardware_libhardware-62735086edb279ca4c967d66e69f3788e6902b0a.tar.bz2 |
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
Diffstat (limited to 'modules/camera/Metadata.h')
-rw-r--r-- | modules/camera/Metadata.h | 63 |
1 files changed, 21 insertions, 42 deletions
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 <pthread.h> +#include <stdint.h> #include <hardware/camera3.h> -#include <hardware/gralloc.h> #include <system/camera_metadata.h> -#include <system/graphics.h> 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 |