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

Commit 6d2d1307 authored by Guennadi Liakhovetski's avatar Guennadi Liakhovetski Committed by android-build-merger
Browse files

Merge "camera: add support for camera removal" am: cf999782 am: 040c21f6

am: 3724fbed

Change-Id: Ic32fd930f90515a74d1e44e4a3e932d20d7970ff
parents 067a95dd 3724fbed
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -425,6 +425,13 @@ status_t CameraModule::filterOpenErrorCode(status_t err) {
    return -ENODEV;
}

void CameraModule::removeCamera(int cameraId) {
    free_camera_metadata(
        const_cast<camera_metadata_t*>(mCameraInfoMap[cameraId].static_camera_characteristics));
    mCameraInfoMap.removeItem(cameraId);
    mDeviceVersionMap.removeItem(cameraId);
}

uint16_t CameraModule::getModuleApiVersion() const {
    return mModule->common.module_api_version;
}
+2 −0
Original line number Diff line number Diff line
@@ -63,6 +63,8 @@ public:
    const char* getModuleAuthor() const;
    // Only used by CameraModuleFixture native test. Do NOT use elsewhere.
    void *getDso();
    // Only used by CameraProvider
    void removeCamera(int cameraId);

private:
    // Derive camera characteristics keys defined after HAL device version
+35 −2
Original line number Diff line number Diff line
@@ -106,6 +106,30 @@ void CameraProvider::addDeviceNames(int camera_id, CameraDeviceStatus status, bo
    }
}

void CameraProvider::removeDeviceNames(int camera_id)
{
    std::string cameraIdStr = std::to_string(camera_id);

    mCameraIds.remove(cameraIdStr);

    int deviceVersion = mModule->getDeviceVersion(camera_id);
    auto deviceNamePair = std::make_pair(cameraIdStr,
                                         getHidlDeviceName(cameraIdStr, deviceVersion));
    mCameraDeviceNames.remove(deviceNamePair);
    mCallbacks->cameraDeviceStatusChange(deviceNamePair.second, CameraDeviceStatus::NOT_PRESENT);
    if (deviceVersion >= CAMERA_DEVICE_API_VERSION_3_2 &&
        mModule->isOpenLegacyDefined() && mOpenLegacySupported[cameraIdStr]) {

        deviceNamePair = std::make_pair(cameraIdStr,
                            getHidlDeviceName(cameraIdStr, CAMERA_DEVICE_API_VERSION_1_0));
        mCameraDeviceNames.remove(deviceNamePair);
        mCallbacks->cameraDeviceStatusChange(deviceNamePair.second,
                                             CameraDeviceStatus::NOT_PRESENT);
    }

    mModule->removeCamera(camera_id);
}

/**
 * static callback forwarding methods from HAL to instance
 */
@@ -137,9 +161,18 @@ void CameraProvider::sCameraDeviceStatusChange(
            }
        }

        switch (status) {
        case CameraDeviceStatus::PRESENT:
        case CameraDeviceStatus::ENUMERATING:
            if (!found) {
                cp->addDeviceNames(camera_id, status, true);
            }
            break;
        case CameraDeviceStatus::NOT_PRESENT:
            if (found) {
                cp->removeDeviceNames(camera_id);
            }
        }
    }
}

+1 −0
Original line number Diff line number Diff line
@@ -115,6 +115,7 @@ private:

    void addDeviceNames(int camera_id, CameraDeviceStatus status = CameraDeviceStatus::PRESENT,
                        bool cam_new = false);
    void removeDeviceNames(int camera_id);
};

extern "C" ICameraProvider* HIDL_FETCH_ICameraProvider(const char* name);