Loading services/camera/virtualcamera/VirtualCameraDevice.cc +7 −7 Original line number Diff line number Diff line Loading @@ -68,7 +68,7 @@ namespace { using namespace std::chrono_literals; // Prefix of camera name - "device@1.1/virtual/{numerical_id}" // Prefix of camera name - "device@1.1/virtual/{camera_id}" const char* kDevicePathPrefix = "device@1.1/virtual/"; constexpr int32_t kMaxJpegSize = 3 * 1024 * 1024 /*3MiB*/; Loading Loading @@ -404,8 +404,8 @@ std::optional<CameraMetadata> initCameraCharacteristics( } // namespace VirtualCameraDevice::VirtualCameraDevice( const uint32_t cameraId, const VirtualCameraConfiguration& configuration, int32_t deviceId) const std::string& cameraId, const VirtualCameraConfiguration& configuration, int32_t deviceId) : mCameraId(cameraId), mVirtualCameraClientCallback(configuration.virtualCameraCallback), mSupportedInputConfigurations(configuration.supportedStreamConfigs) { Loading Loading @@ -582,11 +582,11 @@ ndk::ScopedAStatus VirtualCameraDevice::getTorchStrengthLevel( } binder_status_t VirtualCameraDevice::dump(int fd, const char**, uint32_t) { ALOGD("Dumping virtual camera %d", mCameraId); ALOGD("Dumping virtual camera %s", mCameraId.c_str()); const char* indent = " "; const char* doubleIndent = " "; dprintf(fd, "%svirtual_camera %d belongs to virtual device %d\n", indent, mCameraId, dprintf(fd, "%svirtual_camera %s belongs to virtual device %d\n", indent, mCameraId.c_str(), getDeviceId(mCameraCharacteristics) .value_or(VirtualCameraService::kDefaultDeviceId)); dprintf(fd, "%sSupportedStreamConfiguration:\n", indent); Loading @@ -597,7 +597,7 @@ binder_status_t VirtualCameraDevice::dump(int fd, const char**, uint32_t) { } std::string VirtualCameraDevice::getCameraName() const { return std::string(kDevicePathPrefix) + std::to_string(mCameraId); return std::string(kDevicePathPrefix) + mCameraId; } const std::vector<SupportedStreamConfiguration>& Loading services/camera/virtualcamera/VirtualCameraDevice.h +6 −4 Original line number Diff line number Diff line Loading @@ -37,7 +37,7 @@ class VirtualCameraDevice : public ::aidl::android::hardware::camera::device::BnCameraDevice { public: explicit VirtualCameraDevice( uint32_t cameraId, const std::string& cameraId, const aidl::android::companion::virtualcamera::VirtualCameraConfiguration& configuration, int32_t deviceId); Loading Loading @@ -92,10 +92,12 @@ class VirtualCameraDevice binder_status_t dump(int fd, const char** args, uint32_t numArgs) override; // Returns unique virtual camera name in form // "device@{major}.{minor}/virtual/{numerical_id}" // "device@{major}.{minor}/virtual/{camera_id}" std::string getCameraName() const; uint32_t getCameraId() const { return mCameraId; } const std::string& getCameraId() const { return mCameraId; } const std::vector< aidl::android::companion::virtualcamera::SupportedStreamConfiguration>& Loading Loading @@ -141,7 +143,7 @@ class VirtualCameraDevice private: std::shared_ptr<VirtualCameraDevice> sharedFromThis(); const uint32_t mCameraId; const std::string mCameraId; const std::shared_ptr< ::aidl::android::companion::virtualcamera::IVirtualCameraCallback> mVirtualCameraClientCallback; Loading services/camera/virtualcamera/VirtualCameraProvider.cc +4 −5 Original line number Diff line number Diff line Loading @@ -150,11 +150,10 @@ ndk::ScopedAStatus VirtualCameraProvider::isConcurrentStreamCombinationSupported } std::shared_ptr<VirtualCameraDevice> VirtualCameraProvider::createCamera( const VirtualCameraConfiguration& configuration, const int cameraId, const int32_t deviceId) { if (cameraId < 0) { ALOGE("%s: Cannot create camera with negative id. cameraId: %d", __func__, cameraId); const VirtualCameraConfiguration& configuration, const std::string& cameraId, const int32_t deviceId) { if (cameraId.empty()) { ALOGE("%s: Cannot create camera with empty cameraId", __func__); return nullptr; } Loading services/camera/virtualcamera/VirtualCameraProvider.h +1 −1 Original line number Diff line number Diff line Loading @@ -77,7 +77,7 @@ class VirtualCameraProvider std::shared_ptr<VirtualCameraDevice> createCamera( const aidl::android::companion::virtualcamera::VirtualCameraConfiguration& configuration, int cameraId, int32_t deviceId); const std::string& cameraId, int32_t deviceId); std::shared_ptr<VirtualCameraDevice> getCamera(const std::string& name); Loading services/camera/virtualcamera/VirtualCameraService.cc +20 −14 Original line number Diff line number Diff line Loading @@ -57,12 +57,9 @@ using ::aidl::android::companion::virtualcamera::SensorOrientation; using ::aidl::android::companion::virtualcamera::SupportedStreamConfiguration; using ::aidl::android::companion::virtualcamera::VirtualCameraConfiguration; // TODO(b/301023410) Make camera id range configurable / dynamic // based on already registered devices. std::atomic_int VirtualCameraService::sNextId{1000}; namespace { constexpr char kCameraIdPrefix[] = "v"; constexpr int kVgaWidth = 640; constexpr int kVgaHeight = 480; constexpr int kMaxFps = 60; Loading Loading @@ -90,6 +87,9 @@ constexpr std::array<const char*, 3> kRequiredEglExtensions = { "GL_EXT_YUV_target", }; // Numerical portion for id to assign to next created camera. static std::atomic_int sNextIdNumericalPortion{1000}; ndk::ScopedAStatus validateConfiguration( const VirtualCameraConfiguration& configuration) { if (configuration.supportedStreamConfigs.empty()) { Loading Loading @@ -192,7 +192,7 @@ std::variant<CommandWithOptions, std::string> parseCommand( } return cmd; }; } ndk::ScopedAStatus verifyRequiredEglExtensions() { EglDisplayContext context; Loading @@ -211,6 +211,11 @@ ndk::ScopedAStatus verifyRequiredEglExtensions() { return ndk::ScopedAStatus::ok(); } std::string createCameraId(const int32_t deviceId) { return kCameraIdPrefix + std::to_string(deviceId) + "_" + std::to_string(sNextIdNumericalPortion++); } } // namespace VirtualCameraService::VirtualCameraService( Loading @@ -224,13 +229,14 @@ ndk::ScopedAStatus VirtualCameraService::registerCamera( const ::ndk::SpAIBinder& token, const VirtualCameraConfiguration& configuration, const int32_t deviceId, bool* _aidl_return) { return registerCamera(token, configuration, sNextId++, deviceId, _aidl_return); return registerCamera(token, configuration, createCameraId(deviceId), deviceId, _aidl_return); } ndk::ScopedAStatus VirtualCameraService::registerCamera( const ::ndk::SpAIBinder& token, const VirtualCameraConfiguration& configuration, const int cameraId, const int32_t deviceId, bool* _aidl_return) { const VirtualCameraConfiguration& configuration, const std::string& cameraId, const int32_t deviceId, bool* _aidl_return) { if (!mPermissionProxy.checkCallingPermission(kCreateVirtualDevicePermission)) { ALOGE("%s: caller (pid %d, uid %d) doesn't hold %s permission", __func__, getpid(), getuid(), kCreateVirtualDevicePermission); Loading Loading @@ -308,7 +314,7 @@ ndk::ScopedAStatus VirtualCameraService::unregisterCamera( } ndk::ScopedAStatus VirtualCameraService::getCameraId( const ::ndk::SpAIBinder& token, int32_t* _aidl_return) { const ::ndk::SpAIBinder& token, std::string* _aidl_return) { if (!mPermissionProxy.checkCallingPermission(kCreateVirtualDevicePermission)) { ALOGE("%s: caller (pid %d, uid %d) doesn't hold %s permission", __func__, getpid(), getuid(), kCreateVirtualDevicePermission); Loading Loading @@ -400,13 +406,12 @@ binder_status_t VirtualCameraService::enableTestCameraCmd( return STATUS_OK; } std::optional<int> cameraId; std::optional<std::string> cameraId; auto it = options.find("camera_id"); if (it != options.end()) { cameraId = parseInt(it->second); cameraId = it->second; if (!cameraId.has_value()) { dprintf(err, "Invalid camera_id: %s\n, must be number > 0", it->second.c_str()); dprintf(err, "Invalid camera_id: %s", it->second.c_str()); return STATUS_BAD_VALUE; } } Loading Loading @@ -447,7 +452,8 @@ binder_status_t VirtualCameraService::enableTestCameraCmd( configuration.virtualCameraCallback = ndk::SharedRefBase::make<VirtualCameraTestInstance>( inputFps.value_or(kTestCameraDefaultInputFps)); registerCamera(mTestCameraToken, configuration, cameraId.value_or(sNextId++), registerCamera(mTestCameraToken, configuration, cameraId.value_or(std::to_string(sNextIdNumericalPortion++)), kDefaultDeviceId, &ret); if (ret) { dprintf(out, "Successfully registered test camera %s\n", Loading Loading
services/camera/virtualcamera/VirtualCameraDevice.cc +7 −7 Original line number Diff line number Diff line Loading @@ -68,7 +68,7 @@ namespace { using namespace std::chrono_literals; // Prefix of camera name - "device@1.1/virtual/{numerical_id}" // Prefix of camera name - "device@1.1/virtual/{camera_id}" const char* kDevicePathPrefix = "device@1.1/virtual/"; constexpr int32_t kMaxJpegSize = 3 * 1024 * 1024 /*3MiB*/; Loading Loading @@ -404,8 +404,8 @@ std::optional<CameraMetadata> initCameraCharacteristics( } // namespace VirtualCameraDevice::VirtualCameraDevice( const uint32_t cameraId, const VirtualCameraConfiguration& configuration, int32_t deviceId) const std::string& cameraId, const VirtualCameraConfiguration& configuration, int32_t deviceId) : mCameraId(cameraId), mVirtualCameraClientCallback(configuration.virtualCameraCallback), mSupportedInputConfigurations(configuration.supportedStreamConfigs) { Loading Loading @@ -582,11 +582,11 @@ ndk::ScopedAStatus VirtualCameraDevice::getTorchStrengthLevel( } binder_status_t VirtualCameraDevice::dump(int fd, const char**, uint32_t) { ALOGD("Dumping virtual camera %d", mCameraId); ALOGD("Dumping virtual camera %s", mCameraId.c_str()); const char* indent = " "; const char* doubleIndent = " "; dprintf(fd, "%svirtual_camera %d belongs to virtual device %d\n", indent, mCameraId, dprintf(fd, "%svirtual_camera %s belongs to virtual device %d\n", indent, mCameraId.c_str(), getDeviceId(mCameraCharacteristics) .value_or(VirtualCameraService::kDefaultDeviceId)); dprintf(fd, "%sSupportedStreamConfiguration:\n", indent); Loading @@ -597,7 +597,7 @@ binder_status_t VirtualCameraDevice::dump(int fd, const char**, uint32_t) { } std::string VirtualCameraDevice::getCameraName() const { return std::string(kDevicePathPrefix) + std::to_string(mCameraId); return std::string(kDevicePathPrefix) + mCameraId; } const std::vector<SupportedStreamConfiguration>& Loading
services/camera/virtualcamera/VirtualCameraDevice.h +6 −4 Original line number Diff line number Diff line Loading @@ -37,7 +37,7 @@ class VirtualCameraDevice : public ::aidl::android::hardware::camera::device::BnCameraDevice { public: explicit VirtualCameraDevice( uint32_t cameraId, const std::string& cameraId, const aidl::android::companion::virtualcamera::VirtualCameraConfiguration& configuration, int32_t deviceId); Loading Loading @@ -92,10 +92,12 @@ class VirtualCameraDevice binder_status_t dump(int fd, const char** args, uint32_t numArgs) override; // Returns unique virtual camera name in form // "device@{major}.{minor}/virtual/{numerical_id}" // "device@{major}.{minor}/virtual/{camera_id}" std::string getCameraName() const; uint32_t getCameraId() const { return mCameraId; } const std::string& getCameraId() const { return mCameraId; } const std::vector< aidl::android::companion::virtualcamera::SupportedStreamConfiguration>& Loading Loading @@ -141,7 +143,7 @@ class VirtualCameraDevice private: std::shared_ptr<VirtualCameraDevice> sharedFromThis(); const uint32_t mCameraId; const std::string mCameraId; const std::shared_ptr< ::aidl::android::companion::virtualcamera::IVirtualCameraCallback> mVirtualCameraClientCallback; Loading
services/camera/virtualcamera/VirtualCameraProvider.cc +4 −5 Original line number Diff line number Diff line Loading @@ -150,11 +150,10 @@ ndk::ScopedAStatus VirtualCameraProvider::isConcurrentStreamCombinationSupported } std::shared_ptr<VirtualCameraDevice> VirtualCameraProvider::createCamera( const VirtualCameraConfiguration& configuration, const int cameraId, const int32_t deviceId) { if (cameraId < 0) { ALOGE("%s: Cannot create camera with negative id. cameraId: %d", __func__, cameraId); const VirtualCameraConfiguration& configuration, const std::string& cameraId, const int32_t deviceId) { if (cameraId.empty()) { ALOGE("%s: Cannot create camera with empty cameraId", __func__); return nullptr; } Loading
services/camera/virtualcamera/VirtualCameraProvider.h +1 −1 Original line number Diff line number Diff line Loading @@ -77,7 +77,7 @@ class VirtualCameraProvider std::shared_ptr<VirtualCameraDevice> createCamera( const aidl::android::companion::virtualcamera::VirtualCameraConfiguration& configuration, int cameraId, int32_t deviceId); const std::string& cameraId, int32_t deviceId); std::shared_ptr<VirtualCameraDevice> getCamera(const std::string& name); Loading
services/camera/virtualcamera/VirtualCameraService.cc +20 −14 Original line number Diff line number Diff line Loading @@ -57,12 +57,9 @@ using ::aidl::android::companion::virtualcamera::SensorOrientation; using ::aidl::android::companion::virtualcamera::SupportedStreamConfiguration; using ::aidl::android::companion::virtualcamera::VirtualCameraConfiguration; // TODO(b/301023410) Make camera id range configurable / dynamic // based on already registered devices. std::atomic_int VirtualCameraService::sNextId{1000}; namespace { constexpr char kCameraIdPrefix[] = "v"; constexpr int kVgaWidth = 640; constexpr int kVgaHeight = 480; constexpr int kMaxFps = 60; Loading Loading @@ -90,6 +87,9 @@ constexpr std::array<const char*, 3> kRequiredEglExtensions = { "GL_EXT_YUV_target", }; // Numerical portion for id to assign to next created camera. static std::atomic_int sNextIdNumericalPortion{1000}; ndk::ScopedAStatus validateConfiguration( const VirtualCameraConfiguration& configuration) { if (configuration.supportedStreamConfigs.empty()) { Loading Loading @@ -192,7 +192,7 @@ std::variant<CommandWithOptions, std::string> parseCommand( } return cmd; }; } ndk::ScopedAStatus verifyRequiredEglExtensions() { EglDisplayContext context; Loading @@ -211,6 +211,11 @@ ndk::ScopedAStatus verifyRequiredEglExtensions() { return ndk::ScopedAStatus::ok(); } std::string createCameraId(const int32_t deviceId) { return kCameraIdPrefix + std::to_string(deviceId) + "_" + std::to_string(sNextIdNumericalPortion++); } } // namespace VirtualCameraService::VirtualCameraService( Loading @@ -224,13 +229,14 @@ ndk::ScopedAStatus VirtualCameraService::registerCamera( const ::ndk::SpAIBinder& token, const VirtualCameraConfiguration& configuration, const int32_t deviceId, bool* _aidl_return) { return registerCamera(token, configuration, sNextId++, deviceId, _aidl_return); return registerCamera(token, configuration, createCameraId(deviceId), deviceId, _aidl_return); } ndk::ScopedAStatus VirtualCameraService::registerCamera( const ::ndk::SpAIBinder& token, const VirtualCameraConfiguration& configuration, const int cameraId, const int32_t deviceId, bool* _aidl_return) { const VirtualCameraConfiguration& configuration, const std::string& cameraId, const int32_t deviceId, bool* _aidl_return) { if (!mPermissionProxy.checkCallingPermission(kCreateVirtualDevicePermission)) { ALOGE("%s: caller (pid %d, uid %d) doesn't hold %s permission", __func__, getpid(), getuid(), kCreateVirtualDevicePermission); Loading Loading @@ -308,7 +314,7 @@ ndk::ScopedAStatus VirtualCameraService::unregisterCamera( } ndk::ScopedAStatus VirtualCameraService::getCameraId( const ::ndk::SpAIBinder& token, int32_t* _aidl_return) { const ::ndk::SpAIBinder& token, std::string* _aidl_return) { if (!mPermissionProxy.checkCallingPermission(kCreateVirtualDevicePermission)) { ALOGE("%s: caller (pid %d, uid %d) doesn't hold %s permission", __func__, getpid(), getuid(), kCreateVirtualDevicePermission); Loading Loading @@ -400,13 +406,12 @@ binder_status_t VirtualCameraService::enableTestCameraCmd( return STATUS_OK; } std::optional<int> cameraId; std::optional<std::string> cameraId; auto it = options.find("camera_id"); if (it != options.end()) { cameraId = parseInt(it->second); cameraId = it->second; if (!cameraId.has_value()) { dprintf(err, "Invalid camera_id: %s\n, must be number > 0", it->second.c_str()); dprintf(err, "Invalid camera_id: %s", it->second.c_str()); return STATUS_BAD_VALUE; } } Loading Loading @@ -447,7 +452,8 @@ binder_status_t VirtualCameraService::enableTestCameraCmd( configuration.virtualCameraCallback = ndk::SharedRefBase::make<VirtualCameraTestInstance>( inputFps.value_or(kTestCameraDefaultInputFps)); registerCamera(mTestCameraToken, configuration, cameraId.value_or(sNextId++), registerCamera(mTestCameraToken, configuration, cameraId.value_or(std::to_string(sNextIdNumericalPortion++)), kDefaultDeviceId, &ret); if (ret) { dprintf(out, "Successfully registered test camera %s\n", Loading