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

Commit d1cdbf26 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Camera: Re-enumarate new providers" into oc-dev

parents c7205dc3 aee727dd
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -93,10 +93,6 @@ status_t CameraFlashlight::setTorchMode(const String8& cameraId, bool enabled) {
    }

    if (mFlashControl == NULL) {
        if (enabled == false) {
            return OK;
        }

        res = createFlashlightControl(cameraId);
        if (res) {
            return res;
@@ -139,10 +135,14 @@ status_t CameraFlashlight::findFlashUnits() {
        cameraIds[i] = String8(ids[i].c_str());
    }

    mHasFlashlightMap.clear();
    mFlashlightMapInitialized = false;
    mFlashControl.clear();

    for (auto &id : cameraIds) {
        ssize_t index = mHasFlashlightMap.indexOfKey(id);
        if (0 <= index) {
            continue;
        }

        bool hasFlash = false;
        res = createFlashlightControl(id);
        if (res) {
+31 −13
Original line number Diff line number Diff line
@@ -198,14 +198,18 @@ void CameraService::onFirstRef()
}

status_t CameraService::enumerateProviders() {
    mCameraProviderManager = new CameraProviderManager();
    status_t res;
    Mutex::Autolock l(mServiceLock);

    if (nullptr == mCameraProviderManager.get()) {
        mCameraProviderManager = new CameraProviderManager();
        res = mCameraProviderManager->initialize(this);
        if (res != OK) {
            ALOGE("%s: Unable to initialize camera provider manager: %s (%d)",
                    __FUNCTION__, strerror(-res), res);
            return res;
        }
    }

    mNumberOfCameras = mCameraProviderManager->getCameraCount();
    mNumberOfNormalCameras =
@@ -216,15 +220,25 @@ status_t CameraService::enumerateProviders() {
    // TODO: maybe put this into CameraProviderManager::initialize()?
    mCameraProviderManager->setUpVendorTags();

    if (nullptr == mFlashlight.get()) {
        mFlashlight = new CameraFlashlight(mCameraProviderManager, this);
    }

    res = mFlashlight->findFlashUnits();
    if (res != OK) {
        ALOGE("Failed to enumerate flash units: %s (%d)", strerror(-res), res);
    }

    // TODO: Verify device versions are in support

    for (auto& cameraId : mCameraProviderManager->getCameraDeviceIds()) {
        String8 id8 = String8(cameraId.c_str());
        {
            Mutex::Autolock lock(mCameraStatesLock);
            auto iter = mCameraStates.find(id8);
            if (iter != mCameraStates.end()) {
                continue;
            }
        }

        hardware::camera::common::V1_0::CameraResourceCost cost;
        res = mCameraProviderManager->getResourceCost(cameraId, &cost);
        if (res != OK) {
@@ -235,22 +249,19 @@ status_t CameraService::enumerateProviders() {
        for (size_t i = 0; i < cost.conflictingDevices.size(); i++) {
            conflicting.emplace(String8(cost.conflictingDevices[i].c_str()));
        }
        String8 id8 = String8(cameraId.c_str());

        Mutex::Autolock lock(mCameraStatesLock);
        mCameraStates.emplace(id8,
            std::make_shared<CameraState>(id8, cost.resourceCost, conflicting));

        if (mFlashlight->hasFlashUnit(id8)) {
            mTorchStatusMap.add(id8,
                TorchModeStatus::AVAILABLE_OFF);
            mTorchStatusMap.add(id8, TorchModeStatus::AVAILABLE_OFF);
        }
    }

    return OK;
}


sp<ICameraServiceProxy> CameraService::getCameraServiceProxy() {
    sp<ICameraServiceProxy> proxyBinder = nullptr;
#ifndef __BRILLO__
@@ -276,6 +287,10 @@ CameraService::~CameraService() {
    VendorTagDescriptor::clearGlobalVendorTagDescriptor();
}

void CameraService::onNewProviderRegistered() {
    enumerateProviders();
}

void CameraService::onDeviceStatusChanged(const String8& id,
        CameraDeviceStatus newHalStatus) {
    ALOGI("%s: Status changed for cameraId=%s, newStatus=%d", __FUNCTION__,
@@ -407,6 +422,7 @@ void CameraService::onTorchStatusChangedLocked(const String8& cameraId,

Status CameraService::getNumberOfCameras(int32_t type, int32_t* numCameras) {
    ATRACE_CALL();
    Mutex::Autolock l(mServiceLock);
    switch (type) {
        case CAMERA_TYPE_BACKWARD_COMPATIBLE:
            *numCameras = mNumberOfNormalCameras;
@@ -426,6 +442,8 @@ Status CameraService::getNumberOfCameras(int32_t type, int32_t* numCameras) {
Status CameraService::getCameraInfo(int cameraId,
        CameraInfo* cameraInfo) {
    ATRACE_CALL();
    Mutex::Autolock l(mServiceLock);

    if (!mInitialized) {
        return STATUS_ERROR(ERROR_DISCONNECTED,
                "Camera subsystem is not available");
+1 −0
Original line number Diff line number Diff line
@@ -99,6 +99,7 @@ public:
            hardware::camera::common::V1_0::CameraDeviceStatus newHalStatus) override;
    virtual void        onTorchStatusChanged(const String8& cameraId,
            hardware::camera::common::V1_0::TorchModeStatus newStatus) override;
    virtual void        onNewProviderRegistered() override;

    /////////////////////////////////////////////////////////////////////
    // ICameraService
+10 −3
Original line number Diff line number Diff line
@@ -231,7 +231,6 @@ status_t CameraProviderManager::setTorchMode(const std::string &id, bool enabled
status_t CameraProviderManager::setUpVendorTags() {
    sp<VendorTagDescriptorCache> tagCache = new VendorTagDescriptorCache();

    VendorTagDescriptorCache::clearGlobalVendorTagCache();
    for (auto& provider : mProviders) {
        hardware::hidl_vec<VendorTagSection> vts;
        Status status;
@@ -331,9 +330,17 @@ hardware::Return<void> CameraProviderManager::onRegistration(
        const hardware::hidl_string& /*fqName*/,
        const hardware::hidl_string& name,
        bool /*preexisting*/) {
    {
        std::lock_guard<std::mutex> lock(mInterfaceMutex);

        addProviderLocked(name);
    }

    sp<StatusListener> listener = getStatusListener();
    if (nullptr != listener.get()) {
        listener->onNewProviderRegistered();
    }

    return hardware::Return<void>();
}

+1 −0
Original line number Diff line number Diff line
@@ -106,6 +106,7 @@ public:
                hardware::camera::common::V1_0::CameraDeviceStatus newStatus) = 0;
        virtual void onTorchStatusChanged(const String8 &cameraId,
                hardware::camera::common::V1_0::TorchModeStatus newStatus) = 0;
        virtual void onNewProviderRegistered() = 0;
    };

    /**