Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 54298b33 authored by Yin-Chia Yeh's avatar Yin-Chia Yeh
Browse files

Camera: fix metadata assertion

Bug: 19897963
Change-Id: I6b383c4750f31691a1c02e927bbeb0c1998a9eff
parent 676b21b3
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -74,7 +74,7 @@ CameraMetadata::~CameraMetadata() {
    clear();
}

const camera_metadata_t* CameraMetadata::getAndLock() {
const camera_metadata_t* CameraMetadata::getAndLock() const {
    mLocked = true;
    return mBuffer;
}
+2 −2
Original line number Diff line number Diff line
@@ -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
+7 −6
Original line number Diff line number Diff line
@@ -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;
}

+2 −6
Original line number Diff line number Diff line
@@ -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;
};