Revision control

++ // Copyright (C) 2016 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
++
++ #include "qquickimagecapture_p.h"
++
++ #include <QtCore/qurl.h>
++
++ #include <QtMultimediaQuick/private/qquickimagepreviewprovider_p.h>
++
++ QT_BEGIN_NAMESPACE
++
++ /*!
++ \qmltype ImageCapture
++ \nativetype QQuickImageCapture
++ \brief An interface for capturing camera images.
++ \ingroup multimedia_qml
++ \inqmlmodule QtMultimedia
++ \ingroup camera_qml
++
++ This type allows you to capture still images and be notified when they
++ are available or saved to disk.
++
++ \qml
++ Item {
++ width: 640
++ height: 360
++
++ CaptureSession {
++ imageCapture : ImageCapture {
++ id: imageCapture
++ }
++ camera: Camera {
++ id: camera
++ }
++
++ videoOutput: videoOutput
++ }
++ VideoOutput {
++ id: videoOutput
++ anchors.fill: parent
++
++ MouseArea {
++ anchors.fill: parent;
++ onClicked: imageCapture.capture();
++ }
++ }
++
++ Image {
++ id: photoPreview
++ source: imageCapture.preview // always shows the last captured image
++ }
++ }
++ \endqml
++
++ */
++
++ QQuickImageCapture::QQuickImageCapture(QObject *parent)
++ : QImageCapture(parent)
++ {
++ connect(this, &QImageCapture::imageCaptured, this, &QQuickImageCapture::_q_imageCaptured);
++ }
++
++ QQuickImageCapture::~QQuickImageCapture()
++ {
++ QQuickImagePreviewProvider::cleanupInstance(m_instanceId);
++ }
++
++ /*!
++ \qmlproperty bool QtMultimedia::ImageCapture::readyForCapture
++
++ This property holds a bool value indicating whether the camera
++ is ready to capture photos or not.
++
++ Calling capture() or captureToFile() while \e ready is \c false is not permitted and
++ results in an error.
++ */
++
++ /*!
++ \qmlproperty string QtMultimedia::ImageCapture::preview
++
++ This property holds a url to the latest captured image. It can be connected to the
++ source property of an \l Image element to show the last captured image.
++
++ \qml
++ CaptureSession {
++ camera: Camera {}
++ imageCapture: ImageCapture {
++ id: capture
++ }
++ }
++ Image {
++ source: capture.preview
++ }
++ \endqml
++
++ \sa saveToFile
++ */
++
++ /*!
++ \qmlmethod int QtMultimedia::ImageCapture::capture()
++
++ Start image capture. The \l imageCaptured and \l imageSaved signals will
++ be emitted when the capture is complete.
++
++ The captured image will be available through the preview property that can be
++ used as the source for a QML Image item. The saveToFile() method can then be used
++ save the image.
++
++ Camera saves all the capture parameters like exposure settings or
++ image processing parameters, so changes to camera parameters after
++ capture() is called do not affect previous capture requests.
++
++ capture() returns the capture requestId parameter, used with
++ imageExposed(), imageCaptured(), imageMetadataAvailable() and imageSaved() signals.
++
++ \sa readyForCapture, preview
++ */
++
++ /*!
++ \qmlmethod int QtMultimedia::ImageCapture::captureToFile(location)
++
++ Does the same as capture() but additionally automatically saves the
++ captured image to the specified \a location. Returns the capture
++ requestId parameter.
++
++ \sa capture()
++ */
++
++ QString QQuickImageCapture::preview() const
++ {
++ return m_capturedImagePath;
++ }
++
++ /*!
++ \qmlmethod void QtMultimedia::ImageCapture::saveToFile(location)
++
++ Saves the last captured image to \a location.
++
++ \sa capture, preview
++ */
++ void QQuickImageCapture::saveToFile(const QUrl &location) const
++ {
++ m_lastImage.save(location.toLocalFile());
++ }
++
++ void QQuickImageCapture::_q_imageCaptured(int id, const QImage &preview)
++ {
++ QString previewId =
++ QStringLiteral("preview_%1_%2").arg(m_instanceId.toString(QUuid::Id128)).arg(id);
++ QQuickImagePreviewProvider::registerPreview(m_instanceId, previewId, preview);
++ m_capturedImagePath = QStringLiteral("image://QtMultimediaCameraPreviewImageProvider/%2").arg(previewId);
++ m_lastImage = preview;
++ Q_EMIT previewChanged();
++ }
++
++ /*!
++ \qmlsignal QtMultimedia::ImageCapture::errorOccurred(id, error, errorString)
++
++ This signal is emitted when an error occurs during capture with requested \a id.
++ \a error is an enumeration of type ImageCapture::Error.
++ A descriptive message is available in \a errorString.
++
++ \sa error errorString
++ */
++
++ /*!
++ \qmlsignal QtMultimedia::ImageCapture::imageCaptured(requestId, preview)
++
++ This signal is emitted when an image with requested id \a requestId has been captured
++ but not yet saved to the filesystem. The \a preview
++ parameter is the captured image.
++
++ \sa imageSaved, preview
++ */
++
++ /*!
++ \qmlsignal QtMultimedia::ImageCapture::imageSaved(id, fileName)
++
++ This signal is emitted after the image with requested \a id has been written to the filesystem.
++ The \a fileName is a local file path, not a URL.
++
++ \sa imageCaptured
++ */
++
++
++ /*!
++ \qmlsignal QtMultimedia::ImageCapture::imageMetadataAvailable(id, metaData)
++
++ This signal is emitted when the image with requested \a id has new \a metaData.
++
++ \sa imageCaptured
++ */
++
++
++ QT_END_NAMESPACE
++
++ #include "moc_qquickimagecapture_p.cpp"