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;
40 QJniObject deviceManager(QtJniTypes::className<QtJniTypes::QtVideoDeviceManager>(),
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();
\macro QT_RESTRICTED_CAST_FROM_ASCII
QStringList split(const QString &sep, Qt::SplitBehavior behavior=Qt::KeepEmptyParts, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Splits the string into substrings wherever sep occurs, and returns the list of those strings.
QString arg(qlonglong a, int fieldwidth=0, int base=10, QChar fillChar=u' ') const
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)
Q_DECLARE_JNI_TYPE(File, "Ljava/io/File;")
QFileInfo info(fileName)
[8]