summaryrefslogtreecommitdiffstats
path: root/src/multimedia/camera/qcameraimagecapture.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/multimedia/camera/qcameraimagecapture.cpp')
-rw-r--r--src/multimedia/camera/qcameraimagecapture.cpp651
1 files changed, 0 insertions, 651 deletions
diff --git a/src/multimedia/camera/qcameraimagecapture.cpp b/src/multimedia/camera/qcameraimagecapture.cpp
deleted file mode 100644
index 7eb67daed..000000000
--- a/src/multimedia/camera/qcameraimagecapture.cpp
+++ /dev/null
@@ -1,651 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include <qcameraimagecapture.h>
-#include <qcameraimagecapturecontrol.h>
-#include <qmediaencodersettings.h>
-#include <qcameracapturedestinationcontrol.h>
-#include <qcameracapturebufferformatcontrol.h>
-
-#include <qimageencodercontrol.h>
-#include "qmediaobject_p.h"
-#include <qmediaservice.h>
-#include <qcamera.h>
-#include <qcameracontrol.h>
-#include <QtCore/qdebug.h>
-#include <QtCore/qurl.h>
-#include <QtCore/qstringlist.h>
-#include <QtCore/qmetaobject.h>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class QCameraImageCapture
- \inmodule QtMultimedia
- \ingroup multimedia
- \ingroup multimedia_camera
-
-
- \brief The QCameraImageCapture class is used for the recording of media content.
-
- The QCameraImageCapture class is a high level images recording class.
- It's not intended to be used alone but for accessing the media
- recording functions of other media objects, like QCamera.
-
- \snippet multimedia-snippets/camera.cpp Camera
-
- \snippet multimedia-snippets/camera.cpp Camera keys
-
- \sa QCamera
-*/
-
-/*!
- \enum QCameraImageCapture::CaptureDestination
-
- \value CaptureToFile Capture the image to a file.
- \value CaptureToBuffer Capture the image to a buffer for further processing.
-*/
-
-static void qRegisterCameraImageCaptureMetaTypes()
-{
- qRegisterMetaType<QCameraImageCapture::Error>("QCameraImageCapture::Error");
- qRegisterMetaType<QCameraImageCapture::CaptureDestination>("QCameraImageCapture::CaptureDestination");
- qRegisterMetaType<QCameraImageCapture::CaptureDestinations>("QCameraImageCapture::CaptureDestinations");
-}
-
-Q_CONSTRUCTOR_FUNCTION(qRegisterCameraImageCaptureMetaTypes)
-
-
-class QCameraImageCapturePrivate
-{
- Q_DECLARE_NON_CONST_PUBLIC(QCameraImageCapture)
-public:
- QCameraImageCapturePrivate();
-
- QMediaObject *mediaObject;
-
- QCameraImageCaptureControl *control;
- QImageEncoderControl *encoderControl;
- QCameraCaptureDestinationControl *captureDestinationControl;
- QCameraCaptureBufferFormatControl *bufferFormatControl;
-
- QCameraImageCapture::Error error;
- QString errorString;
-
- void _q_error(int id, int error, const QString &errorString);
- void _q_readyChanged(bool);
- void _q_serviceDestroyed();
-
- void unsetError() { error = QCameraImageCapture::NoError; errorString.clear(); }
-
- QCameraImageCapture *q_ptr;
-};
-
-QCameraImageCapturePrivate::QCameraImageCapturePrivate():
- mediaObject(nullptr),
- control(nullptr),
- encoderControl(nullptr),
- captureDestinationControl(nullptr),
- bufferFormatControl(nullptr),
- error(QCameraImageCapture::NoError)
-{
-}
-
-void QCameraImageCapturePrivate::_q_error(int id, int error, const QString &errorString)
-{
- Q_Q(QCameraImageCapture);
-
- this->error = QCameraImageCapture::Error(error);
- this->errorString = errorString;
-
- emit q->error(id, this->error, errorString);
-}
-
-void QCameraImageCapturePrivate::_q_readyChanged(bool ready)
-{
- Q_Q(QCameraImageCapture);
- emit q->readyForCaptureChanged(ready);
-}
-
-void QCameraImageCapturePrivate::_q_serviceDestroyed()
-{
- mediaObject = nullptr;
- control = nullptr;
- encoderControl = nullptr;
- captureDestinationControl = nullptr;
- bufferFormatControl = nullptr;
-}
-
-/*!
- Constructs a media recorder which records the media produced by \a mediaObject.
-
- The \a parent is passed to QMediaObject.
-*/
-
-QCameraImageCapture::QCameraImageCapture(QMediaObject *mediaObject, QObject *parent):
- QObject(parent), d_ptr(new QCameraImageCapturePrivate)
-{
- Q_D(QCameraImageCapture);
-
- d->q_ptr = this;
-
- if (mediaObject)
- mediaObject->bind(this);
-}
-
-/*!
- Destroys images capture object.
-*/
-
-QCameraImageCapture::~QCameraImageCapture()
-{
- Q_D(QCameraImageCapture);
-
- if (d->mediaObject)
- d->mediaObject->unbind(this);
-
- delete d_ptr;
-}
-
-/*!
- \reimp
-*/
-QMediaObject *QCameraImageCapture::mediaObject() const
-{
- return d_func()->mediaObject;
-}
-
-/*!
- \reimp
-*/
-bool QCameraImageCapture::setMediaObject(QMediaObject *mediaObject)
-{
- Q_D(QCameraImageCapture);
-
- if (d->mediaObject) {
- if (d->control) {
- disconnect(d->control, SIGNAL(imageExposed(int)),
- this, SIGNAL(imageExposed(int)));
- disconnect(d->control, SIGNAL(imageCaptured(int,QImage)),
- this, SIGNAL(imageCaptured(int,QImage)));
- disconnect(d->control, SIGNAL(imageAvailable(int,QVideoFrame)),
- this, SIGNAL(imageAvailable(int,QVideoFrame)));
- disconnect(d->control, SIGNAL(imageMetadataAvailable(int,QString,QVariant)),
- this, SIGNAL(imageMetadataAvailable(int,QString,QVariant)));
- disconnect(d->control, SIGNAL(imageSaved(int,QString)),
- this, SIGNAL(imageSaved(int,QString)));
- disconnect(d->control, SIGNAL(readyForCaptureChanged(bool)),
- this, SLOT(_q_readyChanged(bool)));
- disconnect(d->control, SIGNAL(error(int,int,QString)),
- this, SLOT(_q_error(int,int,QString)));
-
- if (d->captureDestinationControl) {
- disconnect(d->captureDestinationControl, SIGNAL(captureDestinationChanged(QCameraImageCapture::CaptureDestinations)),
- this, SIGNAL(captureDestinationChanged(QCameraImageCapture::CaptureDestinations)));
- }
-
- if (d->bufferFormatControl) {
- disconnect(d->bufferFormatControl, SIGNAL(bufferFormatChanged(QVideoFrame::PixelFormat)),
- this, SIGNAL(bufferFormatChanged(QVideoFrame::PixelFormat)));
- }
-
- QMediaService *service = d->mediaObject->service();
- service->releaseControl(d->control);
- if (d->encoderControl)
- service->releaseControl(d->encoderControl);
- if (d->captureDestinationControl)
- service->releaseControl(d->captureDestinationControl);
- if (d->bufferFormatControl)
- service->releaseControl(d->bufferFormatControl);
-
- disconnect(service, SIGNAL(destroyed()), this, SLOT(_q_serviceDestroyed()));
- }
- }
-
- d->mediaObject = mediaObject;
-
- if (d->mediaObject) {
- QMediaService *service = mediaObject->service();
- if (service) {
- d->control = qobject_cast<QCameraImageCaptureControl*>(service->requestControl(QCameraImageCaptureControl_iid));
-
- if (d->control) {
- d->encoderControl = qobject_cast<QImageEncoderControl *>(service->requestControl(QImageEncoderControl_iid));
- d->captureDestinationControl = qobject_cast<QCameraCaptureDestinationControl *>(
- service->requestControl(QCameraCaptureDestinationControl_iid));
- d->bufferFormatControl = qobject_cast<QCameraCaptureBufferFormatControl *>(
- service->requestControl(QCameraCaptureBufferFormatControl_iid));
-
- connect(d->control, SIGNAL(imageExposed(int)),
- this, SIGNAL(imageExposed(int)));
- connect(d->control, SIGNAL(imageCaptured(int,QImage)),
- this, SIGNAL(imageCaptured(int,QImage)));
- connect(d->control, SIGNAL(imageMetadataAvailable(int,QString,QVariant)),
- this, SIGNAL(imageMetadataAvailable(int,QString,QVariant)));
- connect(d->control, SIGNAL(imageAvailable(int,QVideoFrame)),
- this, SIGNAL(imageAvailable(int,QVideoFrame)));
- connect(d->control, SIGNAL(imageSaved(int,QString)),
- this, SIGNAL(imageSaved(int,QString)));
- connect(d->control, SIGNAL(readyForCaptureChanged(bool)),
- this, SLOT(_q_readyChanged(bool)));
- connect(d->control, SIGNAL(error(int,int,QString)),
- this, SLOT(_q_error(int,int,QString)));
-
- if (d->captureDestinationControl) {
- connect(d->captureDestinationControl, SIGNAL(captureDestinationChanged(QCameraImageCapture::CaptureDestinations)),
- this, SIGNAL(captureDestinationChanged(QCameraImageCapture::CaptureDestinations)));
- }
-
- if (d->bufferFormatControl) {
- connect(d->bufferFormatControl, SIGNAL(bufferFormatChanged(QVideoFrame::PixelFormat)),
- this, SIGNAL(bufferFormatChanged(QVideoFrame::PixelFormat)));
- }
-
- connect(service, SIGNAL(destroyed()), this, SLOT(_q_serviceDestroyed()));
-
- return true;
- }
- }
- }
-
- // without QCameraImageCaptureControl discard the media object
- d->mediaObject = nullptr;
- d->control = nullptr;
- d->encoderControl = nullptr;
- d->captureDestinationControl = nullptr;
- d->bufferFormatControl = nullptr;
-
- return false;
-}
-
-/*!
- Returns true if the images capture service ready to use.
-*/
-bool QCameraImageCapture::isAvailable() const
-{
- if (d_func()->control != nullptr)
- return true;
- else
- return false;
-}
-
-/*!
- Returns the availability of this functionality.
-*/
-QMultimedia::AvailabilityStatus QCameraImageCapture::availability() const
-{
- if (d_func()->control != nullptr)
- return QMultimedia::Available;
- else
- return QMultimedia::ServiceMissing;
-}
-
-/*!
- Returns the current error state.
-
- \sa errorString()
-*/
-
-QCameraImageCapture::Error QCameraImageCapture::error() const
-{
- return d_func()->error;
-}
-
-/*!
- Returns a string describing the current error state.
-
- \sa error()
-*/
-
-QString QCameraImageCapture::errorString() const
-{
- return d_func()->errorString;
-}
-
-
-/*!
- Returns a list of supported image codecs.
-*/
-QStringList QCameraImageCapture::supportedImageCodecs() const
-{
- return d_func()->encoderControl ?
- d_func()->encoderControl->supportedImageCodecs() : QStringList();
-}
-
-/*!
- Returns a description of an image \a codec.
-*/
-QString QCameraImageCapture::imageCodecDescription(const QString &codec) const
-{
- return d_func()->encoderControl ?
- d_func()->encoderControl->imageCodecDescription(codec) : QString();
-}
-
-/*!
- Returns a list of resolutions images can be encoded at.
-
- If non null image \a settings parameter is passed,
- the returned list is reduced to resolution supported with partial settings like image codec or quality applied.
-
- If the encoder supports arbitrary resolutions within the supported range,
- *\a continuous is set to true, otherwise *\a continuous is set to false.
-
- \sa QImageEncoderSettings::resolution()
-*/
-QList<QSize> QCameraImageCapture::supportedResolutions(const QImageEncoderSettings &settings, bool *continuous) const
-{
- if (continuous)
- *continuous = false;
-
- return d_func()->encoderControl ?
- d_func()->encoderControl->supportedResolutions(settings, continuous) : QList<QSize>();
-}
-
-/*!
- Returns the image encoder settings being used.
-
- \sa setEncodingSettings()
-*/
-
-QImageEncoderSettings QCameraImageCapture::encodingSettings() const
-{
- return d_func()->encoderControl ?
- d_func()->encoderControl->imageSettings() : QImageEncoderSettings();
-}
-
-/*!
- Sets the image encoding \a settings.
-
- If some parameters are not specified, or null settings are passed,
- the encoder choose the default encoding parameters.
-
- \sa encodingSettings()
-*/
-
-void QCameraImageCapture::setEncodingSettings(const QImageEncoderSettings &settings)
-{
- Q_D(QCameraImageCapture);
-
- if (d->encoderControl) {
- QCamera *camera = qobject_cast<QCamera*>(d->mediaObject);
- if (camera && camera->captureMode() == QCamera::CaptureStillImage) {
- QMetaObject::invokeMethod(camera,
- "_q_preparePropertyChange",
- Qt::DirectConnection,
- Q_ARG(int, QCameraControl::ImageEncodingSettings));
- }
-
- d->encoderControl->setImageSettings(settings);
- }
-}
-
-/*!
- Returns the list of supported buffer image capture formats.
-
- \sa bufferFormat(), setBufferFormat()
-*/
-QList<QVideoFrame::PixelFormat> QCameraImageCapture::supportedBufferFormats() const
-{
- if (d_func()->bufferFormatControl)
- return d_func()->bufferFormatControl->supportedBufferFormats();
- else
- return QList<QVideoFrame::PixelFormat>();
-}
-
-/*!
- Returns the buffer image capture format being used.
-
- \sa supportedBufferFormats(), setBufferFormat()
-*/
-QVideoFrame::PixelFormat QCameraImageCapture::bufferFormat() const
-{
- if (d_func()->bufferFormatControl)
- return d_func()->bufferFormatControl->bufferFormat();
- else
- return QVideoFrame::Format_Invalid;
-}
-
-/*!
- Sets the buffer image capture \a format to be used.
-
- \sa bufferFormat(), supportedBufferFormats(), captureDestination()
-*/
-void QCameraImageCapture::setBufferFormat(const QVideoFrame::PixelFormat format)
-{
- if (d_func()->bufferFormatControl)
- d_func()->bufferFormatControl->setBufferFormat(format);
-}
-
-/*!
- Returns true if the image capture \a destination is supported; otherwise returns false.
-
- \sa captureDestination(), setCaptureDestination()
-*/
-bool QCameraImageCapture::isCaptureDestinationSupported(QCameraImageCapture::CaptureDestinations destination) const
-{
- if (d_func()->captureDestinationControl)
- return d_func()->captureDestinationControl->isCaptureDestinationSupported(destination);
- else
- return destination == CaptureToFile;
-}
-
-/*!
- Returns the image capture destination being used.
-
- \sa isCaptureDestinationSupported(), setCaptureDestination()
-*/
-QCameraImageCapture::CaptureDestinations QCameraImageCapture::captureDestination() const
-{
- if (d_func()->captureDestinationControl)
- return d_func()->captureDestinationControl->captureDestination();
- else
- return CaptureToFile;
-}
-
-/*!
- Sets the capture \a destination to be used.
-
- \sa isCaptureDestinationSupported(), captureDestination()
-*/
-void QCameraImageCapture::setCaptureDestination(QCameraImageCapture::CaptureDestinations destination)
-{
- Q_D(QCameraImageCapture);
-
- if (d->captureDestinationControl)
- d->captureDestinationControl->setCaptureDestination(destination);
-}
-
-/*!
- \property QCameraImageCapture::readyForCapture
- \brief whether the service is ready to capture a an image immediately.
-
- Calling capture() while \e readyForCapture is \c false is not permitted and
- results in an error.
-*/
-
-bool QCameraImageCapture::isReadyForCapture() const
-{
- if (d_func()->control)
- return d_func()->control->isReadyForCapture();
- else
- return false;
-}
-
-/*!
- \fn QCameraImageCapture::readyForCaptureChanged(bool ready)
-
- Signals that a camera's \a ready for capture state has changed.
-*/
-
-
-/*!
- Capture the image and save it to \a file.
- This operation is asynchronous in majority of cases,
- followed by signals QCameraImageCapture::imageExposed(),
- QCameraImageCapture::imageCaptured(), QCameraImageCapture::imageSaved()
- or QCameraImageCapture::error().
-
- If an empty \a file is passed, the camera backend choses
- the default location and naming scheme for photos on the system,
- if only file name without full path is specified, the image will be saved to
- the default directory, with a full path reported with imageCaptured() and imageSaved() signals.
-
- QCamera 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.
-
- QCameraImageCapture::capture returns the capture Id parameter, used with
- imageExposed(), imageCaptured() and imageSaved() signals.
-
- \sa isReadyForCapture()
-*/
-int QCameraImageCapture::capture(const QString &file)
-{
- Q_D(QCameraImageCapture);
-
- d->unsetError();
-
- if (d->control) {
- return d->control->capture(file);
- } else {
- d->error = NotSupportedFeatureError;
- d->errorString = tr("Device does not support images capture.");
-
- emit error(-1, d->error, d->errorString);
- }
-
- return -1;
-}
-
-/*!
- Cancel incomplete capture requests.
- Already captured and queused for proicessing images may be discarded.
-*/
-void QCameraImageCapture::cancelCapture()
-{
- Q_D(QCameraImageCapture);
-
- d->unsetError();
-
- if (d->control) {
- d->control->cancelCapture();
- } else {
- d->error = NotSupportedFeatureError;
- d->errorString = tr("Device does not support images capture.");
-
- emit error(-1, d->error, d->errorString);
- }
-}
-
-
-/*!
- \enum QCameraImageCapture::Error
-
- \value NoError No Errors.
- \value NotReadyError The service is not ready for capture yet.
- \value ResourceError Device is not ready or not available.
- \value OutOfSpaceError No space left on device.
- \value NotSupportedFeatureError Device does not support stillimages capture.
- \value FormatError Current format is not supported.
-*/
-
-/*!
- \enum QCameraImageCapture::DriveMode
-
- \value SingleImageCapture Drive mode is capturing a single picture.
-*/
-
-/*!
- \fn QCameraImageCapture::error(int id, QCameraImageCapture::Error error, const QString &errorString)
-
- Signals that the capture request \a id has failed with an \a error
- and \a errorString description.
-*/
-
-/*!
- \fn QCameraImageCapture::bufferFormatChanged(QVideoFrame::PixelFormat format)
-
- Signal emitted when the buffer \a format for the buffer image capture has changed.
-*/
-
-/*!
- \fn QCameraImageCapture::captureDestinationChanged(CaptureDestinations destination)
-
- Signal emitted when the capture \a destination has changed.
-*/
-
-/*!
- \fn QCameraImageCapture::imageExposed(int id)
-
- Signal emitted when the frame with request \a id was exposed.
-*/
-
-/*!
- \fn QCameraImageCapture::imageCaptured(int id, const QImage &preview);
-
- Signal emitted when QAbstractVideoSurface is used as a viewfinder and
- the frame with request \a id was captured, but not processed and saved yet.
- Frame \a preview can be displayed to user.
-*/
-
-/*!
- \fn QCameraImageCapture::imageMetadataAvailable(int id, const QString &key, const QVariant &value)
-
- Signals that a metadata for an image with request \a id is available. Also
- includes the \a key and \a value of the metadata.
-
- This signal is emitted between imageExposed and imageSaved signals.
-*/
-
-/*!
- \fn QCameraImageCapture::imageAvailable(int id, const QVideoFrame &frame)
-
- Signal emitted when QCameraImageCapture::CaptureToBuffer is set and
- the \a frame with request \a id is available.
-*/
-
-/*!
- \fn QCameraImageCapture::imageSaved(int id, const QString &fileName)
-
- Signal emitted when QCameraImageCapture::CaptureToFile is set and
- the frame with request \a id was saved to \a fileName.
-*/
-
-QT_END_NAMESPACE
-
-#include "moc_qcameraimagecapture.cpp"