summaryrefslogtreecommitdiffstats
path: root/plugins/multimedia/gstreamer/camerabin/camerabincontrol.cpp
diff options
context:
space:
mode:
authorDmytro Poplavskiy <dmytro.poplavskiy@nokia.com>2010-08-04 13:41:17 +1000
committerDmytro Poplavskiy <dmytro.poplavskiy@nokia.com>2010-08-04 13:41:17 +1000
commit06d81ea0ae6d2a8e5e8468c6c531041b6c06d30b (patch)
tree99f1730e80a988f541d4f324d72c053463bf8df0 /plugins/multimedia/gstreamer/camerabin/camerabincontrol.cpp
parente01996a8b4a5dfb9f8d3a6c39e475eb32c2f105c (diff)
Updated gstreamer backend with QCamera::State and Status API chages.
Diffstat (limited to 'plugins/multimedia/gstreamer/camerabin/camerabincontrol.cpp')
-rw-r--r--plugins/multimedia/gstreamer/camerabin/camerabincontrol.cpp84
1 files changed, 76 insertions, 8 deletions
diff --git a/plugins/multimedia/gstreamer/camerabin/camerabincontrol.cpp b/plugins/multimedia/gstreamer/camerabin/camerabincontrol.cpp
index dcb0bac5d3..ba65147a1d 100644
--- a/plugins/multimedia/gstreamer/camerabin/camerabincontrol.cpp
+++ b/plugins/multimedia/gstreamer/camerabin/camerabincontrol.cpp
@@ -40,6 +40,10 @@
****************************************************************************/
#include "camerabincontrol.h"
+#include "camerabincontainer.h"
+#include "camerabinaudioencoder.h"
+#include "camerabinvideoencoder.h"
+#include "camerabinimageencoder.h"
#include <QtCore/qdebug.h>
#include <QtCore/qfile.h>
@@ -59,10 +63,20 @@
CameraBinControl::CameraBinControl(CameraBinSession *session)
:QCameraControl(session),
m_session(session),
- m_state(QCamera::StoppedState)
+ m_state(QCamera::UnloadedState),
+ m_status(QCamera::UnloadedStatus)
{
connect(m_session, SIGNAL(stateChanged(QCamera::State)),
- this, SLOT(updateState()));
+ this, SLOT(updateStatus()));
+
+ connect(m_session->audioEncodeControl(), SIGNAL(settingsChanged()),
+ SLOT(reloadLater()));
+ connect(m_session->videoEncodeControl(), SIGNAL(settingsChanged()),
+ SLOT(reloadLater()));
+ connect(m_session->mediaContainerControl(), SIGNAL(settingsChanged()),
+ SLOT(reloadLater()));
+ connect(m_session->imageEncodeControl(), SIGNAL(settingsChanged()),
+ SLOT(reloadLater()));
}
CameraBinControl::~CameraBinControl()
@@ -77,24 +91,78 @@ QCamera::CaptureMode CameraBinControl::captureMode() const
void CameraBinControl::setCaptureMode(QCamera::CaptureMode mode)
{
m_session->setCaptureMode(mode);
- m_session->setState(QCamera::IdleState);
+ reloadLater();
}
void CameraBinControl::setState(QCamera::State state)
{
qDebug() << Q_FUNC_INFO << state;
- m_session->setState(state);
+ if (m_state != state) {
+ m_state = state;
+ m_session->setState(state);
+ emit stateChanged(m_state);
+ }
}
QCamera::State CameraBinControl::state() const
{
- return m_session->state();
+ return m_state;
}
-void CameraBinControl::updateState()
+void CameraBinControl::updateStatus()
{
+ QCamera::State sessionState = m_session->state();
m_state = state();
- qDebug() << "Camera state changed" << m_state;
- emit stateChanged(m_state);
+ QCamera::Status oldStatus = m_status;
+
+ switch (m_state) {
+ case QCamera::UnloadedState:
+ m_status = QCamera::UnloadedStatus;
+ break;
+ case QCamera::LoadedState:
+ if (sessionState != QCamera::UnloadedState)
+ m_status = QCamera::LoadedStatus;
+ else
+ m_status = QCamera::LoadingStatus;
+ break;
+ case QCamera::ActiveState:
+ switch (sessionState) {
+ case QCamera::UnloadedState:
+ m_status = QCamera::LoadingStatus;
+ break;
+ case QCamera::LoadedState:
+ m_status = QCamera::StartingStatus;
+ break;
+ case QCamera::ActiveState:
+ m_status = QCamera::ActiveStatus;
+ break;
+ }
+ }
+
+ if (m_status != oldStatus) {
+ //qDebug() << "Camera status changed" << m_status;
+ emit statusChanged(m_status);
+ }
+
}
+void CameraBinControl::reloadLater()
+{
+ //qDebug() << "reload pipeline requested";
+ if (!m_reloadPending && m_state == QCamera::ActiveState) {
+ m_reloadPending = true;
+ QMetaObject::invokeMethod(this, "reloadPipeline", Qt::QueuedConnection);
+ }
+}
+
+void CameraBinControl::reloadPipeline()
+{
+ //qDebug() << "reload pipeline";
+ if (m_reloadPending) {
+ m_reloadPending = false;
+ if (m_state == QCamera::ActiveState) {
+ m_session->setState(QCamera::LoadedState);
+ m_session->setState(QCamera::ActiveState);
+ }
+ }
+}