X-Git-Url: http://cgit.sxemacs.org/?a=blobdiff_plain;f=src%2Fcameraresources.cpp;h=4e936e5dd21bbe380af2282ee583f3ff3b5da78d;hb=e407164092986ab3a86d1120ed3977b4d9df8599;hp=daa849edb98b2dd84b568b6bfcbe1a1eb09ede71;hpb=13b2075e710ae424058e7445b9b1c63b0877b3d2;p=harmattan%2Fcameraplus diff --git a/src/cameraresources.cpp b/src/cameraresources.cpp index daa849e..4e936e5 100644 --- a/src/cameraresources.cpp +++ b/src/cameraresources.cpp @@ -1,7 +1,7 @@ /*! * This file is part of CameraPlus. * - * Copyright (C) 2012 Mohammed Sameer + * Copyright (C) 2012-2013 Mohammed Sameer * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -22,8 +22,8 @@ #include #include -// TODO: video recording ? -// TODO: more resources ? +#define APPLICATION_CLASS "camera" + CameraResources::CameraResources(QObject *parent) : QObject(parent), m_worker(new CameraResourcesWorker) { @@ -35,27 +35,33 @@ CameraResources::CameraResources(QObject *parent) : m_thread.start(); qRegisterMetaType("CameraResources::Mode"); - qRegisterMetaType("CameraResources::ResourceType"); qRegisterMetaType("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; } @@ -87,6 +93,10 @@ bool CameraResources::hijacked() const { return ok; } +bool CameraResources::isScaleAcquired() const { + return isResourceGranted(ResourcePolicy::ScaleButtonType); +} + CameraResourcesWorker::CameraResourcesWorker(QObject *parent) : QObject(parent), m_set(0), @@ -98,13 +108,11 @@ CameraResourcesWorker::CameraResourcesWorker(QObject *parent) : } 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())); @@ -185,36 +193,34 @@ void CameraResourcesWorker::acquire(bool *ok, const CameraResources::Mode& mode) case CameraResources::Image: *ok = updateSet(QList() << ResourcePolicy::VideoPlaybackType - << ResourcePolicy::VideoRecorderType - << ResourcePolicy::ScaleButtonType - << ResourcePolicy::SnapButtonType); + << ResourcePolicy::VideoRecorderType, + QList() + << ResourcePolicy::ScaleButtonType); break; case CameraResources::Video: *ok = updateSet(QList() << ResourcePolicy::VideoPlaybackType - << ResourcePolicy::VideoRecorderType - << ResourcePolicy::ScaleButtonType - << ResourcePolicy::SnapButtonType); + << ResourcePolicy::VideoRecorderType, + QList() + << ResourcePolicy::ScaleButtonType); break; case CameraResources::Recording: *ok = updateSet(QList() << ResourcePolicy::VideoPlaybackType - << ResourcePolicy::VideoRecorderType - << ResourcePolicy::ScaleButtonType - << ResourcePolicy::SnapButtonType, + << ResourcePolicy::VideoRecorderType, QList() + << ResourcePolicy::ScaleButtonType << ResourcePolicy::AudioRecorderType << ResourcePolicy::AudioPlaybackType); break; - case CameraResources::PostCapture: + case CameraResources::Player: *ok = updateSet(QList() << ResourcePolicy::VideoPlaybackType - << ResourcePolicy::ScaleButtonType, - QList() - << ResourcePolicy::AudioPlaybackType); + << ResourcePolicy::AudioPlaybackType, + QList()); break; default: @@ -265,7 +271,7 @@ bool CameraResourcesWorker::updateSet(const QList& 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); @@ -311,8 +317,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;