diff options
author | Yin-Chia Yeh <yinchiayeh@google.com> | 2015-03-24 16:51:41 -0700 |
---|---|---|
committer | Yin-Chia Yeh <yinchiayeh@google.com> | 2015-03-24 16:51:41 -0700 |
commit | 54298b338cf9f782f2ac681a15e6cbbb99649350 (patch) | |
tree | ea9027bd6a83df8488aa7d16d237c51f3c93a269 | |
parent | 676b21b30edbd74d7b9aae247961a1ffde1b8993 (diff) | |
download | frameworks_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.cpp | 2 | ||||
-rw-r--r-- | include/camera/CameraMetadata.h | 4 | ||||
-rw-r--r-- | services/camera/libcameraservice/common/CameraModule.cpp | 13 | ||||
-rw-r--r-- | services/camera/libcameraservice/common/CameraModule.h | 8 |
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; }; |