diff options
Diffstat (limited to 'src/plugins/android/src/wrappers/jcamera.cpp')
-rw-r--r-- | src/plugins/android/src/wrappers/jcamera.cpp | 35 |
1 files changed, 17 insertions, 18 deletions
diff --git a/src/plugins/android/src/wrappers/jcamera.cpp b/src/plugins/android/src/wrappers/jcamera.cpp index e69cb554d..5712ae356 100644 --- a/src/plugins/android/src/wrappers/jcamera.cpp +++ b/src/plugins/android/src/wrappers/jcamera.cpp @@ -102,18 +102,6 @@ static void notifyPictureCaptured(JNIEnv *env, jobject, int id, jbyteArray data) } } -static void notifyPreviewFrame(JNIEnv *env, jobject, int id, jbyteArray data) -{ - JCamera *obj = g_objectMap.value(id, 0); - if (obj) { - QByteArray bytes; - int arrayLength = env->GetArrayLength(data); - bytes.resize(arrayLength); - env->GetByteArrayRegion(data, 0, arrayLength, (jbyte*)bytes.data()); - Q_EMIT obj->previewFrameAvailable(bytes); - } -} - JCamera::JCamera(int cameraId, jobject cam) : QObject() , QJNIObjectPrivate(cam) @@ -667,14 +655,26 @@ void JCamera::setJpegQuality(int quality) applyParameters(); } -void JCamera::requestPreviewFrame() +void JCamera::takePicture() { - callMethod<void>("requestPreviewFrame"); + callMethod<void>("takePicture"); } -void JCamera::takePicture() +QByteArray JCamera::fetchLastPreviewFrame() { - callMethod<void>("takePicture"); + QJNIEnvironmentPrivate env; + QJNIObjectPrivate dataObj = callObjectMethod("lockAndFetchPreviewBuffer", "()[B"); + if (!dataObj.object()) { + callMethod<void>("unlockPreviewBuffer"); + return QByteArray(); + } + jbyteArray data = static_cast<jbyteArray>(dataObj.object()); + QByteArray bytes; + int arrayLength = env->GetArrayLength(data); + bytes.resize(arrayLength); + env->GetByteArrayRegion(data, 0, arrayLength, (jbyte*)bytes.data()); + callMethod<void>("unlockPreviewBuffer"); + return bytes; } void JCamera::startPreview() @@ -720,8 +720,7 @@ QStringList JCamera::callStringListMethod(const char *methodName) static JNINativeMethod methods[] = { {"notifyAutoFocusComplete", "(IZ)V", (void *)notifyAutoFocusComplete}, {"notifyPictureExposed", "(I)V", (void *)notifyPictureExposed}, - {"notifyPictureCaptured", "(I[B)V", (void *)notifyPictureCaptured}, - {"notifyPreviewFrame", "(I[B)V", (void *)notifyPreviewFrame} + {"notifyPictureCaptured", "(I[B)V", (void *)notifyPictureCaptured} }; bool JCamera::initJNI(JNIEnv *env) |