diff options
Diffstat (limited to 'src/plugins/gstreamer/camerabin/camerabincontrol.cpp')
-rw-r--r-- | src/plugins/gstreamer/camerabin/camerabincontrol.cpp | 82 |
1 files changed, 17 insertions, 65 deletions
diff --git a/src/plugins/gstreamer/camerabin/camerabincontrol.cpp b/src/plugins/gstreamer/camerabin/camerabincontrol.cpp index 3ec992791..bc60d3a58 100644 --- a/src/plugins/gstreamer/camerabin/camerabincontrol.cpp +++ b/src/plugins/gstreamer/camerabin/camerabincontrol.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -51,11 +51,10 @@ CameraBinControl::CameraBinControl(CameraBinSession *session) :QCameraControl(session), m_session(session), m_state(QCamera::UnloadedState), - m_status(QCamera::UnloadedStatus), m_reloadPending(false) { - connect(m_session, SIGNAL(stateChanged(QCamera::State)), - this, SLOT(updateStatus())); + connect(m_session, SIGNAL(statusChanged(QCamera::Status)), + this, SIGNAL(statusChanged(QCamera::Status))); connect(m_session, SIGNAL(viewfinderChanged()), SLOT(reloadLater())); @@ -95,11 +94,6 @@ void CameraBinControl::setCaptureMode(QCamera::CaptureModes mode) captureMode() == QCamera::CaptureStillImage ? CamerabinResourcePolicy::ImageCaptureResources : CamerabinResourcePolicy::VideoCaptureResources); -#if (GST_VERSION_MAJOR == 0) && ((GST_VERSION_MINOR < 10) || (GST_VERSION_MICRO < 23)) - //due to bug in v4l2src, it's necessary to reload camera on video caps changes - //https://bugzilla.gnome.org/show_bug.cgi?id=649832 - reloadLater(); -#endif } emit captureModeChanged(mode); } @@ -121,7 +115,7 @@ void CameraBinControl::setState(QCamera::State state) //special case for stopping the camera while it's busy, //it should be delayed until the camera is idle if (state == QCamera::LoadedState && - m_session->state() == QCamera::ActiveState && + m_session->status() == QCamera::ActiveStatus && m_session->isBusy()) { #ifdef CAMEABIN_DEBUG qDebug() << Q_FUNC_INFO << "Camera is busy, QCamera::stop() is delayed"; @@ -170,52 +164,9 @@ QCamera::State CameraBinControl::state() const return m_state; } -void CameraBinControl::updateStatus() +QCamera::Status CameraBinControl::status() const { - QCamera::State sessionState = m_session->state(); - QCamera::Status oldStatus = m_status; - - switch (m_state) { - case QCamera::UnloadedState: - m_status = QCamera::UnloadedStatus; - break; - case QCamera::LoadedState: - switch (sessionState) { - case QCamera::UnloadedState: - m_status = m_resourcePolicy->isResourcesGranted() - ? QCamera::LoadingStatus - : QCamera::UnavailableStatus; - break; - case QCamera::LoadedState: - m_status = QCamera::LoadedStatus; - break; - case QCamera::ActiveState: - m_status = QCamera::ActiveStatus; - break; - } - break; - case QCamera::ActiveState: - switch (sessionState) { - case QCamera::UnloadedState: - m_status = m_resourcePolicy->isResourcesGranted() - ? QCamera::LoadingStatus - : QCamera::UnavailableStatus; - break; - case QCamera::LoadedState: - m_status = QCamera::StartingStatus; - break; - case QCamera::ActiveState: - m_status = QCamera::ActiveStatus; - break; - } - } - - if (m_status != oldStatus) { -#ifdef CAMEABIN_DEBUG - qDebug() << "Camera status changed" << ENUM_NAME(QCamera, "Status", m_status); -#endif - emit statusChanged(m_status); - } + return m_session->status(); } void CameraBinControl::reloadLater() @@ -259,7 +210,7 @@ void CameraBinControl::handleResourcesGranted() void CameraBinControl::handleBusyChanged(bool busy) { - if (!busy && m_session->state() == QCamera::ActiveState) { + if (!busy && m_session->status() == QCamera::ActiveStatus) { if (m_state == QCamera::LoadedState) { //handle delayed stop() because of busy camera m_resourcePolicy->setResourceSet(CamerabinResourcePolicy::LoadedResources); @@ -298,13 +249,14 @@ bool CameraBinControl::canChangeProperty(PropertyChangeType changeType, QCamera: Q_UNUSED(status); switch (changeType) { + case QCameraControl::Viewfinder: + return true; case QCameraControl::CaptureMode: case QCameraControl::ImageEncodingSettings: case QCameraControl::VideoEncodingSettings: - case QCameraControl::Viewfinder: - return true; + case QCameraControl::ViewfinderSettings: default: - return false; + return status != QCamera::ActiveStatus; } } |