summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/android/camera_device.cpp34
-rw-r--r--src/android/camera_device.h2
2 files changed, 30 insertions, 6 deletions
diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index 1dcf985c..887db8da 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -8,6 +8,7 @@
#include "camera_device.h"
#include "camera_ops.h"
+#include <tuple>
#include <vector>
#include <libcamera/controls.h>
@@ -367,6 +368,29 @@ void CameraDevice::setCallbacks(const camera3_callback_ops_t *callbacks)
callbacks_ = callbacks;
}
+std::tuple<uint32_t, uint32_t> CameraDevice::calculateStaticMetadataSize()
+{
+ /*
+ * \todo Keep this in sync with the actual number of entries.
+ * Currently: 50 entries, 647 bytes of static metadata
+ */
+ uint32_t numEntries = 50;
+ uint32_t byteSize = 647;
+
+ /*
+ * Calculate space occupation in bytes for dynamically built metadata
+ * entries.
+ *
+ * Each stream configuration entry requires 52 bytes:
+ * 4 32bits integers for ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS
+ * 1 32bits integer for ANDROID_SCALER_AVAILABLE_FORMATS
+ * 4 64bits integers for ANDROID_SCALER_AVAILABLE_MIN_FRAME_DURATIONS
+ */
+ byteSize += streamConfigurations_.size() * 52;
+
+ return { numEntries, byteSize };
+}
+
/*
* Return static information for the camera.
*/
@@ -380,12 +404,10 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()
* example application, but a real camera implementation will require
* more.
*/
-
- /*
- * \todo Keep this in sync with the actual number of entries.
- * Currently: 50 entries, 666 bytes
- */
- staticMetadata_ = new CameraMetadata(50, 700);
+ uint32_t numEntries;
+ uint32_t byteSize;
+ std::tie(numEntries, byteSize) = calculateStaticMetadataSize();
+ staticMetadata_ = new CameraMetadata(numEntries, byteSize);
if (!staticMetadata_->isValid()) {
LOG(HAL, Error) << "Failed to allocate static metadata";
delete staticMetadata_;
diff --git a/src/android/camera_device.h b/src/android/camera_device.h
index 4e8911da..ed11410a 100644
--- a/src/android/camera_device.h
+++ b/src/android/camera_device.h
@@ -9,6 +9,7 @@
#include <map>
#include <memory>
+#include <tuple>
#include <vector>
#include <hardware/camera3.h>
@@ -68,6 +69,7 @@ private:
};
int initializeStreamConfigurations();
+ std::tuple<uint32_t, uint32_t> calculateStaticMetadataSize();
void notifyShutter(uint32_t frameNumber, uint64_t timestamp);
void notifyError(uint32_t frameNumber, camera3_stream_t *stream);
std::unique_ptr<CameraMetadata> getResultMetadata(int frame_number,