bool AndroidCameraPrivate::init(int cameraId) { m_cameraId = cameraId; QJNIEnvironmentPrivate env; m_camera = QJNIObjectPrivate::callStaticObjectMethod("android/hardware/Camera", "open", "(I)Landroid/hardware/Camera;", cameraId); if (exceptionCheckAndClear(env) || !m_camera.isValid()) return false; m_cameraListener = QJNIObjectPrivate(QtCameraListenerClassName, "(I)V", m_cameraId); m_info = QJNIObjectPrivate("android/hardware/Camera$CameraInfo"); m_camera.callStaticMethod<void>("android/hardware/Camera", "getCameraInfo", "(ILandroid/hardware/Camera$CameraInfo;)V", cameraId, m_info.object()); QJNIObjectPrivate params = m_camera.callObjectMethod("getParameters", "()Landroid/hardware/Camera$Parameters;"); m_parameters = QJNIObjectPrivate(params); return true; }
jobject AndroidSurfaceTexture::surfaceHolder() { if (!m_surfaceHolder.isValid()) { m_surfaceView = QJNIObjectPrivate("android/view/Surface", "(Landroid/graphics/SurfaceTexture;)V", m_surfaceTexture.object()); m_surfaceHolder = QJNIObjectPrivate("org/qtproject/qt5/android/multimedia/QtSurfaceTextureHolder", "(Landroid/view/Surface;)V", m_surfaceView.object()); } return m_surfaceHolder.object(); }
AndroidSurfaceTexture::AndroidSurfaceTexture(unsigned int texName) : QObject() , m_texID(int(texName)) { // 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(QtSurfaceTextureListenerClassName, "(I)V", jint(texName)); m_surfaceTexture.callMethod<void>("setOnFrameAvailableListener", "(Landroid/graphics/SurfaceTexture$OnFrameAvailableListener;)V", listener.object()); }
void AndroidCameraPrivate::release() { m_previewSize = QSize(); m_parametersMutex.lock(); m_parameters = QJNIObjectPrivate(); m_parametersMutex.unlock(); if (m_camera.isValid()) m_camera.callMethod<void>("release"); }
void QAndroidPlatformOpenGLWindow::createEgl(EGLConfig config) { clearEgl(); QJNIEnvironmentPrivate env; m_nativeWindow = ANativeWindow_fromSurface(env, m_androidSurfaceObject.object()); m_androidSurfaceObject = QJNIObjectPrivate(); m_eglSurface = eglCreateWindowSurface(m_eglDisplay, config, m_nativeWindow, NULL); if (m_eglSurface == EGL_NO_SURFACE) { EGLint error = eglGetError(); eglTerminate(m_eglDisplay); qFatal("EGL Error : Could not create the egl surface: error = 0x%x\n", error); } }
AndroidMediaRecorder::AndroidMediaRecorder() : QObject() , m_id(reinterpret_cast<jlong>(this)) { m_mediaRecorder = QJNIObjectPrivate("android/media/MediaRecorder"); if (m_mediaRecorder.isValid()) { QJNIObjectPrivate listener(QtMediaRecorderListenerClassName, "(J)V", m_id); m_mediaRecorder.callMethod<void>("setOnErrorListener", "(Landroid/media/MediaRecorder$OnErrorListener;)V", listener.object()); m_mediaRecorder.callMethod<void>("setOnInfoListener", "(Landroid/media/MediaRecorder$OnInfoListener;)V", listener.object()); mediaRecorders->insert(m_id, this); } }