summaryrefslogtreecommitdiffstats
path: root/src/plugins/android/src/wrappers
diff options
context:
space:
mode:
authorDenis Kormalev <dkormalev@ics.com>2014-01-08 17:06:59 +0400
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-01-08 16:09:27 +0100
commit0ebcf43f2235017a6844948ef6d26c74865083aa (patch)
tree6c4cb0761935b81f2206c57dbc9ff6b8880cd5b3 /src/plugins/android/src/wrappers
parenta0d39a2ab6c94cdb59a8009611669304372915e6 (diff)
Android: QVideoProbe support for camera
QMediaVideoProbeControl sublclass added to capture service to make QVideoProbe work with Android camera. [ChangeLog][QtMultimedia][Android] QVideoProbe support for camera Task-number: QTBUG-35416 Change-Id: I14d0a0e8abd14ee8f577e2901b976b8ed46eb320 Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
Diffstat (limited to 'src/plugins/android/src/wrappers')
-rw-r--r--src/plugins/android/src/wrappers/jcamera.cpp29
-rw-r--r--src/plugins/android/src/wrappers/jcamera.h2
2 files changed, 30 insertions, 1 deletions
diff --git a/src/plugins/android/src/wrappers/jcamera.cpp b/src/plugins/android/src/wrappers/jcamera.cpp
index 0c7455fae..d24a59a38 100644
--- a/src/plugins/android/src/wrappers/jcamera.cpp
+++ b/src/plugins/android/src/wrappers/jcamera.cpp
@@ -111,6 +111,21 @@ static void notifyPictureCaptured(JNIEnv *env, jobject, int id, jbyteArray data)
}
}
+static void notifyFrameFetched(JNIEnv *env, jobject, int id, jbyteArray data)
+{
+ g_objectMapMutex.lock();
+ JCamera *obj = g_objectMap.value(id, 0);
+ g_objectMapMutex.unlock();
+ if (obj) {
+ QByteArray bytes;
+ int arrayLength = env->GetArrayLength(data);
+ bytes.resize(arrayLength);
+ env->GetByteArrayRegion(data, 0, arrayLength, (jbyte*)bytes.data());
+
+ Q_EMIT obj->frameFetched(bytes);
+ }
+}
+
class JCameraInstantiator : public QObject
{
Q_OBJECT
@@ -201,6 +216,7 @@ class JCameraWorker : public QObject, public QJNIObjectPrivate
Q_INVOKABLE void startPreview();
Q_INVOKABLE void stopPreview();
+ Q_INVOKABLE void fetchEachFrame(bool fetch);
Q_INVOKABLE void fetchLastPreviewFrame();
Q_INVOKABLE void applyParameters();
@@ -571,6 +587,11 @@ void JCamera::takePicture()
QMetaObject::invokeMethod(d, "callVoidMethod", Q_ARG(QByteArray, "takePicture"));
}
+void JCamera::fetchEachFrame(bool fetch)
+{
+ QMetaObject::invokeMethod(d, "fetchEachFrame", Q_ARG(bool, fetch));
+}
+
void JCamera::fetchLastPreviewFrame()
{
QMetaObject::invokeMethod(d, "fetchLastPreviewFrame");
@@ -1165,6 +1186,11 @@ void JCameraWorker::stopPreview()
emit previewStopped();
}
+void JCameraWorker::fetchEachFrame(bool fetch)
+{
+ callMethod<void>("fetchEachFrame", "(Z)V", fetch);
+}
+
void JCameraWorker::fetchLastPreviewFrame()
{
QJNIEnvironmentPrivate env;
@@ -1224,7 +1250,8 @@ void JCameraWorker::callVoidMethod(const QByteArray &methodName)
static JNINativeMethod methods[] = {
{"notifyAutoFocusComplete", "(IZ)V", (void *)notifyAutoFocusComplete},
{"notifyPictureExposed", "(I)V", (void *)notifyPictureExposed},
- {"notifyPictureCaptured", "(I[B)V", (void *)notifyPictureCaptured}
+ {"notifyPictureCaptured", "(I[B)V", (void *)notifyPictureCaptured},
+ {"notifyFrameFetched", "(I[B)V", (void *)notifyFrameFetched}
};
bool JCamera::initJNI(JNIEnv *env)
diff --git a/src/plugins/android/src/wrappers/jcamera.h b/src/plugins/android/src/wrappers/jcamera.h
index 9b2f5b177..535efe214 100644
--- a/src/plugins/android/src/wrappers/jcamera.h
+++ b/src/plugins/android/src/wrappers/jcamera.h
@@ -155,6 +155,7 @@ public:
void takePicture();
+ void fetchEachFrame(bool fetch);
void fetchLastPreviewFrame();
QJNIObjectPrivate getCameraObject();
@@ -173,6 +174,7 @@ Q_SIGNALS:
void pictureExposed();
void pictureCaptured(const QByteArray &data);
void previewFetched(const QByteArray &preview);
+ void frameFetched(const QByteArray &frame);
private:
JCamera(int cameraId, jobject cam, QThread *workerThread);