Added the ability to control playback volume from post capture
[harmattan/cameraplus] / src / cameraresources.cpp
index b81c736..cbaed5c 100644 (file)
@@ -1,7 +1,7 @@
 /*!
  * This file is part of CameraPlus.
  *
- * Copyright (C) 2012 Mohammed Sameer <msameer@foolab.org>
+ * Copyright (C) 2012-2013 Mohammed Sameer <msameer@foolab.org>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -19,7 +19,9 @@
  */
 
 #include "cameraresources.h"
+#if defined(QT4)
 #include <dbusconnectioneventloop.h>
+#endif
 #include <QDebug>
 
 #define APPLICATION_CLASS "camera"
@@ -29,18 +31,23 @@ CameraResources::CameraResources(QObject *parent) :
   m_worker(new CameraResourcesWorker) {
 
   m_worker->moveToThread(&m_thread);
+
+#if defined(QT4)
   DBUSConnectionEventLoop::getInstance().moveToThread(&m_thread);
+#endif
 
   QObject::connect(&m_thread, SIGNAL(started()), m_worker, SLOT(init()));
   m_thread.start();
 
   qRegisterMetaType<CameraResources::Mode>("CameraResources::Mode");
-  qRegisterMetaType<CameraResources::ResourceType>("CameraResources::ResourceType");
   qRegisterMetaType<bool *>("bool *");
 
   QObject::connect(m_worker, SIGNAL(acquiredChanged()), this, SIGNAL(acquiredChanged()));
   QObject::connect(m_worker, SIGNAL(hijackedChanged()), this, SIGNAL(hijackedChanged()));
   QObject::connect(m_worker, SIGNAL(updated()), this, SIGNAL(updated()));
+  QObject::connect(m_worker, SIGNAL(acquiredChanged()), this, SIGNAL(scaleAcquisitionChanged()));
+  QObject::connect(m_worker, SIGNAL(hijackedChanged()), this, SIGNAL(scaleAcquisitionChanged()));
+  QObject::connect(m_worker, SIGNAL(updated()), this, SIGNAL(scaleAcquisitionChanged()));
 }
 
 CameraResources::~CameraResources() {
@@ -55,11 +62,11 @@ CameraResources::~CameraResources() {
   m_worker = 0;
 }
 
-bool CameraResources::isResourceGranted(const ResourceType& resource) {
+bool CameraResources::isResourceGranted(const ResourcePolicy::ResourceType& resource) const {
   bool ok = false;
 
   QMetaObject::invokeMethod(m_worker, "isResourceGranted", Qt::BlockingQueuedConnection,
-                           Q_ARG(bool *, &ok), Q_ARG(CameraResources::ResourceType, resource));
+                           Q_ARG(bool *, &ok), Q_ARG(int, resource));
 
   return ok;
 }
@@ -91,6 +98,10 @@ bool CameraResources::hijacked() const {
   return ok;
 }
 
+bool CameraResources::isScaleAcquired() const {
+  return isResourceGranted(ResourcePolicy::ScaleButtonType);
+}
+
 CameraResourcesWorker::CameraResourcesWorker(QObject *parent) :
   QObject(parent),
   m_set(0),
@@ -210,8 +221,10 @@ void CameraResourcesWorker::acquire(bool *ok, const CameraResources::Mode& mode)
                    << ResourcePolicy::AudioPlaybackType);
     break;
 
-  case CameraResources::PostCapture:
-    *ok = updateSet(QList<ResourcePolicy::ResourceType>(),
+  case CameraResources::Player:
+    *ok = updateSet(QList<ResourcePolicy::ResourceType>()
+                   << ResourcePolicy::VideoPlaybackType
+                   << ResourcePolicy::AudioPlaybackType,
                    QList<ResourcePolicy::ResourceType>()
                    << ResourcePolicy::ScaleButtonType);
     break;
@@ -266,6 +279,7 @@ bool CameraResourcesWorker::updateSet(const QList<ResourcePolicy::ResourceType>&
 
     ResourcePolicy::AudioResource *audio = new ResourcePolicy::AudioResource(APPLICATION_CLASS);
     audio->setProcessID(QCoreApplication::applicationPid());
+    audio->setStreamTag("media.name", "*");
     audio->setOptional(isOptional);
     m_set->addResourceObject(audio);
   }
@@ -310,8 +324,7 @@ void CameraResourcesWorker::setHijacked(bool hijacked) {
   }
 }
 
-void CameraResourcesWorker::isResourceGranted(bool *ok,
-                                             const CameraResources::ResourceType& resource) {
+void CameraResourcesWorker::isResourceGranted(bool *ok, int resource) {
 
   ResourcePolicy::ResourceType rt = (ResourcePolicy::ResourceType)resource;