summaryrefslogtreecommitdiffstats
path: root/plugins/multimedia/gstreamer/camerabin/camerabincontrol.cpp
diff options
context:
space:
mode:
authorDmytro Poplavskiy <dmytro.poplavskiy@nokia.com>2010-12-06 11:47:26 +1000
committerDmytro Poplavskiy <dmytro.poplavskiy@nokia.com>2010-12-06 11:53:36 +1000
commitabd78b8ba0dec3a0a500bb63ad94be5a3a47d899 (patch)
treeb1ea7b03ec6542d648fed40d64d0966cd4bc103a /plugins/multimedia/gstreamer/camerabin/camerabincontrol.cpp
parent10df4cfae0fde463b13be192d165deab50d52fd0 (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.cpp83
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);
}
}
}