Loading services/camera/libcameraservice/common/CameraProviderManager.cpp +19 −23 Original line number Original line Diff line number Diff line Loading @@ -1345,6 +1345,20 @@ status_t CameraProviderManager::ProviderInfo::initialize( } } } } // cameraDeviceStatusChange callbacks may be called (and causing new devices added) // before setCallback returns hardware::Return<Status> status = interface->setCallback(this); if (!status.isOk()) { ALOGE("%s: Transaction error setting up callbacks with camera provider '%s': %s", __FUNCTION__, mProviderName.c_str(), status.description().c_str()); return DEAD_OBJECT; } if (status != Status::OK) { ALOGE("%s: Unable to register callbacks with camera provider '%s'", __FUNCTION__, mProviderName.c_str()); return mapToStatusT(status); } hardware::Return<bool> linked = interface->linkToDeath(this, /*cookie*/ mId); hardware::Return<bool> linked = interface->linkToDeath(this, /*cookie*/ mId); if (!linked.isOk()) { if (!linked.isOk()) { ALOGE("%s: Transaction error in linking to camera provider '%s' death: %s", ALOGE("%s: Transaction error in linking to camera provider '%s' death: %s", Loading Loading @@ -1373,7 +1387,6 @@ status_t CameraProviderManager::ProviderInfo::initialize( return res; return res; } } Status status; // Get initial list of camera devices, if any // Get initial list of camera devices, if any std::vector<std::string> devices; std::vector<std::string> devices; hardware::Return<void> ret = interface->getCameraIdList([&status, this, &devices]( hardware::Return<void> ret = interface->getCameraIdList([&status, this, &devices]( Loading Loading @@ -1438,22 +1451,6 @@ status_t CameraProviderManager::ProviderInfo::initialize( } } } } // cameraDeviceStatusChange callbacks may be called (and causing new devices added) // before setCallback returns. setCallback must be called after addDevice so that // the physical camera status callback can look up available regular // cameras. hardware::Return<Status> st = interface->setCallback(this); if (!st.isOk()) { ALOGE("%s: Transaction error setting up callbacks with camera provider '%s': %s", __FUNCTION__, mProviderName.c_str(), st.description().c_str()); return DEAD_OBJECT; } if (st != Status::OK) { ALOGE("%s: Unable to register callbacks with camera provider '%s'", __FUNCTION__, mProviderName.c_str()); return mapToStatusT(st); } ALOGI("Camera provider %s ready with %zu camera devices", ALOGI("Camera provider %s ready with %zu camera devices", mProviderName.c_str(), mDevices.size()); mProviderName.c_str(), mDevices.size()); Loading Loading @@ -1784,9 +1781,10 @@ hardware::Return<void> CameraProviderManager::ProviderInfo::physicalCameraDevice CameraDeviceStatus newStatus) { CameraDeviceStatus newStatus) { sp<StatusListener> listener; sp<StatusListener> listener; std::string id; std::string id; bool initialized = false; { { std::lock_guard<std::mutex> lock(mLock); std::lock_guard<std::mutex> lock(mLock); if (!mInitialized) return hardware::Void(); bool known = false; bool known = false; for (auto& deviceInfo : mDevices) { for (auto& deviceInfo : mDevices) { if (deviceInfo->mName == cameraDeviceName) { if (deviceInfo->mName == cameraDeviceName) { Loading @@ -1803,10 +1801,9 @@ hardware::Return<void> CameraProviderManager::ProviderInfo::physicalCameraDevice __FUNCTION__, id.c_str(), physicalCameraDeviceName.c_str()); __FUNCTION__, id.c_str(), physicalCameraDeviceName.c_str()); return hardware::Void(); return hardware::Void(); } } ALOGI("Camera device %s physical device %s status is now %s, was %s", ALOGI("Camera device %s physical device %s status is now %s", cameraDeviceName.c_str(), physicalCameraDeviceName.c_str(), cameraDeviceName.c_str(), physicalCameraDeviceName.c_str(), deviceStatusToString(newStatus), deviceStatusToString( deviceStatusToString(newStatus)); deviceInfo->mPhysicalStatus[physicalCameraDeviceName])); known = true; known = true; break; break; } } Loading @@ -1819,13 +1816,12 @@ hardware::Return<void> CameraProviderManager::ProviderInfo::physicalCameraDevice return hardware::Void(); return hardware::Void(); } } listener = mManager->getStatusListener(); listener = mManager->getStatusListener(); initialized = mInitialized; } } // Call without lock held to allow reentrancy into provider manager // Call without lock held to allow reentrancy into provider manager // Don't send the callback if providerInfo hasn't been initialized. // Don't send the callback if providerInfo hasn't been initialized. // CameraService will initialize device status after provider is // CameraService will initialize device status after provider is // initialized // initialized if (listener != nullptr && initialized) { if (listener != nullptr) { String8 physicalId(physicalCameraDeviceName.c_str()); String8 physicalId(physicalCameraDeviceName.c_str()); listener->onDeviceStatusChanged(String8(id.c_str()), listener->onDeviceStatusChanged(String8(id.c_str()), physicalId, newStatus); physicalId, newStatus); Loading services/camera/libcameraservice/common/CameraProviderManager.h +0 −2 Original line number Original line Diff line number Diff line Loading @@ -444,8 +444,6 @@ private: const hardware::camera::common::V1_0::CameraResourceCost mResourceCost; const hardware::camera::common::V1_0::CameraResourceCost mResourceCost; hardware::camera::common::V1_0::CameraDeviceStatus mStatus; hardware::camera::common::V1_0::CameraDeviceStatus mStatus; std::map<std::string, hardware::camera::common::V1_0::CameraDeviceStatus> mPhysicalStatus; wp<ProviderInfo> mParentProvider; wp<ProviderInfo> mParentProvider; Loading Loading
services/camera/libcameraservice/common/CameraProviderManager.cpp +19 −23 Original line number Original line Diff line number Diff line Loading @@ -1345,6 +1345,20 @@ status_t CameraProviderManager::ProviderInfo::initialize( } } } } // cameraDeviceStatusChange callbacks may be called (and causing new devices added) // before setCallback returns hardware::Return<Status> status = interface->setCallback(this); if (!status.isOk()) { ALOGE("%s: Transaction error setting up callbacks with camera provider '%s': %s", __FUNCTION__, mProviderName.c_str(), status.description().c_str()); return DEAD_OBJECT; } if (status != Status::OK) { ALOGE("%s: Unable to register callbacks with camera provider '%s'", __FUNCTION__, mProviderName.c_str()); return mapToStatusT(status); } hardware::Return<bool> linked = interface->linkToDeath(this, /*cookie*/ mId); hardware::Return<bool> linked = interface->linkToDeath(this, /*cookie*/ mId); if (!linked.isOk()) { if (!linked.isOk()) { ALOGE("%s: Transaction error in linking to camera provider '%s' death: %s", ALOGE("%s: Transaction error in linking to camera provider '%s' death: %s", Loading Loading @@ -1373,7 +1387,6 @@ status_t CameraProviderManager::ProviderInfo::initialize( return res; return res; } } Status status; // Get initial list of camera devices, if any // Get initial list of camera devices, if any std::vector<std::string> devices; std::vector<std::string> devices; hardware::Return<void> ret = interface->getCameraIdList([&status, this, &devices]( hardware::Return<void> ret = interface->getCameraIdList([&status, this, &devices]( Loading Loading @@ -1438,22 +1451,6 @@ status_t CameraProviderManager::ProviderInfo::initialize( } } } } // cameraDeviceStatusChange callbacks may be called (and causing new devices added) // before setCallback returns. setCallback must be called after addDevice so that // the physical camera status callback can look up available regular // cameras. hardware::Return<Status> st = interface->setCallback(this); if (!st.isOk()) { ALOGE("%s: Transaction error setting up callbacks with camera provider '%s': %s", __FUNCTION__, mProviderName.c_str(), st.description().c_str()); return DEAD_OBJECT; } if (st != Status::OK) { ALOGE("%s: Unable to register callbacks with camera provider '%s'", __FUNCTION__, mProviderName.c_str()); return mapToStatusT(st); } ALOGI("Camera provider %s ready with %zu camera devices", ALOGI("Camera provider %s ready with %zu camera devices", mProviderName.c_str(), mDevices.size()); mProviderName.c_str(), mDevices.size()); Loading Loading @@ -1784,9 +1781,10 @@ hardware::Return<void> CameraProviderManager::ProviderInfo::physicalCameraDevice CameraDeviceStatus newStatus) { CameraDeviceStatus newStatus) { sp<StatusListener> listener; sp<StatusListener> listener; std::string id; std::string id; bool initialized = false; { { std::lock_guard<std::mutex> lock(mLock); std::lock_guard<std::mutex> lock(mLock); if (!mInitialized) return hardware::Void(); bool known = false; bool known = false; for (auto& deviceInfo : mDevices) { for (auto& deviceInfo : mDevices) { if (deviceInfo->mName == cameraDeviceName) { if (deviceInfo->mName == cameraDeviceName) { Loading @@ -1803,10 +1801,9 @@ hardware::Return<void> CameraProviderManager::ProviderInfo::physicalCameraDevice __FUNCTION__, id.c_str(), physicalCameraDeviceName.c_str()); __FUNCTION__, id.c_str(), physicalCameraDeviceName.c_str()); return hardware::Void(); return hardware::Void(); } } ALOGI("Camera device %s physical device %s status is now %s, was %s", ALOGI("Camera device %s physical device %s status is now %s", cameraDeviceName.c_str(), physicalCameraDeviceName.c_str(), cameraDeviceName.c_str(), physicalCameraDeviceName.c_str(), deviceStatusToString(newStatus), deviceStatusToString( deviceStatusToString(newStatus)); deviceInfo->mPhysicalStatus[physicalCameraDeviceName])); known = true; known = true; break; break; } } Loading @@ -1819,13 +1816,12 @@ hardware::Return<void> CameraProviderManager::ProviderInfo::physicalCameraDevice return hardware::Void(); return hardware::Void(); } } listener = mManager->getStatusListener(); listener = mManager->getStatusListener(); initialized = mInitialized; } } // Call without lock held to allow reentrancy into provider manager // Call without lock held to allow reentrancy into provider manager // Don't send the callback if providerInfo hasn't been initialized. // Don't send the callback if providerInfo hasn't been initialized. // CameraService will initialize device status after provider is // CameraService will initialize device status after provider is // initialized // initialized if (listener != nullptr && initialized) { if (listener != nullptr) { String8 physicalId(physicalCameraDeviceName.c_str()); String8 physicalId(physicalCameraDeviceName.c_str()); listener->onDeviceStatusChanged(String8(id.c_str()), listener->onDeviceStatusChanged(String8(id.c_str()), physicalId, newStatus); physicalId, newStatus); Loading
services/camera/libcameraservice/common/CameraProviderManager.h +0 −2 Original line number Original line Diff line number Diff line Loading @@ -444,8 +444,6 @@ private: const hardware::camera::common::V1_0::CameraResourceCost mResourceCost; const hardware::camera::common::V1_0::CameraResourceCost mResourceCost; hardware::camera::common::V1_0::CameraDeviceStatus mStatus; hardware::camera::common::V1_0::CameraDeviceStatus mStatus; std::map<std::string, hardware::camera::common::V1_0::CameraDeviceStatus> mPhysicalStatus; wp<ProviderInfo> mParentProvider; wp<ProviderInfo> mParentProvider; Loading