summaryrefslogtreecommitdiff
path: root/src/plugins/android/src/wrappers
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/android/src/wrappers')
-rw-r--r--src/plugins/android/src/wrappers/jsurfacetexture.cpp83
-rw-r--r--src/plugins/android/src/wrappers/jsurfacetexture.h6
-rw-r--r--src/plugins/android/src/wrappers/jsurfacetextureholder.cpp65
-rw-r--r--src/plugins/android/src/wrappers/jsurfacetextureholder.h59
-rw-r--r--src/plugins/android/src/wrappers/wrappers.pri2
5 files changed, 64 insertions, 151 deletions
diff --git a/src/plugins/android/src/wrappers/jsurfacetexture.cpp b/src/plugins/android/src/wrappers/jsurfacetexture.cpp
index 47487f104..2b16ebd66 100644
--- a/src/plugins/android/src/wrappers/jsurfacetexture.cpp
+++ b/src/plugins/android/src/wrappers/jsurfacetexture.cpp
@@ -41,10 +41,11 @@
#include "jsurfacetexture.h"
#include <QtCore/private/qjni_p.h>
+#include <QtCore/private/qjnihelpers_p.h>
QT_BEGIN_NAMESPACE
-static jclass g_qtSurfaceTextureClass = 0;
+static jclass g_qtSurfaceTextureListenerClass = 0;
static QMap<int, JSurfaceTexture*> g_objectMap;
// native method for QtSurfaceTexture.java
@@ -57,37 +58,75 @@ static void notifyFrameAvailable(JNIEnv* , jobject, int id)
JSurfaceTexture::JSurfaceTexture(unsigned int texName)
: QObject()
- , QJNIObjectPrivate(g_qtSurfaceTextureClass, "(I)V", jint(texName))
, m_texID(int(texName))
{
- if (isValid())
- g_objectMap.insert(int(texName), this);
- else // If the class is not available, it means the Android version is < 3.0
+ // API level 11 or higher is required
+ if (QtAndroidPrivate::androidSdkVersion() < 11) {
qWarning("Camera preview and video playback require Android 3.0 (API level 11) or later.");
+ return;
+ }
+
+ QJNIEnvironmentPrivate env;
+ m_surfaceTexture = QJNIObjectPrivate("android/graphics/SurfaceTexture", "(I)V", jint(texName));
+ if (env->ExceptionCheck()) {
+#ifdef QT_DEBUG
+ env->ExceptionDescribe();
+#endif // QT_DEBUG
+ env->ExceptionClear();
+ }
+
+ if (m_surfaceTexture.isValid())
+ g_objectMap.insert(int(texName), this);
+
+ QJNIObjectPrivate listener(g_qtSurfaceTextureListenerClass, "(I)V", jint(texName));
+ m_surfaceTexture.callMethod<void>("setOnFrameAvailableListener",
+ "(Landroid/graphics/SurfaceTexture$OnFrameAvailableListener;)V",
+ listener.object());
}
JSurfaceTexture::~JSurfaceTexture()
{
- if (isValid())
+ if (m_surfaceTexture.isValid()) {
+ release();
g_objectMap.remove(m_texID);
+ }
}
QMatrix4x4 JSurfaceTexture::getTransformMatrix()
{
+ QMatrix4x4 matrix;
+ if (!m_surfaceTexture.isValid())
+ return matrix;
+
QJNIEnvironmentPrivate env;
- QMatrix4x4 matrix;
jfloatArray array = env->NewFloatArray(16);
- callMethod<void>("getTransformMatrix", "([F)V", array);
+ m_surfaceTexture.callMethod<void>("getTransformMatrix", "([F)V", array);
env->GetFloatArrayRegion(array, 0, 16, matrix.data());
env->DeleteLocalRef(array);
return matrix;
}
+void JSurfaceTexture::release()
+{
+ if (QtAndroidPrivate::androidSdkVersion() < 14)
+ return;
+
+ m_surfaceTexture.callMethod<void>("release");
+}
+
void JSurfaceTexture::updateTexImage()
{
- callMethod<void>("updateTexImage");
+ if (!m_surfaceTexture.isValid())
+ return;
+
+ m_surfaceTexture.callMethod<void>("updateTexImage");
+}
+
+jobject JSurfaceTexture::object()
+{
+ return m_surfaceTexture.object();
}
static JNINativeMethod methods[] = {
@@ -96,24 +135,20 @@ static JNINativeMethod methods[] = {
bool JSurfaceTexture::initJNI(JNIEnv *env)
{
- // SurfaceTexture is available since API 11, try to find it first before loading
- // our custom class
- jclass surfaceTextureClass = env->FindClass("android/graphics/SurfaceTexture");
+ // SurfaceTexture is available since API 11.
+ if (QtAndroidPrivate::androidSdkVersion() < 11)
+ return false;
+
+ jclass clazz = env->FindClass("org/qtproject/qt5/android/multimedia/QtSurfaceTextureListener");
if (env->ExceptionCheck())
env->ExceptionClear();
- if (surfaceTextureClass) {
- jclass clazz = env->FindClass("org/qtproject/qt5/android/multimedia/QtSurfaceTexture");
- if (env->ExceptionCheck())
- env->ExceptionClear();
-
- if (clazz) {
- g_qtSurfaceTextureClass = static_cast<jclass>(env->NewGlobalRef(clazz));
- if (env->RegisterNatives(g_qtSurfaceTextureClass,
- methods,
- sizeof(methods) / sizeof(methods[0])) < 0) {
- return false;
- }
+ if (clazz) {
+ g_qtSurfaceTextureListenerClass = static_cast<jclass>(env->NewGlobalRef(clazz));
+ if (env->RegisterNatives(g_qtSurfaceTextureListenerClass,
+ methods,
+ sizeof(methods) / sizeof(methods[0])) < 0) {
+ return false;
}
}
diff --git a/src/plugins/android/src/wrappers/jsurfacetexture.h b/src/plugins/android/src/wrappers/jsurfacetexture.h
index ea53b68ba..d53290a71 100644
--- a/src/plugins/android/src/wrappers/jsurfacetexture.h
+++ b/src/plugins/android/src/wrappers/jsurfacetexture.h
@@ -49,7 +49,7 @@
QT_BEGIN_NAMESPACE
-class JSurfaceTexture : public QObject, public QJNIObjectPrivate
+class JSurfaceTexture : public QObject
{
Q_OBJECT
public:
@@ -57,7 +57,10 @@ public:
~JSurfaceTexture();
int textureID() const { return m_texID; }
+ jobject object();
+
QMatrix4x4 getTransformMatrix();
+ void release(); // API level 14
void updateTexImage();
static bool initJNI(JNIEnv *env);
@@ -67,6 +70,7 @@ Q_SIGNALS:
private:
int m_texID;
+ QJNIObjectPrivate m_surfaceTexture;
};
QT_END_NAMESPACE
diff --git a/src/plugins/android/src/wrappers/jsurfacetextureholder.cpp b/src/plugins/android/src/wrappers/jsurfacetextureholder.cpp
deleted file mode 100644
index b6d1433d1..000000000
--- a/src/plugins/android/src/wrappers/jsurfacetextureholder.cpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia. For licensing terms and
-** conditions see http://qt.digia.com/licensing. For further information
-** use the contact form at http://qt.digia.com/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "jsurfacetextureholder.h"
-
-QT_BEGIN_NAMESPACE
-
-static jclass g_qtSurfaceTextureHolderClass = 0;
-
-JSurfaceTextureHolder::JSurfaceTextureHolder(jobject surface)
- : QJNIObjectPrivate(g_qtSurfaceTextureHolderClass, "(Landroid/view/Surface;)V", surface)
-{
-}
-
-bool JSurfaceTextureHolder::initJNI(JNIEnv *env)
-{
- jclass clazz = env->FindClass("org/qtproject/qt5/android/multimedia/QtSurfaceTextureHolder");
- if (env->ExceptionCheck())
- env->ExceptionClear();
-
- if (clazz)
- g_qtSurfaceTextureHolderClass = static_cast<jclass>(env->NewGlobalRef(clazz));
-
- return true;
-}
-
-QT_END_NAMESPACE
diff --git a/src/plugins/android/src/wrappers/jsurfacetextureholder.h b/src/plugins/android/src/wrappers/jsurfacetextureholder.h
deleted file mode 100644
index 556cb4a40..000000000
--- a/src/plugins/android/src/wrappers/jsurfacetextureholder.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia. For licensing terms and
-** conditions see http://qt.digia.com/licensing. For further information
-** use the contact form at http://qt.digia.com/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef JSURFACETEXTUREHOLDER_H
-#define JSURFACETEXTUREHOLDER_H
-
-#include <QtCore/private/qjni_p.h>
-
-QT_BEGIN_NAMESPACE
-
-class JSurfaceTextureHolder : public QJNIObjectPrivate
-{
-public:
- JSurfaceTextureHolder(jobject surface);
-
- static bool initJNI(JNIEnv *env);
-};
-
-QT_END_NAMESPACE
-
-#endif // JSURFACETEXTUREHOLDER_H
diff --git a/src/plugins/android/src/wrappers/wrappers.pri b/src/plugins/android/src/wrappers/wrappers.pri
index b2faa5b79..126cfd0c1 100644
--- a/src/plugins/android/src/wrappers/wrappers.pri
+++ b/src/plugins/android/src/wrappers/wrappers.pri
@@ -5,7 +5,6 @@ INCLUDEPATH += $$PWD
HEADERS += \
$$PWD/jmediaplayer.h \
$$PWD/jsurfacetexture.h \
- $$PWD/jsurfacetextureholder.h \
$$PWD/jmediametadataretriever.h \
$$PWD/jcamera.h \
$$PWD/jmultimediautils.h \
@@ -14,7 +13,6 @@ HEADERS += \
SOURCES += \
$$PWD/jmediaplayer.cpp \
$$PWD/jsurfacetexture.cpp \
- $$PWD/jsurfacetextureholder.cpp \
$$PWD/jmediametadataretriever.cpp \
$$PWD/jcamera.cpp \
$$PWD/jmultimediautils.cpp \