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 /services | |
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
Diffstat (limited to 'services')
-rw-r--r-- | services/camera/libcameraservice/common/CameraModule.cpp | 13 | ||||
-rw-r--r-- | services/camera/libcameraservice/common/CameraModule.h | 8 |
2 files changed, 9 insertions, 12 deletions
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; }; |