diff --git a/uvcengine/uvccameracontrol.cpp b/uvcengine/uvccameracontrol.cpp index ea76be37efcec6d338b543d10188a2dfcbf4946d..619cce84dfa0e3cf59eefd8fa02011350bb8ae53 100644 --- a/uvcengine/uvccameracontrol.cpp +++ b/uvcengine/uvccameracontrol.cpp @@ -34,6 +34,8 @@ void UVCCameraControl::setState(QCamera::State state) case QCamera::LoadedState: if (m_state == QCamera::UnloadedState && !(succeeded=m_session->load())) return; + if (m_state == QCamera::ActiveState) + succeeded = m_session->stopPreview(); break; case QCamera::ActiveState: diff --git a/uvcengine/uvccamerasession.cpp b/uvcengine/uvccamerasession.cpp index ee899a2771d5034a51300732ec4aea44fff930af..be979921508e709bf10d0a8364be9aa0845876b8 100644 --- a/uvcengine/uvccamerasession.cpp +++ b/uvcengine/uvccamerasession.cpp @@ -93,9 +93,10 @@ bool UVCCameraSession::unload() if (streaming) stopPreview(); - if (devh) - uvc_close(devh); - devh = NULL; + // TODO: closing here seems to mess up the device + //if (devh) + // uvc_close(devh); + //devh = NULL; m_supportedViewfinderSettings.clear(); return true; @@ -127,7 +128,7 @@ bool UVCCameraSession::startPreview() return false; } - res = uvc_stream_start(strmh, cb, (void*) this, 2.0f, 0); + res = uvc_stream_start(strmh, cb, (void*) this, 1.5f, 0); if (res != UVC_SUCCESS) { qDebug() << "uvc_stream_start" << uvc_strerror(res); return false; @@ -203,6 +204,7 @@ bool UVCCameraSession::stopPreview() break; if (res != UVC_SUCCESS && res != UVC_ERROR_INVALID_PARAM) qDebug() << "uvc_stream_stop" << uvc_strerror(res); + uvc_stream_close(strmh); streaming = false; frameReference.invalidate(); diff --git a/uvcengine/uvcserviceplugin.cpp b/uvcengine/uvcserviceplugin.cpp index 12ac4f93158c28b7abf01a6beeb8f7e4621f18e7..af4713d6da1d4a15c0ba326a12cce756c9b35042 100644 --- a/uvcengine/uvcserviceplugin.cpp +++ b/uvcengine/uvcserviceplugin.cpp @@ -9,7 +9,7 @@ QMediaService* UVCServicePlugin::create(const QString &key) void UVCServicePlugin::release(QMediaService *service) { - qDebug() << "Plugin release"; + delete service; } QByteArray UVCServicePlugin::defaultDevice(const QByteArray &service) const