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

Commit 763226f9 authored by Guennadi Liakhovetski's avatar Guennadi Liakhovetski Committed by android-build-merger
Browse files

Merge "CameraService: fix camera removal paths" am: 930c9800 am: 1f1584af

am: 714d2923

Change-Id: I2f4b53bbcc9d8f3a6865405a6ac764f2f50a9395
parents 4e3815d1 714d2923
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -340,6 +340,9 @@ void CameraManagerGlobal::onStatusChangedLocked(
        msg->setString(kCameraIdKey, AString(cameraId));
        msg->post();
    }
    if (status == hardware::ICameraServiceListener::STATUS_NOT_PRESENT) {
        mDeviceStatusMap.erase(cameraId);
    }
}

} // namespace android
+12 −0
Original line number Diff line number Diff line
@@ -316,6 +316,17 @@ void CameraService::addStates(const String8 id) {
    logDeviceAdded(id, "Device added");
}

void CameraService::removeStates(const String8 id) {
    if (mFlashlight->hasFlashUnit(id)) {
        mTorchStatusMap.removeItem(id);
    }

    {
        Mutex::Autolock lock(mCameraStatesLock);
        mCameraStates.erase(id);
    }
}

void CameraService::onDeviceStatusChanged(const String8& id,
        CameraDeviceStatus newHalStatus) {
    ALOGI("%s: Status changed for cameraId=%s, newStatus=%d", __FUNCTION__,
@@ -380,6 +391,7 @@ void CameraService::onDeviceStatusChanged(const String8& id,
            clientToDisconnect->disconnect();
        }

        removeStates(id);
    } else {
        if (oldStatus == StatusInternal::NOT_PRESENT) {
            logDeviceAdded(id, String8::format("Device status changed from %d to %d", oldStatus,
+2 −1
Original line number Diff line number Diff line
@@ -551,8 +551,9 @@ private:
    // Eumerate all camera providers in the system
    status_t enumerateProviders();

    // Add a new camera to camera and torch state lists
    // Add a new camera to camera and torch state lists or remove an unplugged one
    void addStates(const String8 id);
    void removeStates(const String8 id);

    // Check if we can connect, before we acquire the service lock.
    // The returned originalClientPid is the PID of the original process that wants to connect to
+11 −0
Original line number Diff line number Diff line
@@ -603,6 +603,15 @@ status_t CameraProviderManager::ProviderInfo::addDevice(const std::string& name,
    return OK;
}

void CameraProviderManager::ProviderInfo::removeDevice(std::string id) {
    for (auto it = mDevices.begin(); it != mDevices.end(); it++) {
        if ((*it)->mId == id) {
            mDevices.erase(it);
            break;
        }
    }
}

status_t CameraProviderManager::ProviderInfo::dump(int fd, const Vector<String16>&) const {
    dprintf(fd, "== Camera Provider HAL %s (v2.4, %s) static info: %zu devices: ==\n",
            mProviderName.c_str(), mInterface->isRemote() ? "remote" : "passthrough",
@@ -684,6 +693,8 @@ hardware::Return<void> CameraProviderManager::ProviderInfo::cameraDeviceStatusCh
                return hardware::Void();
            }
            addDevice(cameraDeviceName, newStatus, &id);
        } else if (newStatus == CameraDeviceStatus::NOT_PRESENT) {
            removeDevice(id);
        }
        listener = mManager->getStatusListener();
    }
+2 −0
Original line number Diff line number Diff line
@@ -387,6 +387,8 @@ private:

        // Generate vendor tag id
        static metadata_vendor_id_t generateVendorTagId(const std::string &name);

        void removeDevice(std::string id);
    };

    // Utility to find a DeviceInfo by ID; pointer is only valid while mInterfaceMutex is held