/*!
* 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
#include <dbusconnectioneventloop.h>
#include <QDebug>
-// TODO: video recording ?
-// TODO: more resources ?
+#define APPLICATION_CLASS "camera"
+
CameraResources::CameraResources(QObject *parent) :
QObject(parent),
m_worker(new CameraResourcesWorker) {
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, SLOT(updated()));
+ 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() {
- m_thread.quit();
- m_thread.wait();
+ acquire(CameraResources::None);
+ m_thread.exit(0);
+
+ while (m_thread.isRunning()) {
+ m_thread.wait(10);
+ }
delete m_worker;
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;
}
return ok;
}
+bool CameraResources::isScaleAcquired() const {
+ return isResourceGranted(ResourcePolicy::ScaleButtonType);
+}
+
CameraResourcesWorker::CameraResourcesWorker(QObject *parent) :
QObject(parent),
m_set(0),
}
CameraResourcesWorker::~CameraResourcesWorker() {
- bool ok;
- acquire(&ok, CameraResources::None);
}
void CameraResourcesWorker::init() {
- m_set = new ResourcePolicy::ResourceSet("camera", this);
+ m_set = new ResourcePolicy::ResourceSet(APPLICATION_CLASS, this);
m_set->setAlwaysReply();
QObject::connect(m_set, SIGNAL(resourcesReleased()), this, SLOT(resourcesReleased()));
case CameraResources::Image:
*ok = updateSet(QList<ResourcePolicy::ResourceType>()
<< ResourcePolicy::VideoPlaybackType
- << ResourcePolicy::VideoRecorderType
- << ResourcePolicy::ScaleButtonType
- << ResourcePolicy::SnapButtonType);
+ << ResourcePolicy::VideoRecorderType,
+ QList<ResourcePolicy::ResourceType>()
+ << ResourcePolicy::ScaleButtonType);
break;
case CameraResources::Video:
*ok = updateSet(QList<ResourcePolicy::ResourceType>()
<< ResourcePolicy::VideoPlaybackType
- << ResourcePolicy::VideoRecorderType
- << ResourcePolicy::ScaleButtonType
- << ResourcePolicy::SnapButtonType);
+ << ResourcePolicy::VideoRecorderType,
+ QList<ResourcePolicy::ResourceType>()
+ << ResourcePolicy::ScaleButtonType);
break;
case CameraResources::Recording:
*ok = updateSet(QList<ResourcePolicy::ResourceType>()
<< ResourcePolicy::VideoPlaybackType
- << ResourcePolicy::VideoRecorderType
- << ResourcePolicy::ScaleButtonType
- << ResourcePolicy::SnapButtonType,
+ << ResourcePolicy::VideoRecorderType,
QList<ResourcePolicy::ResourceType>()
+ << ResourcePolicy::ScaleButtonType
<< ResourcePolicy::AudioRecorderType
<< ResourcePolicy::AudioPlaybackType);
break;
- case CameraResources::PostCapture:
+ case CameraResources::Player:
*ok = updateSet(QList<ResourcePolicy::ResourceType>()
<< ResourcePolicy::VideoPlaybackType
- << ResourcePolicy::ScaleButtonType,
- QList<ResourcePolicy::ResourceType>()
- << ResourcePolicy::AudioPlaybackType);
+ << ResourcePolicy::AudioPlaybackType,
+ QList<ResourcePolicy::ResourceType>());
break;
default:
if (m_set->contains(ResourcePolicy::AudioPlaybackType)) {
bool isOptional = m_set->resource(ResourcePolicy::AudioPlaybackType)->isOptional();
- ResourcePolicy::AudioResource *audio = new ResourcePolicy::AudioResource("camera");
+ ResourcePolicy::AudioResource *audio = new ResourcePolicy::AudioResource(APPLICATION_CLASS);
audio->setProcessID(QCoreApplication::applicationPid());
audio->setOptional(isOptional);
m_set->addResourceObject(audio);
}
}
-void CameraResourcesWorker::isResourceGranted(bool *ok,
- const CameraResources::ResourceType& resource) {
+void CameraResourcesWorker::isResourceGranted(bool *ok, int resource) {
ResourcePolicy::ResourceType rt = (ResourcePolicy::ResourceType)resource;