Loading camera/common/1.0/default/CameraModule.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -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; } Loading camera/common/1.0/default/OWNERS 0 → 100644 +6 −0 Original line number Diff line number Diff line cychen@google.com epeev@google.com etalvala@google.com shuzhenwang@google.com yinchiayeh@google.com zhijunhe@google.com camera/common/1.0/default/include/CameraModule.h +2 −0 Original line number Diff line number Diff line Loading @@ -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 Loading camera/provider/2.4/default/CameraProvider.cpp +35 −2 Original line number Diff line number Diff line Loading @@ -104,6 +104,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 */ Loading Loading @@ -135,9 +159,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); } } } } Loading camera/provider/2.4/default/CameraProvider.h +1 −0 Original line number Diff line number Diff line Loading @@ -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); Loading Loading
camera/common/1.0/default/CameraModule.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -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; } Loading
camera/common/1.0/default/OWNERS 0 → 100644 +6 −0 Original line number Diff line number Diff line cychen@google.com epeev@google.com etalvala@google.com shuzhenwang@google.com yinchiayeh@google.com zhijunhe@google.com
camera/common/1.0/default/include/CameraModule.h +2 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
camera/provider/2.4/default/CameraProvider.cpp +35 −2 Original line number Diff line number Diff line Loading @@ -104,6 +104,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 */ Loading Loading @@ -135,9 +159,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); } } } } Loading
camera/provider/2.4/default/CameraProvider.h +1 −0 Original line number Diff line number Diff line Loading @@ -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); Loading