summaryrefslogtreecommitdiffstats
path: root/src/plugins/android/src/wrappers/jcamera.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/android/src/wrappers/jcamera.cpp')
-rw-r--r--src/plugins/android/src/wrappers/jcamera.cpp35
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)