summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/android/camera_metadata.cpp11
-rw-r--r--src/android/camera_metadata.h12
2 files changed, 19 insertions, 4 deletions
diff --git a/src/android/camera_metadata.cpp b/src/android/camera_metadata.cpp
index 59366c50..ebe43ba4 100644
--- a/src/android/camera_metadata.cpp
+++ b/src/android/camera_metadata.cpp
@@ -137,7 +137,8 @@ bool CameraMetadata::addEntry(uint32_t tag, const void *data, size_t count,
return false;
}
-bool CameraMetadata::updateEntry(uint32_t tag, const void *data, size_t count)
+bool CameraMetadata::updateEntry(uint32_t tag, const void *data, size_t count,
+ size_t elementSize)
{
if (!valid_)
return false;
@@ -152,6 +153,14 @@ bool CameraMetadata::updateEntry(uint32_t tag, const void *data, size_t count)
return false;
}
+ if (camera_metadata_type_size[entry.type] != elementSize) {
+ const char *name = get_camera_metadata_tag_name(tag);
+ LOG(CameraMetadata, Fatal)
+ << "Invalid element size for tag "
+ << (name ? name : "<unknown>");
+ return false;
+ }
+
size_t oldSize =
calculate_camera_metadata_entry_data_size(entry.type,
entry.count);
diff --git a/src/android/camera_metadata.h b/src/android/camera_metadata.h
index d7c8d9df..f8f2a0d2 100644
--- a/src/android/camera_metadata.h
+++ b/src/android/camera_metadata.h
@@ -55,7 +55,7 @@ public:
template<typename T>
bool updateEntry(uint32_t tag, const T &data)
{
- return updateEntry(tag, &data, 1);
+ return updateEntry(tag, &data, 1, sizeof(T));
}
template<typename T, size_t size>
@@ -68,10 +68,14 @@ public:
typename T = typename S::value_type>
bool updateEntry(uint32_t tag, const S &data)
{
- return updateEntry(tag, data.data(), data.size());
+ return updateEntry(tag, data.data(), data.size(), sizeof(T));
}
- bool updateEntry(uint32_t tag, const void *data, size_t count);
+ template<typename T>
+ bool updateEntry(uint32_t tag, const T *data, size_t count)
+ {
+ return updateEntry(tag, data, count, sizeof(T));
+ }
camera_metadata_t *get();
const camera_metadata_t *get() const;
@@ -80,6 +84,8 @@ private:
bool resize(size_t count, size_t size);
bool addEntry(uint32_t tag, const void *data, size_t count,
size_t elementSize);
+ bool updateEntry(uint32_t tag, const void *data, size_t count,
+ size_t elementSize);
camera_metadata_t *metadata_;
bool valid_;