diff options
Diffstat (limited to 'camera/CameraProvider.cpp')
-rw-r--r-- | camera/CameraProvider.cpp | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/camera/CameraProvider.cpp b/camera/CameraProvider.cpp index 004d7af4..02cf5c8b 100644 --- a/camera/CameraProvider.cpp +++ b/camera/CameraProvider.cpp @@ -14,6 +14,8 @@ * limitations under the License. */ +#include <charconv> + #include <inttypes.h> #include <log/log.h> @@ -28,6 +30,34 @@ namespace hardware { namespace camera { namespace provider { namespace implementation { +namespace { +constexpr char kCameraIdPrefix[] = "device@1.0/internal/"; + +std::string getLogicalCameraId(const int index) { + char buf[sizeof(kCameraIdPrefix) + 8]; + snprintf(buf, sizeof(buf), "%s%d", kCameraIdPrefix, index); + return buf; +} + +std::optional<int> parseLogicalCameraId(const std::string_view str) { + if (str.size() < sizeof(kCameraIdPrefix)) { + return FAILURE(std::nullopt); + } + + if (memcmp(str.data(), kCameraIdPrefix, sizeof(kCameraIdPrefix) - 1) != 0) { + return FAILURE(std::nullopt); + } + + int index; + const auto r = std::from_chars(&str[sizeof(kCameraIdPrefix) - 1], + &*str.end(), index, 10); + if (r.ec == std::errc()) { + return index; + } else { + return FAILURE(std::nullopt); + } +} +} // namespace using aidl::android::hardware::camera::common::Status; @@ -53,7 +83,7 @@ ScopedAStatus CameraProvider::getCameraIdList(std::vector<std::string>* camera_i camera_ids->reserve(mAvailableCameras.size()); for (int i = 0; i < mAvailableCameras.size(); ++i) { - camera_ids->push_back(CameraDevice::getPhysicalId(mDeviceIdBase + i)); + camera_ids->push_back(getLogicalCameraId(mDeviceIdBase + i)); } return ScopedAStatus::ok(); @@ -62,7 +92,7 @@ ScopedAStatus CameraProvider::getCameraIdList(std::vector<std::string>* camera_i ScopedAStatus CameraProvider::getCameraDeviceInterface( const std::string& name, std::shared_ptr<ICameraDevice>* device) { - const std::optional<int> maybeIndex = CameraDevice::parsePhysicalId(name); + const std::optional<int> maybeIndex = parseLogicalCameraId(name); if (!maybeIndex) { return toScopedAStatus(FAILURE(Status::ILLEGAL_ARGUMENT)); } |