summaryrefslogtreecommitdiffstats
path: root/src/imports/multimedia/qdeclarativecamera.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/imports/multimedia/qdeclarativecamera.cpp')
-rw-r--r--src/imports/multimedia/qdeclarativecamera.cpp1342
1 files changed, 1342 insertions, 0 deletions
diff --git a/src/imports/multimedia/qdeclarativecamera.cpp b/src/imports/multimedia/qdeclarativecamera.cpp
new file mode 100644
index 000000000..08562dd76
--- /dev/null
+++ b/src/imports/multimedia/qdeclarativecamera.cpp
@@ -0,0 +1,1342 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qdeclarativecamera_p.h"
+#include "qdeclarativecamerapreviewprovider_p.h"
+
+#include <qmediaplayercontrol.h>
+#include <qmediaservice.h>
+#include <private/qpaintervideosurface_p.h>
+#include <qvideorenderercontrol.h>
+#include <QtDeclarative/qdeclarativeinfo.h>
+
+#include <QtCore/QTimer>
+#include <QtGui/qevent.h>
+
+
+QT_BEGIN_NAMESPACE
+
+class FocusZoneItem : public QGraphicsItem {
+public:
+ FocusZoneItem(const QCameraFocusZone & zone, const QColor &color, QGraphicsItem *parent = 0)
+ :QGraphicsItem(parent),m_zone(zone), m_color(color)
+ {}
+
+ virtual ~FocusZoneItem() {}
+ void paint(QPainter *painter,
+ const QStyleOptionGraphicsItem *option,
+ QWidget *widget = 0)
+ {
+ Q_UNUSED(widget);
+ Q_UNUSED(option);
+
+ painter->setPen(QPen(QBrush(m_color), 2.5));
+ QRectF r = boundingRect();
+ QPointF dw(r.width()/10, 0);
+ QPointF dh(0, r.width()/10);
+
+ painter->drawLine(r.topLeft(), r.topLeft()+dw);
+ painter->drawLine(r.topLeft(), r.topLeft()+dh);
+
+ painter->drawLine(r.topRight(), r.topRight()-dw);
+ painter->drawLine(r.topRight(), r.topRight()+dh);
+
+ painter->drawLine(r.bottomLeft(), r.bottomLeft()+dw);
+ painter->drawLine(r.bottomLeft(), r.bottomLeft()-dh);
+
+ painter->drawLine(r.bottomRight(), r.bottomRight()-dw);
+ painter->drawLine(r.bottomRight(), r.bottomRight()-dh);
+ }
+
+ QRectF boundingRect() const {
+ if (!parentItem())
+ return QRectF();
+
+ QRectF p = parentItem()->boundingRect();
+ QRectF zone = m_zone.area();
+
+ return QRectF(p.left() + zone.left()*p.width(),
+ p.top() + zone.top()*p.height(),
+ p.width()*zone.width(),
+ p.height()*zone.height());
+ }
+
+
+ QCameraFocusZone m_zone;
+ QColor m_color;
+};
+
+
+void QDeclarativeCamera::_q_nativeSizeChanged(const QSizeF &size)
+{
+ setImplicitWidth(size.width());
+ setImplicitHeight(size.height());
+}
+
+void QDeclarativeCamera::_q_error(int errorCode, const QString &errorString)
+{
+ emit error(Error(errorCode), errorString);
+ emit errorChanged();
+}
+
+void QDeclarativeCamera::_q_imageCaptured(int id, const QImage &preview)
+{
+ m_capturedImagePreview = preview;
+ QString previewId = QString("preview_%1").arg(id);
+ QDeclarativeCameraPreviewProvider::registerPreview(previewId, preview);
+
+ emit imageCaptured(QLatin1String("image://camera/")+previewId);
+}
+
+void QDeclarativeCamera::_q_imageSaved(int id, const QString &fileName)
+{
+ Q_UNUSED(id);
+ m_capturedImagePath = fileName;
+ emit imageSaved(fileName);
+}
+
+void QDeclarativeCamera::_q_updateState(QCamera::State state)
+{
+ emit cameraStateChanged(QDeclarativeCamera::State(state));
+}
+
+void QDeclarativeCamera::_q_updateLockStatus(QCamera::LockType type,
+ QCamera::LockStatus status,
+ QCamera::LockChangeReason reason)
+{
+ if (type == QCamera::LockFocus) {
+ if (status == QCamera::Unlocked && reason == QCamera::LockFailed) {
+ //display failed focus points in red for 1 second
+ m_focusFailedTime = QTime::currentTime();
+ QTimer::singleShot(1000, this, SLOT(_q_updateFocusZones()));
+ } else {
+ m_focusFailedTime = QTime();
+ }
+ _q_updateFocusZones();
+ }
+}
+
+void QDeclarativeCamera::_q_updateFocusZones()
+{
+ qDeleteAll(m_focusZones);
+ m_focusZones.clear();
+
+ foreach(const QCameraFocusZone &zone, m_camera->focus()->focusZones()) {
+ QColor c;
+ QCamera::LockStatus lockStatus = m_camera->lockStatus(QCamera::LockFocus);
+
+ if (lockStatus == QCamera::Unlocked) {
+ //display failed focus points in red for 1 second
+ if (zone.status() == QCameraFocusZone::Selected &&
+ m_focusFailedTime.msecsTo(QTime::currentTime()) < 500) {
+ c = Qt::red;
+ }
+ } else {
+ switch (zone.status()) {
+ case QCameraFocusZone::Focused:
+ c = Qt::green;
+ break;
+ case QCameraFocusZone::Selected:
+ c = lockStatus == QCamera::Searching ? Qt::yellow : Qt::black;
+ break;
+ default:
+ c= QColor::Invalid;
+ break;
+ }
+ }
+
+ if (c.isValid())
+ m_focusZones.append(new FocusZoneItem(zone, c, m_viewfinderItem));
+ }
+}
+
+void QDeclarativeCamera::_q_updateImageSettings()
+{
+ if (m_imageSettingsChanged) {
+ m_imageSettingsChanged = false;
+ m_capture->setEncodingSettings(m_imageSettings);
+ }
+}
+
+void QDeclarativeCamera::_q_applyPendingState()
+{
+ if (!m_isStateSet) {
+ m_isStateSet = true;
+ setCameraState(m_pendingState);
+ }
+}
+
+void QDeclarativeCamera::_q_captureFailed(int id, QCameraImageCapture::Error error, const QString &message)
+{
+ Q_UNUSED(id);
+ Q_UNUSED(error);
+ emit captureFailed(message);
+}
+
+
+/*!
+ \qmlclass Camera QDeclarativeCamera
+ \since 4.7
+ \brief The Camera element allows you to add camera viewfinder to a scene.
+ \ingroup qml-multimedia
+ \inherits Item
+
+ This element is part of the \bold{QtMultimediaKit 1.1} module.
+
+ \qml
+ import Qt 4.7
+ import QtMultimediaKit 1.1
+
+ Camera {
+ focus : visible // to receive focus and capture key events when visible
+
+ flashMode: Camera.FlashRedEyeReduction
+ whiteBalanceMode: Camera.WhiteBalanceFlash
+ exposureCompensation: -1.0
+
+ onImageCaptured : {
+ photoPreview.source = preview // Show the preview in an Image element
+ }
+
+ }
+ \endqml
+
+ You can use the \c Camera element to capture images from a camera, and manipulate the capture and
+ processing settings that get applied to the image.
+
+ \note On Symbian, your process requires the \c UserEnvironment capability to use this element.
+*/
+
+/*!
+ \class QDeclarativeCamera
+ \brief The QDeclarativeCamera class provides a camera item that you can add to a QDeclarativeView.
+*/
+
+/*!
+ Construct a declarative camera object using \a parent object.
+ */
+QDeclarativeCamera::QDeclarativeCamera(QDeclarativeItem *parent) :
+ QDeclarativeItem(parent),
+ m_camera(0),
+ m_viewfinderItem(0),
+ m_imageSettingsChanged(false),
+ m_pendingState(ActiveState),
+ m_isStateSet(false),
+ m_isValid(true)
+{
+#if defined(Q_OS_SYMBIAN)
+ RProcess thisProcess;
+ if (!thisProcess.HasCapability(ECapabilityUserEnvironment)) {
+ qmlInfo(this) << "Camera Element requires UserEnvironment Capability to be successfully used on Symbian";
+ m_isValid = false;
+ return;
+ }
+#endif
+ m_camera = new QCamera(this);
+ m_viewfinderItem = new QGraphicsVideoItem(this);
+ m_camera->setViewfinder(m_viewfinderItem);
+ m_exposure = m_camera->exposure();
+ m_focus = m_camera->focus();
+
+ connect(m_viewfinderItem, SIGNAL(nativeSizeChanged(QSizeF)),
+ this, SLOT(_q_nativeSizeChanged(QSizeF)));
+
+ connect(m_camera, SIGNAL(lockStatusChanged(QCamera::LockStatus,QCamera::LockChangeReason)), this, SIGNAL(lockStatusChanged()));
+ connect(m_camera, SIGNAL(stateChanged(QCamera::State)), this, SLOT(_q_updateState(QCamera::State)));
+
+ m_capture = new QCameraImageCapture(m_camera, this);
+
+ connect(m_capture, SIGNAL(imageCaptured(int,QImage)), this, SLOT(_q_imageCaptured(int, QImage)));
+ connect(m_capture, SIGNAL(imageSaved(int,QString)), this, SLOT(_q_imageSaved(int, QString)));
+ connect(m_capture, SIGNAL(error(int,QCameraImageCapture::Error,QString)),
+ this, SLOT(_q_captureFailed(int,QCameraImageCapture::Error,QString)));
+
+ connect(m_focus, SIGNAL(focusZonesChanged()), this, SLOT(_q_updateFocusZones()));
+ connect(m_camera, SIGNAL(lockStatusChanged(QCamera::LockType,QCamera::LockStatus,QCamera::LockChangeReason)),
+ this, SLOT(_q_updateLockStatus(QCamera::LockType,QCamera::LockStatus,QCamera::LockChangeReason)));
+
+ connect(m_exposure, SIGNAL(isoSensitivityChanged(int)), this, SIGNAL(isoSensitivityChanged(int)));
+ connect(m_exposure, SIGNAL(apertureChanged(qreal)), this, SIGNAL(apertureChanged(qreal)));
+ connect(m_exposure, SIGNAL(shutterSpeedChanged(qreal)), this, SIGNAL(shutterSpeedChanged(qreal)));
+
+ //connect(m_exposure, SIGNAL(exposureCompensationChanged(qreal)), this, SIGNAL(exposureCompensationChanged(qreal)));
+
+ connect(m_focus, SIGNAL(opticalZoomChanged(qreal)), this, SIGNAL(opticalZoomChanged(qreal)));
+ connect(m_focus, SIGNAL(digitalZoomChanged(qreal)), this, SIGNAL(digitalZoomChanged(qreal)));
+ connect(m_focus, SIGNAL(maximumOpticalZoomChanged(qreal)), this, SIGNAL(maximumOpticalZoomChanged(qreal)));
+ connect(m_focus, SIGNAL(maximumDigitalZoomChanged(qreal)), this, SIGNAL(maximumDigitalZoomChanged(qreal)));
+
+ //delayed start to evoid stopping the cammera immediately if
+ //stop() is called after constructor,
+ //or to set the rest of camera settings before starting the camera
+ QMetaObject::invokeMethod(this, "_q_applyPendingState", Qt::QueuedConnection);
+
+}
+
+/*! Destructor, clean up memory */
+QDeclarativeCamera::~QDeclarativeCamera()
+{
+ if (m_isValid) {
+ m_camera->unload();
+
+ delete m_viewfinderItem;
+ delete m_capture;
+ delete m_camera;
+ }
+}
+
+/*!
+ Returns any camera error.
+ \sa QDeclarativeError::Error
+*/
+QDeclarativeCamera::Error QDeclarativeCamera::error() const
+{
+ if (!m_isValid)
+ return QDeclarativeCamera::CameraError;
+
+ return QDeclarativeCamera::Error(m_camera->error());
+}
+
+/*!
+ \qmlproperty string Camera::errorString
+
+ A description of the current error, if any.
+*/
+/*!
+ \property QDeclarativeCamera::errorString
+
+ A description of the current error, if any.
+*/
+QString QDeclarativeCamera::errorString() const
+{
+ if (!m_isValid)
+ return QString();
+
+ return m_camera->errorString();
+}
+
+/*!
+ \qmlproperty enumeration Camera::cameraState
+
+ The current state of the camera object.
+
+ \table
+ \header \o Value \o Description
+ \row \o UnloadedState
+ \o The initial camera state, with camera not loaded,
+ the camera capabilities except of supported capture modes
+ are unknown.
+ While the supported settings are unknown in this state,
+ it's allowed to set the camera capture settings like codec,
+ resolution, or frame rate.
+
+ \row \o LoadedState
+ \o The camera is loaded and ready to be configured.
+
+ In the Idle state it's allowed to query camera capabilities,
+ set capture resolution, codecs, etc.
+
+ The viewfinder is not active in the loaded state.
+
+ \row \o ActiveState
+ \o In the active state as soon as camera is started
+ the viewfinder displays video frames and the
+ camera is ready for capture.
+ \endtable
+*/
+/*!
+ \property QDeclarativeCamera::cameraState
+
+ The current state of the camera object.
+
+ \table
+ \header \o Value \o Description
+ \row \o UnloadedState
+ \o The initial camera state, with camera not loaded,
+ the camera capabilities except of supported capture modes
+ are unknown.
+ While the supported settings are unknown in this state,
+ it's allowed to set the camera capture settings like codec,
+ resolution, or frame rate.
+
+ \row \o LoadedState
+ \o The camera is loaded and ready to be configured.
+
+ In the Idle state it's allowed to query camera capabilities,
+ set capture resolution, codecs, etc.
+
+ The viewfinder is not active in the loaded state.
+
+ \row \o ActiveState
+ \o In the active state as soon as camera is started
+ the viewfinder displays video frames and the
+ camera is ready for capture.
+ \endtable
+*/
+/*!
+ \enum QDeclarativeCamera::State
+ \value UnloadedState
+ The initial camera state, with camera not loaded,
+ the camera capabilities except of supported capture modes
+ are unknown.
+ While the supported settings are unknown in this state,
+ it's allowed to set the camera capture settings like codec,
+ resolution, or frame rate.
+
+ \value LoadedState
+ The camera is loaded and ready to be configured.
+ In the Idle state it's allowed to query camera capabilities,
+ set capture resolution, codecs, etc.
+ The viewfinder is not active in the loaded state.
+
+ \value ActiveState
+ In the active state as soon as camera is started
+ the viewfinder displays video frames and the
+ camera is ready for capture.
+
+
+ The default camera state is ActiveState.
+*/
+
+QDeclarativeCamera::State QDeclarativeCamera::cameraState() const
+{
+ if (!m_isValid)
+ return QDeclarativeCamera::UnloadedState;
+
+ return m_isStateSet ? QDeclarativeCamera::State(m_camera->state()) : m_pendingState;
+}
+
+void QDeclarativeCamera::setCameraState(QDeclarativeCamera::State state)
+{
+ if (!m_isValid)
+ return;
+
+ if (!m_isStateSet) {
+ m_pendingState = state;
+ return;
+ }
+
+ switch (state) {
+ case QDeclarativeCamera::ActiveState:
+ m_camera->start();
+ break;
+ case QDeclarativeCamera::UnloadedState:
+ m_camera->unload();
+ break;
+ case QDeclarativeCamera::LoadedState:
+ m_camera->load();
+ break;
+ }
+}
+
+/*!
+ \qmlmethod Camera::start()
+ \fn QDeclarativeCamera::start()
+
+ Starts the camera.
+*/
+void QDeclarativeCamera::start()
+{
+ if (m_isValid)
+ m_camera->start();
+}
+
+/*!
+ \qmlmethod Camera::stop()
+ \fn QDeclarativeCamera::stop()
+
+ Stops the camera.
+*/
+void QDeclarativeCamera::stop()
+{
+ if (m_isValid)
+ m_camera->stop();
+}
+
+
+/*!
+ \qmlproperty enumeration Camera::lockStatus
+
+ The overall status for all the requested camera locks.
+
+ \table
+ \header \o Value \o Description
+ \row \o Unlocked
+ \o The application is not interested in camera settings value.
+ The camera may keep this parameter without changes, this is common with camera focus,
+ or adjust exposure and white balance constantly to keep the viewfinder image nice.
+
+ \row \o Searching
+ \o The application has requested the camera focus, exposure or white balance lock with
+ searchAndLock(). This state indicates the camera is focusing or calculating exposure and white balance.
+
+ \row \o Locked
+ \o The camera focus, exposure or white balance is locked.
+ The camera is ready to capture, application may check the exposure parameters.
+
+ The locked state usually means the requested parameter stays the same,
+ except in the cases when the parameter is requested to be constantly updated.
+ For example in continuous focusing mode, the focus is considered locked as long
+ and the object is in focus, even while the actual focusing distance may be constantly changing.
+ \endtable
+*/
+/*!
+ \property QDeclarativeCamera::lockStatus
+
+ The overall status for all the requested camera locks.
+
+ \table
+ \header \o Value \o Description
+ \row \o Unlocked
+ \o The application is not interested in camera settings value.
+ The camera may keep this parameter without changes, this is common with camera focus,
+ or adjust exposure and white balance constantly to keep the viewfinder image nice.
+
+ \row \o Searching
+ \o The application has requested the camera focus, exposure or white balance lock with
+ searchAndLock(). This state indicates the camera is focusing or calculating exposure and white balance.
+
+ \row \o Locked
+ \o The camera focus, exposure or white balance is locked.
+ The camera is ready to capture, application may check the exposure parameters.
+
+ The locked state usually means the requested parameter stays the same,
+ except in the cases when the parameter is requested to be constantly updated.
+ For example in continuous focusing mode, the focus is considered locked as long
+ and the object is in focus, even while the actual focusing distance may be constantly changing.
+ \endtable
+*/
+/*!
+ \enum QDeclarativeCamera::LockStatus
+ \value Unlocked
+ The application is not interested in camera settings value.
+ The camera may keep this parameter without changes, this is common with camera focus,
+ or adjust exposure and white balance constantly to keep the viewfinder image nice.
+
+ \value Searching
+ The application has requested the camera focus, exposure or white balance lock with
+ searchAndLock(). This state indicates the camera is focusing or calculating exposure and white balance.
+
+ \value Locked
+ The camera focus, exposure or white balance is locked.
+ The camera is ready to capture, application may check the exposure parameters.
+
+ The locked state usually means the requested parameter stays the same,
+ except in the cases when the parameter is requested to be constantly updated.
+ For example in continuous focusing mode, the focus is considered locked as long
+ and the object is in focus, even while the actual focusing distance may be constantly changing.
+*/
+QDeclarativeCamera::LockStatus QDeclarativeCamera::lockStatus() const
+{
+ if (!m_isValid)
+ return QDeclarativeCamera::Unlocked;
+
+ return QDeclarativeCamera::LockStatus(m_camera->lockStatus());
+}
+
+/*!
+ \qmlmethod Camera::searchAndLock()
+ \fn QDeclarativeCamera::searchAndLock()
+
+ Start focusing, exposure and white balance calculation.
+ If the camera has keyboard focus, searchAndLock() is called
+ automatically when the camera focus button is pressed.
+*/
+void QDeclarativeCamera::searchAndLock()
+{
+ if (m_isValid)
+ m_camera->searchAndLock();
+}
+
+/*!
+ \qmlmethod Camera::unlock()
+ \fn QDeclarativeCamera::unlock()
+
+ Unlock focus.
+
+ If the camera has keyboard focus, unlock() is called automatically
+ when the camera focus button is released.
+ */
+void QDeclarativeCamera::unlock()
+{
+ if (m_isValid)
+ m_camera->unlock();
+}
+
+/*!
+ \qmlmethod Camera::captureImage()
+ \fn QDeclarativeCamera::captureImage()
+
+ Start image capture. The \l onImageCaptured() and \l onImageSaved() signals will
+ be emitted when the capture is complete.
+*/
+void QDeclarativeCamera::captureImage()
+{
+ if (m_isValid)
+ m_capture->capture();
+}
+
+// XXX this doesn't seem to be used
+/*!
+ \fn QDeclarativeCamera::capturedImagePreview() const
+*/
+QImage QDeclarativeCamera::capturedImagePreview() const
+{
+ return m_capturedImagePreview;
+}
+
+/*!
+ \qmlproperty string Camera::capturedImagePath
+
+ The path to the captured image.
+*/
+/*!
+ \property QDeclarativeCamera::capturedImagePath
+
+ The path to the captured image.
+*/
+QString QDeclarativeCamera::capturedImagePath() const
+{
+ return m_capturedImagePath;
+}
+
+/*!
+ Paint method.
+*/
+void QDeclarativeCamera::paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *)
+{
+}
+
+/*!
+ Change viewfinder size to \a newGeometry and returning the \a oldGeometry
+*/
+void QDeclarativeCamera::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
+{
+ m_viewfinderItem->setSize(newGeometry.size());
+ _q_updateFocusZones();
+
+ QDeclarativeItem::geometryChanged(newGeometry, oldGeometry);
+}
+
+void QDeclarativeCamera::keyPressEvent(QKeyEvent * event)
+{
+ if (!m_isValid || event->isAutoRepeat())
+ return;
+
+ switch (event->key()) {
+ case Qt::Key_CameraFocus:
+ m_camera->searchAndLock();
+ event->accept();
+ break;
+ case Qt::Key_Camera:
+ if (m_camera->captureMode() == QCamera::CaptureStillImage)
+ captureImage();
+ //else
+ // m_recorder->record();
+ event->accept();
+ break;
+ default:
+ QDeclarativeItem::keyPressEvent(event);
+ }
+}
+
+/*!
+ Handle the release of a key in \a event and take action if needed.
+*/
+void QDeclarativeCamera::keyReleaseEvent(QKeyEvent * event)
+{
+ if (!m_isValid || event->isAutoRepeat())
+ return;
+
+ switch (event->key()) {
+ case Qt::Key_CameraFocus:
+ m_camera->unlock();
+ event->accept();
+ break;
+ case Qt::Key_Camera:
+ //if (m_camera->captureMode() == QCamera::CaptureVideo)
+ // m_recorder->stop();
+ event->accept();
+ break;
+ default:
+ QDeclarativeItem::keyReleaseEvent(event);
+ }
+}
+
+
+/*!
+ \qmlproperty enumeration Camera::flashMode
+
+ \table
+ \header \o Value \o Description
+ \row \o FlashOff \o Flash is Off.
+ \row \o FlashOn \o Flash is On.
+ \row \o FlashAuto \o Automatic flash.
+ \row \o FlashRedEyeReduction \o Red eye reduction flash.
+ \row \o FlashFill \o Use flash to fillin shadows.
+ \row \o FlashTorch \o Constant light source, useful for focusing and video capture.
+ \row \o FlashSlowSyncFrontCurtain
+ \o Use the flash in conjunction with a slow shutter speed.
+ This mode allows better exposure of distant objects and/or motion blur effect.
+ \row \o FlashSlowSyncRearCurtain
+ \o The similar mode to FlashSlowSyncFrontCurtain but flash is fired at the end of exposure.
+ \row \o FlashManual \o Flash power is manually set.
+ \endtable
+
+*/
+/*!
+ \property QDeclarativeCamera::flashMode
+
+ \table
+ \header \o Value \o Description
+ \row \o FlashOff \o Flash is Off.
+ \row \o FlashOn \o Flash is On.
+ \row \o FlashAuto \o Automatic flash.
+ \row \o FlashRedEyeReduction \o Red eye reduction flash.
+ \row \o FlashFill \o Use flash to fillin shadows.
+ \row \o FlashTorch \o Constant light source, useful for focusing and video capture.
+ \row \o FlashSlowSyncFrontCurtain
+ \o Use the flash in conjunction with a slow shutter speed.
+ This mode allows better exposure of distant objects and/or motion blur effect.
+ \row \o FlashSlowSyncRearCurtain
+ \o The similar mode to FlashSlowSyncFrontCurtain but flash is fired at the end of exposure.
+ \row \o FlashManual \o Flash power is manually set.
+ \endtable
+
+*/
+/*!
+ \enum QDeclarativeCamera::FlashMode
+ \value FlashOff Flash is Off.
+ \value FlashOn Flash is On.
+ \value FlashAuto Automatic flash.
+ \value FlashRedEyeReduction Red eye reduction flash.
+ \value FlashFill Use flash to fillin shadows.
+ \value FlashTorch Constant light source, useful for focusing and video capture.
+ \value FlashSlowSyncFrontCurtain
+ Use the flash in conjunction with a slow shutter speed.
+ This mode allows better exposure of distant objects and/or motion blur effect.
+ \value FlashSlowSyncRearCurtain
+ The similar mode to FlashSlowSyncFrontCurtain but flash is fired at the end of exposure.
+ \value FlashManual Flash power is manually set.
+
+*/
+int QDeclarativeCamera::flashMode() const
+{
+ if (!m_isValid)
+ return 0;
+
+ return m_exposure->flashMode();
+}
+
+void QDeclarativeCamera::setFlashMode(int mode)
+{
+ if (m_isValid && m_exposure->flashMode() != mode) {
+ m_exposure->setFlashMode(QCameraExposure::FlashModes(mode));
+ emit flashModeChanged(mode);
+ }
+}
+
+/*!
+ \qmlproperty real Camera::exposureCompensation
+
+ Adjustment for the automatically calculated exposure. The value is
+ in EV units.
+ */
+/*!
+ \property QDeclarativeCamera::exposureCompensation
+
+ Adjustment for the automatically calculated exposure. The value is
+ in EV units.
+ */
+qreal QDeclarativeCamera::exposureCompensation() const
+{
+ if (!m_isValid)
+ return 0.0;
+
+ return m_exposure->exposureCompensation();
+}
+
+void QDeclarativeCamera::setExposureCompensation(qreal ev)
+{
+ if (m_isValid)
+ m_exposure->setExposureCompensation(ev);
+}
+
+/*!
+ \qmlproperty real Camera::isoSensitivity
+
+ The sensor's ISO sensitivity.
+ */
+/*!
+ \property QDeclarativeCamera::iso
+
+ The sensor's ISO sensitivity.
+ */
+int QDeclarativeCamera::isoSensitivity() const
+{
+ if (!m_isValid)
+ return 0;
+
+ return m_exposure->isoSensitivity();
+}
+
+void QDeclarativeCamera::setManualIsoSensitivity(int iso)
+{
+ if (!m_isValid)
+ return;
+
+ m_exposure->setManualIsoSensitivity(iso);
+}
+
+/*!
+ \qmlproperty real Camera::shutterSpeed
+
+ The camera's shutter speed, in seconds.
+*/
+/*!
+ \property QDeclarativeCamera::shutterSpeed
+
+ The camera's shutter speed, in seconds.
+*/
+qreal QDeclarativeCamera::shutterSpeed() const
+{
+ if (!m_isValid)
+ return 0.0;
+
+ return m_exposure->shutterSpeed();
+}
+
+/*!
+ \qmlproperty real Camera::aperture
+
+ The lens aperture as an F number (the ratio of the focal length to effective aperture diameter).
+*/
+/*!
+ \property QDeclarativeCamera::aperture
+
+ The lens aperture as an F number (the ratio of the focal length to effective aperture diameter).
+*/
+qreal QDeclarativeCamera::aperture() const
+{
+ if (!m_isValid)
+ return 0.0;
+
+ return m_exposure->aperture();
+}
+
+/*!
+ \qmlproperty enumeration Camera::exposureMode
+
+ \table
+ \header \o Value \o Description
+ \row \o ExposureManual \o Manual mode.
+ \row \o ExposureAuto \o Automatic mode.
+ \row \o ExposureNight \o Night mode.
+ \row \o ExposureBacklight \o Backlight exposure mode.
+ \row \o ExposureSpotlight \o Spotlight exposure mode.
+ \row \o ExposureSports \o Spots exposure mode.
+ \row \o ExposureSnow \o Snow exposure mode.
+ \row \o ExposureBeach \o Beach exposure mode.
+ \row \o ExposureLargeAperture \o Use larger aperture with small depth of field.
+ \row \o ExposureSmallAperture \o Use smaller aperture.
+ \row \o ExposurePortrait \o Portrait exposure mode.
+ \row \o ExposureModeVendor \o The base value for device specific exposure modes.
+ \endtable
+
+*/
+/*!
+ \enum QDeclarativeCamera::ExposureMode
+ \value ExposureManual Manual mode.
+ \value ExposureAuto Automatic mode.
+ \value ExposureNight Night mode.
+ \value ExposureBacklight Backlight exposure mode.
+ \value ExposureSpotlight Spotlight exposure mode.
+ \value ExposureSports Spots exposure mode.
+ \value ExposureSnow Snow exposure mode.
+ \value ExposureBeach Beach exposure mode.
+ \value ExposureLargeAperture Use larger aperture with small depth of field.
+ \value ExposureSmallAperture Use smaller aperture.
+ \value ExposurePortrait Portrait exposure mode.
+ \value ExposureModeVendor The base value for device specific exposure modes.
+
+*/
+/*!
+ \property QDeclarativeCamera::exposureMode
+
+ Camera exposure modes.
+*/
+QDeclarativeCamera::ExposureMode QDeclarativeCamera::exposureMode() const
+{
+ if (!m_isValid)
+ return QDeclarativeCamera::ExposureAuto;
+
+ return ExposureMode(m_exposure->exposureMode());
+}
+
+void QDeclarativeCamera::setExposureMode(QDeclarativeCamera::ExposureMode mode)
+{
+ if (!m_isValid)
+ return;
+
+ if (exposureMode() != mode) {
+ m_exposure->setExposureMode(QCameraExposure::ExposureMode(mode));
+ emit exposureModeChanged(exposureMode());
+ }
+}
+
+/*!
+ \qmlproperty size Camera::captureResolution
+
+ The resolution to capture the image at. If empty, the system will pick
+ a good size.
+*/
+/*!
+ \property QDeclarativeCamera::captureResolution
+
+ The resolution to capture the image at. If empty, the system will pick
+ a good size.
+*/
+QSize QDeclarativeCamera::captureResolution() const
+{
+ if (!m_isValid)
+ return QSize();
+
+ return m_imageSettings.resolution();
+}
+
+void QDeclarativeCamera::setCaptureResolution(const QSize &resolution)
+{
+ if (m_isValid && m_imageSettings.resolution() != resolution) {
+ m_imageSettings.setResolution(resolution);
+
+ if (!m_imageSettingsChanged) {
+ m_imageSettingsChanged = true;
+ QMetaObject::invokeMethod(this, "_q_updateImageSettings", Qt::QueuedConnection);
+ }
+
+ emit captureResolutionChanged(resolution);
+ }
+}
+
+/*!
+ \qmlproperty real Camera::maximumOpticalZoom
+
+ The maximum optical zoom factor, or 1.0 if optical zoom is not supported.
+*/
+/*!
+ \property QDeclarativeCamera::maximumOpticalZoom
+
+ The maximum optical zoom factor, or 1.0 if optical zoom is not supported.
+*/
+qreal QDeclarativeCamera::maximumOpticalZoom() const
+{
+ if (!m_isValid)
+ return 0.0;
+
+ return m_focus->maximumOpticalZoom();
+}
+
+/*!
+ \qmlproperty real Camera::maximumDigitalZoom
+
+ The maximum digital zoom factor, or 1.0 if digital zoom is not supported.
+*/
+/*!
+ \property QDeclarativeCamera::maximumDigitalZoom
+
+ The maximum digital zoom factor, or 1.0 if digital zoom is not supported.
+*/
+qreal QDeclarativeCamera::maximumDigitalZoom() const
+{
+ if (!m_isValid)
+ return 0.0;
+
+ return m_focus->maximumDigitalZoom();
+}
+
+/*!
+ \qmlproperty real Camera::opticalZoom
+
+ The current optical zoom factor.
+*/
+/*!
+ \property QDeclarativeCamera::opticalZoom
+
+ The current optical zoom factor.
+*/
+qreal QDeclarativeCamera::opticalZoom() const
+{
+ if (!m_isValid)
+ return 0.0;
+
+ return m_focus->opticalZoom();
+}
+
+void QDeclarativeCamera::setOpticalZoom(qreal value)
+{
+ if (m_isValid)
+ m_focus->zoomTo(value, digitalZoom());
+}
+
+/*!
+ \qmlproperty real Camera::digitalZoom
+
+ The current digital zoom factor.
+*/
+/*!
+ \property QDeclarativeCamera::digitalZoom
+
+ The current digital zoom factor.
+*/
+qreal QDeclarativeCamera::digitalZoom() const
+{
+ if (!m_isValid)
+ return 0.0;
+
+ return m_focus->digitalZoom();
+}
+
+void QDeclarativeCamera::setDigitalZoom(qreal value)
+{
+ if (m_isValid)
+ m_focus->zoomTo(opticalZoom(), value);
+}
+
+/*!
+ \enum QDeclarativeCamera::WhiteBalanceMode
+ \value WhiteBalanceManual Manual white balance. In this mode the manual white balance property value is used.
+ \value WhiteBalanceAuto Auto white balance mode.
+ \value WhiteBalanceSunlight Sunlight white balance mode.
+ \value WhiteBalanceCloudy Cloudy white balance mode.
+ \value WhiteBalanceShade Shade white balance mode.
+ \value WhiteBalanceTungsten Tungsten white balance mode.
+ \value WhiteBalanceFluorescent Fluorescent white balance mode.
+ \value WhiteBalanceIncandescent Incandescent white balance mode.
+ \value WhiteBalanceFlash Flash white balance mode.
+ \value WhiteBalanceSunset Sunset white balance mode.
+ \value WhiteBalanceVendor Vendor defined white balance mode.
+*/
+/*!
+ \qmlproperty enumeration Camera::whiteBalanceMode
+
+ \table
+ \header \o Value \o Description
+ \row \o WhiteBalanceManual \o Manual white balance. In this mode the manual white balance property value is used.
+ \row \o WhiteBalanceAuto \o Auto white balance mode.
+ \row \o WhiteBalanceSunlight \o Sunlight white balance mode.
+ \row \o WhiteBalanceCloudy \o Cloudy white balance mode.
+ \row \o WhiteBalanceShade \o Shade white balance mode.
+ \row \o WhiteBalanceTungsten \o Tungsten white balance mode.
+ \row \o WhiteBalanceFluorescent \o Fluorescent white balance mode.
+ \row \o WhiteBalanceIncandescent \o Incandescent white balance mode.
+ \row \o WhiteBalanceFlash \o Flash white balance mode.
+ \row \o WhiteBalanceSunset \o Sunset white balance mode.
+ \row \o WhiteBalanceVendor \o Vendor defined white balance mode.
+ \endtable
+
+ \sa manualWhiteBalance
+*/
+/*!
+ \property QDeclarativeCamera::whiteBalanceMode
+
+ \sa WhiteBalanceMode
+*/
+QDeclarativeCamera::WhiteBalanceMode QDeclarativeCamera::whiteBalanceMode() const
+{
+ if (!m_isValid)
+ return QDeclarativeCamera::WhiteBalanceAuto;
+
+ return WhiteBalanceMode(m_camera->imageProcessing()->whiteBalanceMode());
+}
+
+void QDeclarativeCamera::setWhiteBalanceMode(QDeclarativeCamera::WhiteBalanceMode mode) const
+{
+ if (m_isValid && whiteBalanceMode() != mode) {
+ m_camera->imageProcessing()->setWhiteBalanceMode(QCameraImageProcessing::WhiteBalanceMode(mode));
+ emit whiteBalanceModeChanged(whiteBalanceMode());
+ }
+}
+
+/*!
+ \qmlproperty int Camera::manualWhiteBalance
+
+ The color temperature used when in manual white balance mode (WhiteBalanceManual).
+
+ \sa whiteBalanceMode
+*/
+/*!
+ \property QDeclarativeCamera::manualWhiteBalance
+
+ The color temperature used when in manual white balance mode (WhiteBalanceManual).
+
+ \sa whiteBalanceMode
+*/
+int QDeclarativeCamera::manualWhiteBalance() const
+{
+ if (!m_isValid)
+ return 0;
+
+ return m_camera->imageProcessing()->manualWhiteBalance();
+}
+
+void QDeclarativeCamera::setManualWhiteBalance(int colorTemp) const
+{
+ if (m_isValid && manualWhiteBalance() != colorTemp) {
+ m_camera->imageProcessing()->setManualWhiteBalance(colorTemp);
+ emit manualWhiteBalanceChanged(manualWhiteBalance());
+ }
+}
+
+/*!
+ \qmlsignal Camera::onError(error, errorString)
+
+
+ This handler is called when an error occurs. The enumeration value \a error is one of the
+ values defined below, and a descriptive string value is available in \a errorString.
+
+ \table
+ \header \o Value \o Description
+ \row \o NoError \o No errors have occurred.
+ \row \o CameraError \o An error has occurred.
+ \row \o InvalidRequestError \o System resource doesn't support requested functionality.
+ \row \o ServiceMissingError \o No camera service available.
+ \row \o NotSupportedFeatureError \o The feature is not supported.
+ \endtable
+*/
+/*!
+ \qmlsignal Camera::onError(error, errorString)
+
+
+ This handler is called when an error occurs. The enumeration value \a error is one of the
+ values defined below, and a descriptive string value is available in \a errorString.
+*/
+/*!
+ \enum QDeclarativeCamera::Error
+ \value NoError No errors have occurred.
+ \value CameraError An error has occurred.
+ \value InvalidRequestError System resource doesn't support requested functionality.
+ \value ServiceMissingError No camera service available.
+ \value NotSupportedFeatureError The feature is not supported.
+*/
+
+
+/*!
+ \qmlsignal Camera::onCaptureFailed(message)
+
+ This handler is called when an error occurs during capture. A descriptive message is available in \a message.
+*/
+/*!
+ \fn QDeclarativeCamera::captureFailed(const QString &message)
+
+ This handler is called when an error occurs during capture. A descriptive message is available in \a message.
+*/
+
+/*!
+ \qmlsignal Camera::onImageCaptured(preview)
+
+ This handler is called when an image has been captured but not yet saved to the filesystem. The \a preview
+ parameter can be used as the URL supplied to an Image element.
+
+ \sa onImageSaved
+*/
+/*!
+ \fn QDeclarativeCamera::imageCaptured(const QString &preview)
+
+ This handler is called when an image has been captured but not yet saved to the filesystem. The \a preview
+ parameter can be used as the URL supplied to an Image element.
+
+ \sa imageSaved()
+*/
+
+/*!
+ \qmlsignal Camera::onImageSaved(path)
+
+ This handler is called after the image has been written to the filesystem. The \a path is a local file path, not a URL.
+
+ \sa onImageCaptured
+*/
+/*!
+ \fn QDeclarativeCamera::imageSaved(const QString &path)
+
+ This handler is called after the image has been written to the filesystem. The \a path is a local file path, not a URL.
+
+ \sa imageCaptured()
+*/
+
+
+/*!
+ \fn void QDeclarativeCamera::lockStatusChanged()
+
+ \qmlsignal Camera::lockStatusChanged()
+*/
+
+/*!
+ \fn void QDeclarativeCamera::stateChanged(QDeclarativeCamera::State)
+
+ \qmlsignal Camera::stateChanged(Camera::State)
+*/
+
+/*!
+ \fn void QDeclarativeCamera::imageCaptured(const QString &)
+
+ \qmlsignal Camera::imageCaptured(string)
+*/
+
+/*!
+ \fn void QDeclarativeCamera::imageSaved(const QString &)
+
+ \qmlsignal Camera::imageSaved(string)
+*/
+
+/*!
+ \fn void QDeclarativeCamera::error(QDeclarativeCamera::Error , const QString &)
+
+ \qmlsignal Camera::error(Camera::Error, string)
+*/
+
+/*!
+ \fn void QDeclarativeCamera::errorChanged()
+
+*/
+/*!
+ \qmlsignal Camera::errorChanged()
+*/
+
+/*!
+ \fn void QDeclarativeCamera::isoSensitivityChanged(int)
+*/
+/*!
+ \qmlsignal Camera::isoSensitivityChanged(int)
+*/
+
+/*!
+ \fn void QDeclarativeCamera::apertureChanged(qreal)
+
+ \qmlsignal Camera::apertureChanged(real)
+*/
+
+/*!
+ \fn void QDeclarativeCamera::shutterSpeedChanged(qreal)
+
+*/
+/*!
+ \qmlsignal Camera::shutterSpeedChanged(real)
+*/
+
+/*!
+ \fn void QDeclarativeCamera::exposureCompensationChanged(qreal)
+
+*/
+/*!
+ \qmlsignal Camera::exposureCompensationChanged(real)
+*/
+
+/*!
+ \fn void QDeclarativeCamera:opticalZoomChanged(qreal zoom)
+
+ Optical zoom changed to \a zoom.
+*/
+/*!
+ \qmlsignal Camera::opticalZoomChanged(real)
+*/
+
+/*!
+ \fn void QDeclarativeCamera::digitalZoomChanged(qreal)
+
+ \qmlsignal Camera::digitalZoomChanged(real)
+*/
+
+/*!
+ \fn void QDeclarativeCamera::maximumOpticalZoomChanged(qreal)
+
+ \qmlsignal Camera::maximumOpticalZoomChanged(real)
+*/
+
+/*!
+ \fn void QDeclarativeCamera::maximumDigitalZoomChanged(qreal)
+
+ \qmlsignal Camera::maximumDigitalZoomChanged(real)
+*/
+
+
+/*!
+ \fn void QDeclarativeCamera::exposureModeChanged(QDeclarativeCamera::ExposureMode)
+
+ \qmlsignal Camera::exposureModeChanged(Camera::ExposureMode)
+*/
+
+/*!
+ \fn void QDeclarativeCamera::flashModeChanged(int)
+*/
+/*!
+ \qmlsignal Camera::flashModeChanged(int)
+*/
+
+/*!
+ \fn void QDeclarativeCamera::whiteBalanceModeChanged(QDeclarativeCamera::WhiteBalanceMode) const
+
+*/
+/*!
+ \qmlsignal Camera::whiteBalanceModeChanged(Camera::WhiteBalanceMode)
+*/
+
+/*!
+ \fn void QDeclarativeCamera::manualWhiteBalanceChanged(int) const
+*/
+/*!
+ \qmlsignal Camera::manualWhiteBalanceChanged(int)
+*/
+
+/*!
+ \fn void QDeclarativeCamera::captureResolutionChanged(const QSize &)
+
+ \qmlsignal Camera::captureResolutionChanged(Item)
+*/
+
+/*!
+ \fn QDeclarativeCamera::cameraStateChanged(QDeclarativeCamera::State)
+
+*/
+
+
+QT_END_NAMESPACE
+
+#include "moc_qdeclarativecamera_p.cpp"