diff options
author | Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com> | 2010-12-06 11:47:26 +1000 |
---|---|---|
committer | Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com> | 2010-12-06 11:53:36 +1000 |
commit | abd78b8ba0dec3a0a500bb63ad94be5a3a47d899 (patch) | |
tree | b1ea7b03ec6542d648fed40d64d0966cd4bc103a /plugins/multimedia/gstreamer/camerabin/camerabincontrol.cpp | |
parent | 10df4cfae0fde463b13be192d165deab50d52fd0 (diff) |
CameraBin backend: resource policy manager integration on MeeGo.
Moved resource requests from camerabinrecorder to camerabincontrol,
so QCamera::Loaded/Active status is reached only after all
the necessary resources are granted.
Task-number:MOBILITY-1374
Reviewed-by:Andrew den Exter
Diffstat (limited to 'plugins/multimedia/gstreamer/camerabin/camerabincontrol.cpp')
-rw-r--r-- | plugins/multimedia/gstreamer/camerabin/camerabincontrol.cpp | 83 |
1 files changed, 72 insertions, 11 deletions
diff --git a/plugins/multimedia/gstreamer/camerabin/camerabincontrol.cpp b/plugins/multimedia/gstreamer/camerabin/camerabincontrol.cpp index b13fb11e21..ad2f55747c 100644 --- a/plugins/multimedia/gstreamer/camerabin/camerabincontrol.cpp +++ b/plugins/multimedia/gstreamer/camerabin/camerabincontrol.cpp @@ -44,6 +44,7 @@ #include "camerabinaudioencoder.h" #include "camerabinvideoencoder.h" #include "camerabinimageencoder.h" +#include "camerabinresourcepolicy.h" #include <QtCore/qdebug.h> #include <QtCore/qfile.h> @@ -86,6 +87,14 @@ CameraBinControl::CameraBinControl(CameraBinSession *session) SLOT(reloadLater())); connect(m_session, SIGNAL(readyChanged(bool)), SLOT(reloadLater())); + + m_resourcePolicy = new CamerabinResourcePolicy(this); + connect(m_resourcePolicy, SIGNAL(resourcesGranted()), + SLOT(handleResourcesGranted())); + connect(m_resourcePolicy, SIGNAL(resourcesDenied()), + SLOT(handleResourcesLost())); + connect(m_resourcePolicy, SIGNAL(resourcesLost()), + SLOT(handleResourcesLost())); } CameraBinControl::~CameraBinControl() @@ -102,6 +111,13 @@ void CameraBinControl::setCaptureMode(QCamera::CaptureMode mode) if (m_session->captureMode() != mode) { m_session->setCaptureMode(mode); reloadLater(); + + if (m_state == QCamera::ActiveState) { + m_resourcePolicy->setResourceSet( + captureMode() == QCamera::CaptureStillImage ? + CamerabinResourcePolicy::ImageCaptureResources : + CamerabinResourcePolicy::VideoCaptureResources); + } } } @@ -124,17 +140,36 @@ void CameraBinControl::setState(QCamera::State state) if (m_state != state) { m_state = state; - //postpone changing to Active if the session is nor ready yet - if (state == QCamera::ActiveState) { - if (m_session->isReady()) { - m_session->setState(state); - } else { + CamerabinResourcePolicy::ResourceSet resourceSet; + switch (state) { + case QCamera::UnloadedState: + resourceSet = CamerabinResourcePolicy::NoResources; + break; + case QCamera::LoadedState: + resourceSet = CamerabinResourcePolicy::LoadedResources; + break; + case QCamera::ActiveState: + resourceSet = captureMode() == QCamera::CaptureStillImage ? + CamerabinResourcePolicy::ImageCaptureResources : + CamerabinResourcePolicy::VideoCaptureResources; + break; + } + + m_resourcePolicy->setResourceSet(resourceSet); + + if (m_resourcePolicy->isResourcesGranted()) { + //postpone changing to Active if the session is nor ready yet + if (state == QCamera::ActiveState) { + if (m_session->isReady()) { + m_session->setState(state); + } else { #ifdef CAMEABIN_DEBUG - qDebug() << "Camera session is not ready yet, postpone activating"; + qDebug() << "Camera session is not ready yet, postpone activating"; #endif - } - } else - m_session->setState(state); + } + } else + m_session->setState(state); + } emit stateChanged(m_state); } @@ -194,6 +229,30 @@ void CameraBinControl::reloadLater() } } +void CameraBinControl::handleResourcesLost() +{ +#ifdef CAMEABIN_DEBUG + qDebug() << Q_FUNC_INFO << ENUM_NAME(QCamera, "State", m_state); +#endif + m_session->setState(QCamera::UnloadedState); +} + +void CameraBinControl::handleResourcesGranted() +{ +#ifdef CAMEABIN_DEBUG + qDebug() << Q_FUNC_INFO << ENUM_NAME(QCamera, "State", m_state); +#endif + + //camera will be started soon + if (m_reloadPending) + return; + + if (m_state == QCamera::ActiveState && m_session->isReady()) + m_session->setState(QCamera::ActiveState); + else if (m_state == QCamera::LoadedState) + m_session->setState(QCamera::LoadedState); +} + void CameraBinControl::delayedReload() { #ifdef CAMEABIN_DEBUG @@ -201,8 +260,10 @@ void CameraBinControl::delayedReload() #endif if (m_reloadPending) { m_reloadPending = false; - if (m_state == QCamera::ActiveState && m_session->isReady()) { - m_session->setState(QCamera::ActiveState); + if (m_state == QCamera::ActiveState && + m_session->isReady() && + m_resourcePolicy->isResourcesGranted()) { + m_session->setState(QCamera::ActiveState); } } } |