Loading camera/device/3.2/default/CameraDevice.cpp +3 −1 Original line number Original line Diff line number Diff line Loading @@ -40,9 +40,11 @@ CameraDevice::CameraDevice( mCameraDeviceNames(cameraDeviceNames) { mCameraDeviceNames(cameraDeviceNames) { mCameraIdInt = atoi(mCameraId.c_str()); mCameraIdInt = atoi(mCameraId.c_str()); // Should not reach here as provider also validate ID // Should not reach here as provider also validate ID if (mCameraIdInt < 0 || mCameraIdInt >= module->getNumberOfCameras()) { if (mCameraIdInt < 0) { ALOGE("%s: Invalid camera id: %s", __FUNCTION__, mCameraId.c_str()); ALOGE("%s: Invalid camera id: %s", __FUNCTION__, mCameraId.c_str()); mInitFail = true; mInitFail = true; } else if (mCameraIdInt >= mModule->getNumberOfCameras()) { ALOGI("%s: Adding a new camera id: %s", __FUNCTION__, mCameraId.c_str()); } } mDeviceVersion = mModule->getDeviceVersion(mCameraIdInt); mDeviceVersion = mModule->getDeviceVersion(mCameraIdInt); Loading camera/provider/2.4/default/CameraProvider.cpp +48 −26 Original line number Original line Diff line number Diff line Loading @@ -64,6 +64,46 @@ bool matchDeviceName(const hidl_string& deviceName, std::string* deviceVersion, using ::android::hardware::camera::common::V1_0::CameraMetadataType; using ::android::hardware::camera::common::V1_0::CameraMetadataType; using ::android::hardware::camera::common::V1_0::Status; using ::android::hardware::camera::common::V1_0::Status; void CameraProvider::addDeviceNames(int camera_id, CameraDeviceStatus status, bool cam_new) { char cameraId[kMaxCameraIdLen]; snprintf(cameraId, sizeof(cameraId), "%d", camera_id); std::string cameraIdStr(cameraId); mCameraIds.add(cameraIdStr); // initialize mCameraDeviceNames and mOpenLegacySupported mOpenLegacySupported[cameraIdStr] = false; int deviceVersion = mModule->getDeviceVersion(camera_id); auto deviceNamePair = std::make_pair(cameraIdStr, getHidlDeviceName(cameraIdStr, deviceVersion)); mCameraDeviceNames.add(deviceNamePair); if (cam_new) { mCallbacks->cameraDeviceStatusChange(deviceNamePair.second, status); } if (deviceVersion >= CAMERA_DEVICE_API_VERSION_3_2 && mModule->isOpenLegacyDefined()) { // try open_legacy to see if it actually works struct hw_device_t* halDev = nullptr; int ret = mModule->openLegacy(cameraId, CAMERA_DEVICE_API_VERSION_1_0, &halDev); if (ret == 0) { mOpenLegacySupported[cameraIdStr] = true; halDev->close(halDev); deviceNamePair = std::make_pair(cameraIdStr, getHidlDeviceName(cameraIdStr, CAMERA_DEVICE_API_VERSION_1_0)); mCameraDeviceNames.add(deviceNamePair); if (cam_new) { mCallbacks->cameraDeviceStatusChange(deviceNamePair.second, status); } } else if (ret == -EBUSY || ret == -EUSERS) { // Looks like this provider instance is not initialized during // system startup and there are other camera users already. // Not a good sign but not fatal. ALOGW("%s: open_legacy try failed!", __FUNCTION__); } } } /** /** * static callback forwarding methods from HAL to instance * static callback forwarding methods from HAL to instance */ */ Loading @@ -73,6 +113,7 @@ void CameraProvider::sCameraDeviceStatusChange( int new_status) { int new_status) { CameraProvider* cp = const_cast<CameraProvider*>( CameraProvider* cp = const_cast<CameraProvider*>( static_cast<const CameraProvider*>(callbacks)); static_cast<const CameraProvider*>(callbacks)); bool found = false; if (cp == nullptr) { if (cp == nullptr) { ALOGE("%s: callback ops is null", __FUNCTION__); ALOGE("%s: callback ops is null", __FUNCTION__); Loading @@ -90,8 +131,13 @@ void CameraProvider::sCameraDeviceStatusChange( if (cameraIdStr.compare(deviceNamePair.first) == 0) { if (cameraIdStr.compare(deviceNamePair.first) == 0) { cp->mCallbacks->cameraDeviceStatusChange( cp->mCallbacks->cameraDeviceStatusChange( deviceNamePair.second, status); deviceNamePair.second, status); found = true; } } } } if (!found) { cp->addDeviceNames(camera_id, status, true); } } } } } Loading Loading @@ -244,32 +290,8 @@ bool CameraProvider::initialize() { snprintf(cameraId, sizeof(cameraId), "%d", i); snprintf(cameraId, sizeof(cameraId), "%d", i); std::string cameraIdStr(cameraId); std::string cameraIdStr(cameraId); mCameraStatusMap[cameraIdStr] = CAMERA_DEVICE_STATUS_PRESENT; mCameraStatusMap[cameraIdStr] = CAMERA_DEVICE_STATUS_PRESENT; mCameraIds.add(cameraIdStr); // initialize mCameraDeviceNames and mOpenLegacySupported addDeviceNames(i); mOpenLegacySupported[cameraIdStr] = false; int deviceVersion = mModule->getDeviceVersion(i); mCameraDeviceNames.add( std::make_pair(cameraIdStr, getHidlDeviceName(cameraIdStr, deviceVersion))); if (deviceVersion >= CAMERA_DEVICE_API_VERSION_3_2 && mModule->isOpenLegacyDefined()) { // try open_legacy to see if it actually works struct hw_device_t* halDev = nullptr; int ret = mModule->openLegacy(cameraId, CAMERA_DEVICE_API_VERSION_1_0, &halDev); if (ret == 0) { mOpenLegacySupported[cameraIdStr] = true; halDev->close(halDev); mCameraDeviceNames.add( std::make_pair(cameraIdStr, getHidlDeviceName(cameraIdStr, CAMERA_DEVICE_API_VERSION_1_0))); } else if (ret == -EBUSY || ret == -EUSERS) { // Looks like this provider instance is not initialized during // system startup and there are other camera users already. // Not a good sign but not fatal. ALOGW("%s: open_legacy try failed!", __FUNCTION__); } } } } return false; // mInitFailed return false; // mInitFailed Loading camera/provider/2.4/default/CameraProvider.h +3 −0 Original line number Original line Diff line number Diff line Loading @@ -112,6 +112,9 @@ private: const struct camera_module_callbacks* callbacks, const struct camera_module_callbacks* callbacks, const char* camera_id, const char* camera_id, int new_status); int new_status); void addDeviceNames(int camera_id, CameraDeviceStatus status = CameraDeviceStatus::PRESENT, bool cam_new = false); }; }; extern "C" ICameraProvider* HIDL_FETCH_ICameraProvider(const char* name); extern "C" ICameraProvider* HIDL_FETCH_ICameraProvider(const char* name); Loading Loading
camera/device/3.2/default/CameraDevice.cpp +3 −1 Original line number Original line Diff line number Diff line Loading @@ -40,9 +40,11 @@ CameraDevice::CameraDevice( mCameraDeviceNames(cameraDeviceNames) { mCameraDeviceNames(cameraDeviceNames) { mCameraIdInt = atoi(mCameraId.c_str()); mCameraIdInt = atoi(mCameraId.c_str()); // Should not reach here as provider also validate ID // Should not reach here as provider also validate ID if (mCameraIdInt < 0 || mCameraIdInt >= module->getNumberOfCameras()) { if (mCameraIdInt < 0) { ALOGE("%s: Invalid camera id: %s", __FUNCTION__, mCameraId.c_str()); ALOGE("%s: Invalid camera id: %s", __FUNCTION__, mCameraId.c_str()); mInitFail = true; mInitFail = true; } else if (mCameraIdInt >= mModule->getNumberOfCameras()) { ALOGI("%s: Adding a new camera id: %s", __FUNCTION__, mCameraId.c_str()); } } mDeviceVersion = mModule->getDeviceVersion(mCameraIdInt); mDeviceVersion = mModule->getDeviceVersion(mCameraIdInt); Loading
camera/provider/2.4/default/CameraProvider.cpp +48 −26 Original line number Original line Diff line number Diff line Loading @@ -64,6 +64,46 @@ bool matchDeviceName(const hidl_string& deviceName, std::string* deviceVersion, using ::android::hardware::camera::common::V1_0::CameraMetadataType; using ::android::hardware::camera::common::V1_0::CameraMetadataType; using ::android::hardware::camera::common::V1_0::Status; using ::android::hardware::camera::common::V1_0::Status; void CameraProvider::addDeviceNames(int camera_id, CameraDeviceStatus status, bool cam_new) { char cameraId[kMaxCameraIdLen]; snprintf(cameraId, sizeof(cameraId), "%d", camera_id); std::string cameraIdStr(cameraId); mCameraIds.add(cameraIdStr); // initialize mCameraDeviceNames and mOpenLegacySupported mOpenLegacySupported[cameraIdStr] = false; int deviceVersion = mModule->getDeviceVersion(camera_id); auto deviceNamePair = std::make_pair(cameraIdStr, getHidlDeviceName(cameraIdStr, deviceVersion)); mCameraDeviceNames.add(deviceNamePair); if (cam_new) { mCallbacks->cameraDeviceStatusChange(deviceNamePair.second, status); } if (deviceVersion >= CAMERA_DEVICE_API_VERSION_3_2 && mModule->isOpenLegacyDefined()) { // try open_legacy to see if it actually works struct hw_device_t* halDev = nullptr; int ret = mModule->openLegacy(cameraId, CAMERA_DEVICE_API_VERSION_1_0, &halDev); if (ret == 0) { mOpenLegacySupported[cameraIdStr] = true; halDev->close(halDev); deviceNamePair = std::make_pair(cameraIdStr, getHidlDeviceName(cameraIdStr, CAMERA_DEVICE_API_VERSION_1_0)); mCameraDeviceNames.add(deviceNamePair); if (cam_new) { mCallbacks->cameraDeviceStatusChange(deviceNamePair.second, status); } } else if (ret == -EBUSY || ret == -EUSERS) { // Looks like this provider instance is not initialized during // system startup and there are other camera users already. // Not a good sign but not fatal. ALOGW("%s: open_legacy try failed!", __FUNCTION__); } } } /** /** * static callback forwarding methods from HAL to instance * static callback forwarding methods from HAL to instance */ */ Loading @@ -73,6 +113,7 @@ void CameraProvider::sCameraDeviceStatusChange( int new_status) { int new_status) { CameraProvider* cp = const_cast<CameraProvider*>( CameraProvider* cp = const_cast<CameraProvider*>( static_cast<const CameraProvider*>(callbacks)); static_cast<const CameraProvider*>(callbacks)); bool found = false; if (cp == nullptr) { if (cp == nullptr) { ALOGE("%s: callback ops is null", __FUNCTION__); ALOGE("%s: callback ops is null", __FUNCTION__); Loading @@ -90,8 +131,13 @@ void CameraProvider::sCameraDeviceStatusChange( if (cameraIdStr.compare(deviceNamePair.first) == 0) { if (cameraIdStr.compare(deviceNamePair.first) == 0) { cp->mCallbacks->cameraDeviceStatusChange( cp->mCallbacks->cameraDeviceStatusChange( deviceNamePair.second, status); deviceNamePair.second, status); found = true; } } } } if (!found) { cp->addDeviceNames(camera_id, status, true); } } } } } Loading Loading @@ -244,32 +290,8 @@ bool CameraProvider::initialize() { snprintf(cameraId, sizeof(cameraId), "%d", i); snprintf(cameraId, sizeof(cameraId), "%d", i); std::string cameraIdStr(cameraId); std::string cameraIdStr(cameraId); mCameraStatusMap[cameraIdStr] = CAMERA_DEVICE_STATUS_PRESENT; mCameraStatusMap[cameraIdStr] = CAMERA_DEVICE_STATUS_PRESENT; mCameraIds.add(cameraIdStr); // initialize mCameraDeviceNames and mOpenLegacySupported addDeviceNames(i); mOpenLegacySupported[cameraIdStr] = false; int deviceVersion = mModule->getDeviceVersion(i); mCameraDeviceNames.add( std::make_pair(cameraIdStr, getHidlDeviceName(cameraIdStr, deviceVersion))); if (deviceVersion >= CAMERA_DEVICE_API_VERSION_3_2 && mModule->isOpenLegacyDefined()) { // try open_legacy to see if it actually works struct hw_device_t* halDev = nullptr; int ret = mModule->openLegacy(cameraId, CAMERA_DEVICE_API_VERSION_1_0, &halDev); if (ret == 0) { mOpenLegacySupported[cameraIdStr] = true; halDev->close(halDev); mCameraDeviceNames.add( std::make_pair(cameraIdStr, getHidlDeviceName(cameraIdStr, CAMERA_DEVICE_API_VERSION_1_0))); } else if (ret == -EBUSY || ret == -EUSERS) { // Looks like this provider instance is not initialized during // system startup and there are other camera users already. // Not a good sign but not fatal. ALOGW("%s: open_legacy try failed!", __FUNCTION__); } } } } return false; // mInitFailed return false; // mInitFailed Loading
camera/provider/2.4/default/CameraProvider.h +3 −0 Original line number Original line Diff line number Diff line Loading @@ -112,6 +112,9 @@ private: const struct camera_module_callbacks* callbacks, const struct camera_module_callbacks* callbacks, const char* camera_id, const char* camera_id, int new_status); int new_status); void addDeviceNames(int camera_id, CameraDeviceStatus status = CameraDeviceStatus::PRESENT, bool cam_new = false); }; }; extern "C" ICameraProvider* HIDL_FETCH_ICameraProvider(const char* name); extern "C" ICameraProvider* HIDL_FETCH_ICameraProvider(const char* name); Loading