Video::PreviewManager::PreviewManager() : QObject(&VideoRendererManager::instance()) { connect(&VideoRendererManager::instance(), &VideoRendererManager::previewStateChanged, [this](bool startStop) { emit previewStateChanged(startStop); }); connect(&VideoRendererManager::instance(), &VideoRendererManager::previewStarted , [this](Video::Renderer* renderer) { emit previewStarted(renderer); }); connect(&VideoRendererManager::instance(), &VideoRendererManager::previewStopped , [this](Video::Renderer* renderer) { emit previewStopped(renderer); }); }
void AndroidCameraPrivate::startPreview() { //We need to clear preview buffers queue here, but there is no method to do it //Though just resetting preview callback do the trick m_camera.callMethod<void>("setPreviewCallbackWithBuffer", "(Landroid/hardware/Camera$PreviewCallback;)V", jobject(0)); m_cameraListener.callMethod<void>("preparePreviewBuffer", "(Landroid/hardware/Camera;)V", m_camera.object()); QJNIObjectPrivate buffer = m_cameraListener.callObjectMethod<jbyteArray>("callbackBuffer"); m_camera.callMethod<void>("addCallbackBuffer", "([B)V", buffer.object()); m_camera.callMethod<void>("setPreviewCallbackWithBuffer", "(Landroid/hardware/Camera$PreviewCallback;)V", m_cameraListener.object()); m_camera.callMethod<void>("startPreview"); emit previewStarted(); }
bool QAndroidCameraSession::open() { close(); m_status = QCamera::LoadingStatus; emit statusChanged(m_status); m_camera = AndroidCamera::open(m_selectedCamera); if (m_camera) { connect(m_camera, SIGNAL(pictureExposed()), this, SLOT(onCameraPictureExposed())); connect(m_camera, SIGNAL(lastPreviewFrameFetched(QVideoFrame)), this, SLOT(onLastPreviewFrameFetched(QVideoFrame)), Qt::DirectConnection); connect(m_camera, SIGNAL(newPreviewFrame(QVideoFrame)), this, SLOT(onNewPreviewFrame(QVideoFrame)), Qt::DirectConnection); connect(m_camera, SIGNAL(pictureCaptured(QByteArray)), this, SLOT(onCameraPictureCaptured(QByteArray))); connect(m_camera, SIGNAL(previewStarted()), this, SLOT(onCameraPreviewStarted())); connect(m_camera, SIGNAL(previewStopped()), this, SLOT(onCameraPreviewStopped())); connect(m_camera, &AndroidCamera::previewFailedToStart, this, &QAndroidCameraSession::onCameraPreviewFailedToStart); connect(m_camera, &AndroidCamera::takePictureFailed, this, &QAndroidCameraSession::onCameraTakePictureFailed); m_nativeOrientation = m_camera->getNativeOrientation(); m_status = QCamera::LoadedStatus; if (m_camera->getPreviewFormat() != AndroidCamera::NV21) m_camera->setPreviewFormat(AndroidCamera::NV21); m_camera->notifyNewFrames(m_videoProbes.count() || m_previewCallback); emit opened(); } else { m_status = QCamera::UnavailableStatus; } emit statusChanged(m_status); return m_camera != 0; }