Android: Remove inheritance to QJNIObject in the Camera wrapper

The QJNIObject was never intended to be used as a base class.

Change-Id: I4986aeaebecd6e4136fed311e69368e20da4d060
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
This commit is contained in:
Christian Strømme
2014-04-02 18:57:16 +02:00
committed by The Qt Project
parent ebf9528eae
commit a241874a7f

View File

@@ -145,7 +145,7 @@ private:
QJNIObjectPrivate lastCamera; QJNIObjectPrivate lastCamera;
}; };
class JCameraWorker : public QObject, public QJNIObjectPrivate class JCameraWorker : public QObject
{ {
Q_OBJECT Q_OBJECT
friend class JCamera; friend class JCamera;
@@ -236,6 +236,7 @@ class JCameraWorker : public QObject, public QJNIObjectPrivate
QThread *m_workerThread; QThread *m_workerThread;
QMutex m_parametersMutex; QMutex m_parametersMutex;
QJNIObjectPrivate m_camera;
Q_SIGNALS: Q_SIGNALS:
void previewSizeChanged(); void previewSizeChanged();
@@ -269,7 +270,7 @@ JCamera::JCamera(int cameraId, jobject cam, QThread *workerThread)
JCamera::~JCamera() JCamera::~JCamera()
{ {
if (d->isValid()) { if (d->m_camera.isValid()) {
g_objectMapMutex.lock(); g_objectMapMutex.lock();
g_objectMap.remove(d->m_cameraId); g_objectMap.remove(d->m_cameraId);
g_objectMapMutex.unlock(); g_objectMapMutex.unlock();
@@ -595,7 +596,7 @@ void JCamera::fetchLastPreviewFrame()
QJNIObjectPrivate JCamera::getCameraObject() QJNIObjectPrivate JCamera::getCameraObject()
{ {
return d->getObjectField("m_camera", "Landroid/hardware/Camera;"); return d->m_camera.getObjectField("m_camera", "Landroid/hardware/Camera;");
} }
void JCamera::startPreview() void JCamera::startPreview()
@@ -613,28 +614,28 @@ void JCamera::stopPreview()
JCameraWorker::JCameraWorker(JCamera *camera, int cameraId, jobject cam, QThread *workerThread) JCameraWorker::JCameraWorker(JCamera *camera, int cameraId, jobject cam, QThread *workerThread)
: QObject(0) : QObject(0)
, QJNIObjectPrivate(cam)
, m_cameraId(cameraId) , m_cameraId(cameraId)
, m_rotation(0) , m_rotation(0)
, m_hasAPI14(false) , m_hasAPI14(false)
, m_parametersMutex(QMutex::Recursive) , m_parametersMutex(QMutex::Recursive)
, m_camera(cam)
{ {
q = camera; q = camera;
m_workerThread = workerThread; m_workerThread = workerThread;
moveToThread(m_workerThread); moveToThread(m_workerThread);
if (isValid()) { if (m_camera.isValid()) {
g_objectMapMutex.lock(); g_objectMapMutex.lock();
g_objectMap.insert(cameraId, q); g_objectMap.insert(cameraId, q);
g_objectMapMutex.unlock(); g_objectMapMutex.unlock();
m_info = QJNIObjectPrivate("android/hardware/Camera$CameraInfo"); m_info = QJNIObjectPrivate("android/hardware/Camera$CameraInfo");
callStaticMethod<void>("android/hardware/Camera", m_camera.callStaticMethod<void>("android/hardware/Camera",
"getCameraInfo", "getCameraInfo",
"(ILandroid/hardware/Camera$CameraInfo;)V", "(ILandroid/hardware/Camera$CameraInfo;)V",
cameraId, m_info.object()); cameraId, m_info.object());
QJNIObjectPrivate params = callObjectMethod("getParameters", QJNIObjectPrivate params = m_camera.callObjectMethod("getParameters",
"()Landroid/hardware/Camera$Parameters;"); "()Landroid/hardware/Camera$Parameters;");
m_parameters = QJNIObjectPrivate(params); m_parameters = QJNIObjectPrivate(params);
@@ -668,7 +669,7 @@ void JCameraWorker::release()
m_parametersMutex.lock(); m_parametersMutex.lock();
m_parameters = QJNIObjectPrivate(); m_parameters = QJNIObjectPrivate();
m_parametersMutex.unlock(); m_parametersMutex.unlock();
callMethod<void>("release"); m_camera.callMethod<void>("release");
} }
JCamera::CameraFacing JCameraWorker::getFacing() JCamera::CameraFacing JCameraWorker::getFacing()
@@ -752,7 +753,9 @@ void JCameraWorker::updatePreviewSize()
void JCameraWorker::setPreviewTexture(void *surfaceTexture) void JCameraWorker::setPreviewTexture(void *surfaceTexture)
{ {
callMethod<void>("setPreviewTexture", "(Landroid/graphics/SurfaceTexture;)V", static_cast<jobject>(surfaceTexture)); m_camera.callMethod<void>("setPreviewTexture",
"(Landroid/graphics/SurfaceTexture;)V",
static_cast<jobject>(surfaceTexture));
} }
bool JCameraWorker::isZoomSupported() bool JCameraWorker::isZoomSupported()
@@ -940,7 +943,7 @@ void JCameraWorker::setFocusAreas(const QList<QRect> &areas)
void JCameraWorker::autoFocus() void JCameraWorker::autoFocus()
{ {
callMethod<void>("autoFocus"); m_camera.callMethod<void>("autoFocus");
emit autoFocusStarted(); emit autoFocusStarted();
} }
@@ -1184,15 +1187,15 @@ void JCameraWorker::stopPreview()
void JCameraWorker::fetchEachFrame(bool fetch) void JCameraWorker::fetchEachFrame(bool fetch)
{ {
callMethod<void>("fetchEachFrame", "(Z)V", fetch); m_camera.callMethod<void>("fetchEachFrame", "(Z)V", fetch);
} }
void JCameraWorker::fetchLastPreviewFrame() void JCameraWorker::fetchLastPreviewFrame()
{ {
QJNIEnvironmentPrivate env; QJNIEnvironmentPrivate env;
QJNIObjectPrivate dataObj = callObjectMethod("lockAndFetchPreviewBuffer", "()[B"); QJNIObjectPrivate dataObj = m_camera.callObjectMethod("lockAndFetchPreviewBuffer", "()[B");
if (!dataObj.object()) { if (!dataObj.object()) {
callMethod<void>("unlockPreviewBuffer"); m_camera.callMethod<void>("unlockPreviewBuffer");
return; return;
} }
jbyteArray data = static_cast<jbyteArray>(dataObj.object()); jbyteArray data = static_cast<jbyteArray>(dataObj.object());
@@ -1200,14 +1203,14 @@ void JCameraWorker::fetchLastPreviewFrame()
int arrayLength = env->GetArrayLength(data); int arrayLength = env->GetArrayLength(data);
bytes.resize(arrayLength); bytes.resize(arrayLength);
env->GetByteArrayRegion(data, 0, arrayLength, (jbyte*)bytes.data()); env->GetByteArrayRegion(data, 0, arrayLength, (jbyte*)bytes.data());
callMethod<void>("unlockPreviewBuffer"); m_camera.callMethod<void>("unlockPreviewBuffer");
emit previewFetched(bytes); emit previewFetched(bytes);
} }
void JCameraWorker::applyParameters() void JCameraWorker::applyParameters()
{ {
callMethod<void>("setParameters", m_camera.callMethod<void>("setParameters",
"(Landroid/hardware/Camera$Parameters;)V", "(Landroid/hardware/Camera$Parameters;)V",
m_parameters.object()); m_parameters.object());
} }
@@ -1239,7 +1242,7 @@ QStringList JCameraWorker::callParametersStringListMethod(const QByteArray &meth
void JCameraWorker::callVoidMethod(const QByteArray &methodName) void JCameraWorker::callVoidMethod(const QByteArray &methodName)
{ {
callMethod<void>(methodName.constData()); m_camera.callMethod<void>(methodName.constData());
} }