57QList<QCameraDevice> QAndroidVideoDevices::findVideoInputs()
const
59 QList<QCameraDevice> devices;
61 QJniObject deviceManager(QtJniTypes::Traits<QtJniTypes::QtVideoDeviceManager>::className(),
62 QNativeInterface::QAndroidApplication::context());
64 if (!deviceManager.isValid()) {
65 qCWarning(qLCAndroidVideoDevices) <<
"Failed to connect to Qt Video Device Manager.";
69 const QJniArray cameraIdList = deviceManager.callMethod<QtJniTypes::String[]>(
"getCameraIdList");
70 if (!cameraIdList.isValid())
74 for (
const auto &cameraId : cameraIdList) {
75 if (!cameraId.isValid())
78 auto info = std::make_unique<QCameraDevicePrivate>();
79 info->id = cameraId.toString().toUtf8();
81 info->orientation = deviceManager.callMethod<jint>(
"getSensorOrientation", cameraId);
84 const int facing = deviceManager.callMethod<jint>(
"getLensFacing", cameraId);
87 constexpr int LENS_FACING_FRONT = 0;
88 constexpr int LENS_FACING_BACK = 1;
89 constexpr int LENS_FACING_EXTERNAL = 2;
92 case LENS_FACING_EXTERNAL:
93 info->position = QCameraDevice::Position::UnspecifiedPosition;
94 info->description = QStringLiteral(u"External Camera: %1").arg(cameraIndex);
96 case LENS_FACING_BACK:
97 info->position = QCameraDevice::Position::BackFace;
98 info->description = QStringLiteral(u"Rear Camera: %1").arg(cameraIndex);
100 case LENS_FACING_FRONT:
101 info->position = QCameraDevice::Position::FrontFace;
102 info->description = QStringLiteral(u"Front Camera: %1").arg(cameraIndex);
105 info->position = QCameraDevice::Position::UnspecifiedPosition;
106 info->description = QStringLiteral(u"Camera: %1").arg(cameraIndex);
111 const auto fpsRanges = deviceManager.callMethod<QStringList>(
"getFpsRange", cameraId);
113 int maxFps = 0, minFps = 0;
114 for (
auto range : fpsRanges) {
115 range = range.remove(u"["_s);
116 range = range.remove(u"]"_s);
118 const auto split = range.split(u","_s);
120 int min = split.at(0).toInt();
121 int max = split.at(1).toInt();
129 const static int imageFormat =
130 QJniObject::getStaticField<QtJniTypes::ImageFormat, jint>(
"YUV_420_888");
132 const QStringList sizes = deviceManager.callMethod<QStringList>(
133 "getStreamConfigurationsSizes", cameraId, imageFormat);
138 for (
const auto &sizeString : sizes) {
139 const auto split = sizeString.split(u"x"_s);
141 int width = split.at(0).toInt();
142 int height = split.at(1).toInt();
144 info->videoFormats.append(createCameraFormat(width, height, minFps, maxFps));
148 devices.push_back(info.release()->create());