diff options
author | Yin-Chia Yeh <yinchiayeh@google.com> | 2015-03-25 00:05:59 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-03-25 00:05:59 +0000 |
commit | 525907aa2cf2148186ed55e47e424395b9a43dca (patch) | |
tree | 947b98272d9e5956eb5c7e08b27895117e1488d2 | |
parent | ae9710473b88592c557488bfcae71616d9e9b75f (diff) | |
parent | 54298b338cf9f782f2ac681a15e6cbbb99649350 (diff) | |
download | frameworks_av-525907aa2cf2148186ed55e47e424395b9a43dca.zip frameworks_av-525907aa2cf2148186ed55e47e424395b9a43dca.tar.gz frameworks_av-525907aa2cf2148186ed55e47e424395b9a43dca.tar.bz2 |
Merge "Camera: fix metadata assertion"
-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; }; |