summaryrefslogtreecommitdiff
path: root/libcamera2
diff options
context:
space:
mode:
authorYounghwan Joo <yhwan.joo@samsung.com>2012-09-20 13:56:59 -0700
committerRebecca Schultz Zavin <rebecca@android.com>2012-09-20 14:39:18 -0700
commitf3312f8b250f3d2774564123ca0d7802f5016df5 (patch)
tree2d5f100969b82467d4eb98b10e2ec36d76303031 /libcamera2
parent4a9565ae8328e47faae2e91c8b9e8eb4f0ff51f6 (diff)
downloadexynos5-f3312f8b250f3d2774564123ca0d7802f5016df5.tar.gz
hardware: samsung_slsi: libcamera2: add classification of FD meta data
This commit is to add classification of FD meta data by fd scores Change-Id: I593383eca67b7a84421ef8d69f532878923db5eb Signed-off-by: Younghwan Joo <yhwan.joo@samsung.com>
Diffstat (limited to 'libcamera2')
-rw-r--r--libcamera2/ExynosCamera2.cpp2
-rw-r--r--libcamera2/ExynosCamera2.h1
-rw-r--r--libcamera2/MetadataConverter.cpp40
-rw-r--r--libcamera2/MetadataConverter.h6
-rw-r--r--libcamera2/fimc-is-metadata.h2
5 files changed, 36 insertions, 15 deletions
diff --git a/libcamera2/ExynosCamera2.cpp b/libcamera2/ExynosCamera2.cpp
index 1184abf..c6b6140 100644
--- a/libcamera2/ExynosCamera2.cpp
+++ b/libcamera2/ExynosCamera2.cpp
@@ -459,7 +459,7 @@ status_t ExynosCamera2::constructStaticInfo(camera_metadata_t **info,
availableFaceDetectModes,
sizeof(availableFaceDetectModes));
- m_curCameraInfo->maxFaceCount = 16;
+ m_curCameraInfo->maxFaceCount = CAMERA2_MAX_FACES;
ADD_OR_SIZE(ANDROID_STATS_MAX_FACE_COUNT,
&(m_curCameraInfo->maxFaceCount), 1);
diff --git a/libcamera2/ExynosCamera2.h b/libcamera2/ExynosCamera2.h
index f743064..2f62d2e 100644
--- a/libcamera2/ExynosCamera2.h
+++ b/libcamera2/ExynosCamera2.h
@@ -32,6 +32,7 @@
#include <camera/Camera.h>
#include <camera/CameraParameters.h>
#include "exynos_format.h"
+#include "fimc-is-metadata.h"
//#define VDIS_ENABLE
diff --git a/libcamera2/MetadataConverter.cpp b/libcamera2/MetadataConverter.cpp
index 167c553..75c6a93 100644
--- a/libcamera2/MetadataConverter.cpp
+++ b/libcamera2/MetadataConverter.cpp
@@ -539,26 +539,40 @@ status_t MetadataConverter::ToDynamicMetadata(struct camera2_shot_ext * metadata
&byteData, 1))
return NO_MEMORY;
- int maxFacecount = 16;
+ int maxFacecount = CAMERA2_MAX_FACES;
if (0 != add_camera_metadata_entry(dst, ANDROID_STATS_MAX_FACE_COUNT,
&maxFacecount, 1))
return NO_MEMORY;
- if (0 != add_camera_metadata_entry(dst, ANDROID_STATS_FACE_RECTANGLES,
- &metadata->dm.stats.faceRectangles, 4 * maxFacecount))
- return NO_MEMORY;
+ int tempFaceCount = 0;
+ for (int i = 0; i < CAMERA2_MAX_FACES; i++) {
+ if (metadata->dm.stats.faceScores[i] >= CAMERA2_FACE_DETECTION_THRESHOLD) {
+ mataFaceIds[tempFaceCount] = metadata->dm.stats.faceIds[i];
+ metaFaceScores[tempFaceCount] = metadata->dm.stats.faceScores[i];
- if (0 != add_camera_metadata_entry(dst, ANDROID_STATS_FACE_LANDMARKS,
- &metadata->dm.stats.faceLandmarks, 6 * maxFacecount))
- return NO_MEMORY;
+ memcpy(&mataFaceLandmarks[tempFaceCount][0], &metadata->dm.stats.faceLandmarks[i][0], 6*sizeof(uint32_t));
+ memcpy(&metaFaceRectangles[tempFaceCount][0], &metadata->dm.stats.faceRectangles[i][0], 4*sizeof(uint32_t));
+ tempFaceCount++;
+ }
+ }
- if (0 != add_camera_metadata_entry(dst, ANDROID_STATS_FACE_IDS,
- &metadata->dm.stats.faceIds, maxFacecount))
- return NO_MEMORY;
+ if (tempFaceCount > 0) {
+ if (0 != add_camera_metadata_entry(dst, ANDROID_STATS_FACE_RECTANGLES,
+ &metaFaceRectangles, 4 * tempFaceCount))
+ return NO_MEMORY;
- if (0 != add_camera_metadata_entry(dst, ANDROID_STATS_FACE_SCORES,
- &metadata->dm.stats.faceScores, maxFacecount))
- return NO_MEMORY;
+ if (0 != add_camera_metadata_entry(dst, ANDROID_STATS_FACE_LANDMARKS,
+ &mataFaceLandmarks, 6 * tempFaceCount))
+ return NO_MEMORY;
+
+ if (0 != add_camera_metadata_entry(dst, ANDROID_STATS_FACE_IDS,
+ &mataFaceIds, tempFaceCount))
+ return NO_MEMORY;
+
+ if (0 != add_camera_metadata_entry(dst, ANDROID_STATS_FACE_SCORES,
+ &metaFaceScores, tempFaceCount))
+ return NO_MEMORY;
+ }
if (0 != add_camera_metadata_entry(dst, ANDROID_SCALER_CROP_REGION,
&metadata->ctl.scaler.cropRegion, 3))
diff --git a/libcamera2/MetadataConverter.h b/libcamera2/MetadataConverter.h
index 0778609..2d637d0 100644
--- a/libcamera2/MetadataConverter.h
+++ b/libcamera2/MetadataConverter.h
@@ -53,7 +53,11 @@ private:
status_t CheckEntryTypeMismatch(camera_metadata_entry_t * entry, uint8_t type);
status_t CheckEntryTypeMismatch(camera_metadata_entry_t * entry, uint8_t type, size_t count);
status_t ApplySceneModeParameters(camera_metadata_t * request, struct camera2_shot_ext * dst_ext);
-
+
+ uint32_t metaFaceRectangles[CAMERA2_MAX_FACES][4];
+ uint8_t metaFaceScores[CAMERA2_MAX_FACES];
+ uint32_t mataFaceLandmarks[CAMERA2_MAX_FACES][6];
+ uint32_t mataFaceIds[CAMERA2_MAX_FACES];
};
}; // namespace android
diff --git a/libcamera2/fimc-is-metadata.h b/libcamera2/fimc-is-metadata.h
index 0de6c3a..8cb9141 100644
--- a/libcamera2/fimc-is-metadata.h
+++ b/libcamera2/fimc-is-metadata.h
@@ -29,6 +29,8 @@ struct rational {
#define CAMERA2_MAX_AVAILABLE_MODE 21
#define CAMERA2_MAX_FACES 16
+#define CAMERA2_FACE_DETECTION_THRESHOLD 100
+
/*
*controls/dynamic metadata
*/