diff options
author | Denis Kormalev <dkormalev@ics.com> | 2014-01-08 17:06:59 +0400 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-01-08 16:09:27 +0100 |
commit | 0ebcf43f2235017a6844948ef6d26c74865083aa (patch) | |
tree | 6c4cb0761935b81f2206c57dbc9ff6b8880cd5b3 /src/plugins/android/src/wrappers | |
parent | a0d39a2ab6c94cdb59a8009611669304372915e6 (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.cpp | 29 | ||||
-rw-r--r-- | src/plugins/android/src/wrappers/jcamera.h | 2 |
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); |