summaryrefslogtreecommitdiffstats
path: root/src/plugins/directshow/camera/dscameracontrol.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/directshow/camera/dscameracontrol.cpp')
-rw-r--r--src/plugins/directshow/camera/dscameracontrol.cpp53
1 files changed, 35 insertions, 18 deletions
diff --git a/src/plugins/directshow/camera/dscameracontrol.cpp b/src/plugins/directshow/camera/dscameracontrol.cpp
index 07035f5dd..15c669f41 100644
--- a/src/plugins/directshow/camera/dscameracontrol.cpp
+++ b/src/plugins/directshow/camera/dscameracontrol.cpp
@@ -48,10 +48,13 @@
QT_BEGIN_NAMESPACE
DSCameraControl::DSCameraControl(QObject *parent)
- :QCameraControl(parent), m_captureMode(QCamera::CaptureStillImage)
+ : QCameraControl(parent)
+ , m_state(QCamera::UnloadedState)
+ , m_captureMode(QCamera::CaptureStillImage)
{
m_session = qobject_cast<DSCameraSession*>(parent);
- connect(m_session, SIGNAL(stateChanged(QCamera::State)),this, SIGNAL(stateChanged(QCamera::State)));
+ connect(m_session, SIGNAL(statusChanged(QCamera::Status)),
+ this, SIGNAL(statusChanged(QCamera::Status)));
}
DSCameraControl::~DSCameraControl()
@@ -60,14 +63,30 @@ DSCameraControl::~DSCameraControl()
void DSCameraControl::setState(QCamera::State state)
{
+ if (m_state == state)
+ return;
+
+ bool succeeded = false;
switch (state) {
- case QCamera::ActiveState:
- start();
- break;
- case QCamera::UnloadedState: /* fall through */
- case QCamera::LoadedState:
- stop();
- break;
+ case QCamera::UnloadedState:
+ succeeded = m_session->unload();
+ break;
+ case QCamera::LoadedState:
+ case QCamera::ActiveState:
+ if (m_state == QCamera::UnloadedState && !m_session->load())
+ return;
+
+ if (state == QCamera::ActiveState)
+ succeeded = m_session->startPreview();
+ else
+ succeeded = m_session->stopPreview();
+
+ break;
+ }
+
+ if (succeeded) {
+ m_state = state;
+ emit stateChanged(m_state);
}
}
@@ -85,19 +104,17 @@ bool DSCameraControl::isCaptureModeSupported(QCamera::CaptureModes mode) const
return bCaptureSupported;
}
-void DSCameraControl::start()
+void DSCameraControl::setCaptureMode(QCamera::CaptureModes mode)
{
- m_session->record();
-}
-
-void DSCameraControl::stop()
-{
- m_session->stop();
+ if (m_captureMode != mode && isCaptureModeSupported(mode)) {
+ m_captureMode = mode;
+ emit captureModeChanged(mode);
+ }
}
-QCamera::State DSCameraControl::state() const
+QCamera::Status DSCameraControl::status() const
{
- return (QCamera::State)m_session->state();
+ return m_session->status();
}
QT_END_NAMESPACE