Loading services/camera/libcameraservice/CameraFlashlight.cpp +6 −6 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading services/camera/libcameraservice/CameraService.cpp +31 −13 Original line number Diff line number Diff line Loading @@ -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 = Loading @@ -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) { Loading @@ -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__ Loading @@ -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__, Loading Loading @@ -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; Loading @@ -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"); Loading services/camera/libcameraservice/CameraService.h +1 −0 Original line number Diff line number Diff line Loading @@ -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 Loading services/camera/libcameraservice/common/CameraProviderManager.cpp +10 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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>(); } Loading services/camera/libcameraservice/common/CameraProviderManager.h +1 −0 Original line number Diff line number Diff line Loading @@ -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; }; /** Loading Loading
services/camera/libcameraservice/CameraFlashlight.cpp +6 −6 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading
services/camera/libcameraservice/CameraService.cpp +31 −13 Original line number Diff line number Diff line Loading @@ -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 = Loading @@ -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) { Loading @@ -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__ Loading @@ -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__, Loading Loading @@ -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; Loading @@ -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"); Loading
services/camera/libcameraservice/CameraService.h +1 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
services/camera/libcameraservice/common/CameraProviderManager.cpp +10 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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>(); } Loading
services/camera/libcameraservice/common/CameraProviderManager.h +1 −0 Original line number Diff line number Diff line Loading @@ -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; }; /** Loading