diff options
author | Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com> | 2010-08-04 13:41:17 +1000 |
---|---|---|
committer | Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com> | 2010-08-04 13:41:17 +1000 |
commit | 06d81ea0ae6d2a8e5e8468c6c531041b6c06d30b (patch) | |
tree | 99f1730e80a988f541d4f324d72c053463bf8df0 /plugins/multimedia/gstreamer/camerabin/camerabincontrol.cpp | |
parent | e01996a8b4a5dfb9f8d3a6c39e475eb32c2f105c (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.cpp | 84 |
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); + } + } +} |