summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYin-Chia Yeh <yinchiayeh@google.com>2015-03-24 16:51:41 -0700
committerYin-Chia Yeh <yinchiayeh@google.com>2015-03-24 16:51:41 -0700
commit54298b338cf9f782f2ac681a15e6cbbb99649350 (patch)
treeea9027bd6a83df8488aa7d16d237c51f3c93a269
parent676b21b30edbd74d7b9aae247961a1ffde1b8993 (diff)
downloadframeworks_av-54298b338cf9f782f2ac681a15e6cbbb99649350.zip
frameworks_av-54298b338cf9f782f2ac681a15e6cbbb99649350.tar.gz
frameworks_av-54298b338cf9f782f2ac681a15e6cbbb99649350.tar.bz2
Camera: fix metadata assertion
Bug: 19897963 Change-Id: I6b383c4750f31691a1c02e927bbeb0c1998a9eff
-rw-r--r--camera/CameraMetadata.cpp2
-rw-r--r--include/camera/CameraMetadata.h4
-rw-r--r--services/camera/libcameraservice/common/CameraModule.cpp13
-rw-r--r--services/camera/libcameraservice/common/CameraModule.h8
4 files changed, 12 insertions, 15 deletions
diff --git a/camera/CameraMetadata.cpp b/camera/CameraMetadata.cpp
index 043437f..e216d26 100644
--- a/camera/CameraMetadata.cpp
+++ b/camera/CameraMetadata.cpp
@@ -74,7 +74,7 @@ CameraMetadata::~CameraMetadata() {
clear();
}
-const camera_metadata_t* CameraMetadata::getAndLock() {
+const camera_metadata_t* CameraMetadata::getAndLock() const {
mLocked = true;
return mBuffer;
}
diff --git a/include/camera/CameraMetadata.h b/include/camera/CameraMetadata.h
index 1254d3c..953d711 100644
--- a/include/camera/CameraMetadata.h
+++ b/include/camera/CameraMetadata.h
@@ -56,7 +56,7 @@ class CameraMetadata {
* thread-safety, it simply prevents the camera_metadata_t pointer returned
* here from being accidentally invalidated by CameraMetadata operations.
*/
- const camera_metadata_t* getAndLock();
+ const camera_metadata_t* getAndLock() const;
/**
* Unlock the CameraMetadata for use again. After this unlock, the pointer
@@ -208,7 +208,7 @@ class CameraMetadata {
private:
camera_metadata_t *mBuffer;
- bool mLocked;
+ mutable bool mLocked;
/**
* Check if tag has a given type
diff --git a/services/camera/libcameraservice/common/CameraModule.cpp b/services/camera/libcameraservice/common/CameraModule.cpp
index 50cece4..e5b12ae 100644
--- a/services/camera/libcameraservice/common/CameraModule.cpp
+++ b/services/camera/libcameraservice/common/CameraModule.cpp
@@ -73,24 +73,25 @@ int CameraModule::getCameraInfo(int cameraId, struct camera_info *info) {
ssize_t index = mCameraInfoMap.indexOfKey(cameraId);
if (index == NAME_NOT_FOUND) {
// Get camera info from raw module and cache it
- CameraInfo cameraInfo;
- camera_info rawInfo;
+ camera_info rawInfo, cameraInfo;
int ret = mModule->get_camera_info(cameraId, &rawInfo);
if (ret != 0) {
return ret;
}
- CameraMetadata &m = cameraInfo.cameraCharacteristics;
+ CameraMetadata m;
m = rawInfo.static_camera_characteristics;
deriveCameraCharacteristicsKeys(rawInfo.device_version, m);
- cameraInfo.cameraInfo = rawInfo;
- cameraInfo.cameraInfo.static_camera_characteristics = m.getAndLock();
+ mCameraCharacteristicsMap.add(cameraId, m);
+ cameraInfo = rawInfo;
+ cameraInfo.static_camera_characteristics =
+ mCameraCharacteristicsMap.valueFor(cameraId).getAndLock();
mCameraInfoMap.add(cameraId, cameraInfo);
index = mCameraInfoMap.indexOfKey(cameraId);
}
assert(index != NAME_NOT_FOUND);
// return the cached camera info
- *info = mCameraInfoMap[index].cameraInfo;
+ *info = mCameraInfoMap[index];
return 0;
}
diff --git a/services/camera/libcameraservice/common/CameraModule.h b/services/camera/libcameraservice/common/CameraModule.h
index ecc5b2d..e285b21 100644
--- a/services/camera/libcameraservice/common/CameraModule.h
+++ b/services/camera/libcameraservice/common/CameraModule.h
@@ -54,13 +54,9 @@ private:
static void deriveCameraCharacteristicsKeys(uint32_t deviceVersion, CameraMetadata &chars);
status_t filterOpenErrorCode(status_t err);
- struct CameraInfo {
- CameraMetadata cameraCharacteristics;
- camera_info cameraInfo;
- };
-
camera_module_t *mModule;
- KeyedVector<int, CameraInfo> mCameraInfoMap;
+ KeyedVector<int, camera_info> mCameraInfoMap;
+ KeyedVector<int, CameraMetadata> mCameraCharacteristicsMap;
Mutex mCameraInfoLock;
};