6#include <private/qcameradevice_p.h>
8#include <QtCore/QLoggingCategory>
9#include <QtCore/qcoreapplication.h>
10#include <QtCore/private/qandroidextras_p.h>
11#include <QtCore/qcoreapplication_platform.h>
12#include <QJniEnvironment>
28 format->minFrameRate = fpsMin;
29 format->maxFrameRate = fpsMax;
36QList<QCameraDevice> QAndroidVideoDevices::findVideoDevices()
40 QJniObject deviceManager(QtJniTypes::Traits<QtJniTypes::QtVideoDeviceManager>::className(),
41 QNativeInterface::QAndroidApplication::context());
43 if (!deviceManager.isValid()) {
44 qCWarning(qLCAndroidVideoDevices) <<
"Failed to connect to Qt Video Device Manager.";
48 QJniObject cameraIdList = deviceManager.callMethod<QtJniTypes::StringArray>(
"getCameraIdList");
51 int numCameras = jniEnv->GetArrayLength(cameraIdList.object<jarray>());
52 if (jniEnv.checkAndClearExceptions())
55 for (
int cameraIndex = 0; cameraIndex < numCameras; cameraIndex++) {
58 jniEnv->GetObjectArrayElement(cameraIdList.object<jobjectArray>(), cameraIndex);
59 if (jniEnv.checkAndClearExceptions())
62 jstring cameraId = cameraIdObject.object<jstring>();
65 info->id = cameraIdObject.toString().toUtf8();
67 info->orientation = deviceManager.callMethod<jint>(
"getSensorOrientation", cameraId);
69 int facing = deviceManager.callMethod<jint>(
"getLensFacing", cameraId);
71 const int LENS_FACING_FRONT = 0;
72 const int LENS_FACING_BACK = 1;
73 const int LENS_FACING_EXTERNAL = 2;
76 case LENS_FACING_EXTERNAL:
77 case LENS_FACING_BACK:
81 case LENS_FACING_FRONT:
88 deviceManager.callMethod<QtJniTypes::StringArray>(
"getFpsRange", cameraId);
89 jobjectArray fpsRanges = fpsRangesObject.object<jobjectArray>();
91 int numRanges = jniEnv->GetArrayLength(fpsRanges);
92 if (jniEnv.checkAndClearExceptions())
95 int maxFps = 0, minFps = 0;
100 if (jniEnv.checkAndClearExceptions())
111 int max =
split[1].toInt();
119 const static int imageFormat =
120 QJniObject::getStaticField<QtJniTypes::AndroidImageFormat, jint>(
"YUV_420_888");
122 QJniObject sizesObject = deviceManager.callMethod<QtJniTypes::StringArray>(
123 "getStreamConfigurationsSizes", cameraId, imageFormat);
125 jobjectArray streamSizes = sizesObject.object<jobjectArray>();
126 int numSizes = jniEnv->GetArrayLength(streamSizes);
127 if (jniEnv.checkAndClearExceptions())
130 for (
int sizesIndex = 0; sizesIndex < numSizes; sizesIndex++) {
132 QJniObject sizeStringObject = jniEnv->GetObjectArrayElement(streamSizes, sizesIndex);
133 if (jniEnv.checkAndClearExceptions())
136 QString sizeString = sizeStringObject.toString();
138 auto split = sizeString.split(
"x");
Q_DECLARE_JNI_TYPE(StringArray, "[Ljava/lang/String;")
\macro QT_RESTRICTED_CAST_FROM_ASCII
QString arg(qlonglong a, int fieldwidth=0, int base=10, QChar fillChar=u' ') const
QString & remove(qsizetype i, qsizetype len)
Removes n characters from the string, starting at the given position index, and returns a reference t...
constexpr const T & min(const T &a, const T &b)
static org qtproject qt android multimedia QtVideoDeviceManager
Q_DECLARE_JNI_CLASS(AndroidImageFormat, "android/graphics/ImageFormat")
QCameraFormat createCameraFormat(int width, int height, int fpsMin, int fpsMax)
#define Q_LOGGING_CATEGORY(name,...)
#define qCWarning(category,...)
GLint GLsizei GLsizei height
GLint GLsizei GLsizei GLenum format
static void split(QT_FT_Vector *b)