summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2021-06-18 08:32:27 +0200
committerLars Knoll <lars.knoll@qt.io>2021-06-18 08:32:27 +0200
commit8201f06fc00ad60033032f3bf428a615d504c9a8 (patch)
tree936ba250134a7053e31d7a1193fc1d595e400b2c
parent8b1aac91f0c4a310059ec401ac09171b4c1db4ab (diff)
parent46bc0ea5550903a27923d84c730de39a78e7689a (diff)
Merge remote-tracking branch 'origin/dev' into 6.2
-rw-r--r--examples/multimedia/audiodecoder/audiodecoder.cpp36
-rw-r--r--examples/multimedia/audiodecoder/audiodecoder.h2
-rw-r--r--examples/multimedia/audiorecorder/audiorecorder.cpp6
-rw-r--r--examples/multimediawidgets/camera/camera.cpp12
-rw-r--r--examples/multimediawidgets/camera/camera.h6
-rw-r--r--examples/multimediawidgets/camera/doc/src/camera.qdoc4
-rw-r--r--examples/multimediawidgets/camera/imagesettings.cpp16
-rw-r--r--examples/multimediawidgets/camera/imagesettings.h6
-rw-r--r--src/android/jar/CMakeLists.txt4
-rw-r--r--src/multimedia/.prev_CMakeLists.txt2
-rw-r--r--src/multimedia/CMakeLists.txt20
-rw-r--r--src/multimedia/audio/qaudiodecoder.cpp56
-rw-r--r--src/multimedia/audio/qaudiodecoder.h21
-rw-r--r--src/multimedia/audio/qaudioformat.cpp16
-rw-r--r--src/multimedia/audio/qaudioformat.h4
-rw-r--r--src/multimedia/camera/qcamera.cpp14
-rw-r--r--src/multimedia/camera/qcamera.h14
-rw-r--r--src/multimedia/camera/qimagecapture.cpp (renamed from src/multimedia/camera/qcameraimagecapture.cpp)148
-rw-r--r--src/multimedia/camera/qimagecapture.h (renamed from src/multimedia/camera/qcameraimagecapture.h)20
-rw-r--r--src/multimedia/doc/snippets/multimedia-snippets/camera.cpp8
-rw-r--r--src/multimedia/doc/snippets/multimedia-snippets/media.cpp6
-rw-r--r--src/multimedia/doc/src/cameraoverview.qdoc4
-rw-r--r--src/multimedia/doc/src/multimedia.qdoc2
-rw-r--r--src/multimedia/doc/src/qtmultimedia-index.qdoc2
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcameracontrol.cpp5
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcameracontrol_p.h2
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp66
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcamerasession_p.h8
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcameravideorenderercontrol.cpp4
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcaptureservice.cpp8
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcaptureservice_p.h8
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcapturesession.cpp78
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcapturesession_p.h12
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidimagecapture.cpp (renamed from src/multimedia/platform/android/mediacapture/qandroidcameraimagecapturecontrol.cpp)20
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidimagecapture_p.h (renamed from src/multimedia/platform/android/mediacapture/qandroidcameraimagecapturecontrol_p.h)6
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidmediaencoder.cpp26
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidmediaencoder_p.h3
-rw-r--r--src/multimedia/platform/android/qandroidformatsinfo.cpp2
-rw-r--r--src/multimedia/platform/android/qandroidintegration.cpp6
-rw-r--r--src/multimedia/platform/android/qandroidintegration_p.h2
-rw-r--r--src/multimedia/platform/android/wrappers/jni/androidmediametadataretriever.cpp2
-rw-r--r--src/multimedia/platform/darwin/audio/avfaudiodecoder.mm51
-rw-r--r--src/multimedia/platform/darwin/audio/avfaudiodecoder_p.h10
-rw-r--r--src/multimedia/platform/darwin/camera/avfcamera.mm31
-rw-r--r--src/multimedia/platform/darwin/camera/avfcamera_p.h6
-rw-r--r--src/multimedia/platform/darwin/camera/avfcameraservice.mm10
-rw-r--r--src/multimedia/platform/darwin/camera/avfcameraservice_p.h10
-rw-r--r--src/multimedia/platform/darwin/camera/avfcamerasession.mm4
-rw-r--r--src/multimedia/platform/darwin/camera/avfimagecapture.mm (renamed from src/multimedia/platform/darwin/camera/avfcameraimagecapture.mm)62
-rw-r--r--src/multimedia/platform/darwin/camera/avfimagecapture_p.h (renamed from src/multimedia/platform/darwin/camera/avfcameraimagecapture_p.h)10
-rw-r--r--src/multimedia/platform/darwin/camera/avfmediaencoder.mm14
-rw-r--r--src/multimedia/platform/darwin/camera/avfmediaencoder_p.h4
-rw-r--r--src/multimedia/platform/darwin/qdarwinformatsinfo.mm2
-rw-r--r--src/multimedia/platform/darwin/qdarwinintegration.mm6
-rw-r--r--src/multimedia/platform/darwin/qdarwinintegration_p.h2
-rw-r--r--src/multimedia/platform/gstreamer/audio/qgstreameraudiodecoder.cpp53
-rw-r--r--src/multimedia/platform/gstreamer/audio/qgstreameraudiodecoder_p.h11
-rw-r--r--src/multimedia/platform/gstreamer/common/qgstutils.cpp10
-rw-r--r--src/multimedia/platform/gstreamer/common/qgstutils_p.h1
-rw-r--r--src/multimedia/platform/gstreamer/mediacapture/qgstreamercamera.cpp3
-rw-r--r--src/multimedia/platform/gstreamer/mediacapture/qgstreamerimagecapture.cpp (renamed from src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimagecapture.cpp)50
-rw-r--r--src/multimedia/platform/gstreamer/mediacapture/qgstreamerimagecapture_p.h (renamed from src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimagecapture_p.h)8
-rw-r--r--src/multimedia/platform/gstreamer/mediacapture/qgstreamermediacapture.cpp9
-rw-r--r--src/multimedia/platform/gstreamer/mediacapture/qgstreamermediacapture_p.h8
-rw-r--r--src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder.cpp18
-rw-r--r--src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder_p.h4
-rw-r--r--src/multimedia/platform/gstreamer/qgstreamerformatinfo.cpp20
-rw-r--r--src/multimedia/platform/gstreamer/qgstreamerformatinfo_p.h2
-rw-r--r--src/multimedia/platform/gstreamer/qgstreamerintegration.cpp6
-rw-r--r--src/multimedia/platform/gstreamer/qgstreamerintegration_p.h2
-rw-r--r--src/multimedia/platform/qnx/camera/bbcameraimagecapturecontrol.cpp2
-rw-r--r--src/multimedia/platform/qnx/camera/bbcameraimagecapturecontrol_p.h4
-rw-r--r--src/multimedia/platform/qnx/camera/bbcameramediarecordercontrol.cpp24
-rw-r--r--src/multimedia/platform/qnx/camera/bbcameramediarecordercontrol_p.h3
-rw-r--r--src/multimedia/platform/qnx/camera/bbcameraservice.cpp2
-rw-r--r--src/multimedia/platform/qnx/camera/bbcameraservice_p.h2
-rw-r--r--src/multimedia/platform/qnx/camera/bbcamerasession.cpp83
-rw-r--r--src/multimedia/platform/qnx/camera/bbcamerasession_p.h11
-rw-r--r--src/multimedia/platform/qplatformaudiodecoder.cpp36
-rw-r--r--src/multimedia/platform/qplatformaudiodecoder_p.h16
-rw-r--r--src/multimedia/platform/qplatformcamera.cpp27
-rw-r--r--src/multimedia/platform/qplatformcamera_p.h4
-rw-r--r--src/multimedia/platform/qplatformimagecapture.cpp (renamed from src/multimedia/platform/qplatformcameraimagecapture.cpp)36
-rw-r--r--src/multimedia/platform/qplatformimagecapture_p.h (renamed from src/multimedia/platform/qplatformcameraimagecapture_p.h)24
-rw-r--r--src/multimedia/platform/qplatformmediacapture_p.h6
-rw-r--r--src/multimedia/platform/qplatformmediaencoder_p.h8
-rw-r--r--src/multimedia/platform/qplatformmediaformatinfo_p.h4
-rw-r--r--src/multimedia/platform/qplatformmediaintegration_p.h6
-rw-r--r--src/multimedia/platform/windows/common/mfmetadata.cpp (renamed from src/multimedia/platform/windows/player/mfmetadata.cpp)209
-rw-r--r--src/multimedia/platform/windows/common/mfmetadata_p.h (renamed from src/multimedia/platform/windows/player/mfmetadata_p.h)1
-rw-r--r--src/multimedia/platform/windows/decoder/mfaudiodecodercontrol.cpp235
-rw-r--r--src/multimedia/platform/windows/decoder/mfaudiodecodercontrol_p.h10
-rw-r--r--src/multimedia/platform/windows/decoder/mfdecodersourcereader.cpp9
-rw-r--r--src/multimedia/platform/windows/decoder/mfdecodersourcereader_p.h2
-rw-r--r--src/multimedia/platform/windows/mediacapture/qwindowscamera.cpp29
-rw-r--r--src/multimedia/platform/windows/mediacapture/qwindowscamera_p.h6
-rw-r--r--src/multimedia/platform/windows/mediacapture/qwindowsimagecapture.cpp (renamed from src/multimedia/platform/windows/mediacapture/qwindowscameraimagecapture.cpp)52
-rw-r--r--src/multimedia/platform/windows/mediacapture/qwindowsimagecapture_p.h (renamed from src/multimedia/platform/windows/mediacapture/qwindowscameraimagecapture_p.h)18
-rw-r--r--src/multimedia/platform/windows/mediacapture/qwindowsmediacapture.cpp8
-rw-r--r--src/multimedia/platform/windows/mediacapture/qwindowsmediacapture_p.h8
-rw-r--r--src/multimedia/platform/windows/mediacapture/qwindowsmediaencoder.cpp59
-rw-r--r--src/multimedia/platform/windows/mediacapture/qwindowsmediaencoder_p.h11
-rw-r--r--src/multimedia/platform/windows/player/mfplayersession.cpp2
-rw-r--r--src/multimedia/platform/windows/qwindowsformatinfo.cpp2
-rw-r--r--src/multimedia/platform/windows/qwindowsintegration.cpp6
-rw-r--r--src/multimedia/platform/windows/qwindowsintegration_p.h2
-rw-r--r--src/multimedia/qmediaformat.cpp11
-rw-r--r--src/multimedia/qmediaformat.h9
-rw-r--r--src/multimedia/recording/qmediacapturesession.cpp23
-rw-r--r--src/multimedia/recording/qmediacapturesession.h14
-rw-r--r--src/multimedia/recording/qmediarecorder.cpp21
-rw-r--r--src/multimedia/recording/qmediarecorder.h5
-rw-r--r--src/multimediaquick/qquickimagecapture.cpp2
-rw-r--r--src/multimediaquick/qquickimagecapture_p.h4
-rw-r--r--src/multimediaquick/qtmultimediaquicktypes_p.h4
-rw-r--r--src/multimediawidgets/doc/snippets/multimedia-snippets/camera.cpp6
-rw-r--r--tests/auto/integration/qaudiodecoderbackend/tst_qaudiodecoderbackend.cpp221
-rw-r--r--tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp37
-rw-r--r--tests/auto/unit/mockbackend/qmockaudiodecoder.h32
-rw-r--r--tests/auto/unit/mockbackend/qmockcamera.h12
-rw-r--r--tests/auto/unit/mockbackend/qmockimagecapture.cpp8
-rw-r--r--tests/auto/unit/mockbackend/qmockimagecapture.h6
-rw-r--r--tests/auto/unit/mockbackend/qmockintegration.cpp2
-rw-r--r--tests/auto/unit/mockbackend/qmockintegration_p.h2
-rw-r--r--tests/auto/unit/mockbackend/qmockmediacapturesession.h6
-rw-r--r--tests/auto/unit/mockbackend/qmockmediaencoder.h11
-rw-r--r--tests/auto/unit/multimedia/CMakeLists.txt3
-rw-r--r--tests/auto/unit/multimedia/qaudiodecoder/tst_qaudiodecoder.cpp71
-rw-r--r--tests/auto/unit/multimedia/qcamera/tst_qcamera.cpp57
-rw-r--r--tests/auto/unit/multimedia/qimagecapture/CMakeLists.txt (renamed from tests/auto/unit/multimedia/qcameraimagecapture/CMakeLists.txt)8
-rw-r--r--tests/auto/unit/multimedia/qimagecapture/tst_qimagecapture.cpp (renamed from tests/auto/unit/multimedia/qcameraimagecapture/tst_qcameraimagecapture.cpp)88
-rw-r--r--tests/auto/unit/multimedia/qmediaformat/CMakeLists.txt7
-rw-r--r--tests/auto/unit/multimedia/qmediaformat/tst_qmediaformat.cpp68
-rw-r--r--tests/auto/unit/multimedia/qmediarecorder/tst_qmediarecorder.cpp2
-rw-r--r--tests/auto/unit/multimediawidgets/qcamerawidgets/tst_qcamerawidgets.cpp11
135 files changed, 1139 insertions, 1693 deletions
diff --git a/examples/multimedia/audiodecoder/audiodecoder.cpp b/examples/multimedia/audiodecoder/audiodecoder.cpp
index 891499ea2..f3492a52a 100644
--- a/examples/multimedia/audiodecoder/audiodecoder.cpp
+++ b/examples/multimedia/audiodecoder/audiodecoder.cpp
@@ -59,24 +59,12 @@ AudioDecoder::AudioDecoder(bool isPlayback, bool isDelete, const QString &target
m_isPlayback = isPlayback;
m_isDelete = isDelete;
- // Make sure the data we receive is in correct PCM format.
- // Our wav file writer only supports SignedInt sample type.
- QAudioFormat format;
- format.setChannelCount(2);
- format.setSampleFormat(QAudioFormat::Int16);
- format.setSampleRate(48000);
- m_decoder.setAudioFormat(format);
-
- QIODevice* target = new QFile(targetFileName, this);
- if (target->open(QIODevice::WriteOnly))
- m_waveDecoder = new QWaveDecoder(target, format);
-
connect(&m_decoder, &QAudioDecoder::bufferReady,
this, &AudioDecoder::bufferReady);
connect(&m_decoder, QOverload<QAudioDecoder::Error>::of(&QAudioDecoder::error),
this, QOverload<QAudioDecoder::Error>::of(&AudioDecoder::error));
- connect(&m_decoder, &QAudioDecoder::stateChanged,
- this, &AudioDecoder::stateChanged);
+ connect(&m_decoder, &QAudioDecoder::isDecodingChanged,
+ this, &AudioDecoder::isDecodingChanged);
connect(&m_decoder, &QAudioDecoder::finished,
this, &AudioDecoder::finished);
connect(&m_decoder, &QAudioDecoder::positionChanged,
@@ -129,6 +117,16 @@ void AudioDecoder::bufferReady()
if (!buffer.isValid())
return;
+ if (!m_waveDecoder) {
+ QIODevice* target = new QFile(m_targetFilename, this);
+ if (!target->open(QIODevice::WriteOnly)) {
+ qWarning() << "target file is not writable";
+ m_decoder.stop();
+ return;
+ }
+ m_waveDecoder = new QWaveDecoder(target, buffer.format());
+ }
+
if (!m_waveDecoder || (!m_waveDecoder->isOpen()
&& !m_waveDecoder->open(QIODevice::WriteOnly))) {
m_decoder.stop();
@@ -160,16 +158,12 @@ void AudioDecoder::error(QAudioDecoder::Error error)
emit done();
}
-void AudioDecoder::stateChanged(QAudioDecoder::State newState)
+void AudioDecoder::isDecodingChanged(bool isDecoding)
{
- switch (newState) {
- case QAudioDecoder::DecodingState:
+ if (isDecoding)
m_cout << "Decoding...\n";
- break;
- case QAudioDecoder::StoppedState:
+ else
m_cout << "Decoding stopped\n";
- break;
- }
}
void AudioDecoder::finished()
diff --git a/examples/multimedia/audiodecoder/audiodecoder.h b/examples/multimedia/audiodecoder/audiodecoder.h
index cd27a9bf3..d75eecb8d 100644
--- a/examples/multimedia/audiodecoder/audiodecoder.h
+++ b/examples/multimedia/audiodecoder/audiodecoder.h
@@ -78,7 +78,7 @@ signals:
public slots:
void bufferReady();
void error(QAudioDecoder::Error error);
- void stateChanged(QAudioDecoder::State newState);
+ void isDecodingChanged(bool isDecoding);
void finished();
void playbackStatusChanged();
diff --git a/examples/multimedia/audiorecorder/audiorecorder.cpp b/examples/multimedia/audiorecorder/audiorecorder.cpp
index 63efc4ba8..f8437ba4d 100644
--- a/examples/multimedia/audiorecorder/audiorecorder.cpp
+++ b/examples/multimedia/audiorecorder/audiorecorder.cpp
@@ -63,7 +63,7 @@
#include <qaudiodevice.h>
#include <qaudiobuffer.h>
#include <qaudioinput.h>
-#include <qcameraimagecapture.h>
+#include <qimagecapture.h>
static QList<qreal> getBufferLevels(const QAudioBuffer &buffer);
@@ -114,8 +114,8 @@ AudioRecorder::AudioRecorder()
ui->channelsBox->addItem(QStringLiteral("4"), QVariant(4));
//quality
- ui->qualitySlider->setRange(0, int(QCameraImageCapture::VeryHighQuality));
- ui->qualitySlider->setValue(int(QCameraImageCapture::NormalQuality));
+ ui->qualitySlider->setRange(0, int(QImageCapture::VeryHighQuality));
+ ui->qualitySlider->setValue(int(QImageCapture::NormalQuality));
//bitrates:
ui->bitrateBox->addItem(tr("Default"), QVariant(0));
diff --git a/examples/multimediawidgets/camera/camera.cpp b/examples/multimediawidgets/camera/camera.cpp
index 043afeb29..89667ab43 100644
--- a/examples/multimediawidgets/camera/camera.cpp
+++ b/examples/multimediawidgets/camera/camera.cpp
@@ -105,7 +105,7 @@ void Camera::setCamera(const QCameraDevice &cameraDevice)
m_captureSession.setEncoder(m_mediaEncoder.data());
connect(m_mediaEncoder.data(), &QMediaRecorder::recorderStateChanged, this, &Camera::updateRecorderState);
- m_imageCapture = new QCameraImageCapture;
+ m_imageCapture = new QImageCapture;
m_captureSession.setImageCapture(m_imageCapture);
connect(m_mediaEncoder.data(), &QMediaRecorder::durationChanged, this, &Camera::updateRecordTime);
@@ -118,10 +118,10 @@ void Camera::setCamera(const QCameraDevice &cameraDevice)
updateCameraActive(m_camera->isActive());
updateRecorderState(m_mediaEncoder->recorderState());
- connect(m_imageCapture, &QCameraImageCapture::readyForCaptureChanged, this, &Camera::readyForCapture);
- connect(m_imageCapture, &QCameraImageCapture::imageCaptured, this, &Camera::processCapturedImage);
- connect(m_imageCapture, &QCameraImageCapture::imageSaved, this, &Camera::imageSaved);
- connect(m_imageCapture, &QCameraImageCapture::errorOccurred, this, &Camera::displayCaptureError);
+ connect(m_imageCapture, &QImageCapture::readyForCaptureChanged, this, &Camera::readyForCapture);
+ connect(m_imageCapture, &QImageCapture::imageCaptured, this, &Camera::processCapturedImage);
+ connect(m_imageCapture, &QImageCapture::imageSaved, this, &Camera::imageSaved);
+ connect(m_imageCapture, &QImageCapture::errorOccurred, this, &Camera::displayCaptureError);
readyForCapture(m_imageCapture->isReadyForCapture());
updateCaptureMode();
@@ -233,7 +233,7 @@ void Camera::takeImage()
m_imageCapture->captureToFile();
}
-void Camera::displayCaptureError(int id, const QCameraImageCapture::Error error, const QString &errorString)
+void Camera::displayCaptureError(int id, const QImageCapture::Error error, const QString &errorString)
{
Q_UNUSED(id);
Q_UNUSED(error);
diff --git a/examples/multimediawidgets/camera/camera.h b/examples/multimediawidgets/camera/camera.h
index c165aa201..d5920a0f3 100644
--- a/examples/multimediawidgets/camera/camera.h
+++ b/examples/multimediawidgets/camera/camera.h
@@ -52,7 +52,7 @@
#define CAMERA_H
#include <QCamera>
-#include <QCameraImageCapture>
+#include <QImageCapture>
#include <QMediaRecorder>
#include <QScopedPointer>
#include <QMediaMetaData>
@@ -91,7 +91,7 @@ private slots:
void setMuted(bool);
void takeImage();
- void displayCaptureError(int, QCameraImageCapture::Error, const QString &errorString);
+ void displayCaptureError(int, QImageCapture::Error, const QString &errorString);
void configureCaptureSettings();
void configureVideoSettings();
@@ -135,7 +135,7 @@ private:
QMediaCaptureSession m_captureSession;
QScopedPointer<QCamera> m_camera;
QScopedPointer<QAudioInput> m_audioInput;
- QCameraImageCapture *m_imageCapture;
+ QImageCapture *m_imageCapture;
QScopedPointer<QMediaRecorder> m_mediaEncoder;
bool m_isCapturingImage = false;
diff --git a/examples/multimediawidgets/camera/doc/src/camera.qdoc b/examples/multimediawidgets/camera/doc/src/camera.qdoc
index 68e19aac3..476eef085 100644
--- a/examples/multimediawidgets/camera/doc/src/camera.qdoc
+++ b/examples/multimediawidgets/camera/doc/src/camera.qdoc
@@ -48,7 +48,7 @@ the image or video clip is to be saved. It will also store the image and video
settings.
The Camera class contains an instance of \l {QCamera}, the API class interface to
-the hardware. It also has an instance of \l {QCameraImageCapture} to take still images
+the hardware. It also has an instance of \l {QImageCapture} to take still images
and an instance of \l {QMediaRecorder} to record video. It also contains the user
interface object.
@@ -59,7 +59,7 @@ the \e{setCamera()} function is called, passing in a \l {QByteArray}.
\e{setCamera()} sets up various connections between the user interface and the functionality
of the Camera class using signals and slots. It also instantiates and initializes the \l {QCamera},
-\l {QCameraImageCapture} and \l {QMediaRecorder} objects mentioned above. The still
+\l {QImageCapture} and \l {QMediaRecorder} objects mentioned above. The still
and video recording visual tabs are enabled and finally the
\l {QCamera::start()}{start()} function of the \l{QCamera} object is called.
diff --git a/examples/multimediawidgets/camera/imagesettings.cpp b/examples/multimediawidgets/camera/imagesettings.cpp
index fa619638d..a14e519e7 100644
--- a/examples/multimediawidgets/camera/imagesettings.cpp
+++ b/examples/multimediawidgets/camera/imagesettings.cpp
@@ -53,11 +53,11 @@
#include <QComboBox>
#include <QDebug>
-#include <QCameraImageCapture>
+#include <QImageCapture>
#include <QCamera>
#include <QMediaCaptureSession>
-ImageSettings::ImageSettings(QCameraImageCapture *imageCapture, QWidget *parent) :
+ImageSettings::ImageSettings(QImageCapture *imageCapture, QWidget *parent) :
QDialog(parent),
ui(new Ui::ImageSettingsUi),
imagecapture(imageCapture)
@@ -66,13 +66,13 @@ ImageSettings::ImageSettings(QCameraImageCapture *imageCapture, QWidget *parent)
//image codecs
ui->imageCodecBox->addItem(tr("Default image format"), QVariant(QString()));
- const auto supportedImageFormats = QCameraImageCapture::supportedFormats();
+ const auto supportedImageFormats = QImageCapture::supportedFormats();
for (const auto &f : supportedImageFormats) {
- QString description = QCameraImageCapture::fileFormatDescription(f);
- ui->imageCodecBox->addItem(QCameraImageCapture::fileFormatName(f) + ": " + description, QVariant::fromValue(f));
+ QString description = QImageCapture::fileFormatDescription(f);
+ ui->imageCodecBox->addItem(QImageCapture::fileFormatName(f) + ": " + description, QVariant::fromValue(f));
}
- ui->imageQualitySlider->setRange(0, int(QCameraImageCapture::VeryHighQuality));
+ ui->imageQualitySlider->setRange(0, int(QImageCapture::VeryHighQuality));
ui->imageResolutionBox->addItem(tr("Default Resolution"));
const QList<QSize> supportedResolutions = imagecapture->captureSession()->camera()->cameraDevice().photoResolutions();
@@ -105,8 +105,8 @@ void ImageSettings::changeEvent(QEvent *e)
void ImageSettings::applyImageSettings() const
{
- imagecapture->setFileFormat(boxValue(ui->imageCodecBox).value<QCameraImageCapture::FileFormat>());
- imagecapture->setQuality(QCameraImageCapture::Quality(ui->imageQualitySlider->value()));
+ imagecapture->setFileFormat(boxValue(ui->imageCodecBox).value<QImageCapture::FileFormat>());
+ imagecapture->setQuality(QImageCapture::Quality(ui->imageQualitySlider->value()));
imagecapture->setResolution(boxValue(ui->imageResolutionBox).toSize());
}
diff --git a/examples/multimediawidgets/camera/imagesettings.h b/examples/multimediawidgets/camera/imagesettings.h
index c155c5531..6564bd91c 100644
--- a/examples/multimediawidgets/camera/imagesettings.h
+++ b/examples/multimediawidgets/camera/imagesettings.h
@@ -55,7 +55,7 @@
QT_BEGIN_NAMESPACE
class QComboBox;
-class QCameraImageCapture;
+class QImageCapture;
namespace Ui { class ImageSettingsUi; }
QT_END_NAMESPACE
@@ -64,7 +64,7 @@ class ImageSettings : public QDialog
Q_OBJECT
public:
- explicit ImageSettings(QCameraImageCapture *imageCapture, QWidget *parent = nullptr);
+ explicit ImageSettings(QImageCapture *imageCapture, QWidget *parent = nullptr);
~ImageSettings();
void applyImageSettings() const;
@@ -80,7 +80,7 @@ private:
void selectComboBoxItem(QComboBox *box, const QVariant &value);
Ui::ImageSettingsUi *ui;
- QCameraImageCapture *imagecapture;
+ QImageCapture *imagecapture;
};
#endif // IMAGESETTINGS_H
diff --git a/src/android/jar/CMakeLists.txt b/src/android/jar/CMakeLists.txt
index b417d38f1..ed51a1e20 100644
--- a/src/android/jar/CMakeLists.txt
+++ b/src/android/jar/CMakeLists.txt
@@ -11,13 +11,13 @@ set(java_sources
src/org/qtproject/qt/android/multimedia/QtSurfaceTextureListener.java
)
-qt_internal_add_jar(QtAndroidMultimedia
+qt_internal_add_jar(Qt${QtMultimedia_VERSION_MAJOR}AndroidMultimedia
INCLUDE_JARS ${QT_ANDROID_JAR}
SOURCES ${java_sources}
OUTPUT_DIR "${QT_BUILD_DIR}/jar"
)
-install_jar(QtAndroidMultimedia
+install_jar(Qt${QtMultimedia_VERSION_MAJOR}AndroidMultimedia
DESTINATION jar
COMPONENT Devel
)
diff --git a/src/multimedia/.prev_CMakeLists.txt b/src/multimedia/.prev_CMakeLists.txt
index 5d0cab807..4d5240d9f 100644
--- a/src/multimedia/.prev_CMakeLists.txt
+++ b/src/multimedia/.prev_CMakeLists.txt
@@ -121,7 +121,7 @@ qt_internal_add_simd_part(Multimedia SIMD avx2
if(ANDROID)
set_property(TARGET Multimedia APPEND PROPERTY QT_ANDROID_BUNDLED_JAR_DEPENDENCIES
- jar/QtAndroidMultimedia.jar:org.qtproject.qt.android.multimedia.QtMultimediaUtils
+ jar/Qt${QtMultimedia_VERSION_MAJOR}AndroidMultimedia.jar:org.qtproject.qt.android.multimedia.QtMultimediaUtils
)
set_property(TARGET Multimedia APPEND PROPERTY QT_ANDROID_LIB_DEPENDENCIES
lib/libQt6MultimediaQuick.so:Qt6Quick
diff --git a/src/multimedia/CMakeLists.txt b/src/multimedia/CMakeLists.txt
index f60e13be7..4fbccc672 100644
--- a/src/multimedia/CMakeLists.txt
+++ b/src/multimedia/CMakeLists.txt
@@ -30,12 +30,12 @@ qt_internal_add_module(Multimedia
audio/qwavedecoder.cpp audio/qwavedecoder.h
camera/qcamera.cpp camera/qcamera.h camera/qcamera_p.h
camera/qcameradevice.cpp camera/qcameradevice.h camera/qcameradevice_p.h
- camera/qcameraimagecapture.cpp camera/qcameraimagecapture.h
+ camera/qimagecapture.cpp camera/qimagecapture.h
platform/qplatformaudiodecoder.cpp platform/qplatformaudiodecoder_p.h
platform/qplatformaudioinput_p.h
platform/qplatformaudiooutput_p.h
platform/qplatformcamera.cpp platform/qplatformcamera_p.h
- platform/qplatformcameraimagecapture.cpp platform/qplatformcameraimagecapture_p.h
+ platform/qplatformimagecapture.cpp platform/qplatformimagecapture_p.h
platform/qplatformmediacapture.cpp platform/qplatformmediacapture_p.h
platform/qplatformmediadevices.cpp platform/qplatformmediadevices_p.h
platform/qplatformmediaencoder.cpp platform/qplatformmediaencoder_p.h
@@ -108,8 +108,8 @@ qt_internal_add_simd_part(Multimedia SIMD avx2
if(ANDROID)
set_property(TARGET Multimedia APPEND PROPERTY QT_ANDROID_BUNDLED_JAR_DEPENDENCIES
- jar/QtAndroidMultimedia.jar:org.qtproject.qt.android.multimedia.QtMultimediaUtils
- jar/QtAndroidMultimedia.jar:org.qtproject.qt.android.multimedia.QtAudioDeviceManager
+ jar/Qt${QtMultimedia_VERSION_MAJOR}AndroidMultimedia.jar:org.qtproject.qt.android.multimedia.QtMultimediaUtils
+ jar/Qt${QtMultimedia_VERSION_MAJOR}AndroidMultimedia.jar:org.qtproject.qt.android.multimedia.QtAudioDeviceManager
)
set_property(TARGET Multimedia APPEND PROPERTY QT_ANDROID_LIB_DEPENDENCIES
lib/libQt6MultimediaQuick.so:Qt6Quick
@@ -135,6 +135,7 @@ qt_internal_extend_target(Multimedia CONDITION QT_FEATURE_wmf
platform/windows/audio/qwindowsaudiosource.cpp platform/windows/audio/qwindowsaudiosource_p.h
platform/windows/audio/qwindowsaudiosink.cpp platform/windows/audio/qwindowsaudiosink_p.h
platform/windows/audio/qwindowsaudioutils.cpp platform/windows/audio/qwindowsaudioutils_p.h
+ platform/windows/common/mfmetadata.cpp platform/windows/common/mfmetadata_p.h
platform/windows/common/qwindowsmultimediautils.cpp platform/windows/common/qwindowsmultimediautils_p.h
platform/windows/common/qwindowsiupointer_p.h
platform/windows/decoder/mfaudiodecodercontrol.cpp platform/windows/decoder/mfaudiodecodercontrol_p.h
@@ -147,16 +148,15 @@ qt_internal_extend_target(Multimedia CONDITION QT_FEATURE_wmf
platform/windows/mfstream.cpp platform/windows/mfstream_p.h
platform/windows/player/mfactivate.cpp platform/windows/player/mfactivate_p.h
platform/windows/player/mfevrvideowindowcontrol.cpp platform/windows/player/mfevrvideowindowcontrol_p.h
- platform/windows/player/mfmetadata.cpp platform/windows/player/mfmetadata_p.h
platform/windows/player/mfplayercontrol.cpp platform/windows/player/mfplayercontrol_p.h
platform/windows/player/mfplayersession.cpp platform/windows/player/mfplayersession_p.h
platform/windows/player/mftvideo.cpp platform/windows/player/mftvideo_p.h
platform/windows/player/mfvideorenderercontrol.cpp platform/windows/player/mfvideorenderercontrol_p.h
platform/windows/player/samplegrabber.cpp platform/windows/player/samplegrabber_p.h
platform/windows/mediacapture/qwindowscamera.cpp
- platform/windows/mediacapture/qwindowscameraimagecapture.cpp
- platform/windows/mediacapture/qwindowscameraimagecapture_p.h
platform/windows/mediacapture/qwindowscamera_p.h
+ platform/windows/mediacapture/qwindowsimagecapture.cpp
+ platform/windows/mediacapture/qwindowsimagecapture_p.h
platform/windows/mediacapture/qwindowsmediacapture.cpp
platform/windows/mediacapture/qwindowsmediacapture_p.h
platform/windows/mediacapture/qwindowsmediadevicereader.cpp
@@ -228,8 +228,8 @@ qt_internal_extend_target(Multimedia CONDITION QT_FEATURE_gstreamer
platform/gstreamer/qgstreamerformatinfo.cpp platform/gstreamer/qgstreamerformatinfo_p.h
platform/gstreamer/qgstreamerintegration.cpp platform/gstreamer/qgstreamerintegration_p.h
platform/gstreamer/mediacapture/qgstreamercamera.cpp platform/gstreamer/mediacapture/qgstreamercamera_p.h
+ platform/gstreamer/mediacapture/qgstreamerimagecapture.cpp platform/gstreamer/mediacapture/qgstreamerimagecapture_p.h
platform/gstreamer/mediacapture/qgstreamermediacapture.cpp platform/gstreamer/mediacapture/qgstreamermediacapture_p.h
- platform/gstreamer/mediacapture/qgstreamercameraimagecapture.cpp platform/gstreamer/mediacapture/qgstreamercameraimagecapture_p.h
platform/gstreamer/mediacapture/qgstreamermediaencoder.cpp platform/gstreamer/mediacapture/qgstreamermediaencoder_p.h
DEFINES
GLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_26
@@ -307,7 +307,7 @@ qt_internal_extend_target(Multimedia CONDITION ANDROID
platform/android/common/qandroidmultimediautils.cpp platform/android/common/qandroidmultimediautils_p.h
platform/android/common/qandroidvideooutput.cpp platform/android/common/qandroidvideooutput_p.h
platform/android/mediacapture/qandroidcameracontrol.cpp platform/android/mediacapture/qandroidcameracontrol_p.h
- platform/android/mediacapture/qandroidcameraimagecapturecontrol.cpp platform/android/mediacapture/qandroidcameraimagecapturecontrol_p.h
+ platform/android/mediacapture/qandroidimagecapture.cpp platform/android/mediacapture/qandroidimagecapture_p.h
platform/android/mediacapture/qandroidcamerasession.cpp platform/android/mediacapture/qandroidcamerasession_p.h
platform/android/mediacapture/qandroidcameravideorenderercontrol.cpp platform/android/mediacapture/qandroidcameravideorenderercontrol_p.h
platform/android/mediacapture/qandroidcaptureservice.cpp platform/android/mediacapture/qandroidcaptureservice_p.h
@@ -403,7 +403,7 @@ qt_internal_extend_target(Multimedia CONDITION APPLE AND NOT TVOS AND NOT WATCHO
platform/darwin/camera/avfcameraservice.mm platform/darwin/camera/avfcameraservice_p.h
platform/darwin/camera/avfcamerasession.mm platform/darwin/camera/avfcamerasession_p.h
platform/darwin/camera/avfcamerautility.mm platform/darwin/camera/avfcamerautility_p.h
- platform/darwin/camera/avfcameraimagecapture.mm platform/darwin/camera/avfcameraimagecapture_p.h
+ platform/darwin/camera/avfimagecapture.mm platform/darwin/camera/avfimagecapture_p.h
platform/darwin/camera/avfstoragelocation.mm platform/darwin/camera/avfstoragelocation_p.h
)
diff --git a/src/multimedia/audio/qaudiodecoder.cpp b/src/multimedia/audio/qaudiodecoder.cpp
index 9c2c3bc36..8b8db59ba 100644
--- a/src/multimedia/audio/qaudiodecoder.cpp
+++ b/src/multimedia/audio/qaudiodecoder.cpp
@@ -89,17 +89,17 @@ QAudioDecoder::~QAudioDecoder() = default;
/*!
Returns true is audio decoding is supported on this platform.
*/
-bool QAudioDecoder::isAvailable() const
+bool QAudioDecoder::isSupported() const
{
return decoder != nullptr;
}
/*!
- Returns the current state of the audio decoder.
+ Returns true if the decoder is currently running and decoding audio data.
*/
-QAudioDecoder::State QAudioDecoder::state() const
+bool QAudioDecoder::isDecoding() const
{
- return decoder ? decoder->state() : QAudioDecoder::StoppedState;
+ return decoder && decoder->isDecoding();
}
/*!
@@ -151,8 +151,10 @@ void QAudioDecoder::start()
*/
void QAudioDecoder::stop()
{
- if (decoder != nullptr)
- decoder->stop();
+ if (!decoder)
+ return;
+
+ decoder->stop();
}
/*!
@@ -207,47 +209,9 @@ QIODevice *QAudioDecoder::sourceDevice() const
*/
void QAudioDecoder::setSourceDevice(QIODevice *device)
{
- if (decoder != nullptr)
- decoder->setSourceDevice(device);
-}
-
-/*!
- Returns the current audio format of the decoded stream.
-
- Any buffers returned should have this format.
-
- \sa setAudioFormat(), formatChanged()
-*/
-QAudioFormat QAudioDecoder::audioFormat() const
-{
- if (decoder)
- return decoder->audioFormat();
- return QAudioFormat();
-}
-
-/*!
- Set the desired audio format for decoded samples to \a format.
-
- This property can only be set while the decoder is stopped.
- Setting this property at other times will be ignored.
-
- If the decoder does not support this format, \l error() will
- be set to \c FormatError.
-
- If you do not specify a format, the format of the decoded
- audio itself will be used. Otherwise, some format conversion
- will be applied.
-
- If you wish to reset the decoded format to that of the original
- audio file, you can specify an invalid \a format.
-*/
-void QAudioDecoder::setAudioFormat(const QAudioFormat &format)
-{
- if (state() != QAudioDecoder::StoppedState)
+ if (!decoder)
return;
-
- if (decoder != nullptr)
- decoder->setAudioFormat(format);
+ decoder->setSourceDevice(device);
}
/*!
diff --git a/src/multimedia/audio/qaudiodecoder.h b/src/multimedia/audio/qaudiodecoder.h
index 9dd257cc9..465bb3974 100644
--- a/src/multimedia/audio/qaudiodecoder.h
+++ b/src/multimedia/audio/qaudiodecoder.h
@@ -52,18 +52,11 @@ class Q_MULTIMEDIA_EXPORT QAudioDecoder : public QObject
{
Q_OBJECT
Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
- Q_PROPERTY(State state READ state NOTIFY stateChanged)
+ Q_PROPERTY(bool isDecoding READ isDecoding NOTIFY isDecodingChanged)
Q_PROPERTY(QString error READ errorString)
Q_PROPERTY(bool bufferAvailable READ bufferAvailable NOTIFY bufferAvailableChanged)
public:
- enum State
- {
- StoppedState,
- DecodingState
- };
- Q_ENUM(State)
-
enum Error
{
NoError,
@@ -77,8 +70,8 @@ public:
explicit QAudioDecoder(QObject *parent = nullptr);
~QAudioDecoder();
- bool isAvailable() const;
- State state() const;
+ bool isSupported() const;
+ bool isDecoding() const;
QUrl source() const;
void setSource(const QUrl &fileName);
@@ -86,9 +79,6 @@ public:
QIODevice* sourceDevice() const;
void setSourceDevice(QIODevice *device);
- QAudioFormat audioFormat() const;
- void setAudioFormat(const QAudioFormat &format);
-
Error error() const;
QString errorString() const;
@@ -106,9 +96,7 @@ Q_SIGNALS:
void bufferAvailableChanged(bool);
void bufferReady();
void finished();
-
- void stateChanged(QAudioDecoder::State newState);
- void formatChanged(const QAudioFormat &format);
+ void isDecodingChanged(bool);
void error(QAudioDecoder::Error error);
@@ -124,7 +112,6 @@ private:
QT_END_NAMESPACE
-Q_MEDIA_ENUM_DEBUG(QAudioDecoder, State)
Q_MEDIA_ENUM_DEBUG(QAudioDecoder, Error)
#endif // QAUDIODECODER_H
diff --git a/src/multimedia/audio/qaudioformat.cpp b/src/multimedia/audio/qaudioformat.cpp
index 2de431dc9..c29c82914 100644
--- a/src/multimedia/audio/qaudioformat.cpp
+++ b/src/multimedia/audio/qaudioformat.cpp
@@ -170,18 +170,18 @@ QT_BEGIN_NAMESPACE
*/
/*!
- Returns the number of bytes required for this audio format for \a duration microseconds.
+ Returns the number of bytes required for this audio format for \a microseconds.
Returns 0 if this format is not valid.
- Note that some rounding may occur if \a duration is not an exact fraction of the
+ Note that some rounding may occur if \a microseconds is not an exact fraction of the
sampleRate().
\sa durationForBytes()
*/
-qint32 QAudioFormat::bytesForDuration(qint64 duration) const
+qint32 QAudioFormat::bytesForDuration(qint64 microseconds) const
{
- return bytesPerFrame() * framesForDuration(duration);
+ return bytesPerFrame() * framesForDuration(microseconds);
}
/*!
@@ -239,17 +239,17 @@ qint32 QAudioFormat::framesForBytes(qint32 byteCount) const
}
/*!
- Returns the number of frames required to represent \a duration microseconds in this format.
+ Returns the number of frames required to represent \a microseconds in this format.
- Note that some rounding may occur if \a duration is not an exact fraction of the
+ Note that some rounding may occur if \a microseconds is not an exact fraction of the
\l sampleRate().
*/
-qint32 QAudioFormat::framesForDuration(qint64 duration) const
+qint32 QAudioFormat::framesForDuration(qint64 microseconds) const
{
if (!isValid())
return 0;
- return qint32((duration * sampleRate()) / 1000000LL);
+ return qint32((microseconds * sampleRate()) / 1000000LL);
}
/*!
diff --git a/src/multimedia/audio/qaudioformat.h b/src/multimedia/audio/qaudioformat.h
index ca0e9a6f6..c5580e7f2 100644
--- a/src/multimedia/audio/qaudioformat.h
+++ b/src/multimedia/audio/qaudioformat.h
@@ -77,13 +77,13 @@ public:
constexpr SampleFormat sampleFormat() const noexcept { return m_sampleFormat; }
// Helper functions
- Q_MULTIMEDIA_EXPORT qint32 bytesForDuration(qint64 duration) const;
+ Q_MULTIMEDIA_EXPORT qint32 bytesForDuration(qint64 microseconds) const;
Q_MULTIMEDIA_EXPORT qint64 durationForBytes(qint32 byteCount) const;
Q_MULTIMEDIA_EXPORT qint32 bytesForFrames(qint32 frameCount) const;
Q_MULTIMEDIA_EXPORT qint32 framesForBytes(qint32 byteCount) const;
- Q_MULTIMEDIA_EXPORT qint32 framesForDuration(qint64 duration) const;
+ Q_MULTIMEDIA_EXPORT qint32 framesForDuration(qint64 microseconds) const;
Q_MULTIMEDIA_EXPORT qint64 durationForFrames(qint32 frameCount) const;
constexpr int bytesPerFrame() const { return bytesPerSample()*channelCount(); }
diff --git a/src/multimedia/camera/qcamera.cpp b/src/multimedia/camera/qcamera.cpp
index 4a7ef70d6..5fca81320 100644
--- a/src/multimedia/camera/qcamera.cpp
+++ b/src/multimedia/camera/qcamera.cpp
@@ -42,7 +42,7 @@
#include <qcameradevice.h>
#include <private/qplatformcamera_p.h>
-#include <private/qplatformcameraimagecapture_p.h>
+#include <private/qplatformimagecapture_p.h>
#include <private/qplatformmediaintegration_p.h>
#include <private/qplatformmediacapture_p.h>
#include <qmediadevices.h>
@@ -270,18 +270,6 @@ QCamera::Features QCamera::supportedFeatures() const
*/
/*!
- Returns the current status of the camers.
-*/
-QCamera::Status QCamera::status() const
-{
- if(d_func()->control)
- return (QCamera::Status)d_func()->control->status();
-
- return QCamera::UnavailableStatus;
-}
-
-
-/*!
Returns the capture session this camera is connected to, or
a nullptr if the camera is not connected to a capture session.
diff --git a/src/multimedia/camera/qcamera.h b/src/multimedia/camera/qcamera.h
index 2dccb1080..51e9d4e25 100644
--- a/src/multimedia/camera/qcamera.h
+++ b/src/multimedia/camera/qcamera.h
@@ -64,7 +64,6 @@ class Q_MULTIMEDIA_EXPORT QCamera : public QObject
{
Q_OBJECT
Q_PROPERTY(bool active READ isActive WRITE setActive NOTIFY activeChanged)
- Q_PROPERTY(QCamera::Status status READ status NOTIFY statusChanged)
Q_PROPERTY(QCameraDevice cameraDevice READ cameraDevice WRITE setCameraDevice NOTIFY cameraDeviceChanged)
Q_PROPERTY(Error error READ error NOTIFY errorChanged)
Q_PROPERTY(QString errorString READ errorString NOTIFY errorChanged)
@@ -90,15 +89,6 @@ class Q_MULTIMEDIA_EXPORT QCamera : public QObject
Q_PROPERTY(Features supportedFeatures READ supportedFeatures NOTIFY supportedFeaturesChanged)
public:
- enum Status {
- UnavailableStatus,
- InactiveStatus,
- StartingStatus,
- StoppingStatus,
- ActiveStatus
- };
- Q_ENUM(Status)
-
enum Error
{
NoError,
@@ -182,8 +172,6 @@ public:
bool isAvailable() const;
bool isActive() const;
- Status status() const;
-
QMediaCaptureSession *captureSession() const;
QCameraDevice cameraDevice() const;
@@ -267,7 +255,6 @@ public Q_SLOTS:
Q_SIGNALS:
void activeChanged(bool);
- void statusChanged(QCamera::Status status);
void errorChanged();
void errorOccurred(QCamera::Error error, const QString &errorString);
void cameraDeviceChanged();
@@ -311,7 +298,6 @@ Q_DECLARE_OPERATORS_FOR_FLAGS(QCamera::Features)
QT_END_NAMESPACE
-Q_MEDIA_ENUM_DEBUG(QCamera, Status)
Q_MEDIA_ENUM_DEBUG(QCamera, Error)
#endif // QCAMERA_H
diff --git a/src/multimedia/camera/qcameraimagecapture.cpp b/src/multimedia/camera/qimagecapture.cpp
index 107688600..7b1a34920 100644
--- a/src/multimedia/camera/qcameraimagecapture.cpp
+++ b/src/multimedia/camera/qimagecapture.cpp
@@ -36,8 +36,8 @@
** $QT_END_LICENSE$
**
****************************************************************************/
-#include <qcameraimagecapture.h>
-#include <private/qplatformcameraimagecapture_p.h>
+#include <qimagecapture.h>
+#include <private/qplatformimagecapture_p.h>
#include <qmediametadata.h>
#include <private/qplatformmediacapture_p.h>
#include <private/qplatformmediaintegration_p.h>
@@ -55,15 +55,15 @@
QT_BEGIN_NAMESPACE
/*!
- \class QCameraImageCapture
+ \class QImageCapture
\inmodule QtMultimedia
\ingroup multimedia
\ingroup multimedia_camera
- \brief The QCameraImageCapture class is used for the recording of media content.
+ \brief The QImageCapture class is used for the recording of media content.
- The QCameraImageCapture class is a high level images recording class.
+ The QImageCapture 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.
@@ -74,31 +74,31 @@ QT_BEGIN_NAMESPACE
\sa QCamera
*/
-class QCameraImageCapturePrivate
+class QImageCapturePrivate
{
- Q_DECLARE_PUBLIC(QCameraImageCapture)
+ Q_DECLARE_PUBLIC(QImageCapture)
public:
QCamera *camera = nullptr;
QMediaCaptureSession *captureSession = nullptr;
- QPlatformCameraImageCapture *control = nullptr;
+ QPlatformImageCapture *control = nullptr;
- QCameraImageCapture::Error error = QCameraImageCapture::NoError;
+ QImageCapture::Error error = QImageCapture::NoError;
QString errorString;
QMediaMetaData metaData;
void _q_error(int id, int error, const QString &errorString);
- void unsetError() { error = QCameraImageCapture::NoError; errorString.clear(); }
+ void unsetError() { error = QImageCapture::NoError; errorString.clear(); }
- QCameraImageCapture *q_ptr;
+ QImageCapture *q_ptr;
};
-void QCameraImageCapturePrivate::_q_error(int id, int error, const QString &errorString)
+void QImageCapturePrivate::_q_error(int id, int error, const QString &errorString)
{
- Q_Q(QCameraImageCapture);
+ Q_Q(QImageCapture);
- this->error = QCameraImageCapture::Error(error);
+ this->error = QImageCapture::Error(error);
this->errorString = errorString;
emit q->errorChanged();
@@ -111,17 +111,17 @@ void QCameraImageCapturePrivate::_q_error(int id, int error, const QString &erro
Connect both an image capture object and a QCamera to a capture session to capture images.
*/
-QCameraImageCapture::QCameraImageCapture(QObject *parent)
- : QObject(parent), d_ptr(new QCameraImageCapturePrivate)
+QImageCapture::QImageCapture(QObject *parent)
+ : QObject(parent), d_ptr(new QImageCapturePrivate)
{
- Q_D(QCameraImageCapture);
+ Q_D(QImageCapture);
d->q_ptr = this;
d->control = QPlatformMediaIntegration::instance()->createImageCapture(this);
}
-void QCameraImageCapture::setCaptureSession(QMediaCaptureSession *session)
+void QImageCapture::setCaptureSession(QMediaCaptureSession *session)
{
- Q_D(QCameraImageCapture);
+ Q_D(QImageCapture);
d->captureSession = session;
QPlatformMediaCaptureSession *platformSession = session ? session->platformSession() : nullptr;
@@ -152,7 +152,7 @@ void QCameraImageCapture::setCaptureSession(QMediaCaptureSession *session)
Destroys images capture object.
*/
-QCameraImageCapture::~QCameraImageCapture()
+QImageCapture::~QImageCapture()
{
if (d_ptr->captureSession) {
d_ptr->captureSession->platformSession()->setImageCapture(nullptr);
@@ -164,7 +164,7 @@ QCameraImageCapture::~QCameraImageCapture()
/*!
Returns true if the images capture service ready to use.
*/
-bool QCameraImageCapture::isAvailable() const
+bool QImageCapture::isAvailable() const
{
return d_func()->control != nullptr && d_func()->captureSession->camera();
}
@@ -176,7 +176,7 @@ bool QCameraImageCapture::isAvailable() const
Use QMediaCaptureSession::setImageCapture() to connect the image capture to
a session.
*/
-QMediaCaptureSession *QCameraImageCapture::captureSession() const
+QMediaCaptureSession *QImageCapture::captureSession() const
{
return d_ptr->captureSession;
}
@@ -187,7 +187,7 @@ QMediaCaptureSession *QCameraImageCapture::captureSession() const
\sa errorString()
*/
-QCameraImageCapture::Error QCameraImageCapture::error() const
+QImageCapture::Error QImageCapture::error() const
{
return d_func()->error;
}
@@ -198,7 +198,7 @@ QCameraImageCapture::Error QCameraImageCapture::error() const
\sa error()
*/
-QString QCameraImageCapture::errorString() const
+QString QImageCapture::errorString() const
{
return d_func()->errorString;
}
@@ -207,18 +207,18 @@ QString QCameraImageCapture::errorString() const
Returns the meta data that will get embedded into the image. A couple of additional fields
such as a time stamp or location might get added by the camera backend.
*/
-QMediaMetaData QCameraImageCapture::metaData() const
+QMediaMetaData QImageCapture::metaData() const
{
- Q_D(const QCameraImageCapture);
+ Q_D(const QImageCapture);
return d->metaData;
}
/*!
Defines a set of meta data that will get embedded into the captured image.
*/
-void QCameraImageCapture::setMetaData(const QMediaMetaData &metaData)
+void QImageCapture::setMetaData(const QMediaMetaData &metaData)
{
- Q_D(QCameraImageCapture);
+ Q_D(QImageCapture);
d->metaData = metaData;
d->control->setMetaData(d->metaData);
emit metaDataChanged();
@@ -227,9 +227,9 @@ void QCameraImageCapture::setMetaData(const QMediaMetaData &metaData)
/*!
Adds additional meta data to be embedded into the captured image.
*/
-void QCameraImageCapture::addMetaData(const QMediaMetaData &metaData)
+void QImageCapture::addMetaData(const QMediaMetaData &metaData)
{
- Q_D(QCameraImageCapture);
+ Q_D(QImageCapture);
auto data = d->metaData;
for (auto k : metaData.keys())
data.insert(k, metaData.value(k));
@@ -237,16 +237,16 @@ void QCameraImageCapture::addMetaData(const QMediaMetaData &metaData)
}
/*!
- \property QCameraImageCapture::readyForCapture
+ \property QImageCapture::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
+bool QImageCapture::isReadyForCapture() const
{
- Q_D(const QCameraImageCapture);
+ Q_D(const QImageCapture);
if (!d->control || !d->captureSession || !d->control->isReadyForCapture())
return false;
auto *camera = d->captureSession->camera();
@@ -256,7 +256,7 @@ bool QCameraImageCapture::isReadyForCapture() const
}
/*!
- \fn QCameraImageCapture::readyForCaptureChanged(bool ready)
+ \fn QImageCapture::readyForCaptureChanged(bool ready)
Signals that a camera's \a ready for capture state has changed.
*/
@@ -265,9 +265,9 @@ bool QCameraImageCapture::isReadyForCapture() const
/*!
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().
+ followed by signals QImageCapture::imageExposed(),
+ QImageCapture::imageCaptured(), QImageCapture::imageSaved()
+ or QImageCapture::error().
If an empty \a file is passed, the camera backend choses
the default location and naming scheme for photos on the system,
@@ -278,14 +278,14 @@ bool QCameraImageCapture::isReadyForCapture() const
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
+ QImageCapture::capture returns the capture Id parameter, used with
imageExposed(), imageCaptured() and imageSaved() signals.
\sa isReadyForCapture()
*/
-int QCameraImageCapture::captureToFile(const QString &file)
+int QImageCapture::captureToFile(const QString &file)
{
- Q_D(QCameraImageCapture);
+ Q_D(QImageCapture);
d->unsetError();
@@ -305,18 +305,18 @@ int QCameraImageCapture::captureToFile(const QString &file)
/*!
Capture the image and make it available as a QImage.
This operation is asynchronous in majority of cases,
- followed by signals QCameraImageCapture::imageExposed(),
- QCameraImageCapture::imageCaptured()
- or QCameraImageCapture::error().
+ followed by signals QImageCapture::imageExposed(),
+ QImageCapture::imageCaptured()
+ or QImageCapture::error().
- QCameraImageCapture::capture returns the capture Id parameter, used with
+ QImageCapture::capture returns the capture Id parameter, used with
imageExposed(), imageCaptured() and imageSaved() signals.
\sa isReadyForCapture()
*/
-int QCameraImageCapture::capture()
+int QImageCapture::capture()
{
- Q_D(QCameraImageCapture);
+ Q_D(QImageCapture);
d->unsetError();
@@ -332,7 +332,7 @@ int QCameraImageCapture::capture()
}
/*!
- \enum QCameraImageCapture::Error
+ \enum QImageCapture::Error
\value NoError No Errors.
\value NotReadyError The service is not ready for capture yet.
@@ -343,33 +343,33 @@ int QCameraImageCapture::capture()
*/
/*!
- \fn QCameraImageCapture::error(int id, QCameraImageCapture::Error error, const QString &errorString)
+ \fn QImageCapture::error(int id, QImageCapture::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(QVideoFrameFormat::PixelFormat format)
+ \fn QImageCapture::bufferFormatChanged(QVideoFrameFormat::PixelFormat format)
Signal emitted when the buffer \a format for the buffer image capture has changed.
*/
/*!
- \fn QCameraImageCapture::imageExposed(int id)
+ \fn QImageCapture::imageExposed(int id)
Signal emitted when the frame with request \a id was exposed.
*/
/*!
- \fn QCameraImageCapture::imageCaptured(int id, const QImage &preview);
+ \fn QImageCapture::imageCaptured(int id, const QImage &preview);
Signal emitted when 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)
+ \fn QImageCapture::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.
@@ -378,16 +378,16 @@ int QCameraImageCapture::capture()
*/
/*!
- \fn QCameraImageCapture::imageAvailable(int id, const QVideoFrame &frame)
+ \fn QImageCapture::imageAvailable(int id, const QVideoFrame &frame)
- Signal emitted when QCameraImageCapture::CaptureToBuffer is set and
+ Signal emitted when QImageCapture::CaptureToBuffer is set and
the \a frame with request \a id is available.
*/
/*!
- \fn QCameraImageCapture::imageSaved(int id, const QString &fileName)
+ \fn QImageCapture::imageSaved(int id, const QString &fileName)
- Signal emitted when QCameraImageCapture::CaptureToFile is set and
+ Signal emitted when QImageCapture::CaptureToFile is set and
the frame with request \a id was saved to \a fileName.
*/
@@ -395,9 +395,9 @@ int QCameraImageCapture::capture()
Returns the image format.
*/
-QCameraImageCapture::FileFormat QCameraImageCapture::fileFormat() const
+QImageCapture::FileFormat QImageCapture::fileFormat() const
{
- Q_D(const QCameraImageCapture);
+ Q_D(const QImageCapture);
if (!d->control)
return UnspecifiedFormat;
return d->control->imageSettings().format();
@@ -406,9 +406,9 @@ QCameraImageCapture::FileFormat QCameraImageCapture::fileFormat() const
/*!
Sets the image \a format.
*/
-void QCameraImageCapture::setFileFormat(QCameraImageCapture::FileFormat format)
+void QImageCapture::setFileFormat(QImageCapture::FileFormat format)
{
- Q_D(QCameraImageCapture);
+ Q_D(QImageCapture);
if (!d->control)
return;
auto fmt = d->control->imageSettings();
@@ -419,12 +419,12 @@ void QCameraImageCapture::setFileFormat(QCameraImageCapture::FileFormat format)
emit fileFormatChanged();
}
-QList<QCameraImageCapture::FileFormat> QCameraImageCapture::supportedFormats()
+QList<QImageCapture::FileFormat> QImageCapture::supportedFormats()
{
return QPlatformMediaIntegration::instance()->formatInfo()->imageFormats;
}
-QString QCameraImageCapture::fileFormatName(QCameraImageCapture::FileFormat f)
+QString QImageCapture::fileFormatName(QImageCapture::FileFormat f)
{
const char *name = nullptr;
switch (f) {
@@ -447,7 +447,7 @@ QString QCameraImageCapture::fileFormatName(QCameraImageCapture::FileFormat f)
return QString::fromUtf8(name);
}
-QString QCameraImageCapture::fileFormatDescription(QCameraImageCapture::FileFormat f)
+QString QImageCapture::fileFormatDescription(QImageCapture::FileFormat f)
{
const char *name = nullptr;
switch (f) {
@@ -474,9 +474,9 @@ QString QCameraImageCapture::fileFormatDescription(QCameraImageCapture::FileForm
Returns the resolution of the encoded image.
*/
-QSize QCameraImageCapture::resolution() const
+QSize QImageCapture::resolution() const
{
- Q_D(const QCameraImageCapture);
+ Q_D(const QImageCapture);
if (!d->control)
return QSize();
return d->control->imageSettings().resolution();
@@ -488,9 +488,9 @@ QSize QCameraImageCapture::resolution() const
An empty QSize indicates the encoder should make an optimal choice based on
what is available from the image source and the limitations of the codec.
*/
-void QCameraImageCapture::setResolution(const QSize &resolution)
+void QImageCapture::setResolution(const QSize &resolution)
{
- Q_D(QCameraImageCapture);
+ Q_D(QImageCapture);
if (!d->control)
return;
auto fmt = d->control->imageSettings();
@@ -506,13 +506,13 @@ void QCameraImageCapture::setResolution(const QSize &resolution)
\overload
*/
-void QCameraImageCapture::setResolution(int width, int height)
+void QImageCapture::setResolution(int width, int height)
{
setResolution(QSize(width, height));
}
/*!
- \enum QCameraImageCapture::EncodingQuality
+ \enum QImageCapture::EncodingQuality
Enumerates quality encoding levels.
@@ -526,9 +526,9 @@ void QCameraImageCapture::setResolution(int width, int height)
/*!
Returns the image encoding quality.
*/
-QCameraImageCapture::Quality QCameraImageCapture::quality() const
+QImageCapture::Quality QImageCapture::quality() const
{
- Q_D(const QCameraImageCapture);
+ Q_D(const QImageCapture);
if (!d->control)
return NormalQuality;
return d->control->imageSettings().quality();
@@ -537,9 +537,9 @@ QCameraImageCapture::Quality QCameraImageCapture::quality() const
/*!
Sets the image encoding \a quality.
*/
-void QCameraImageCapture::setQuality(Quality quality)
+void QImageCapture::setQuality(Quality quality)
{
- Q_D(QCameraImageCapture);
+ Q_D(QImageCapture);
if (!d->control)
return;
auto fmt = d->control->imageSettings();
@@ -552,4 +552,4 @@ void QCameraImageCapture::setQuality(Quality quality)
QT_END_NAMESPACE
-#include "moc_qcameraimagecapture.cpp"
+#include "moc_qimagecapture.cpp"
diff --git a/src/multimedia/camera/qcameraimagecapture.h b/src/multimedia/camera/qimagecapture.h
index 20b2bd6d1..ec52fd818 100644
--- a/src/multimedia/camera/qcameraimagecapture.h
+++ b/src/multimedia/camera/qimagecapture.h
@@ -57,8 +57,8 @@ class QImageEncoderSettings;
class QCamera;
class QMediaCaptureSession;
-class QCameraImageCapturePrivate;
-class Q_MULTIMEDIA_EXPORT QCameraImageCapture : public QObject
+class QImageCapturePrivate;
+class Q_MULTIMEDIA_EXPORT QImageCapture : public QObject
{
Q_OBJECT
Q_PROPERTY(bool readyForCapture READ isReadyForCapture NOTIFY readyForCaptureChanged)
@@ -99,8 +99,8 @@ public:
};
Q_ENUM(FileFormat)
- explicit QCameraImageCapture(QObject *parent = nullptr);
- ~QCameraImageCapture();
+ explicit QImageCapture(QObject *parent = nullptr);
+ ~QImageCapture();
bool isAvailable() const;
@@ -135,7 +135,7 @@ public Q_SLOTS:
Q_SIGNALS:
void errorChanged();
- void errorOccurred(int id, QCameraImageCapture::Error error, const QString &errorString);
+ void errorOccurred(int id, QImageCapture::Error error, const QString &errorString);
void readyForCaptureChanged(bool ready);
void metaDataChanged();
@@ -152,19 +152,19 @@ Q_SIGNALS:
private:
// This is here to flag an incompatibilities with Qt 5
- QCameraImageCapture(QCamera *) = delete;
+ QImageCapture(QCamera *) = delete;
friend class QMediaCaptureSession;
void setCaptureSession(QMediaCaptureSession *session);
- QCameraImageCapturePrivate *d_ptr;
- Q_DISABLE_COPY(QCameraImageCapture)
- Q_DECLARE_PRIVATE(QCameraImageCapture)
+ QImageCapturePrivate *d_ptr;
+ Q_DISABLE_COPY(QImageCapture)
+ Q_DECLARE_PRIVATE(QImageCapture)
Q_PRIVATE_SLOT(d_func(), void _q_error(int, int, const QString &))
};
QT_END_NAMESPACE
-Q_MEDIA_ENUM_DEBUG(QCameraImageCapture, Error)
+Q_MEDIA_ENUM_DEBUG(QImageCapture, Error)
#endif
diff --git a/src/multimedia/doc/snippets/multimedia-snippets/camera.cpp b/src/multimedia/doc/snippets/multimedia-snippets/camera.cpp
index 0407be1aa..fa2ca6d25 100644
--- a/src/multimedia/doc/snippets/multimedia-snippets/camera.cpp
+++ b/src/multimedia/doc/snippets/multimedia-snippets/camera.cpp
@@ -44,7 +44,7 @@
#include "qmediarecorder.h"
#include "qmediadevices.h"
#include "qmediacapturesession.h"
-#include "qcameraimagecapture.h"
+#include "qimagecapture.h"
#include "qvideosink.h"
#include <QtMultimediaWidgets/qvideowidget.h>
#include <QtGui/qscreen.h>
@@ -54,7 +54,7 @@
/* Globals so that everything is consistent. */
QCamera *camera = 0;
QMediaRecorder *recorder = 0;
-QCameraImageCapture *imageCapture = 0;
+QImageCapture *imageCapture = 0;
//! [Camera overview check]
bool checkCameraAvailability()
@@ -135,7 +135,7 @@ void overview_still()
QMediaCaptureSession captureSession;
camera = new QCamera;
captureSession.setCamera(camera);
- imageCapture = new QCameraImageCapture(camera);
+ imageCapture = new QImageCapture(camera);
captureSession.setImageCapture(imageCapture);
camera->start(); // Viewfinder frames start flowing
@@ -216,7 +216,7 @@ void camera_blah()
preview->show();
captureSession.setVideoOutput(preview);
- imageCapture = new QCameraImageCapture(camera);
+ imageCapture = new QImageCapture(camera);
captureSession.setImageCapture(imageCapture);
camera->start();
diff --git a/src/multimedia/doc/snippets/multimedia-snippets/media.cpp b/src/multimedia/doc/snippets/multimedia-snippets/media.cpp
index fd76e679e..1e905484e 100644
--- a/src/multimedia/doc/snippets/multimedia-snippets/media.cpp
+++ b/src/multimedia/doc/snippets/multimedia-snippets/media.cpp
@@ -47,7 +47,7 @@
#include "qplatformmediaplayer_p.h"
#include "qmediaplayer.h"
#include "qvideowidget.h"
-#include "qcameraimagecapture.h"
+#include "qimagecapture.h"
#include "qcamera.h"
#include "qcameraviewfinder.h"
#include "qaudiorecorder.h"
@@ -73,7 +73,7 @@ private:
QMediaRecorder *recorder;
QCamera *camera;
QCameraViewfinder *viewfinder;
- QCameraImageCapture *imageCapture;
+ QImageCapture *imageCapture;
QString fileName;
QMediaContent image1;
@@ -100,7 +100,7 @@ void MediaExample::recorderSettings()
void MediaExample::imageSettings()
{
//! [Image encoder settings]
- imageCapture->setFileFormat(QCameraImageCapture::JPEG);
+ imageCapture->setFileFormat(QImageCapture::JPEG);
imageCapture->setResolution(1600, 1200);
//! [Image encoder settings]
}
diff --git a/src/multimedia/doc/src/cameraoverview.qdoc b/src/multimedia/doc/src/cameraoverview.qdoc
index 001ca1832..09c7f3632 100644
--- a/src/multimedia/doc/src/cameraoverview.qdoc
+++ b/src/multimedia/doc/src/cameraoverview.qdoc
@@ -196,7 +196,7 @@ account the camera sensor orientation and the current display orientation.
\section2 Still Images
After setting up a viewfinder and finding something photogenic,
-to capture an image we need to initialize a new QCameraImageCapture
+to capture an image we need to initialize a new QImageCapture
object. All that is then needed is to start the camera and capture the image.
\snippet multimedia-snippets/camera.cpp Camera overview capture
@@ -276,7 +276,7 @@ Various operations such as image capture and auto focusing occur
asynchrously. These operations can often be canceled by the start of a new
operation as long as this is supported by the camera. For image capture,
the operation can be canceled by calling
-\l {QCameraImageCapture::cancelCapture()}{cancelCapture()}. For AutoFocus,
+\l {QImageCapture::cancelCapture()}{cancelCapture()}. For AutoFocus,
autoexposure or white balance cancellation can be done by calling
\e {QCamera::unlock(QCamera::LockFocus)}.
diff --git a/src/multimedia/doc/src/multimedia.qdoc b/src/multimedia/doc/src/multimedia.qdoc
index c554d5898..d5f0322c3 100644
--- a/src/multimedia/doc/src/multimedia.qdoc
+++ b/src/multimedia/doc/src/multimedia.qdoc
@@ -132,7 +132,7 @@ For some quick recipes, look at the overviews above and consult this table:
\li \l {Camera Example}{camera},
\l {QML Camera Example}{declarative-camera}
\li \l Camera
- \li QCamera, QCameraImageCapture
+ \li QCamera, QImageCapture
\row
\li Capturing movies
\li \l {Camera Example}{camera},
diff --git a/src/multimedia/doc/src/qtmultimedia-index.qdoc b/src/multimedia/doc/src/qtmultimedia-index.qdoc
index 5e2f4d98f..598a67456 100644
--- a/src/multimedia/doc/src/qtmultimedia-index.qdoc
+++ b/src/multimedia/doc/src/qtmultimedia-index.qdoc
@@ -117,7 +117,7 @@
\li QCamera
\li Access camera viewfinder.
\row
- \li QCameraImageCapture
+ \li QImageCapture
\li Capture still images with a camera.
\row
\li QMediaRecorder
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcameracontrol.cpp b/src/multimedia/platform/android/mediacapture/qandroidcameracontrol.cpp
index 3e3f58b51..e606896a9 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidcameracontrol.cpp
+++ b/src/multimedia/platform/android/mediacapture/qandroidcameracontrol.cpp
@@ -73,11 +73,6 @@ bool QAndroidCameraControl::isActive() const
return m_cameraSession->isActive();
}
-QCamera::Status QAndroidCameraControl::status() const
-{
- return m_cameraSession->status();
-}
-
void QAndroidCameraControl::setCamera(const QCameraDevice &camera)
{
int id = 0;
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcameracontrol_p.h b/src/multimedia/platform/android/mediacapture/qandroidcameracontrol_p.h
index 56901a637..9076b7152 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidcameracontrol_p.h
+++ b/src/multimedia/platform/android/mediacapture/qandroidcameracontrol_p.h
@@ -70,8 +70,6 @@ public:
bool isActive() const override;
void setActive(bool active) override;
- QCamera::Status status() const override;
-
void setCamera(const QCameraDevice &camera) override;
void setCaptureSession(QPlatformMediaCaptureSession *session) override;
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp b/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp
index a5cb1a467..e15a04cc6 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp
+++ b/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp
@@ -65,7 +65,6 @@ QAndroidCameraSession::QAndroidCameraSession(QObject *parent)
, m_nativeOrientation(0)
, m_videoOutput(0)
, m_savedState(-1)
- , m_status(QCamera::InactiveStatus)
, m_previewStarted(false)
, m_lastImageCaptureId(0)
, m_readyForCapture(false)
@@ -108,7 +107,6 @@ void QAndroidCameraSession::setActive(bool active)
return;
m_active = active;
- emit activeChanged(m_active);
// If the application is inactive, the camera shouldn't be started. Save the desired state
// instead and it will be set when the application becomes active.
@@ -116,6 +114,8 @@ void QAndroidCameraSession::setActive(bool active)
setActiveHelper(active);
else
m_savedState = active;
+
+ emit activeChanged(m_active);
}
void QAndroidCameraSession::setActiveHelper(bool active)
@@ -125,10 +125,7 @@ void QAndroidCameraSession::setActiveHelper(bool active)
close();
} else {
if (!m_camera && !open()) {
- m_active = false;
emit error(QCamera::CameraError, QStringLiteral("Failed to open camera"));
- m_status = QCamera::InactiveStatus;
- emit statusChanged(m_status);
return;
}
startPreview();
@@ -161,9 +158,6 @@ bool QAndroidCameraSession::open()
{
close();
- m_status = QCamera::StartingStatus;
- emit statusChanged(m_status);
-
m_camera = AndroidCamera::open(m_selectedCamera);
if (m_camera) {
@@ -188,7 +182,7 @@ bool QAndroidCameraSession::open()
m_camera->notifyNewFrames(m_previewCallback);
emit opened();
- emit statusChanged(m_status);
+ setActive(true);
}
return m_camera != 0;
@@ -201,9 +195,6 @@ void QAndroidCameraSession::close()
stopPreview();
- m_status = QCamera::StoppingStatus;
- emit statusChanged(m_status);
-
m_readyForCapture = false;
m_currentImageCaptureId = -1;
m_currentImageCaptureFileName.clear();
@@ -213,8 +204,7 @@ void QAndroidCameraSession::close()
delete m_camera;
m_camera = 0;
- m_status = QCamera::InactiveStatus;
- emit statusChanged(m_status);
+ setActive(false);
}
void QAndroidCameraSession::setVideoOutput(QAndroidVideoOutput *output)
@@ -370,9 +360,6 @@ bool QAndroidCameraSession::startPreview()
|| (m_videoOutput->surfaceHolder() && !m_camera->setPreviewDisplay(m_videoOutput->surfaceHolder())))
return false;
- m_status = QCamera::StartingStatus;
- emit statusChanged(m_status);
-
applyImageSettings();
applyResolution(m_actualImageSettings.resolution());
@@ -394,9 +381,6 @@ void QAndroidCameraSession::stopPreview()
if (!m_camera || !m_previewStarted)
return;
- m_status = QCamera::StoppingStatus;
- emit statusChanged(m_status);
-
AndroidMultimediaUtils::enableOrientationListener(false);
m_camera->stopPreview();
@@ -463,7 +447,7 @@ void QAndroidCameraSession::applyImageSettings()
return;
// only supported format right now.
- m_actualImageSettings.setFormat(QCameraImageCapture::JPEG);
+ m_actualImageSettings.setFormat(QImageCapture::JPEG);
const QSize requestedResolution = m_requestedImageSettings.resolution();
const QList<QSize> supportedResolutions = m_camera->getSupportedPictureSizes();
@@ -485,19 +469,19 @@ void QAndroidCameraSession::applyImageSettings()
int jpegQuality = 100;
switch (m_requestedImageSettings.quality()) {
- case QCameraImageCapture::VeryLowQuality:
+ case QImageCapture::VeryLowQuality:
jpegQuality = 20;
break;
- case QCameraImageCapture::LowQuality:
+ case QImageCapture::LowQuality:
jpegQuality = 40;
break;
- case QCameraImageCapture::NormalQuality:
+ case QImageCapture::NormalQuality:
jpegQuality = 60;
break;
- case QCameraImageCapture::HighQuality:
+ case QImageCapture::HighQuality:
jpegQuality = 80;
break;
- case QCameraImageCapture::VeryHighQuality:
+ case QImageCapture::VeryHighQuality:
jpegQuality = 100;
break;
}
@@ -506,7 +490,7 @@ void QAndroidCameraSession::applyImageSettings()
bool QAndroidCameraSession::isReadyForCapture() const
{
- return m_status == QCamera::ActiveStatus && m_readyForCapture;
+ return isActive() && m_readyForCapture;
}
void QAndroidCameraSession::setReadyForCapture(bool ready)
@@ -523,7 +507,7 @@ int QAndroidCameraSession::capture(const QString &fileName)
++m_lastImageCaptureId;
if (!isReadyForCapture()) {
- emit imageCaptureError(m_lastImageCaptureId, QCameraImageCapture::NotReadyError,
+ emit imageCaptureError(m_lastImageCaptureId, QImageCapture::NotReadyError,
tr("Camera not ready"));
return m_lastImageCaptureId;
}
@@ -546,7 +530,7 @@ int QAndroidCameraSession::capture(const QString &fileName)
void QAndroidCameraSession::onCameraTakePictureFailed()
{
- emit imageCaptureError(m_currentImageCaptureId, QCameraImageCapture::ResourceError,
+ emit imageCaptureError(m_currentImageCaptureId, QImageCapture::ResourceError,
tr("Failed to capture image"));
// Preview needs to be restarted and the preview call back must be setup again
@@ -616,17 +600,12 @@ void QAndroidCameraSession::onCameraPictureCaptured(const QByteArray &data)
void QAndroidCameraSession::onCameraPreviewStarted()
{
- if (m_status == QCamera::StartingStatus) {
- m_status = QCamera::ActiveStatus;
- emit statusChanged(m_status);
- }
-
setReadyForCapture(true);
}
void QAndroidCameraSession::onCameraPreviewFailedToStart()
{
- if (m_status == QCamera::StartingStatus) {
+ if (isActive()) {
Q_EMIT error(QCamera::CameraError, tr("Camera preview failed to start."));
AndroidMultimediaUtils::enableOrientationListener(false);
@@ -638,20 +617,14 @@ void QAndroidCameraSession::onCameraPreviewFailedToStart()
}
m_previewStarted = false;
- m_status = QCamera::InactiveStatus;
- emit statusChanged(m_status);
-
+ setActive(false);
setReadyForCapture(false);
}
}
void QAndroidCameraSession::onCameraPreviewStopped()
{
- if (m_status == QCamera::StoppingStatus) {
- m_status = QCamera::InactiveStatus;
- emit statusChanged(m_status);
- }
-
+ setActive(false);
setReadyForCapture(false);
}
@@ -681,11 +654,11 @@ void QAndroidCameraSession::processCapturedImage(int id,
emit imageSaved(id, actualFileName);
} else {
- emit imageCaptureError(id, QCameraImageCapture::OutOfSpaceError, file.errorString());
+ emit imageCaptureError(id, QImageCapture::OutOfSpaceError, file.errorString());
}
} else {
const QString errorMessage = tr("Could not open destination file: %1").arg(actualFileName);
- emit imageCaptureError(id, QCameraImageCapture::ResourceError, errorMessage);
+ emit imageCaptureError(id, QImageCapture::ResourceError, errorMessage);
}
} else {
QVideoFrame frame(new QMemoryVideoBuffer(data, -1), QVideoFrameFormat(resolution, QVideoFrameFormat::Format_Jpeg));
@@ -738,8 +711,7 @@ void QAndroidCameraSession::onApplicationStateChanged(Qt::ApplicationState state
if (!m_keepActive && m_active) {
m_savedState = m_active;
close();
- m_active = false;
- emit activeChanged(m_active);
+ setActive(false);
}
break;
case Qt::ApplicationActive:
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcamerasession_p.h b/src/multimedia/platform/android/mediacapture/qandroidcamerasession_p.h
index 5513e5399..195a90bfb 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidcamerasession_p.h
+++ b/src/multimedia/platform/android/mediacapture/qandroidcamerasession_p.h
@@ -53,11 +53,11 @@
//
#include <qcamera.h>
-#include <QCameraImageCapture>
+#include <QImageCapture>
#include <QSet>
#include <QMutex>
#include <private/qmediastoragelocation_p.h>
-#include <private/qplatformcameraimagecapture_p.h>
+#include <private/qplatformimagecapture_p.h>
#include "androidcamera_p.h"
QT_BEGIN_NAMESPACE
@@ -81,8 +81,6 @@ public:
bool isActive() const { return m_active; }
void setActive(bool active);
- QCamera::Status status() const { return m_status; }
-
void applyResolution(const QSize &captureSize = QSize(), bool restartPreview = true);
QAndroidVideoOutput *videoOutput() const { return m_videoOutput; }
@@ -113,7 +111,6 @@ public:
void setVideoSink(QVideoSink *surface);
Q_SIGNALS:
- void statusChanged(QCamera::Status status);
void activeChanged(bool);
void error(int error, const QString &errorString);
void opened();
@@ -170,7 +167,6 @@ private:
bool m_active = false;
int m_savedState = -1;
- QCamera::Status m_status;
bool m_previewStarted;
QAndroidCameraVideoRendererControl *m_renderer = nullptr;
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcameravideorenderercontrol.cpp b/src/multimedia/platform/android/mediacapture/qandroidcameravideorenderercontrol.cpp
index 96b10b084..9a4b2440a 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidcameravideorenderercontrol.cpp
+++ b/src/multimedia/platform/android/mediacapture/qandroidcameravideorenderercontrol.cpp
@@ -148,12 +148,12 @@ void QAndroidCameraDataVideoOutput::configureFormat()
} else {
m_control->cameraSession()->setPreviewCallback(this);
- if (m_control->cameraSession()->status() > QCamera::InactiveStatus)
+ if (m_control->cameraSession()->isActive())
m_control->cameraSession()->camera()->stopPreview();
m_control->cameraSession()->setPreviewFormat(qt_androidImageFormatFromPixelFormat(m_pixelFormat));
- if (m_control->cameraSession()->status() > QCamera::InactiveStatus)
+ if (m_control->cameraSession()->isActive())
m_control->cameraSession()->camera()->startPreview();
}
}
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcaptureservice.cpp b/src/multimedia/platform/android/mediacapture/qandroidcaptureservice.cpp
index 97b436ee3..99ebcc3b7 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidcaptureservice.cpp
+++ b/src/multimedia/platform/android/mediacapture/qandroidcaptureservice.cpp
@@ -45,7 +45,7 @@
#include "qandroidcameracontrol_p.h"
#include "qandroidcamerasession_p.h"
#include "qandroidcameravideorenderercontrol_p.h"
-#include "qandroidcameraimagecapturecontrol_p.h"
+#include "qandroidimagecapture_p.h"
#include "qmediadevices.h"
#include "qaudiodevice.h"
@@ -94,14 +94,14 @@ void QAndroidCaptureService::setCamera(QPlatformCamera *camera)
emit cameraChanged();
}
-QPlatformCameraImageCapture *QAndroidCaptureService::imageCapture()
+QPlatformImageCapture *QAndroidCaptureService::imageCapture()
{
return m_imageCaptureControl;
}
-void QAndroidCaptureService::setImageCapture(QPlatformCameraImageCapture *imageCapture)
+void QAndroidCaptureService::setImageCapture(QPlatformImageCapture *imageCapture)
{
- QAndroidCameraImageCaptureControl *control = static_cast<QAndroidCameraImageCaptureControl *>(imageCapture);
+ QAndroidImageCapture *control = static_cast<QAndroidImageCapture *>(imageCapture);
if (m_imageCaptureControl == control)
return;
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcaptureservice_p.h b/src/multimedia/platform/android/mediacapture/qandroidcaptureservice_p.h
index 6e8dc5460..0f87965e1 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidcaptureservice_p.h
+++ b/src/multimedia/platform/android/mediacapture/qandroidcaptureservice_p.h
@@ -61,7 +61,7 @@ class QAndroidMediaEncoder;
class QAndroidCaptureSession;
class QAndroidCameraControl;
class QAndroidCameraSession;
-class QAndroidCameraImageCaptureControl;
+class QAndroidImageCapture;
class QAndroidCaptureService : public QPlatformMediaCaptureSession
{
@@ -74,8 +74,8 @@ public:
QPlatformCamera *camera() override;
void setCamera(QPlatformCamera *camera) override;
- QPlatformCameraImageCapture *imageCapture() override;
- void setImageCapture(QPlatformCameraImageCapture *imageCapture) override;
+ QPlatformImageCapture *imageCapture() override;
+ void setImageCapture(QPlatformImageCapture *imageCapture) override;
QPlatformMediaEncoder *mediaEncoder() override;
void setMediaEncoder(QPlatformMediaEncoder *encoder) override;
@@ -94,7 +94,7 @@ private:
QAndroidCaptureSession *m_captureSession = nullptr;
QAndroidCameraControl *m_cameraControl = nullptr;
QAndroidCameraSession *m_cameraSession = nullptr;
- QAndroidCameraImageCaptureControl *m_imageCaptureControl;
+ QAndroidImageCapture *m_imageCaptureControl;
};
QT_END_NAMESPACE
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcapturesession.cpp b/src/multimedia/platform/android/mediacapture/qandroidcapturesession.cpp
index 021159b32..25b17bdcc 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidcapturesession.cpp
+++ b/src/multimedia/platform/android/mediacapture/qandroidcapturesession.cpp
@@ -75,20 +75,10 @@ QAndroidCaptureSession::QAndroidCaptureSession(QAndroidCameraSession *cameraSess
if (cameraSession) {
connect(cameraSession, SIGNAL(opened()), this, SLOT(onCameraOpened()));
- connect(cameraSession, &QAndroidCameraSession::statusChanged, this,
- [this](QCamera::Status status) {
- if (status == QCamera::UnavailableStatus) {
- setState(QMediaRecorder::StoppedState);
- setStatus(QMediaRecorder::UnavailableStatus);
- return;
- }
-
- // Stop recording when stopping the camera.
- if (status == QCamera::StoppingStatus) {
- setState(QMediaRecorder::StoppedState);
- setStatus(QMediaRecorder::StoppedStatus);
- return;
- }
+ connect(cameraSession, &QAndroidCameraSession::activeChanged, this,
+ [this](bool isActive) {
+ if (!isActive)
+ stop();
});
connect(cameraSession, &QAndroidCameraSession::readyForCaptureChanged, this,
[this](bool ready) {
@@ -134,56 +124,12 @@ void QAndroidCaptureSession::setAudioInput(QPlatformAudioInput *input)
m_audioSource = AndroidMediaRecorder::DefaultAudioSource;
}
-QUrl QAndroidCaptureSession::outputLocation() const
-{
- return m_actualOutputLocation;
-}
-
-bool QAndroidCaptureSession::setOutputLocation(const QUrl &location)
-{
- if (m_requestedOutputLocation == location)
- return false;
-
- m_actualOutputLocation = QUrl();
- m_requestedOutputLocation = location;
-
- if (m_requestedOutputLocation.isEmpty())
- return true;
-
- if (m_requestedOutputLocation.isValid()
- && (m_requestedOutputLocation.isLocalFile() || m_requestedOutputLocation.isRelative())) {
- return true;
- }
-
- m_requestedOutputLocation = QUrl();
- return false;
-}
-
QMediaRecorder::RecorderState QAndroidCaptureSession::state() const
{
return m_state;
}
-void QAndroidCaptureSession::setState(QMediaRecorder::RecorderState state)
-{
- if (m_state == state)
- return;
-
- switch (state) {
- case QMediaRecorder::StoppedState:
- stop();
- break;
- case QMediaRecorder::RecordingState:
- start();
- break;
- case QMediaRecorder::PausedState:
- // Not supported by Android API
- qWarning("QMediaRecorder::PausedState is not supported on Android");
- break;
- }
-}
-
-void QAndroidCaptureSession::start()
+void QAndroidCaptureSession::start(const QUrl &outputLocation)
{
if (m_state == QMediaRecorder::RecordingState || m_status != QMediaRecorder::StoppedStatus)
return;
@@ -193,6 +139,7 @@ void QAndroidCaptureSession::start()
if (m_mediaRecorder) {
m_mediaRecorder->release();
delete m_mediaRecorder;
+ m_mediaRecorder = nullptr;
}
const bool granted = m_cameraSession
@@ -242,8 +189,8 @@ void QAndroidCaptureSession::start()
// Set output file
QString filePath = m_mediaStorageLocation.generateFileName(
- m_requestedOutputLocation.isLocalFile() ? m_requestedOutputLocation.toLocalFile()
- : m_requestedOutputLocation.toString(),
+ outputLocation.isLocalFile() ? outputLocation.toLocalFile()
+ : outputLocation.toString(),
m_cameraSession ? QMediaStorageLocation::Movies
: QMediaStorageLocation::Sounds,
m_cameraSession ? QLatin1String("VID_")
@@ -313,7 +260,7 @@ void QAndroidCaptureSession::stop(bool error)
delete m_mediaRecorder;
m_mediaRecorder = 0;
- if (m_cameraSession && m_cameraSession->status() == QCamera::ActiveStatus) {
+ if (m_cameraSession && m_cameraSession->isActive()) {
// Viewport needs to be restarted after recording
restartViewfinder();
}
@@ -328,8 +275,7 @@ void QAndroidCaptureSession::stop(bool error)
if (mediaPath.startsWith(standardLoc))
AndroidMultimediaUtils::registerMediaFile(mediaPath);
- m_actualOutputLocation = m_usedOutputLocation;
- emit actualLocationChanged(m_actualOutputLocation);
+ emit actualLocationChanged(m_usedOutputLocation);
}
m_state = QMediaRecorder::StoppedState;
@@ -545,11 +491,11 @@ void QAndroidCaptureSession::onInfo(int what, int extra)
Q_UNUSED(extra);
if (what == 800) {
// MEDIA_RECORDER_INFO_MAX_DURATION_REACHED
- setState(QMediaRecorder::StoppedState);
+ stop();
emit error(QMediaRecorder::OutOfSpaceError, QLatin1String("Maximum duration reached."));
} else if (what == 801) {
// MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED
- setState(QMediaRecorder::StoppedState);
+ stop();
emit error(QMediaRecorder::OutOfSpaceError, QLatin1String("Maximum file size reached."));
}
}
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcapturesession_p.h b/src/multimedia/platform/android/mediacapture/qandroidcapturesession_p.h
index 43f26969b..87abdf807 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidcapturesession_p.h
+++ b/src/multimedia/platform/android/mediacapture/qandroidcapturesession_p.h
@@ -77,14 +77,12 @@ public:
void setAudioInput(QPlatformAudioInput *input);
- QUrl outputLocation() const;
- bool setOutputLocation(const QUrl &location);
-
QMediaRecorder::RecorderState state() const;
- void setState(QMediaRecorder::RecorderState state);
-
QMediaRecorder::Status status() const;
+ void start(const QUrl &outputLocation);
+ void stop(bool error = false);
+
qint64 duration() const;
void setEncoderSettings(const QMediaEncoderSettings &settings);
@@ -160,8 +158,6 @@ private:
CaptureProfile getProfile(int id);
- void start();
- void stop(bool error = false);
void setStatus(QMediaRecorder::Status status);
@@ -183,9 +179,7 @@ private:
QMediaRecorder::RecorderState m_state;
QMediaRecorder::Status m_status;
- QUrl m_requestedOutputLocation;
QUrl m_usedOutputLocation;
- QUrl m_actualOutputLocation;
CaptureProfile m_defaultSettings;
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcameraimagecapturecontrol.cpp b/src/multimedia/platform/android/mediacapture/qandroidimagecapture.cpp
index c75d2b28b..a782ec9e0 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidcameraimagecapturecontrol.cpp
+++ b/src/multimedia/platform/android/mediacapture/qandroidimagecapture.cpp
@@ -37,50 +37,50 @@
**
****************************************************************************/
-#include "qandroidcameraimagecapturecontrol_p.h"
+#include "qandroidimagecapture_p.h"
#include "qandroidcamerasession_p.h"
#include "qandroidcaptureservice_p.h"
QT_BEGIN_NAMESPACE
-QAndroidCameraImageCaptureControl::QAndroidCameraImageCaptureControl(QCameraImageCapture *parent)
- : QPlatformCameraImageCapture(parent)
+QAndroidImageCapture::QAndroidImageCapture(QImageCapture *parent)
+ : QPlatformImageCapture(parent)
{
}
-bool QAndroidCameraImageCaptureControl::isReadyForCapture() const
+bool QAndroidImageCapture::isReadyForCapture() const
{
return m_session->isReadyForCapture();
}
-int QAndroidCameraImageCaptureControl::capture(const QString &fileName)
+int QAndroidImageCapture::capture(const QString &fileName)
{
return m_session->capture(fileName);
}
-int QAndroidCameraImageCaptureControl::captureToBuffer()
+int QAndroidImageCapture::captureToBuffer()
{
// ### implement me!
const QLatin1String errorMessage("Capturing to buffer not supported.");
QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
Q_ARG(int, -1),
- Q_ARG(int, QCameraImageCapture::NotSupportedFeatureError),
+ Q_ARG(int, QImageCapture::NotSupportedFeatureError),
Q_ARG(QString, errorMessage));
return -1;
}
-QImageEncoderSettings QAndroidCameraImageCaptureControl::imageSettings() const
+QImageEncoderSettings QAndroidImageCapture::imageSettings() const
{
return m_session->imageSettings();
}
-void QAndroidCameraImageCaptureControl::setImageSettings(const QImageEncoderSettings &settings)
+void QAndroidImageCapture::setImageSettings(const QImageEncoderSettings &settings)
{
m_session->setImageSettings(settings);
}
-void QAndroidCameraImageCaptureControl::setCaptureSession(QPlatformMediaCaptureSession *session)
+void QAndroidImageCapture::setCaptureSession(QPlatformMediaCaptureSession *session)
{
QAndroidCaptureService *captureSession = static_cast<QAndroidCaptureService *>(session);
if (m_service == captureSession)
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcameraimagecapturecontrol_p.h b/src/multimedia/platform/android/mediacapture/qandroidimagecapture_p.h
index 9db1a66e1..c5697b601 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidcameraimagecapturecontrol_p.h
+++ b/src/multimedia/platform/android/mediacapture/qandroidimagecapture_p.h
@@ -51,18 +51,18 @@
// We mean it.
//
-#include <private/qplatformcameraimagecapture_p.h>
+#include <private/qplatformimagecapture_p.h>
QT_BEGIN_NAMESPACE
class QAndroidCameraSession;
class QAndroidCaptureService;
-class QAndroidCameraImageCaptureControl : public QPlatformCameraImageCapture
+class QAndroidImageCapture : public QPlatformImageCapture
{
Q_OBJECT
public:
- explicit QAndroidCameraImageCaptureControl(QCameraImageCapture *parent = nullptr);
+ explicit QAndroidImageCapture(QImageCapture *parent = nullptr);
bool isReadyForCapture() const override;
diff --git a/src/multimedia/platform/android/mediacapture/qandroidmediaencoder.cpp b/src/multimedia/platform/android/mediacapture/qandroidmediaencoder.cpp
index 5b51d9281..50bb0f604 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidmediaencoder.cpp
+++ b/src/multimedia/platform/android/mediacapture/qandroidmediaencoder.cpp
@@ -49,14 +49,10 @@ QAndroidMediaEncoder::QAndroidMediaEncoder(QMediaRecorder *parent)
{
}
-QUrl QAndroidMediaEncoder::outputLocation() const
+bool QAndroidMediaEncoder::isLocationWritable(const QUrl &location) const
{
- return m_session->outputLocation();
-}
-
-bool QAndroidMediaEncoder::setOutputLocation(const QUrl &location)
-{
- return m_session->setOutputLocation(location);
+ return location.isValid()
+ && (location.isLocalFile() || location.isRelative());
}
QMediaRecorder::RecorderState QAndroidMediaEncoder::state() const
@@ -81,7 +77,21 @@ void QAndroidMediaEncoder::applySettings()
void QAndroidMediaEncoder::setState(QMediaRecorder::RecorderState state)
{
- m_session->setState(state);
+ if (!m_session)
+ return;
+
+ switch (state) {
+ case QMediaRecorder::StoppedState:
+ m_session->stop();
+ break;
+ case QMediaRecorder::RecordingState:
+ m_session->start(outputLocation());
+ break;
+ case QMediaRecorder::PausedState:
+ // Not supported by Android API
+ qWarning("QMediaEncoder::PausedState is not supported on Android");
+ break;
+ }
}
void QAndroidMediaEncoder::setEncoderSettings(const QMediaEncoderSettings &settings)
diff --git a/src/multimedia/platform/android/mediacapture/qandroidmediaencoder_p.h b/src/multimedia/platform/android/mediacapture/qandroidmediaencoder_p.h
index 237f1a5b4..6a1f41715 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidmediaencoder_p.h
+++ b/src/multimedia/platform/android/mediacapture/qandroidmediaencoder_p.h
@@ -64,8 +64,7 @@ class QAndroidMediaEncoder : public QPlatformMediaEncoder
public:
explicit QAndroidMediaEncoder(QMediaRecorder *parent);
- QUrl outputLocation() const override;
- bool setOutputLocation(const QUrl &location) override;
+ bool isLocationWritable(const QUrl &location) const override;
QMediaRecorder::RecorderState state() const override;
QMediaRecorder::Status status() const override;
qint64 duration() const override;
diff --git a/src/multimedia/platform/android/qandroidformatsinfo.cpp b/src/multimedia/platform/android/qandroidformatsinfo.cpp
index 4d31cc15d..0e421b658 100644
--- a/src/multimedia/platform/android/qandroidformatsinfo.cpp
+++ b/src/multimedia/platform/android/qandroidformatsinfo.cpp
@@ -53,7 +53,7 @@ QAndroidFormatInfo::QAndroidFormatInfo()
};
encoders = decoders;
- imageFormats << QCameraImageCapture::JPEG;
+ imageFormats << QImageCapture::JPEG;
}
QAndroidFormatInfo::~QAndroidFormatInfo()
diff --git a/src/multimedia/platform/android/qandroidintegration.cpp b/src/multimedia/platform/android/qandroidintegration.cpp
index 1a8a10a43..95b8bd39e 100644
--- a/src/multimedia/platform/android/qandroidintegration.cpp
+++ b/src/multimedia/platform/android/qandroidintegration.cpp
@@ -47,7 +47,7 @@
#include "private/androidsurfaceview_p.h"
#include "private/androidcamera_p.h"
#include "private/qandroidcameracontrol_p.h"
-#include "private/qandroidcameraimagecapturecontrol_p.h"
+#include "private/qandroidimagecapture_p.h"
#include "private/qandroidmediaencoder_p.h"
#include "private/androidmediarecorder_p.h"
#include "private/qandroidformatsinfo_p.h"
@@ -104,9 +104,9 @@ QPlatformMediaEncoder *QAndroidIntegration::createEncoder(QMediaRecorder *encode
return new QAndroidMediaEncoder(encoder);
}
-QPlatformCameraImageCapture *QAndroidIntegration::createImageCapture(QCameraImageCapture *imageCapture)
+QPlatformImageCapture *QAndroidIntegration::createImageCapture(QImageCapture *imageCapture)
{
- return new QAndroidCameraImageCaptureControl(imageCapture);
+ return new QAndroidImageCapture(imageCapture);
}
QPlatformAudioOutput *QAndroidIntegration::createAudioOutput(QAudioOutput *q)
diff --git a/src/multimedia/platform/android/qandroidintegration_p.h b/src/multimedia/platform/android/qandroidintegration_p.h
index 6df40672c..a242dc19a 100644
--- a/src/multimedia/platform/android/qandroidintegration_p.h
+++ b/src/multimedia/platform/android/qandroidintegration_p.h
@@ -70,7 +70,7 @@ public:
QPlatformMediaPlayer *createPlayer(QMediaPlayer *player) override;
QPlatformCamera *createCamera(QCamera *camera) override;
QPlatformMediaEncoder *createEncoder(QMediaRecorder *encoder) override;
- QPlatformCameraImageCapture *createImageCapture(QCameraImageCapture *imageCapture) override;
+ QPlatformImageCapture *createImageCapture(QImageCapture *imageCapture) override;
QPlatformAudioOutput *createAudioOutput(QAudioOutput *q) override;
diff --git a/src/multimedia/platform/android/wrappers/jni/androidmediametadataretriever.cpp b/src/multimedia/platform/android/wrappers/jni/androidmediametadataretriever.cpp
index b581fe255..fd5aa1604 100644
--- a/src/multimedia/platform/android/wrappers/jni/androidmediametadataretriever.cpp
+++ b/src/multimedia/platform/android/wrappers/jni/androidmediametadataretriever.cpp
@@ -143,7 +143,7 @@ bool AndroidMediaMetadataRetriever::setDataSource(const QUrl &url)
if (!ok)
return false;
- } else if (QNativeInterface::QAndroidApplication::sdkVersion() >= 14) {
+ } else if (QNativeInterface::QAndroidApplication::sdkVersion() >= 14 && url.scheme() != QLatin1String("content")) {
// On API levels >= 14, only setDataSource(String, Map<String, String>) accepts remote media
QJniObject string = QJniObject::fromString(url.toString(QUrl::FullyEncoded));
QJniObject hash("java/util/HashMap");
diff --git a/src/multimedia/platform/darwin/audio/avfaudiodecoder.mm b/src/multimedia/platform/darwin/audio/avfaudiodecoder.mm
index 2ff872212..ecea99f74 100644
--- a/src/multimedia/platform/darwin/audio/avfaudiodecoder.mm
+++ b/src/multimedia/platform/darwin/audio/avfaudiodecoder.mm
@@ -90,7 +90,7 @@ QT_USE_NAMESPACE
return;
const AudioStreamBasicDescription* const asbd = CMAudioFormatDescriptionGetStreamBasicDescription(formatDescription);
QAudioFormat qtFormat = CoreAudioUtils::toQAudioFormat(*asbd);
- if (!qtFormat.isValid() || qtFormat != m_decoder->audioFormat())
+ if (!qtFormat.isValid())
return;
// Get the required size to allocate to audioBufferList
@@ -314,7 +314,7 @@ void AVFAudioDecoder::setSourceDevice(QIODevice *device)
void AVFAudioDecoder::start()
{
Q_ASSERT(!m_buffersAvailable);
- if (m_state != QAudioDecoder::StoppedState)
+ if (isDecoding())
return;
if (m_position != -1) {
@@ -348,16 +348,13 @@ void AVFAudioDecoder::start()
];
if (m_device && m_loadingSource) {
- m_state = QAudioDecoder::DecodingState;
- emit stateChanged(m_state);
+ setIsDecoding(true);
return;
}
}
void AVFAudioDecoder::stop()
{
- QAudioDecoder::State oldState = m_state;
- m_state = QAudioDecoder::StoppedState;
if (m_asset)
[m_asset cancelLoading];
if (m_reader)
@@ -375,21 +372,7 @@ void AVFAudioDecoder::stop()
m_duration = -1;
emit durationChanged(m_duration);
}
- if (m_state != oldState)
- emit stateChanged(m_state);
-}
-
-QAudioFormat AVFAudioDecoder::audioFormat() const
-{
- return m_format;
-}
-
-void AVFAudioDecoder::setAudioFormat(const QAudioFormat &format)
-{
- if (m_format != format) {
- m_format = format;
- emit formatChanged(m_format);
- }
+ setIsDecoding(false);
}
QAudioBuffer AVFAudioDecoder::read()
@@ -444,18 +427,10 @@ void AVFAudioDecoder::initAssetReader()
// Set format
QAudioFormat format;
- if (m_format.isValid()) {
- format = m_format;
- } else {
- format = qt_format_for_audio_track(track);
- if (!format.isValid())
- {
- processInvalidMedia(QAudioDecoder::FormatError, tr("Unsupported source format"));
- return;
- }
- // ### Change QAudioDecoder's format to resolved one?
- m_format = format;
- emit formatChanged(m_format);
+ format = qt_format_for_audio_track(track);
+ if (!format.isValid()) {
+ processInvalidMedia(QAudioDecoder::FormatError, tr("Unsupported source format"));
+ return;
}
// Set duration
@@ -498,10 +473,7 @@ void AVFAudioDecoder::startReading()
return;
}
- QAudioDecoder::State oldState = m_state;
- m_state = QAudioDecoder::DecodingState;
- if (oldState != m_state)
- emit stateChanged(m_state);
+ setIsDecoding(true);
// Since copyNextSampleBuffer is synchronous, submit it to an async dispatch queue
// to run in a separate thread. Call the handleNextSampleBuffer "callback" on another
@@ -515,11 +487,8 @@ void AVFAudioDecoder::startReading()
CFRelease(sampleBuffer);
});
}
- if (m_reader.status == AVAssetReaderStatusCompleted) {
- m_state = QAudioDecoder::StoppedState;
+ if (m_reader.status == AVAssetReaderStatusCompleted)
emit finished();
- emit stateChanged(m_state);
- }
});
}
diff --git a/src/multimedia/platform/darwin/audio/avfaudiodecoder_p.h b/src/multimedia/platform/darwin/audio/avfaudiodecoder_p.h
index 9f302cc39..5348b06fd 100644
--- a/src/multimedia/platform/darwin/audio/avfaudiodecoder_p.h
+++ b/src/multimedia/platform/darwin/audio/avfaudiodecoder_p.h
@@ -75,9 +75,6 @@ public:
AVFAudioDecoder(QAudioDecoder *parent);
virtual ~AVFAudioDecoder();
- // QAudioDecoder interface
- QAudioDecoder::State state() const override { return m_state; }
-
QUrl source() const override;
void setSource(const QUrl &fileName) override;
@@ -87,9 +84,6 @@ public:
void start() override;
void stop() override;
- QAudioFormat audioFormat() const override;
- void setAudioFormat(const QAudioFormat &format) override;
-
QAudioBuffer read() override;
bool bufferAvailable() const override;
@@ -108,12 +102,8 @@ private:
void processInvalidMedia(QAudioDecoder::Error errorCode, const QString& errorString);
void initAssetReader();
- QAudioDecoder::State m_state = QAudioDecoder::StoppedState;
- QAudioDecoder::State m_pendingState = QAudioDecoder::StoppedState;
-
QUrl m_source;
QIODevice *m_device = nullptr;
- QAudioFormat m_format;
int m_buffersAvailable = 0;
QList<QAudioBuffer> m_cachedBuffers;
diff --git a/src/multimedia/platform/darwin/camera/avfcamera.mm b/src/multimedia/platform/darwin/camera/avfcamera.mm
index b52ee7743..527f5e615 100644
--- a/src/multimedia/platform/darwin/camera/avfcamera.mm
+++ b/src/multimedia/platform/darwin/camera/avfcamera.mm
@@ -158,7 +158,6 @@ bool qt_convert_exposure_mode(AVCaptureDevice *captureDevice, QCamera::ExposureM
AVFCamera::AVFCamera(QCamera *camera)
: QPlatformCamera(camera)
, m_active(false)
- , m_lastStatus(QCamera::InactiveStatus)
{
Q_ASSERT(camera);
}
@@ -183,23 +182,9 @@ void AVFCamera::setActive(bool active)
if (m_session)
m_session->setActive(active);
- Q_EMIT activeChanged(m_active);
- updateStatus();
if (active)
updateCameraConfiguration();
-}
-
-QCamera::Status AVFCamera::status() const
-{
- static const QCamera::Status statusTable[2][2] = {
- { QCamera::InactiveStatus, QCamera::StoppingStatus }, //Inactive state
- { QCamera::StartingStatus, QCamera::ActiveStatus } //ActiveState
- };
-
- if (!m_session)
- return QCamera::InactiveStatus;
-
- return statusTable[m_active ? 1 : 0][m_session->isActive() ? 1 : 0];
+ Q_EMIT activeChanged(m_active);
}
void AVFCamera::setCamera(const QCameraDevice &camera)
@@ -224,25 +209,11 @@ void AVFCamera::setCaptureSession(QPlatformMediaCaptureSession *session)
}
m_session = m_service->session();
- Q_ASSERT(m_session);
- connect(m_session, SIGNAL(activeChanged(bool)), SLOT(updateStatus()));
-
m_session->setActiveCamera(QCameraDevice());
m_session->setActive(m_active);
m_session->setActiveCamera(m_cameraDevice);
}
-void AVFCamera::updateStatus()
-{
- QCamera::Status newStatus = status();
-
- if (m_lastStatus != newStatus) {
- qDebugCamera() << "Camera status changed: " << m_lastStatus << " -> " << newStatus;
- m_lastStatus = newStatus;
- Q_EMIT statusChanged(m_lastStatus);
- }
-}
-
AVCaptureConnection *AVFCamera::videoConnection() const
{
if (!m_session || !m_session->videoOutput() || !m_session->videoOutput()->videoDataOutput())
diff --git a/src/multimedia/platform/darwin/camera/avfcamera_p.h b/src/multimedia/platform/darwin/camera/avfcamera_p.h
index 296ef0350..64959bad8 100644
--- a/src/multimedia/platform/darwin/camera/avfcamera_p.h
+++ b/src/multimedia/platform/darwin/camera/avfcamera_p.h
@@ -75,8 +75,6 @@ public:
bool isActive() const override;
void setActive(bool activce) override;
- QCamera::Status status() const override;
-
void setCamera(const QCameraDevice &camera) override;
void setCaptureSession(QPlatformMediaCaptureSession *) override;
@@ -115,9 +113,6 @@ public:
AVCaptureConnection *videoConnection() const;
AVCaptureDevice *device() const;
-private Q_SLOTS:
- void updateStatus();
-
private:
void updateCameraConfiguration();
void updateCameraProperties();
@@ -130,7 +125,6 @@ private:
QCameraDevice m_cameraDevice;
bool m_active;
- QCamera::Status m_lastStatus;
bool isFlashSupported = false;
bool isFlashAutoSupported = false;
diff --git a/src/multimedia/platform/darwin/camera/avfcameraservice.mm b/src/multimedia/platform/darwin/camera/avfcameraservice.mm
index 8ee350d02..b669eacc1 100644
--- a/src/multimedia/platform/darwin/camera/avfcameraservice.mm
+++ b/src/multimedia/platform/darwin/camera/avfcameraservice.mm
@@ -43,9 +43,9 @@
#include "avfcameraservice_p.h"
#include "avfcamera_p.h"
#include "avfcamerasession_p.h"
-#include "avfcameraimagecapture_p.h"
+#include "avfimagecapture_p.h"
#include "avfcamerarenderer_p.h"
-#include "avfcameraimagecapture_p.h"
+#include "avfimagecapture_p.h"
#include "avfmediaencoder_p.h"
#include <qmediadevices.h>
#include <private/qplatformaudioinput_p.h>
@@ -84,14 +84,14 @@ void AVFCameraService::setCamera(QPlatformCamera *camera)
emit cameraChanged();
}
-QPlatformCameraImageCapture *AVFCameraService::imageCapture()
+QPlatformImageCapture *AVFCameraService::imageCapture()
{
return m_imageCaptureControl;
}
-void AVFCameraService::setImageCapture(QPlatformCameraImageCapture *imageCapture)
+void AVFCameraService::setImageCapture(QPlatformImageCapture *imageCapture)
{
- AVFCameraImageCapture *control = static_cast<AVFCameraImageCapture *>(imageCapture);
+ AVFImageCapture *control = static_cast<AVFImageCapture *>(imageCapture);
if (m_imageCaptureControl == control)
return;
diff --git a/src/multimedia/platform/darwin/camera/avfcameraservice_p.h b/src/multimedia/platform/darwin/camera/avfcameraservice_p.h
index d2c75096e..5e641cb6a 100644
--- a/src/multimedia/platform/darwin/camera/avfcameraservice_p.h
+++ b/src/multimedia/platform/darwin/camera/avfcameraservice_p.h
@@ -61,7 +61,7 @@ QT_BEGIN_NAMESPACE
class QPlatformCamera;
class QPlatformMediaEncoder;
class AVFCamera;
-class AVFCameraImageCapture;
+class AVFImageCapture;
class AVFCameraSession;
class AVFMediaEncoder;
@@ -75,8 +75,8 @@ public:
QPlatformCamera *camera() override;
void setCamera(QPlatformCamera *camera) override;
- QPlatformCameraImageCapture *imageCapture() override;
- void setImageCapture(QPlatformCameraImageCapture *imageCapture) override;
+ QPlatformImageCapture *imageCapture() override;
+ void setImageCapture(QPlatformImageCapture *imageCapture) override;
QPlatformMediaEncoder *mediaEncoder() override;
void setMediaEncoder(QPlatformMediaEncoder *encoder) override;
@@ -88,7 +88,7 @@ public:
AVFCameraSession *session() const { return m_session; }
AVFCamera *avfCameraControl() const { return m_cameraControl; }
AVFMediaEncoder *recorderControl() const { return m_encoder; }
- AVFCameraImageCapture *avfImageCaptureControl() const { return m_imageCaptureControl; }
+ AVFImageCapture *avfImageCaptureControl() const { return m_imageCaptureControl; }
AVCaptureDevice *audioCaptureDevice() const { return m_audioCaptureDevice; }
public Q_SLOTS:
@@ -101,7 +101,7 @@ private:
AVFCameraSession *m_session = nullptr;
AVFCamera *m_cameraControl = nullptr;
AVFMediaEncoder *m_encoder = nullptr;
- AVFCameraImageCapture *m_imageCaptureControl = nullptr;
+ AVFImageCapture *m_imageCaptureControl = nullptr;
};
QT_END_NAMESPACE
diff --git a/src/multimedia/platform/darwin/camera/avfcamerasession.mm b/src/multimedia/platform/darwin/camera/avfcamerasession.mm
index 7febe567f..7f2ca7b5b 100644
--- a/src/multimedia/platform/darwin/camera/avfcamerasession.mm
+++ b/src/multimedia/platform/darwin/camera/avfcamerasession.mm
@@ -42,7 +42,7 @@
#include "avfcameraservice_p.h"
#include "avfcamera_p.h"
#include "avfcamerarenderer_p.h"
-#include "avfcameraimagecapture_p.h"
+#include "avfimagecapture_p.h"
#include "avfmediaencoder_p.h"
#include "avfcamerautility_p.h"
#include <private/avfvideosink_p.h>
@@ -384,7 +384,7 @@ void AVFCameraSession::attachAudioInputDevice()
bool AVFCameraSession::applyImageEncoderSettings()
{
- if (AVFCameraImageCapture *control = m_service->avfImageCaptureControl())
+ if (AVFImageCapture *control = m_service->avfImageCaptureControl())
return control->applySettings();
return false;
diff --git a/src/multimedia/platform/darwin/camera/avfcameraimagecapture.mm b/src/multimedia/platform/darwin/camera/avfimagecapture.mm
index 7536d88d3..5bfe8e105 100644
--- a/src/multimedia/platform/darwin/camera/avfcameraimagecapture.mm
+++ b/src/multimedia/platform/darwin/camera/avfimagecapture.mm
@@ -38,7 +38,7 @@
****************************************************************************/
#include "avfcameradebug_p.h"
-#include "avfcameraimagecapture_p.h"
+#include "avfimagecapture_p.h"
#include "avfcameraservice_p.h"
#include "avfcamerautility_p.h"
#include "avfcamera_p.h"
@@ -56,8 +56,8 @@
QT_USE_NAMESPACE
-AVFCameraImageCapture::AVFCameraImageCapture(QCameraImageCapture *parent)
- : QPlatformCameraImageCapture(parent)
+AVFImageCapture::AVFImageCapture(QImageCapture *parent)
+ : QPlatformImageCapture(parent)
, m_ready(false)
, m_lastCaptureId(0)
, m_videoConnection(nil)
@@ -71,16 +71,16 @@ AVFCameraImageCapture::AVFCameraImageCapture(QCameraImageCapture *parent)
[outputSettings release];
}
-AVFCameraImageCapture::~AVFCameraImageCapture()
+AVFImageCapture::~AVFImageCapture()
{
}
-bool AVFCameraImageCapture::isReadyForCapture() const
+bool AVFImageCapture::isReadyForCapture() const
{
- return m_cameraControl && m_videoConnection && m_cameraControl->status() == QCamera::ActiveStatus;
+ return m_cameraControl && m_videoConnection && m_cameraControl->isActive();
}
-void AVFCameraImageCapture::updateReadyStatus()
+void AVFImageCapture::updateReadyStatus()
{
if (m_ready != isReadyForCapture()) {
m_ready = !m_ready;
@@ -89,19 +89,19 @@ void AVFCameraImageCapture::updateReadyStatus()
}
}
-int AVFCameraImageCapture::doCapture(const QString &actualFileName)
+int AVFImageCapture::doCapture(const QString &actualFileName)
{
if (!m_session) {
QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
Q_ARG(int, m_lastCaptureId),
- Q_ARG(int, QCameraImageCapture::ResourceError),
+ Q_ARG(int, QImageCapture::ResourceError),
Q_ARG(QString, tr("Image capture not set to capture session")));
return m_lastCaptureId;
}
if (!isReadyForCapture()) {
QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
Q_ARG(int, m_lastCaptureId),
- Q_ARG(int, QCameraImageCapture::NotReadyError),
+ Q_ARG(int, QImageCapture::NotReadyError),
Q_ARG(QString, tr("Camera not ready")));
return m_lastCaptureId;
}
@@ -130,7 +130,7 @@ int AVFCameraImageCapture::doCapture(const QString &actualFileName)
QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
Q_ARG(int, request.captureId),
- Q_ARG(int, QCameraImageCapture::ResourceError),
+ Q_ARG(int, QImageCapture::ResourceError),
Q_ARG(QString, errorMessage));
return;
}
@@ -169,14 +169,14 @@ int AVFCameraImageCapture::doCapture(const QString &actualFileName)
} else {
QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
Q_ARG(int, request.captureId),
- Q_ARG(int, QCameraImageCapture::OutOfSpaceError),
+ Q_ARG(int, QImageCapture::OutOfSpaceError),
Q_ARG(QString, f.errorString()));
}
} else {
QString errorMessage = tr("Could not open destination file:\n%1").arg(fileName);
QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
Q_ARG(int, request.captureId),
- Q_ARG(int, QCameraImageCapture::ResourceError),
+ Q_ARG(int, QImageCapture::ResourceError),
Q_ARG(QString, errorMessage));
}
}
@@ -186,7 +186,7 @@ int AVFCameraImageCapture::doCapture(const QString &actualFileName)
qDebugCamera() << errorMessage;
QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
Q_ARG(int, request.captureId),
- Q_ARG(int, QCameraImageCapture::ResourceError),
+ Q_ARG(int, QImageCapture::ResourceError),
Q_ARG(QString, errorMessage));
}
}];
@@ -194,7 +194,7 @@ int AVFCameraImageCapture::doCapture(const QString &actualFileName)
return request.captureId;
}
-int AVFCameraImageCapture::capture(const QString &fileName)
+int AVFImageCapture::capture(const QString &fileName)
{
QString actualFileName;
actualFileName = m_storageLocation.generateFileName(fileName,
@@ -206,12 +206,12 @@ int AVFCameraImageCapture::capture(const QString &fileName)
return doCapture(actualFileName);
}
-int AVFCameraImageCapture::captureToBuffer()
+int AVFImageCapture::captureToBuffer()
{
return doCapture(QString());
}
-void AVFCameraImageCapture::onNewViewfinderFrame(const QVideoFrame &frame)
+void AVFImageCapture::onNewViewfinderFrame(const QVideoFrame &frame)
{
QMutexLocker locker(&m_requestsMutex);
@@ -221,24 +221,24 @@ void AVFCameraImageCapture::onNewViewfinderFrame(const QVideoFrame &frame)
CaptureRequest request = m_captureRequests.dequeue();
Q_EMIT imageExposed(request.captureId);
- (void) QtConcurrent::run(&AVFCameraImageCapture::makeCapturePreview, this,
+ (void) QtConcurrent::run(&AVFImageCapture::makeCapturePreview, this,
request,
frame,
0 /* rotation */);
}
-void AVFCameraImageCapture::onCameraChanged()
+void AVFImageCapture::onCameraChanged()
{
Q_ASSERT(m_service && m_session);
if (m_service->camera())
connect(m_service->camera(), SIGNAL(activeChanged(bool)), this, SLOT(updateReadyStatus()));
if (m_session->videoOutput())
connect(m_session->videoOutput(), &AVFCameraRenderer::newViewfinderFrame,
- this, &AVFCameraImageCapture::onNewViewfinderFrame,
+ this, &AVFImageCapture::onNewViewfinderFrame,
Qt::DirectConnection);
}
-void AVFCameraImageCapture::makeCapturePreview(CaptureRequest request,
+void AVFImageCapture::makeCapturePreview(CaptureRequest request,
const QVideoFrame &frame,
int rotation)
{
@@ -250,7 +250,7 @@ void AVFCameraImageCapture::makeCapturePreview(CaptureRequest request,
request.previewReady->release();
}
-void AVFCameraImageCapture::updateCaptureConnection()
+void AVFImageCapture::updateCaptureConnection()
{
if (m_session && m_session->videoCaptureDevice()) {
qDebugCamera() << Q_FUNC_INFO;
@@ -271,7 +271,7 @@ void AVFCameraImageCapture::updateCaptureConnection()
}
-QImageEncoderSettings AVFCameraImageCapture::imageSettings() const
+QImageEncoderSettings AVFImageCapture::imageSettings() const
{
QImageEncoderSettings settings;
@@ -301,12 +301,12 @@ QImageEncoderSettings AVFCameraImageCapture::imageSettings() const
}
settings.setResolution(res);
- settings.setFormat(QCameraImageCapture::JPEG);
+ settings.setFormat(QImageCapture::JPEG);
return settings;
}
-void AVFCameraImageCapture::setImageSettings(const QImageEncoderSettings &settings)
+void AVFImageCapture::setImageSettings(const QImageEncoderSettings &settings)
{
if (m_settings == settings)
return;
@@ -315,7 +315,7 @@ void AVFCameraImageCapture::setImageSettings(const QImageEncoderSettings &settin
applySettings();
}
-bool AVFCameraImageCapture::applySettings()
+bool AVFImageCapture::applySettings()
{
if (!videoCaptureDeviceIsValid())
return false;
@@ -330,7 +330,7 @@ bool AVFCameraImageCapture::applySettings()
return false;
}
- if (m_settings.format() != QCameraImageCapture::UnspecifiedFormat && m_settings.format() != QCameraImageCapture::JPEG) {
+ if (m_settings.format() != QImageCapture::UnspecifiedFormat && m_settings.format() != QImageCapture::JPEG) {
qDebugCamera() << Q_FUNC_INFO << "unsupported format:" << m_settings.format();
return false;
}
@@ -373,7 +373,7 @@ bool AVFCameraImageCapture::applySettings()
return activeFormatChanged;
}
-void AVFCameraImageCapture::setCaptureSession(QPlatformMediaCaptureSession *session)
+void AVFImageCapture::setCaptureSession(QPlatformMediaCaptureSession *session)
{
AVFCameraService *captureSession = static_cast<AVFCameraService *>(session);
if (m_service == captureSession)
@@ -396,7 +396,7 @@ void AVFCameraImageCapture::setCaptureSession(QPlatformMediaCaptureSession *sess
Q_ASSERT(m_session);
m_cameraControl = static_cast<AVFCamera *>(m_service->camera());
- connect(m_service, &AVFCameraService::cameraChanged, this, &AVFCameraImageCapture::onCameraChanged);
+ connect(m_service, &AVFCameraService::cameraChanged, this, &AVFImageCapture::onCameraChanged);
connect(m_session, SIGNAL(readyToConfigureConnections()), SLOT(updateCaptureConnection()));
updateCaptureConnection();
@@ -404,7 +404,7 @@ void AVFCameraImageCapture::setCaptureSession(QPlatformMediaCaptureSession *sess
onCameraChanged();
}
-bool AVFCameraImageCapture::videoCaptureDeviceIsValid() const
+bool AVFImageCapture::videoCaptureDeviceIsValid() const
{
if (!m_service || !m_service->session() || !m_service->session()->videoCaptureDevice())
return false;
@@ -416,4 +416,4 @@ bool AVFCameraImageCapture::videoCaptureDeviceIsValid() const
return true;
}
-#include "moc_avfcameraimagecapture_p.cpp"
+#include "moc_avfimagecapture_p.cpp"
diff --git a/src/multimedia/platform/darwin/camera/avfcameraimagecapture_p.h b/src/multimedia/platform/darwin/camera/avfimagecapture_p.h
index f970828e0..2d1d1b1e7 100644
--- a/src/multimedia/platform/darwin/camera/avfcameraimagecapture_p.h
+++ b/src/multimedia/platform/darwin/camera/avfimagecapture_p.h
@@ -56,13 +56,13 @@
#include <QtCore/qqueue.h>
#include <QtCore/qsemaphore.h>
#include <QtCore/qsharedpointer.h>
-#include <private/qplatformcameraimagecapture_p.h>
+#include <private/qplatformimagecapture_p.h>
#include "avfcamerasession_p.h"
#include "avfstoragelocation_p.h"
QT_BEGIN_NAMESPACE
-class AVFCameraImageCapture : public QPlatformCameraImageCapture
+class AVFImageCapture : public QPlatformImageCapture
{
Q_OBJECT
public:
@@ -71,8 +71,8 @@ public:
QSharedPointer<QSemaphore> previewReady;
};
- AVFCameraImageCapture(QCameraImageCapture *parent = nullptr);
- ~AVFCameraImageCapture();
+ AVFImageCapture(QImageCapture *parent = nullptr);
+ ~AVFImageCapture();
bool isReadyForCapture() const override;
@@ -112,7 +112,7 @@ private:
QImageEncoderSettings m_settings;
};
-Q_DECLARE_TYPEINFO(AVFCameraImageCapture::CaptureRequest, Q_PRIMITIVE_TYPE);
+Q_DECLARE_TYPEINFO(AVFImageCapture::CaptureRequest, Q_PRIMITIVE_TYPE);
QT_END_NAMESPACE
diff --git a/src/multimedia/platform/darwin/camera/avfmediaencoder.mm b/src/multimedia/platform/darwin/camera/avfmediaencoder.mm
index 6f881f986..96fa82503 100644
--- a/src/multimedia/platform/darwin/camera/avfmediaencoder.mm
+++ b/src/multimedia/platform/darwin/camera/avfmediaencoder.mm
@@ -111,14 +111,8 @@ AVFMediaEncoder::~AVFMediaEncoder()
[m_videoSettings release];
}
-QUrl AVFMediaEncoder::outputLocation() const
+bool AVFMediaEncoder::isLocationWritable(const QUrl &location) const
{
- return m_outputLocation;
-}
-
-bool AVFMediaEncoder::setOutputLocation(const QUrl &location)
-{
- m_outputLocation = location;
return location.scheme() == QLatin1String("file") || location.scheme().isEmpty();
}
@@ -474,7 +468,7 @@ void AVFMediaEncoder::record()
if (!audioOnly) {
AVFCamera *cameraControl = m_service->avfCameraControl();
- if (!cameraControl || cameraControl->status() != QCamera::ActiveStatus) {
+ if (!cameraControl || !cameraControl->isActive()) {
qDebugCamera() << Q_FUNC_INFO << "can not start record while camera is not active";
Q_EMIT error(QMediaRecorder::ResourceError, tr("Failed to start recording"));
return;
@@ -493,8 +487,8 @@ void AVFMediaEncoder::record()
// rotation = (screenOrientation + (360 - cameraDevice.orientation())) % 360;
}
- const QString path(m_outputLocation.scheme() == QLatin1String("file") ?
- m_outputLocation.path() : m_outputLocation.toString());
+ const QString path(outputLocation().scheme() == QLatin1String("file") ?
+ outputLocation().path() : outputLocation().toString());
const QUrl fileURL(QUrl::fromLocalFile(m_storageLocation.generateFileName(path,
audioOnly ? AVFStorageLocation::Audio : AVFStorageLocation::Video,
QLatin1String("clip_"),
diff --git a/src/multimedia/platform/darwin/camera/avfmediaencoder_p.h b/src/multimedia/platform/darwin/camera/avfmediaencoder_p.h
index bd9588e27..d76df772f 100644
--- a/src/multimedia/platform/darwin/camera/avfmediaencoder_p.h
+++ b/src/multimedia/platform/darwin/camera/avfmediaencoder_p.h
@@ -77,8 +77,7 @@ public:
AVFMediaEncoder(QMediaRecorder *parent);
~AVFMediaEncoder() override;
- QUrl outputLocation() const override;
- bool setOutputLocation(const QUrl &location) override;
+ bool isLocationWritable(const QUrl &location) const override;
QMediaRecorder::RecorderState state() const override;
QMediaRecorder::Status status() const override;
@@ -114,7 +113,6 @@ private:
AVFCameraService *m_service = nullptr;
AVFScopedPointer<QT_MANGLE_NAMESPACE(AVFMediaAssetWriter)> m_writer;
- QUrl m_outputLocation;
AVFStorageLocation m_storageLocation;
QMediaRecorder::RecorderState m_state;
diff --git a/src/multimedia/platform/darwin/qdarwinformatsinfo.mm b/src/multimedia/platform/darwin/qdarwinformatsinfo.mm
index 59c563537..afa1adf4a 100644
--- a/src/multimedia/platform/darwin/qdarwinformatsinfo.mm
+++ b/src/multimedia/platform/darwin/qdarwinformatsinfo.mm
@@ -166,7 +166,7 @@ QDarwinFormatInfo::QDarwinFormatInfo()
// #endif
// ###
- imageFormats << QCameraImageCapture::JPEG;
+ imageFormats << QImageCapture::JPEG;
}
QDarwinFormatInfo::~QDarwinFormatInfo()
diff --git a/src/multimedia/platform/darwin/qdarwinintegration.mm b/src/multimedia/platform/darwin/qdarwinintegration.mm
index 753dabff4..372ce9e81 100644
--- a/src/multimedia/platform/darwin/qdarwinintegration.mm
+++ b/src/multimedia/platform/darwin/qdarwinintegration.mm
@@ -42,7 +42,7 @@
#include <private/avfmediaplayer_p.h>
#include <private/avfcameraservice_p.h>
#include <private/avfcamera_p.h>
-#include <private/avfcameraimagecapture_p.h>
+#include <private/avfimagecapture_p.h>
#include <private/avfmediaencoder_p.h>
#include <private/qdarwinformatsinfo_p.h>
#include <private/avfvideosink_p.h>
@@ -100,9 +100,9 @@ QPlatformMediaEncoder *QDarwinIntegration::createEncoder(QMediaRecorder *encoder
return new AVFMediaEncoder(encoder);
}
-QPlatformCameraImageCapture *QDarwinIntegration::createImageCapture(QCameraImageCapture *imageCapture)
+QPlatformImageCapture *QDarwinIntegration::createImageCapture(QImageCapture *imageCapture)
{
- return new AVFCameraImageCapture(imageCapture);
+ return new AVFImageCapture(imageCapture);
}
QPlatformVideoSink *QDarwinIntegration::createVideoSink(QVideoSink *sink)
diff --git a/src/multimedia/platform/darwin/qdarwinintegration_p.h b/src/multimedia/platform/darwin/qdarwinintegration_p.h
index 52832585e..946300761 100644
--- a/src/multimedia/platform/darwin/qdarwinintegration_p.h
+++ b/src/multimedia/platform/darwin/qdarwinintegration_p.h
@@ -71,7 +71,7 @@ public:
QPlatformMediaPlayer *createPlayer(QMediaPlayer *player) override;
QPlatformCamera *createCamera(QCamera *camera) override;
QPlatformMediaEncoder *createEncoder(QMediaRecorder *) override;
- QPlatformCameraImageCapture *createImageCapture(QCameraImageCapture *) override;
+ QPlatformImageCapture *createImageCapture(QImageCapture *) override;
QPlatformVideoSink *createVideoSink(QVideoSink *) override;
diff --git a/src/multimedia/platform/gstreamer/audio/qgstreameraudiodecoder.cpp b/src/multimedia/platform/gstreamer/audio/qgstreameraudiodecoder.cpp
index 817e168bf..db23ac80f 100644
--- a/src/multimedia/platform/gstreamer/audio/qgstreameraudiodecoder.cpp
+++ b/src/multimedia/platform/gstreamer/audio/qgstreameraudiodecoder.cpp
@@ -163,21 +163,17 @@ bool QGstreamerAudioDecoder::processBusMessage(const QGstreamerMessage &message)
.arg(states[pending]) << "internal" << m_state;
#endif
- QAudioDecoder::State prevState = m_state;
-
+ bool isDecoding = false;
switch (newState) {
case GST_STATE_VOID_PENDING:
case GST_STATE_NULL:
- m_state = QAudioDecoder::StoppedState;
- break;
case GST_STATE_READY:
- m_state = QAudioDecoder::StoppedState;
break;
case GST_STATE_PLAYING:
- m_state = QAudioDecoder::DecodingState;
+ isDecoding = true;
break;
case GST_STATE_PAUSED:
- m_state = QAudioDecoder::DecodingState;
+ isDecoding = true;
//gstreamer doesn't give a reliable indication the duration
//information is ready, GST_MESSAGE_DURATION is not sent by most elements
@@ -187,15 +183,12 @@ bool QGstreamerAudioDecoder::processBusMessage(const QGstreamerMessage &message)
break;
}
- if (prevState != m_state)
- emit stateChanged(m_state);
+ setIsDecoding(isDecoding);
}
break;
case GST_MESSAGE_EOS:
- m_pendingState = m_state = QAudioDecoder::StoppedState;
- emit finished();
- emit stateChanged(m_state);
+ finished();
break;
case GST_MESSAGE_ERROR: {
@@ -338,24 +331,15 @@ void QGstreamerAudioDecoder::start()
// Set audio format
if (m_appSink) {
- if (mFormat.isValid()) {
- setAudioFlags(false);
- QGstMutableCaps caps = QGstUtils::capsForAudioFormat(mFormat);
- gst_app_sink_set_caps(m_appSink, caps.get());
- } else {
- // We want whatever the native audio format is
- setAudioFlags(true);
- gst_app_sink_set_caps(m_appSink, nullptr);
- }
+ // We want whatever the native audio format is
+ setAudioFlags(true);
+ gst_app_sink_set_caps(m_appSink, nullptr);
}
- m_pendingState = QAudioDecoder::DecodingState;
if (m_playbin.setState(GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE) {
qWarning() << "GStreamer; Unable to start decoding process";
m_playbin.dumpGraph("failed");
- m_pendingState = m_state = QAudioDecoder::StoppedState;
-
- emit stateChanged(m_state);
+ return;
}
}
@@ -367,9 +351,6 @@ void QGstreamerAudioDecoder::stop()
m_playbin.setState(GST_STATE_NULL);
removeAppSink();
- QAudioDecoder::State oldState = m_state;
- m_pendingState = m_state = QAudioDecoder::StoppedState;
-
// GStreamer thread is stopped. Can safely access m_buffersAvailable
if (m_buffersAvailable != 0) {
m_buffersAvailable = 0;
@@ -386,21 +367,7 @@ void QGstreamerAudioDecoder::stop()
emit durationChanged(m_duration);
}
- if (oldState != m_state)
- emit stateChanged(m_state);
-}
-
-QAudioFormat QGstreamerAudioDecoder::audioFormat() const
-{
- return mFormat;
-}
-
-void QGstreamerAudioDecoder::setAudioFormat(const QAudioFormat &format)
-{
- if (mFormat != format) {
- mFormat = format;
- emit formatChanged(mFormat);
- }
+ setIsDecoding(false);
}
QAudioBuffer QGstreamerAudioDecoder::read()
diff --git a/src/multimedia/platform/gstreamer/audio/qgstreameraudiodecoder_p.h b/src/multimedia/platform/gstreamer/audio/qgstreameraudiodecoder_p.h
index be2343916..de9d59baf 100644
--- a/src/multimedia/platform/gstreamer/audio/qgstreameraudiodecoder_p.h
+++ b/src/multimedia/platform/gstreamer/audio/qgstreameraudiodecoder_p.h
@@ -81,9 +81,6 @@ public:
QGstreamerAudioDecoder(QAudioDecoder *parent);
virtual ~QGstreamerAudioDecoder();
- // QAudioDecoder interface
- QAudioDecoder::State state() const override { return m_state; }
-
QUrl source() const override;
void setSource(const QUrl &fileName) override;
@@ -93,9 +90,6 @@ public:
void start() override;
void stop() override;
- QAudioFormat audioFormat() const override;
- void setAudioFormat(const QAudioFormat &format) override;
-
QAudioBuffer read() override;
bool bufferAvailable() const override;
@@ -105,8 +99,6 @@ public:
// GStreamerBusMessageFilter interface
bool processBusMessage(const QGstreamerMessage &message) override;
- QAudioDecoder::State pendingState() const { return m_pendingState; }
-
#if QT_CONFIG(gstreamer_app)
QGstAppSrc *appsrc() const { return m_appSrc; }
static void configureAppSrcElement(GObject*, GObject*, GParamSpec*, QGstreamerAudioDecoder *_this);
@@ -125,8 +117,6 @@ private:
void processInvalidMedia(QAudioDecoder::Error errorCode, const QString& errorString);
static qint64 getPositionFromBuffer(GstBuffer* buffer);
- QAudioDecoder::State m_state = QAudioDecoder::StoppedState;
- QAudioDecoder::State m_pendingState = QAudioDecoder::StoppedState;
QGstPipeline m_playbin;
QGstBin m_outputBin;
QGstElement m_audioConvert;
@@ -135,7 +125,6 @@ private:
QUrl mSource;
QIODevice *mDevice = nullptr;
- QAudioFormat mFormat;
mutable QMutex m_buffersMutex;
int m_buffersAvailable = 0;
diff --git a/src/multimedia/platform/gstreamer/common/qgstutils.cpp b/src/multimedia/platform/gstreamer/common/qgstutils.cpp
index 7dd733f00..5d88f7e13 100644
--- a/src/multimedia/platform/gstreamer/common/qgstutils.cpp
+++ b/src/multimedia/platform/gstreamer/common/qgstutils.cpp
@@ -100,12 +100,16 @@ static QAudioFormat::SampleFormat gstSampleFormatToSampleFormat(const char *fmt)
*/
QAudioFormat QGstUtils::audioFormatForSample(GstSample *sample)
{
- GstCaps* caps = gst_sample_get_caps(sample);
- if (!caps)
+ QGstCaps caps = gst_sample_get_caps(sample);
+ if (caps.isNull())
return QAudioFormat();
+ return audioFormatForCaps(caps);
+}
+QAudioFormat QGstUtils::audioFormatForCaps(QGstCaps caps)
+{
QAudioFormat format;
- QGstStructure s = QGstCaps(caps).at(0);
+ QGstStructure s = caps.at(0);
if (s.name() != "audio/x-raw")
return format;
diff --git a/src/multimedia/platform/gstreamer/common/qgstutils_p.h b/src/multimedia/platform/gstreamer/common/qgstutils_p.h
index 651152950..0e6e76954 100644
--- a/src/multimedia/platform/gstreamer/common/qgstutils_p.h
+++ b/src/multimedia/platform/gstreamer/common/qgstutils_p.h
@@ -72,6 +72,7 @@ class QVideoFrameFormat;
namespace QGstUtils {
Q_MULTIMEDIA_EXPORT QAudioFormat audioFormatForSample(GstSample *sample);
+ QAudioFormat audioFormatForCaps(QGstCaps caps);
Q_MULTIMEDIA_EXPORT QGstMutableCaps capsForAudioFormat(const QAudioFormat &format);
Q_MULTIMEDIA_EXPORT QVideoFrameFormat formatForCaps(
diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercamera.cpp b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercamera.cpp
index c58ecaaf1..99a44b70e 100644
--- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercamera.cpp
+++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercamera.cpp
@@ -40,7 +40,7 @@
#include <qcameradevice.h>
#include "qgstreamercamera_p.h"
-#include "qgstreamercameraimagecapture_p.h"
+#include "qgstreamerimagecapture_p.h"
#include <private/qgstreamermediadevices_p.h>
#include <private/qgstreamerintegration_p.h>
#include <qmediacapturesession.h>
@@ -90,7 +90,6 @@ void QGstreamerCamera::setActive(bool active)
m_active = active;
- statusChanged(m_active ? QCamera::ActiveStatus : QCamera::InactiveStatus);
emit activeChanged(active);
}
diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimagecapture.cpp b/src/multimedia/platform/gstreamer/mediacapture/qgstreamerimagecapture.cpp
index e19a9c28e..f0f2f16e9 100644
--- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimagecapture.cpp
+++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamerimagecapture.cpp
@@ -37,7 +37,7 @@
**
****************************************************************************/
-#include "qgstreamercameraimagecapture_p.h"
+#include "qgstreamerimagecapture_p.h"
#include "qplatformcamera_p.h"
#include <private/qgstvideobuffer_p.h>
#include <private/qgstutils_p.h>
@@ -54,8 +54,8 @@ QT_BEGIN_NAMESPACE
Q_LOGGING_CATEGORY(qLcImageCapture, "qt.multimedia.imageCapture")
-QGstreamerCameraImageCapture::QGstreamerCameraImageCapture(QCameraImageCapture *parent)
- : QPlatformCameraImageCapture(parent),
+QGstreamerImageCapture::QGstreamerImageCapture(QImageCapture *parent)
+ : QPlatformImageCapture(parent),
QGstreamerBufferProbe(ProbeBuffers)
{
bin = QGstBin("imageCaptureBin");
@@ -80,16 +80,16 @@ QGstreamerCameraImageCapture::QGstreamerCameraImageCapture(QCameraImageCapture *
addProbeToPad(queue.staticPad("src").pad(), false);
sink.set("signal-handoffs", true);
- g_signal_connect(sink.object(), "handoff", G_CALLBACK(&QGstreamerCameraImageCapture::saveImageFilter), this);
+ g_signal_connect(sink.object(), "handoff", G_CALLBACK(&QGstreamerImageCapture::saveImageFilter), this);
}
-QGstreamerCameraImageCapture::~QGstreamerCameraImageCapture()
+QGstreamerImageCapture::~QGstreamerImageCapture()
{
if (m_session)
m_session->releaseVideoPad(videoSrcPad);
}
-bool QGstreamerCameraImageCapture::isReadyForCapture() const
+bool QGstreamerImageCapture::isReadyForCapture() const
{
return m_session && !passImage && cameraActive;
}
@@ -134,7 +134,7 @@ QString generateFileName(const QDir &dir, const QString &ext)
}
-int QGstreamerCameraImageCapture::capture(const QString &fileName)
+int QGstreamerImageCapture::capture(const QString &fileName)
{
QString path = fileName;
if (path.isEmpty())
@@ -143,12 +143,12 @@ int QGstreamerCameraImageCapture::capture(const QString &fileName)
return doCapture(path);
}
-int QGstreamerCameraImageCapture::captureToBuffer()
+int QGstreamerImageCapture::captureToBuffer()
{
return doCapture(QString());
}
-int QGstreamerCameraImageCapture::doCapture(const QString &fileName)
+int QGstreamerImageCapture::doCapture(const QString &fileName)
{
qCDebug(qLcImageCapture) << "do capture";
if (!m_session) {
@@ -156,7 +156,7 @@ int QGstreamerCameraImageCapture::doCapture(const QString &fileName)
//so application can associate it with returned request id.
QMetaObject::invokeMethod(this, "errorOccurred", Qt::QueuedConnection,
Q_ARG(int, -1),
- Q_ARG(int, QCameraImageCapture::ResourceError),
+ Q_ARG(int, QImageCapture::ResourceError),
Q_ARG(QString,tr("Image capture not set to a session.")));
qCDebug(qLcImageCapture) << "error 1";
@@ -167,7 +167,7 @@ int QGstreamerCameraImageCapture::doCapture(const QString &fileName)
//so application can associate it with returned request id.
QMetaObject::invokeMethod(this, "errorOccurred", Qt::QueuedConnection,
Q_ARG(int, -1),
- Q_ARG(int, QCameraImageCapture::ResourceError),
+ Q_ARG(int, QImageCapture::ResourceError),
Q_ARG(QString,tr("No camera available.")));
qCDebug(qLcImageCapture) << "error 2";
@@ -178,7 +178,7 @@ int QGstreamerCameraImageCapture::doCapture(const QString &fileName)
//so application can associate it with returned request id.
QMetaObject::invokeMethod(this, "errorOccurred", Qt::QueuedConnection,
Q_ARG(int, -1),
- Q_ARG(int, QCameraImageCapture::NotReadyError),
+ Q_ARG(int, QImageCapture::NotReadyError),
Q_ARG(QString,tr("Camera is not ready.")));
qCDebug(qLcImageCapture) << "error 3";
@@ -198,7 +198,7 @@ int QGstreamerCameraImageCapture::doCapture(const QString &fileName)
return m_lastId;
}
-bool QGstreamerCameraImageCapture::probeBuffer(GstBuffer *buffer)
+bool QGstreamerImageCapture::probeBuffer(GstBuffer *buffer)
{
if (!passImage)
return false;
@@ -244,7 +244,7 @@ bool QGstreamerCameraImageCapture::probeBuffer(GstBuffer *buffer)
return true;
}
-void QGstreamerCameraImageCapture::setCaptureSession(QPlatformMediaCaptureSession *session)
+void QGstreamerImageCapture::setCaptureSession(QPlatformMediaCaptureSession *session)
{
QGstreamerMediaCapture *captureSession = static_cast<QGstreamerMediaCapture *>(session);
if (m_session == captureSession)
@@ -268,11 +268,11 @@ void QGstreamerCameraImageCapture::setCaptureSession(QPlatformMediaCaptureSessio
gstPipeline = captureSession->pipeline();
gstPipeline.add(bin);
bin.setStateSync(GST_STATE_READY);
- connect(m_session, &QPlatformMediaCaptureSession::cameraChanged, this, &QGstreamerCameraImageCapture::onCameraChanged);
+ connect(m_session, &QPlatformMediaCaptureSession::cameraChanged, this, &QGstreamerImageCapture::onCameraChanged);
onCameraChanged();
}
-void QGstreamerCameraImageCapture::cameraActiveChanged(bool active)
+void QGstreamerImageCapture::cameraActiveChanged(bool active)
{
qCDebug(qLcImageCapture) << "cameraActiveChanged" << cameraActive << active;
if (cameraActive == active)
@@ -282,23 +282,23 @@ void QGstreamerCameraImageCapture::cameraActiveChanged(bool active)
emit readyForCaptureChanged(isReadyForCapture());
}
-void QGstreamerCameraImageCapture::onCameraChanged()
+void QGstreamerImageCapture::onCameraChanged()
{
if (m_session->camera()) {
cameraActiveChanged(m_session->camera()->isActive());
- connect(m_session->camera(), &QPlatformCamera::activeChanged, this, &QGstreamerCameraImageCapture::cameraActiveChanged);
+ connect(m_session->camera(), &QPlatformCamera::activeChanged, this, &QGstreamerImageCapture::cameraActiveChanged);
}
}
-gboolean QGstreamerCameraImageCapture::saveImageFilter(GstElement *element,
+gboolean QGstreamerImageCapture::saveImageFilter(GstElement *element,
GstBuffer *buffer,
GstPad *pad,
void *appdata)
{
Q_UNUSED(element);
Q_UNUSED(pad);
- QGstreamerCameraImageCapture *capture = static_cast<QGstreamerCameraImageCapture *>(appdata);
+ QGstreamerImageCapture *capture = static_cast<QGstreamerImageCapture *>(appdata);
if (capture->pendingImages.isEmpty()) {
capture->unlink();
@@ -322,7 +322,7 @@ gboolean QGstreamerCameraImageCapture::saveImageFilter(GstElement *element,
}
f.close();
- static QMetaMethod savedSignal = QMetaMethod::fromSignal(&QGstreamerCameraImageCapture::imageSaved);
+ static QMetaMethod savedSignal = QMetaMethod::fromSignal(&QGstreamerImageCapture::imageSaved);
savedSignal.invoke(capture,
Qt::QueuedConnection,
Q_ARG(int, imageData.id),
@@ -334,7 +334,7 @@ gboolean QGstreamerCameraImageCapture::saveImageFilter(GstElement *element,
return TRUE;
}
-void QGstreamerCameraImageCapture::unlink()
+void QGstreamerImageCapture::unlink()
{
return;
if (passImage)
@@ -350,7 +350,7 @@ void QGstreamerCameraImageCapture::unlink()
gstPipeline.setStateSync(GST_STATE_PLAYING);
}
-void QGstreamerCameraImageCapture::link()
+void QGstreamerImageCapture::link()
{
if (!(m_session && m_session->camera()))
return;
@@ -364,12 +364,12 @@ void QGstreamerCameraImageCapture::link()
gstPipeline.setStateSync(GST_STATE_PLAYING);
}
-QImageEncoderSettings QGstreamerCameraImageCapture::imageSettings() const
+QImageEncoderSettings QGstreamerImageCapture::imageSettings() const
{
return m_settings;
}
-void QGstreamerCameraImageCapture::setImageSettings(const QImageEncoderSettings &settings)
+void QGstreamerImageCapture::setImageSettings(const QImageEncoderSettings &settings)
{
if (m_settings != settings) {
m_settings = settings;
diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimagecapture_p.h b/src/multimedia/platform/gstreamer/mediacapture/qgstreamerimagecapture_p.h
index 38b0d33b4..50d1d9a7b 100644
--- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimagecapture_p.h
+++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamerimagecapture_p.h
@@ -52,7 +52,7 @@
// We mean it.
//
-#include <private/qplatformcameraimagecapture_p.h>
+#include <private/qplatformimagecapture_p.h>
#include "qgstreamermediacapture_p.h"
#include "private/qgstreamerbufferprobe_p.h"
@@ -63,13 +63,13 @@
QT_BEGIN_NAMESPACE
-class QGstreamerCameraImageCapture : public QPlatformCameraImageCapture, private QGstreamerBufferProbe
+class QGstreamerImageCapture : public QPlatformImageCapture, private QGstreamerBufferProbe
{
Q_OBJECT
public:
- QGstreamerCameraImageCapture(QCameraImageCapture *parent/*, const QGstPipeline &pipeline*/);
- virtual ~QGstreamerCameraImageCapture();
+ QGstreamerImageCapture(QImageCapture *parent/*, const QGstPipeline &pipeline*/);
+ virtual ~QGstreamerImageCapture();
bool isReadyForCapture() const override;
int capture(const QString &fileName) override;
diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediacapture.cpp b/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediacapture.cpp
index d6ee3fdb4..237b2a505 100644
--- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediacapture.cpp
+++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediacapture.cpp
@@ -39,11 +39,10 @@
#include "qgstreamermediacapture_p.h"
#include "qgstreamermediaencoder_p.h"
-#include "qgstreamercameraimagecapture_p.h"
+#include "qgstreamerimagecapture_p.h"
#include "qgstreamercamera_p.h"
#include <private/qgstpipeline_p.h>
-#include "qgstreamercameraimagecapture_p.h"
#include "private/qgstreameraudioinput_p.h"
#include "private/qgstreameraudiooutput_p.h"
#include "private/qgstreamervideooutput_p.h"
@@ -118,14 +117,14 @@ void QGstreamerMediaCapture::setCamera(QPlatformCamera *camera)
gstPipeline.dumpGraph("camera");
}
-QPlatformCameraImageCapture *QGstreamerMediaCapture::imageCapture()
+QPlatformImageCapture *QGstreamerMediaCapture::imageCapture()
{
return m_imageCapture;
}
-void QGstreamerMediaCapture::setImageCapture(QPlatformCameraImageCapture *imageCapture)
+void QGstreamerMediaCapture::setImageCapture(QPlatformImageCapture *imageCapture)
{
- QGstreamerCameraImageCapture *control = static_cast<QGstreamerCameraImageCapture *>(imageCapture);
+ QGstreamerImageCapture *control = static_cast<QGstreamerImageCapture *>(imageCapture);
if (m_imageCapture == control)
return;
diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediacapture_p.h b/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediacapture_p.h
index bf10054d1..db42c1ee8 100644
--- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediacapture_p.h
+++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediacapture_p.h
@@ -60,7 +60,7 @@
QT_BEGIN_NAMESPACE
class QGstreamerCamera;
-class QGstreamerCameraImageCapture;
+class QGstreamerImageCapture;
class QGstreamerMediaEncoder;
class QGstreamerAudioInput;
class QGstreamerAudioOutput;
@@ -77,8 +77,8 @@ public:
QPlatformCamera *camera() override;
void setCamera(QPlatformCamera *camera) override;
- QPlatformCameraImageCapture *imageCapture() override;
- void setImageCapture(QPlatformCameraImageCapture *imageCapture) override;
+ QPlatformImageCapture *imageCapture() override;
+ void setImageCapture(QPlatformImageCapture *imageCapture) override;
QPlatformMediaEncoder *mediaEncoder() override;
void setMediaEncoder(QPlatformMediaEncoder *encoder) override;
@@ -113,7 +113,7 @@ private:
QGstreamerVideoOutput *gstVideoOutput = nullptr;
QGstreamerMediaEncoder *m_mediaEncoder = nullptr;
- QGstreamerCameraImageCapture *m_imageCapture = nullptr;
+ QGstreamerImageCapture *m_imageCapture = nullptr;
};
QT_END_NAMESPACE
diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder.cpp b/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder.cpp
index 81fcecc2e..ee67ae55d 100644
--- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder.cpp
+++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder.cpp
@@ -71,14 +71,8 @@ QGstreamerMediaEncoder::~QGstreamerMediaEncoder()
QObject::disconnect(cameraChanged);
}
-QUrl QGstreamerMediaEncoder::outputLocation() const
+bool QGstreamerMediaEncoder::isLocationWritable(const QUrl &) const
{
- return m_requestedOutputLocation;
-}
-
-bool QGstreamerMediaEncoder::setOutputLocation(const QUrl &sink)
-{
- m_requestedOutputLocation = sink;
return true;
}
@@ -300,12 +294,12 @@ void QGstreamerMediaEncoder::record()
updateStatus();
// create new encoder
- QString outputLocation = m_requestedOutputLocation.toLocalFile();
- if (m_requestedOutputLocation.isEmpty()) {
+ QString location = outputLocation().toLocalFile();
+ if (outputLocation().isEmpty()) {
QString container = m_resolvedSettings.mimeType().preferredSuffix();
- outputLocation = generateFileName(defaultDir(), container);
+ location = generateFileName(defaultDir(), container);
}
- QUrl actualSink = QUrl::fromLocalFile(QDir::currentPath()).resolved(outputLocation);
+ QUrl actualSink = QUrl::fromLocalFile(QDir::currentPath()).resolved(location);
qCDebug(qLcMediaEncoder) << "recording new video to" << actualSink;
Q_ASSERT(!actualSink.isEmpty());
@@ -338,7 +332,7 @@ void QGstreamerMediaEncoder::record()
heartbeat.start();
gstPipeline.dumpGraph("recording");
- actualLocationChanged(QUrl::fromLocalFile(outputLocation));
+ actualLocationChanged(QUrl::fromLocalFile(location));
updateStatus();
}
diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder_p.h b/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder_p.h
index 3c0238c02..29e210e8d 100644
--- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder_p.h
+++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder_p.h
@@ -72,8 +72,7 @@ public:
QGstreamerMediaEncoder(QMediaRecorder *parent);
virtual ~QGstreamerMediaEncoder();
- QUrl outputLocation() const override;
- bool setOutputLocation(const QUrl &sink) override;
+ bool isLocationWritable(const QUrl &sink) const override;
qint64 duration() const override;
@@ -103,7 +102,6 @@ private:
QDir defaultDir() const;
QString generateFileName(const QDir &dir, const QString &ext) const;
- QUrl m_requestedOutputLocation;
QMediaEncoderSettings m_settings;
QMediaEncoderSettings m_resolvedSettings;
QGstreamerMediaCapture *m_session = nullptr;
diff --git a/src/multimedia/platform/gstreamer/qgstreamerformatinfo.cpp b/src/multimedia/platform/gstreamer/qgstreamerformatinfo.cpp
index f89cf36c7..0f91e774d 100644
--- a/src/multimedia/platform/gstreamer/qgstreamerformatinfo.cpp
+++ b/src/multimedia/platform/gstreamer/qgstreamerformatinfo.cpp
@@ -140,22 +140,22 @@ QMediaFormat::FileFormat QGstreamerFormatInfo::fileFormatForCaps(QGstStructure s
}
-QCameraImageCapture::FileFormat QGstreamerFormatInfo::imageFormatForCaps(QGstStructure structure)
+QImageCapture::FileFormat QGstreamerFormatInfo::imageFormatForCaps(QGstStructure structure)
{
const char *name = structure.name().data();
if (!strcmp(name, "image/jpeg")) {
- return QCameraImageCapture::JPEG;
+ return QImageCapture::JPEG;
} else if (!strcmp(name, "image/png")) {
- return QCameraImageCapture::PNG;
+ return QImageCapture::PNG;
} else if (!strcmp(name, "image/webp")) {
- return QCameraImageCapture::WebP;
+ return QImageCapture::WebP;
} else if (!strcmp(name, "image/webp")) {
- return QCameraImageCapture::WebP;
+ return QImageCapture::WebP;
} else if (!strcmp(name, "image/tiff")) {
- return QCameraImageCapture::Tiff;
+ return QImageCapture::Tiff;
}
- return QCameraImageCapture::UnspecifiedFormat;
+ return QImageCapture::UnspecifiedFormat;
}
static QPair<QList<QMediaFormat::AudioCodec>, QList<QMediaFormat::VideoCodec>> getCodecsList(bool decode)
@@ -266,9 +266,9 @@ QList<QGstreamerFormatInfo::CodecMap> QGstreamerFormatInfo::getMuxerList(bool de
return muxers;
}
-static QList<QCameraImageCapture::FileFormat> getImageFormatList()
+static QList<QImageCapture::FileFormat> getImageFormatList()
{
- QSet<QCameraImageCapture::FileFormat> formats;
+ QSet<QImageCapture::FileFormat> formats;
GList *elementList = gst_element_factory_list_get_elements(GST_ELEMENT_FACTORY_TYPE_ENCODER,
GST_RANK_MARGINAL);
@@ -289,7 +289,7 @@ static QList<QCameraImageCapture::FileFormat> getImageFormatList()
for (int i = 0; i < caps.size(); i++) {
QGstStructure structure = caps.at(i);
auto f = QGstreamerFormatInfo::imageFormatForCaps(structure);
- if (f != QCameraImageCapture::UnspecifiedFormat) {
+ if (f != QImageCapture::UnspecifiedFormat) {
// qDebug() << structure.toString() << f;
formats.insert(f);
}
diff --git a/src/multimedia/platform/gstreamer/qgstreamerformatinfo_p.h b/src/multimedia/platform/gstreamer/qgstreamerformatinfo_p.h
index 47d0f133a..f8de964e4 100644
--- a/src/multimedia/platform/gstreamer/qgstreamerformatinfo_p.h
+++ b/src/multimedia/platform/gstreamer/qgstreamerformatinfo_p.h
@@ -71,7 +71,7 @@ public:
static QMediaFormat::AudioCodec audioCodecForCaps(QGstStructure structure);
static QMediaFormat::VideoCodec videoCodecForCaps(QGstStructure structure);
static QMediaFormat::FileFormat fileFormatForCaps(QGstStructure structure);
- static QCameraImageCapture::FileFormat imageFormatForCaps(QGstStructure structure);
+ static QImageCapture::FileFormat imageFormatForCaps(QGstStructure structure);
QList<CodecMap> getMuxerList(bool demuxer, QList<QMediaFormat::AudioCodec> audioCodecs, QList<QMediaFormat::VideoCodec> videoCodecs);
};
diff --git a/src/multimedia/platform/gstreamer/qgstreamerintegration.cpp b/src/multimedia/platform/gstreamer/qgstreamerintegration.cpp
index 06a0f6af8..732f0ed9f 100644
--- a/src/multimedia/platform/gstreamer/qgstreamerintegration.cpp
+++ b/src/multimedia/platform/gstreamer/qgstreamerintegration.cpp
@@ -44,7 +44,7 @@
#include "private/qgstreameraudiodecoder_p.h"
#include "private/qgstreamercamera_p.h"
#include "private/qgstreamermediaencoder_p.h"
-#include "private/qgstreamercameraimagecapture_p.h"
+#include "private/qgstreamerimagecapture_p.h"
#include "private/qgstreamerformatinfo_p.h"
#include "private/qgstreamervideorenderer_p.h"
#include "private/qgstreamervideosink_p.h"
@@ -101,9 +101,9 @@ QPlatformMediaEncoder *QGstreamerIntegration::createEncoder(QMediaRecorder *enco
return new QGstreamerMediaEncoder(encoder);
}
-QPlatformCameraImageCapture *QGstreamerIntegration::createImageCapture(QCameraImageCapture *imageCapture)
+QPlatformImageCapture *QGstreamerIntegration::createImageCapture(QImageCapture *imageCapture)
{
- return new QGstreamerCameraImageCapture(imageCapture);
+ return new QGstreamerImageCapture(imageCapture);
}
QPlatformVideoSink *QGstreamerIntegration::createVideoSink(QVideoSink *sink)
diff --git a/src/multimedia/platform/gstreamer/qgstreamerintegration_p.h b/src/multimedia/platform/gstreamer/qgstreamerintegration_p.h
index 0bd21ead4..14167e750 100644
--- a/src/multimedia/platform/gstreamer/qgstreamerintegration_p.h
+++ b/src/multimedia/platform/gstreamer/qgstreamerintegration_p.h
@@ -74,7 +74,7 @@ public:
QPlatformMediaPlayer *createPlayer(QMediaPlayer *player) override;
QPlatformCamera *createCamera(QCamera *) override;
QPlatformMediaEncoder *createEncoder(QMediaRecorder *) override;
- QPlatformCameraImageCapture *createImageCapture(QCameraImageCapture *) override;
+ QPlatformImageCapture *createImageCapture(QImageCapture *) override;
QPlatformVideoSink *createVideoSink(QVideoSink *sink) override;
diff --git a/src/multimedia/platform/qnx/camera/bbcameraimagecapturecontrol.cpp b/src/multimedia/platform/qnx/camera/bbcameraimagecapturecontrol.cpp
index 506544d74..5a78e1ee0 100644
--- a/src/multimedia/platform/qnx/camera/bbcameraimagecapturecontrol.cpp
+++ b/src/multimedia/platform/qnx/camera/bbcameraimagecapturecontrol.cpp
@@ -43,7 +43,7 @@
QT_BEGIN_NAMESPACE
BbCameraImageCaptureControl::BbCameraImageCaptureControl(BbCameraSession *session, QObject *parent)
- : QPlatformCameraImageCapture(parent)
+ : QPlatformImageCapture(parent)
, m_session(session)
{
connect(m_session, SIGNAL(readyForCaptureChanged(bool)), this, SIGNAL(readyForCaptureChanged(bool)));
diff --git a/src/multimedia/platform/qnx/camera/bbcameraimagecapturecontrol_p.h b/src/multimedia/platform/qnx/camera/bbcameraimagecapturecontrol_p.h
index 7a25cc0e3..62ba19c97 100644
--- a/src/multimedia/platform/qnx/camera/bbcameraimagecapturecontrol_p.h
+++ b/src/multimedia/platform/qnx/camera/bbcameraimagecapturecontrol_p.h
@@ -50,13 +50,13 @@
// We mean it.
//
-#include <private/qplatformcameraimagecapture_p.h>
+#include <private/qplatformimagecapture_p.h>
QT_BEGIN_NAMESPACE
class BbCameraSession;
-class BbCameraImageCaptureControl : public QPlatformCameraImageCapture
+class BbCameraImageCaptureControl : public QPlatformImageCapture
{
Q_OBJECT
public:
diff --git a/src/multimedia/platform/qnx/camera/bbcameramediarecordercontrol.cpp b/src/multimedia/platform/qnx/camera/bbcameramediarecordercontrol.cpp
index cdd4793af..eead99420 100644
--- a/src/multimedia/platform/qnx/camera/bbcameramediarecordercontrol.cpp
+++ b/src/multimedia/platform/qnx/camera/bbcameramediarecordercontrol.cpp
@@ -72,14 +72,9 @@ BbCameraMediaRecorderControl::BbCameraMediaRecorderControl(BbCameraSession *sess
connect(m_session, SIGNAL(videoError(int,QString)), this, SIGNAL(error(int,QString)));
}
-QUrl BbCameraMediaRecorderControl::outputLocation() const
+bool BbCameraMediaRecorderControl::isLocationWritable(const QUrl &location) const
{
- return m_session->outputLocation();
-}
-
-bool BbCameraMediaRecorderControl::setOutputLocation(const QUrl &location)
-{
- return m_session->setOutputLocation(location);
+ return true;
}
QMediaRecorder::RecorderState BbCameraMediaRecorderControl::state() const
@@ -130,7 +125,20 @@ void BbCameraMediaRecorderControl::applySettings()
void BbCameraMediaRecorderControl::setState(QMediaRecorder::RecorderState state)
{
- m_session->setVideoState(state);
+ if (!m_session)
+ return;
+
+ switch (state) {
+ case QMediaRecorder::RecordingState:
+ m_session->startVideoRecording(outputLocation());
+ break;
+ case QMediaRecorder::StoppedState:
+ m_session->stopVideoRecording();
+ break;
+ case QMediaRecorder::PausedState:
+ //TODO: (pause) not supported by BB10 API yet
+ break;
+ }
}
void BbCameraMediaRecorderControl::setMuted(bool muted)
diff --git a/src/multimedia/platform/qnx/camera/bbcameramediarecordercontrol_p.h b/src/multimedia/platform/qnx/camera/bbcameramediarecordercontrol_p.h
index 7b9d11ecc..27fa53ffa 100644
--- a/src/multimedia/platform/qnx/camera/bbcameramediarecordercontrol_p.h
+++ b/src/multimedia/platform/qnx/camera/bbcameramediarecordercontrol_p.h
@@ -62,9 +62,8 @@ class BbCameraMediaRecorderControl : public QPlatformMediaEncoder
public:
explicit BbCameraMediaRecorderControl(BbCameraSession *session, QObject *parent = 0);
- QUrl outputLocation() const override;
- bool setOutputLocation(const QUrl &location) override;
QMediaRecorder::RecorderState state() const override;
+ bool isLocationWritable(const QUrl &location) const override;
QMediaRecorder::Status status() const override;
qint64 duration() const override;
bool isMuted() const override;
diff --git a/src/multimedia/platform/qnx/camera/bbcameraservice.cpp b/src/multimedia/platform/qnx/camera/bbcameraservice.cpp
index f116fea01..6f68e68ed 100644
--- a/src/multimedia/platform/qnx/camera/bbcameraservice.cpp
+++ b/src/multimedia/platform/qnx/camera/bbcameraservice.cpp
@@ -78,7 +78,7 @@ QPlatformCamera *BbCameraService::camera()
return m_cameraControl;
}
-QPlatformCameraImageCapture *BbCameraService::imageCapture()
+QPlatformImageCapture *BbCameraService::imageCapture()
{
return m_cameraImageCaptureControl;
}
diff --git a/src/multimedia/platform/qnx/camera/bbcameraservice_p.h b/src/multimedia/platform/qnx/camera/bbcameraservice_p.h
index 0f7f95b09..128fc1154 100644
--- a/src/multimedia/platform/qnx/camera/bbcameraservice_p.h
+++ b/src/multimedia/platform/qnx/camera/bbcameraservice_p.h
@@ -76,7 +76,7 @@ public:
~BbCameraService();
QPlatformCamera *camera() override;
- QPlatformCameraImageCapture *imageCapture() override;
+ QPlatformImageCapture *imageCapture() override;
QPlatformMediaEncoder *mediaEncoder() override;
void setVideoPreview(QVideoSink *surface) override;
diff --git a/src/multimedia/platform/qnx/camera/bbcamerasession.cpp b/src/multimedia/platform/qnx/camera/bbcamerasession.cpp
index 699c8f9ef..9ce740d20 100644
--- a/src/multimedia/platform/qnx/camera/bbcamerasession.cpp
+++ b/src/multimedia/platform/qnx/camera/bbcamerasession.cpp
@@ -317,7 +317,7 @@ static void imageCaptureImageCallback(camera_handle_t handle, camera_buffer_t *b
// We are inside a worker thread here, so emit error signal inside the main thread
QMetaObject::invokeMethod(data->session, "imageCaptureError", Qt::QueuedConnection,
Q_ARG(int, data->requestId),
- Q_ARG(QCameraImageCapture::Error, QCameraImageCapture::FormatError),
+ Q_ARG(QImageCapture::Error, QImageCapture::FormatError),
Q_ARG(QString, BbCameraSession::tr("Camera provides image in unsupported format")));
return;
}
@@ -331,7 +331,7 @@ static void imageCaptureImageCallback(camera_handle_t handle, camera_buffer_t *b
// We are inside a worker thread here, so emit error signal inside the main thread
QMetaObject::invokeMethod(data->session, "imageCaptureError", Qt::QueuedConnection,
Q_ARG(int, data->requestId),
- Q_ARG(QCameraImageCapture::Error, QCameraImageCapture::FormatError),
+ Q_ARG(QImageCapture::Error, QImageCapture::FormatError),
Q_ARG(QString, errorMessage));
return;
}
@@ -349,7 +349,7 @@ int BbCameraSession::capture(const QString &fileName)
m_lastImageCaptureId++;
if (!isReadyForCapture()) {
- emit imageCaptureError(m_lastImageCaptureId, QCameraImageCapture::NotReadyError, tr("Camera not ready"));
+ emit imageCaptureError(m_lastImageCaptureId, QImageCapture::NotReadyError, tr("Camera not ready"));
return m_lastImageCaptureId;
}
@@ -406,57 +406,11 @@ void BbCameraSession::setImageSettings(const QImageEncoderSettings &settings)
m_imageEncoderSettings.setCodec(QLatin1String("jpeg"));
}
-QUrl BbCameraSession::outputLocation() const
-{
- return QUrl::fromLocalFile(m_videoOutputLocation);
-}
-
-bool BbCameraSession::setOutputLocation(const QUrl &location)
-{
- m_videoOutputLocation = location.toLocalFile();
-
- return true;
-}
-
QMediaRecorder::RecorderState BbCameraSession::videoState() const
{
return m_videoState;
}
-void BbCameraSession::setVideoState(QMediaRecorder::RecorderState state)
-{
- if (m_videoState == state)
- return;
-
- const QMediaRecorder::RecorderState previousState = m_videoState;
-
- if (previousState == QMediaRecorder::StoppedState) {
- if (state == QMediaRecorder::RecordingState) {
- if (startVideoRecording()) {
- m_videoState = state;
- }
- } else if (state == QMediaRecorder::PausedState) {
- // do nothing
- }
- } else if (previousState == QMediaRecorder::RecordingState) {
- if (state == QMediaRecorder::StoppedState) {
- stopVideoRecording();
- m_videoState = state;
- } else if (state == QMediaRecorder::PausedState) {
- //TODO: (pause) not supported by BB10 API yet
- }
- } else if (previousState == QMediaRecorder::PausedState) {
- if (state == QMediaRecorder::StoppedState) {
- stopVideoRecording();
- m_videoState = state;
- } else if (state == QMediaRecorder::RecordingState) {
- //TODO: (resume) not supported by BB10 API yet
- }
- }
-
- emit videoStateChanged(m_videoState);
-}
-
QMediaRecorder::Status BbCameraSession::videoStatus() const
{
return m_videoStatus;
@@ -677,11 +631,11 @@ void BbCameraSession::imageCaptured(int requestId, const QImage &rawImage, const
if (image.save(&file, "JPG")) {
emit imageSaved(requestId, actualFileName);
} else {
- emit imageCaptureError(requestId, QCameraImageCapture::OutOfSpaceError, file.errorString());
+ emit imageCaptureError(requestId, QImageCapture::OutOfSpaceError, file.errorString());
}
} else {
const QString errorMessage = tr("Could not open destination file:\n%1").arg(actualFileName);
- emit imageCaptureError(requestId, QCameraImageCapture::ResourceError, errorMessage);
+ emit imageCaptureError(requestId, QImageCapture::ResourceError, errorMessage);
}
}
}
@@ -986,32 +940,37 @@ static void videoRecordingStatusCallback(camera_handle_t handle, camera_devstatu
}
}
-bool BbCameraSession::startVideoRecording()
+void BbCameraSession::startVideoRecording(const QUrl &outputLocation)
{
+ if (m_videoState == QMediaRecorder::RecordingState)
+ return;
+
m_videoRecordingDuration.invalidate();
m_videoStatus = QMediaRecorder::StartingStatus;
emit videoStatusChanged(m_videoStatus);
- if (m_videoOutputLocation.isEmpty())
- m_videoOutputLocation = m_mediaStorageLocation.generateFileName(QLatin1String("VID_"), m_mediaStorageLocation.defaultDir(QCamera::CaptureVideo), QLatin1String("mp4"));
+ QString videoOutputLocation = outputLocation.toLocalFile();
+ if (videoOutputLocation.isEmpty())
+ videoOutputLocation = m_mediaStorageLocation.generateFileName(QLatin1String("VID_"), m_mediaStorageLocation.defaultDir(QCamera::CaptureVideo), QLatin1String("mp4"));
- emit actualLocationChanged(m_videoOutputLocation);
+ emit actualLocationChanged(videoOutputLocation);
- const camera_error_t result = camera_start_video(m_handle, QFile::encodeName(m_videoOutputLocation), 0, videoRecordingStatusCallback, this);
+ const camera_error_t result = camera_start_video(m_handle, QFile::encodeName(videoOutputLocation), 0, videoRecordingStatusCallback, this);
if (result != CAMERA_EOK) {
m_videoStatus = QMediaRecorder::StoppedStatus;
- emit videoStatusChanged(m_videoStatus);
-
emit videoError(QMediaRecorder::ResourceError, tr("Unable to start video recording"));
- return false;
+ } else {
+ m_videoState = QMediaRecorder::RecordingState;
}
-
- return true;
+ emit videoStateChanged(m_videoState);
}
void BbCameraSession::stopVideoRecording()
{
+ if (m_videoState == QMediaRecorder::StoppedState)
+ return;
+
m_videoStatus = QMediaRecorder::FinalizingStatus;
emit videoStatusChanged(m_videoStatus);
@@ -1024,6 +983,8 @@ void BbCameraSession::stopVideoRecording()
emit videoStatusChanged(m_videoStatus);
m_videoRecordingDuration.invalidate();
+ m_videoState = QMediaRecorder::StoppedState;
+ emit videoStateChanged(m_videoState);
}
bool BbCameraSession::isCaptureModeSupported(camera_handle_t handle, QCamera::CaptureModes mode) const
diff --git a/src/multimedia/platform/qnx/camera/bbcamerasession_p.h b/src/multimedia/platform/qnx/camera/bbcamerasession_p.h
index c92c2ac2d..b45a0e876 100644
--- a/src/multimedia/platform/qnx/camera/bbcamerasession_p.h
+++ b/src/multimedia/platform/qnx/camera/bbcamerasession_p.h
@@ -53,7 +53,7 @@
#include "bbmediastoragelocation_p.h"
#include <QCamera>
-#include <QCameraImageCapture>
+#include <QImageCapture>
#include <QElapsedTimer>
#include <QMediaRecorder>
#include <QMutex>
@@ -107,14 +107,14 @@ public:
void setImageSettings(const QImageEncoderSettings &settings);
// media recorder control
- QUrl outputLocation() const;
- bool setOutputLocation(const QUrl &location);
QMediaRecorder::RecorderState videoState() const;
- void setVideoState(QMediaRecorder::RecorderState state);
QMediaRecorder::Status videoStatus() const;
qint64 duration() const;
void applyVideoSettings();
+ bool startVideoRecording(const QUrl &outputLocation);
+ void stopVideoRecording();
+
// video encoder settings control
QList<QSize> supportedResolutions(const QVideoEncoderSettings &settings, bool *continuous) const;
QList<qreal> supportedFrameRates(const QVideoEncoderSettings &settings, bool *continuous) const;
@@ -166,8 +166,6 @@ private:
void closeCamera();
bool startViewFinder();
void stopViewFinder();
- bool startVideoRecording();
- void stopVideoRecording();
bool isCaptureModeSupported(camera_handle_t handle, QCamera::CaptureModes mode) const;
QList<QSize> supportedResolutions(QCamera::CaptureMode mode) const;
@@ -191,7 +189,6 @@ private:
QImageEncoderSettings m_imageEncoderSettings;
- QString m_videoOutputLocation;
QMediaRecorder::RecorderState m_videoState;
QMediaRecorder::Status m_videoStatus;
QElapsedTimer m_videoRecordingDuration;
diff --git a/src/multimedia/platform/qplatformaudiodecoder.cpp b/src/multimedia/platform/qplatformaudiodecoder.cpp
index b7da0a304..817e0656f 100644
--- a/src/multimedia/platform/qplatformaudiodecoder.cpp
+++ b/src/multimedia/platform/qplatformaudiodecoder.cpp
@@ -67,28 +67,6 @@ QPlatformAudioDecoder::QPlatformAudioDecoder(QAudioDecoder *parent)
}
/*!
- \fn QPlatformAudioDecoder::state() const
-
- Returns the state of a player control.
-*/
-
-void QPlatformAudioDecoder::stateChanged(QAudioDecoder::State newState)
-{
- if (m_state == newState)
- return;
- m_state = newState;
- emit q->stateChanged(newState);
-}
-
-/*!
- \fn QPlatformAudioDecoder::stateChanged(QAudioDecoder::State newState)
-
- Signals that the state of a player control has changed to \a newState.
-
- \sa state()
-*/
-
-/*!
\fn QPlatformAudioDecoder::source() const
Returns the current media source filename, or a null QString if none (or a device)
@@ -150,6 +128,7 @@ void QPlatformAudioDecoder::error(int error, const QString &errorString)
return;
m_error = QAudioDecoder::Error(error);
m_errorString = errorString;
+ setIsDecoding(false);
emit q->error(m_error);
}
@@ -193,18 +172,6 @@ void QPlatformAudioDecoder::sourceChanged()
}
/*!
- \fn QPlatformAudioDecoder::formatChanged(const QAudioFormat &format)
-
- Signals that the current audio format of the decoder has changed to \a format.
-
- \sa audioFormat(), setAudioFormat()
-*/
-void QPlatformAudioDecoder::formatChanged(const QAudioFormat &format)
-{
- emit q->formatChanged(format);
-}
-
-/*!
\fn void QPlatformAudioDecoder::finished()
Signals that the decoding has finished successfully.
@@ -214,6 +181,7 @@ void QPlatformAudioDecoder::formatChanged(const QAudioFormat &format)
*/
void QPlatformAudioDecoder::finished()
{
+ setIsDecoding(false);
emit q->finished();
}
diff --git a/src/multimedia/platform/qplatformaudiodecoder_p.h b/src/multimedia/platform/qplatformaudiodecoder_p.h
index 91877e647..e097b79fa 100644
--- a/src/multimedia/platform/qplatformaudiodecoder_p.h
+++ b/src/multimedia/platform/qplatformaudiodecoder_p.h
@@ -66,8 +66,6 @@ class Q_MULTIMEDIA_EXPORT QPlatformAudioDecoder : public QObject
Q_OBJECT
public:
- virtual QAudioDecoder::State state() const { return m_state; }
-
virtual QUrl source() const = 0;
virtual void setSource(const QUrl &fileName) = 0;
@@ -77,17 +75,12 @@ public:
virtual void start() = 0;
virtual void stop() = 0;
- virtual QAudioFormat audioFormat() const = 0;
- virtual void setAudioFormat(const QAudioFormat &format) = 0;
-
virtual QAudioBuffer read() = 0;
virtual bool bufferAvailable() const = 0;
virtual qint64 position() const = 0;
virtual qint64 duration() const = 0;
- void stateChanged(QAudioDecoder::State newState);
- void formatChanged(const QAudioFormat &format);
void sourceChanged();
void error(int error, const QString &errorString);
@@ -95,7 +88,14 @@ public:
void bufferReady();
void bufferAvailableChanged(bool available);
+ void setIsDecoding(bool running = true) {
+ if (m_isDecoding == running)
+ return;
+ m_isDecoding = running;
+ emit q->isDecodingChanged(m_isDecoding);
+ }
void finished();
+ bool isDecoding() const { return m_isDecoding; }
void positionChanged(qint64 position);
void durationChanged(qint64 duration);
@@ -108,9 +108,9 @@ protected:
private:
QAudioDecoder *q = nullptr;
- QAudioDecoder::State m_state = QAudioDecoder::StoppedState;
QAudioDecoder::Error m_error = QAudioDecoder::NoError;
QString m_errorString;
+ bool m_isDecoding = false;
};
QT_END_NAMESPACE
diff --git a/src/multimedia/platform/qplatformcamera.cpp b/src/multimedia/platform/qplatformcamera.cpp
index 796269cda..d0bc9fdcf 100644
--- a/src/multimedia/platform/qplatformcamera.cpp
+++ b/src/multimedia/platform/qplatformcamera.cpp
@@ -94,9 +94,7 @@ QCameraFormat QPlatformCamera::findBestCameraFormat(const QCameraDevice &camera)
Sets the camera \a state.
- State changes are synchronous and indicate user intention,
- while camera status is used as a feedback mechanism to inform application about backend status.
- Status changes are reported asynchronously with QPlatformCamera::statusChanged() signal.
+ State changes are synchronous and indicate user intention.
\sa QCamera::State
*/
@@ -111,21 +109,6 @@ QCameraFormat QPlatformCamera::findBestCameraFormat(const QCameraDevice &camera)
*/
/*!
- \fn QPlatformCamera::status() const
-
- Returns the status of the camera service.
-
- \sa QCamera::state
-*/
-
-/*!
- \fn void QPlatformCamera::statusChanged(QCamera::Status status)
-
- Signal emitted when the camera \a status changes.
-*/
-
-
-/*!
\fn void QPlatformCamera::error(int error, const QString &errorString)
Signal emitted when an error occurs with error code \a error and
@@ -165,14 +148,6 @@ void QPlatformCamera::supportedFeaturesChanged(QCamera::Features f)
emit m_camera->supportedFeaturesChanged();
}
-void QPlatformCamera::statusChanged(QCamera::Status s)
-{
- if (s == m_status)
- return;
- m_status = s;
- emit m_camera->statusChanged(s);
-}
-
void QPlatformCamera::minimumZoomFactorChanged(float factor)
{
if (m_minZoom == factor)
diff --git a/src/multimedia/platform/qplatformcamera_p.h b/src/multimedia/platform/qplatformcamera_p.h
index 990943d2d..8ddaf51ae 100644
--- a/src/multimedia/platform/qplatformcamera_p.h
+++ b/src/multimedia/platform/qplatformcamera_p.h
@@ -66,8 +66,6 @@ public:
virtual bool isActive() const = 0;
virtual void setActive(bool active) = 0;
- virtual QCamera::Status status() const { return m_status; }
-
virtual void setCamera(const QCameraDevice &camera) = 0;
virtual bool setCameraFormat(const QCameraFormat &/*format*/) { return false; }
@@ -128,7 +126,6 @@ public:
int colorTemperature() const { return m_colorTemperature; }
void supportedFeaturesChanged(QCamera::Features);
- void statusChanged(QCamera::Status);
void minimumZoomFactorChanged(float factor);
void maximumZoomFactorChanged(float);
void focusModeChanged(QCamera::FocusMode mode);
@@ -163,7 +160,6 @@ protected:
private:
QCamera *m_camera = nullptr;
QCamera::Features m_supportedFeatures = {};
- QCamera::Status m_status = QCamera::InactiveStatus;
QCamera::FocusMode m_focusMode = QCamera::FocusModeAuto;
float m_minZoom = 1.;
float m_maxZoom = 1.;
diff --git a/src/multimedia/platform/qplatformcameraimagecapture.cpp b/src/multimedia/platform/qplatformimagecapture.cpp
index 907fa3354..04c3ed337 100644
--- a/src/multimedia/platform/qplatformcameraimagecapture.cpp
+++ b/src/multimedia/platform/qplatformimagecapture.cpp
@@ -37,16 +37,16 @@
**
****************************************************************************/
-#include "qplatformcameraimagecapture_p.h"
+#include "qplatformimagecapture_p.h"
#include <QtCore/qstringlist.h>
QT_BEGIN_NAMESPACE
/*!
- \class QPlatformCameraImageCapture
+ \class QPlatformImageCapture
\obsolete
- \brief The QPlatformCameraImageCapture class provides a control interface
+ \brief The QPlatformImageCapture class provides a control interface
for image capture services.
\inmodule QtMultimedia
@@ -57,14 +57,14 @@ QT_BEGIN_NAMESPACE
/*!
Constructs a new image capture control object with the given \a parent
*/
-QPlatformCameraImageCapture::QPlatformCameraImageCapture(QCameraImageCapture *parent)
+QPlatformImageCapture::QPlatformImageCapture(QImageCapture *parent)
: QObject(parent),
m_imageCapture(parent)
{
}
/*!
- \fn QPlatformCameraImageCapture::isReadyForCapture() const
+ \fn QPlatformImageCapture::isReadyForCapture() const
Identifies if a capture control is ready to perform a capture
immediately (all the resources necessary for image capture are allocated,
@@ -80,13 +80,13 @@ QPlatformCameraImageCapture::QPlatformCameraImageCapture(QCameraImageCapture *pa
*/
/*!
- \fn QPlatformCameraImageCapture::readyForCaptureChanged(bool ready)
+ \fn QPlatformImageCapture::readyForCaptureChanged(bool ready)
Signals that a capture control's \a ready state has changed.
*/
/*!
- \fn QPlatformCameraImageCapture::capture(const QString &fileName)
+ \fn QPlatformImageCapture::capture(const QString &fileName)
Initiates the capture of an image to \a fileName.
The \a fileName can be relative or empty,
@@ -103,13 +103,13 @@ QPlatformCameraImageCapture::QPlatformCameraImageCapture(QCameraImageCapture *pa
*/
/*!
- \fn QPlatformCameraImageCapture::cancelCapture()
+ \fn QPlatformImageCapture::cancelCapture()
Cancel pending capture requests.
*/
/*!
- \fn QPlatformCameraImageCapture::imageExposed(int requestId)
+ \fn QPlatformImageCapture::imageExposed(int requestId)
Signals that an image with it \a requestId
has just been exposed.
@@ -117,14 +117,14 @@ QPlatformCameraImageCapture::QPlatformCameraImageCapture(QCameraImageCapture *pa
*/
/*!
- \fn QPlatformCameraImageCapture::imageCaptured(int requestId, const QImage &preview)
+ \fn QPlatformImageCapture::imageCaptured(int requestId, const QImage &preview)
Signals that an image with it \a requestId
has been captured and a \a preview is available.
*/
/*!
- \fn QPlatformCameraImageCapture::imageMetadataAvailable(int id, const QMediaMetaData &metaData)
+ \fn QPlatformImageCapture::imageMetadataAvailable(int id, const QMediaMetaData &metaData)
Signals that a metadata for an image with request \a id is available.
@@ -132,20 +132,20 @@ QPlatformCameraImageCapture::QPlatformCameraImageCapture(QCameraImageCapture *pa
*/
/*!
- \fn QPlatformCameraImageCapture::imageAvailable(int requestId, const QVideoFrame &buffer)
+ \fn QPlatformImageCapture::imageAvailable(int requestId, const QVideoFrame &buffer)
Signals that a captured \a buffer with a \a requestId is available.
*/
/*!
- \fn QPlatformCameraImageCapture::imageSaved(int requestId, const QString &fileName)
+ \fn QPlatformImageCapture::imageSaved(int requestId, const QString &fileName)
Signals that a captured image with a \a requestId has been saved
to \a fileName.
*/
/*!
- \fn QPlatformCameraImageCapture::imageSettings() const
+ \fn QPlatformImageCapture::imageSettings() const
Returns the currently used image encoder settings.
@@ -154,20 +154,20 @@ QPlatformCameraImageCapture::QPlatformCameraImageCapture(QCameraImageCapture *pa
*/
/*!
- \fn QPlatformCameraImageCapture::setImageSettings(const QImageEncoderSettings &settings)
+ \fn QPlatformImageCapture::setImageSettings(const QImageEncoderSettings &settings)
Sets the selected image encoder \a settings.
*/
/*!
- \fn QPlatformCameraImageCapture::error(int id, int error, const QString &errorString)
+ \fn QPlatformImageCapture::error(int id, int error, const QString &errorString)
Signals the capture request \a id failed with \a error code and message \a errorString.
- \sa QCameraImageCapture::Error
+ \sa QImageCapture::Error
*/
QT_END_NAMESPACE
-#include "moc_qplatformcameraimagecapture_p.cpp"
+#include "moc_qplatformimagecapture_p.cpp"
diff --git a/src/multimedia/platform/qplatformcameraimagecapture_p.h b/src/multimedia/platform/qplatformimagecapture_p.h
index 65f96a97d..441848ed0 100644
--- a/src/multimedia/platform/qplatformcameraimagecapture_p.h
+++ b/src/multimedia/platform/qplatformimagecapture_p.h
@@ -51,9 +51,9 @@
// We mean it.
//
-#include <QtMultimedia/qcameraimagecapture.h>
+#include <QtMultimedia/qimagecapture.h>
#include <QtMultimedia/qmediametadata.h>
-#include <QtMultimedia/qcameraimagecapture.h>
+#include <QtMultimedia/qimagecapture.h>
QT_BEGIN_NAMESPACE
@@ -63,9 +63,9 @@ class QPlatformMediaCaptureSession;
class QImageEncoderSettingsPrivate;
class Q_MULTIMEDIA_EXPORT QImageEncoderSettings
{
- QCameraImageCapture::FileFormat m_format = QCameraImageCapture::UnspecifiedFormat;
+ QImageCapture::FileFormat m_format = QImageCapture::UnspecifiedFormat;
QSize m_resolution;
- QCameraImageCapture::Quality m_quality = QCameraImageCapture::NormalQuality;
+ QImageCapture::Quality m_quality = QImageCapture::NormalQuality;
public:
bool operator==(const QImageEncoderSettings &other) {
@@ -75,18 +75,18 @@ public:
}
bool operator!=(const QImageEncoderSettings &other) { return !operator==(other); }
- QCameraImageCapture::FileFormat format() const { return m_format; }
- void setFormat(QCameraImageCapture::FileFormat f) { m_format = f; }
+ QImageCapture::FileFormat format() const { return m_format; }
+ void setFormat(QImageCapture::FileFormat f) { m_format = f; }
QSize resolution() const { return m_resolution; }
void setResolution(const QSize &s) { m_resolution = s; }
void setResolution(int width, int height) { m_resolution = QSize(width, height); }
- QCameraImageCapture::Quality quality() const { return m_quality; }
- void setQuality(QCameraImageCapture::Quality quality) { m_quality = quality; }
+ QImageCapture::Quality quality() const { return m_quality; }
+ void setQuality(QImageCapture::Quality quality) { m_quality = quality; }
};
-class Q_MULTIMEDIA_EXPORT QPlatformCameraImageCapture : public QObject
+class Q_MULTIMEDIA_EXPORT QPlatformImageCapture : public QObject
{
Q_OBJECT
@@ -102,7 +102,7 @@ public:
virtual void setMetaData(const QMediaMetaData &m) { m_metaData = m; }
QMediaMetaData metaData() const { return m_metaData; }
- QCameraImageCapture *imageCapture() { return m_imageCapture; }
+ QImageCapture *imageCapture() { return m_imageCapture; }
Q_SIGNALS:
void readyForCaptureChanged(bool ready);
@@ -116,9 +116,9 @@ Q_SIGNALS:
void error(int id, int error, const QString &errorString);
protected:
- explicit QPlatformCameraImageCapture(QCameraImageCapture *parent = nullptr);
+ explicit QPlatformImageCapture(QImageCapture *parent = nullptr);
private:
- QCameraImageCapture *m_imageCapture = nullptr;
+ QImageCapture *m_imageCapture = nullptr;
QMediaMetaData m_metaData;
};
diff --git a/src/multimedia/platform/qplatformmediacapture_p.h b/src/multimedia/platform/qplatformmediacapture_p.h
index 222a98686..a988f3de4 100644
--- a/src/multimedia/platform/qplatformmediacapture_p.h
+++ b/src/multimedia/platform/qplatformmediacapture_p.h
@@ -55,7 +55,7 @@
QT_BEGIN_NAMESPACE
class QPlatformCamera;
-class QPlatformCameraImageCapture;
+class QPlatformImageCapture;
class QPlatformMediaEncoder;
class QAudioDevice;
class QCameraDevice;
@@ -73,8 +73,8 @@ public:
virtual QPlatformCamera *camera() = 0;
virtual void setCamera(QPlatformCamera *) {}
- virtual QPlatformCameraImageCapture *imageCapture() = 0;
- virtual void setImageCapture(QPlatformCameraImageCapture *) {}
+ virtual QPlatformImageCapture *imageCapture() = 0;
+ virtual void setImageCapture(QPlatformImageCapture *) {}
virtual QPlatformMediaEncoder *mediaEncoder() = 0;
virtual void setMediaEncoder(QPlatformMediaEncoder *) {}
diff --git a/src/multimedia/platform/qplatformmediaencoder_p.h b/src/multimedia/platform/qplatformmediaencoder_p.h
index 2661718d9..950fd2726 100644
--- a/src/multimedia/platform/qplatformmediaencoder_p.h
+++ b/src/multimedia/platform/qplatformmediaencoder_p.h
@@ -136,8 +136,8 @@ class Q_MULTIMEDIA_EXPORT QPlatformMediaEncoder
{
public:
virtual ~QPlatformMediaEncoder() {}
- virtual QUrl outputLocation() const = 0;
- virtual bool setOutputLocation(const QUrl &location) = 0;
+
+ virtual bool isLocationWritable(const QUrl &location) const = 0;
virtual QMediaRecorder::RecorderState state() const { return m_state; }
virtual void setState(QMediaRecorder::RecorderState state) = 0;
@@ -155,6 +155,8 @@ public:
QMediaRecorder::Error error() const { return m_error;}
QString errorString() const { return m_errorString; }
+ QUrl outputLocation() const { return m_outputLocation; }
+ void setOutputLocation(const QUrl &location) { m_outputLocation = location; }
QUrl actualLocation() const { return m_actualLocation; }
void clearActualLocation() { m_actualLocation.clear(); }
void clearError() { error(QMediaRecorder::NoError, QString()); }
@@ -174,6 +176,8 @@ private:
QMediaRecorder::Error m_error = QMediaRecorder::NoError;
QString m_errorString;
QUrl m_actualLocation;
+ QUrl m_outputLocation;
+
QMediaRecorder::RecorderState m_state = QMediaRecorder::StoppedState;
QMediaRecorder::Status m_status = QMediaRecorder::StoppedStatus;
};
diff --git a/src/multimedia/platform/qplatformmediaformatinfo_p.h b/src/multimedia/platform/qplatformmediaformatinfo_p.h
index 9e56bee41..8842304ca 100644
--- a/src/multimedia/platform/qplatformmediaformatinfo_p.h
+++ b/src/multimedia/platform/qplatformmediaformatinfo_p.h
@@ -52,7 +52,7 @@
//
#include <private/qtmultimediaglobal_p.h>
-#include <qcameraimagecapture.h>
+#include <qimagecapture.h>
#include <qmediaformat.h>
QT_BEGIN_NAMESPACE
@@ -77,7 +77,7 @@ public:
QList<CodecMap> encoders;
QList<CodecMap> decoders;
- QList<QCameraImageCapture::FileFormat> imageFormats;
+ QList<QImageCapture::FileFormat> imageFormats;
};
QT_END_NAMESPACE
diff --git a/src/multimedia/platform/qplatformmediaintegration_p.h b/src/multimedia/platform/qplatformmediaintegration_p.h
index 9d28a9528..67938d910 100644
--- a/src/multimedia/platform/qplatformmediaintegration_p.h
+++ b/src/multimedia/platform/qplatformmediaintegration_p.h
@@ -59,7 +59,7 @@ class QMediaPlayer;
class QAudioDecoder;
class QCamera;
class QMediaRecorder;
-class QCameraImageCapture;
+class QImageCapture;
class QMediaDevices;
class QPlatformMediaDevices;
class QPlatformMediaCaptureSession;
@@ -67,7 +67,7 @@ class QPlatformMediaPlayer;
class QPlatformAudioDecoder;
class QPlatformCamera;
class QPlatformMediaEncoder;
-class QPlatformCameraImageCapture;
+class QPlatformImageCapture;
class QPlatformMediaFormatInfo;
class QObject;
class QPlatformVideoSink;
@@ -94,7 +94,7 @@ public:
virtual QPlatformMediaPlayer *createPlayer(QMediaPlayer *) { return nullptr; }
virtual QPlatformCamera *createCamera(QCamera *) { return nullptr; }
virtual QPlatformMediaEncoder *createEncoder(QMediaRecorder *) { return nullptr; }
- virtual QPlatformCameraImageCapture *createImageCapture(QCameraImageCapture *) { return nullptr; }
+ virtual QPlatformImageCapture *createImageCapture(QImageCapture *) { return nullptr; }
virtual QPlatformAudioInput *createAudioInput(QAudioInput *);
virtual QPlatformAudioOutput *createAudioOutput(QAudioOutput *);
diff --git a/src/multimedia/platform/windows/player/mfmetadata.cpp b/src/multimedia/platform/windows/common/mfmetadata.cpp
index d64b3fa2f..587d757d6 100644
--- a/src/multimedia/platform/windows/player/mfmetadata.cpp
+++ b/src/multimedia/platform/windows/common/mfmetadata.cpp
@@ -43,9 +43,10 @@
#include <mfapi.h>
#include <mfidl.h>
+#include <propvarutil.h>
+#include <propkey.h>
#include "mfmetadata_p.h"
-#include "Propkey.h"
//#define DEBUG_MEDIAFOUNDATION
@@ -176,21 +177,21 @@ static QVariant convertValue(const PROPVARIANT& var)
return value;
}
-static QVariant metaDataValue(IPropertyStore *m_content, const PROPERTYKEY &key)
+static QVariant metaDataValue(IPropertyStore *content, const PROPERTYKEY &key)
{
QVariant value;
PROPVARIANT var;
PropVariantInit(&var);
HRESULT hr = S_FALSE;
- if (m_content)
- hr = m_content->GetValue(key, &var);
+ if (content)
+ hr = content->GetValue(key, &var);
if (SUCCEEDED(hr)) {
value = convertValue(var);
// some metadata needs to be reformatted
- if (value.isValid() && m_content) {
+ if (value.isValid() && content) {
if (key == PKEY_Media_ClassPrimaryID /*QMediaMetaData::MediaType*/) {
QString v = value.toString();
if (v == QLatin1String("{D1607DBC-E323-4BE2-86A1-48A42A28441E}"))
@@ -211,12 +212,12 @@ static QVariant metaDataValue(IPropertyStore *m_content, const PROPERTYKEY &key)
} else if (key == PKEY_Video_FrameHeight /*Resolution*/) {
QSize res;
res.setHeight(value.toUInt());
- if (m_content && SUCCEEDED(m_content->GetValue(PKEY_Video_FrameWidth, &var)))
+ if (content && SUCCEEDED(content->GetValue(PKEY_Video_FrameWidth, &var)))
res.setWidth(convertValue(var).toUInt());
value = res;
} else if (key == PKEY_Video_Orientation) {
uint orientation = 0;
- if (m_content && SUCCEEDED(m_content->GetValue(PKEY_Video_Orientation, &var)))
+ if (content && SUCCEEDED(content->GetValue(PKEY_Video_Orientation, &var)))
orientation = convertValue(var).toUInt();
value = orientation;
} else if (key == PKEY_Video_FrameRate) {
@@ -233,17 +234,17 @@ QMediaMetaData MFMetaData::fromNative(IMFMediaSource* mediaSource)
{
QMediaMetaData metaData;
- IPropertyStore *m_content = nullptr;
- if (!SUCCEEDED(MFGetService(mediaSource, MF_PROPERTY_HANDLER_SERVICE, IID_PPV_ARGS(&m_content))))
+ IPropertyStore *content = nullptr;
+ if (!SUCCEEDED(MFGetService(mediaSource, MF_PROPERTY_HANDLER_SERVICE, IID_PPV_ARGS(&content))))
return metaData;
- Q_ASSERT(m_content);
+ Q_ASSERT(content);
DWORD cProps;
- if (SUCCEEDED(m_content->GetCount(&cProps))) {
+ if (SUCCEEDED(content->GetCount(&cProps))) {
for (DWORD i = 0; i < cProps; i++)
{
PROPERTYKEY key;
- if (FAILED(m_content->GetAt(i, &key)))
+ if (FAILED(content->GetAt(i, &key)))
continue;
QMediaMetaData::Key mediaKey;
if (key == PKEY_Author) {
@@ -325,11 +326,191 @@ QMediaMetaData MFMetaData::fromNative(IMFMediaSource* mediaSource)
} else {
continue;
}
- metaData.insert(mediaKey, metaDataValue(m_content, key));
+ metaData.insert(mediaKey, metaDataValue(content, key));
}
}
- m_content->Release();
+ content->Release();
return metaData;
}
+
+static REFPROPERTYKEY propertyKeyForMetaDataKey(QMediaMetaData::Key key)
+{
+ switch (key) {
+ case QMediaMetaData::Key::Title:
+ return PKEY_Title;
+ case QMediaMetaData::Key::Author:
+ return PKEY_Author;
+ case QMediaMetaData::Key::Comment:
+ return PKEY_Comment;
+ case QMediaMetaData::Key::Genre:
+ return PKEY_Music_Genre;
+ case QMediaMetaData::Key::Copyright:
+ return PKEY_Copyright;
+ case QMediaMetaData::Key::Publisher:
+ return PKEY_Media_Publisher;
+ case QMediaMetaData::Key::Url:
+ return PKEY_Media_AuthorUrl;
+ case QMediaMetaData::Key::AlbumTitle:
+ return PKEY_Music_AlbumTitle;
+ case QMediaMetaData::Key::AlbumArtist:
+ return PKEY_Music_AlbumArtist;
+ case QMediaMetaData::Key::TrackNumber:
+ return PKEY_Music_TrackNumber;
+ case QMediaMetaData::Key::Date:
+ return PKEY_Media_DateEncoded;
+ case QMediaMetaData::Key::Composer:
+ return PKEY_Music_Composer;
+ case QMediaMetaData::Key::Duration:
+ return PKEY_Media_Duration;
+ case QMediaMetaData::Key::Language:
+ return PKEY_Language;
+ case QMediaMetaData::Key::Description:
+ return PKEY_Media_EncodingSettings;
+ case QMediaMetaData::Key::AudioBitRate:
+ return PKEY_Audio_EncodingBitrate;
+ case QMediaMetaData::Key::ContributingArtist:
+ return PKEY_Music_Artist;
+ case QMediaMetaData::Key::ThumbnailImage:
+ return PKEY_ThumbnailStream;
+ case QMediaMetaData::Key::Orientation:
+ return PKEY_Video_Orientation;
+ case QMediaMetaData::Key::VideoFrameRate:
+ return PKEY_Video_FrameRate;
+ case QMediaMetaData::Key::VideoBitRate:
+ return PKEY_Video_EncodingBitrate;
+ case QMediaMetaData::MediaType:
+ return PKEY_Media_ClassPrimaryID;
+ default:
+ return PKEY_Null;
+ }
+}
+
+static void setStringProperty(IPropertyStore *content, REFPROPERTYKEY key, const QString &value)
+{
+ PROPVARIANT propValue = {};
+ if (SUCCEEDED(InitPropVariantFromString(reinterpret_cast<LPCWSTR>(value.utf16()), &propValue))) {
+ if (SUCCEEDED(PSCoerceToCanonicalValue(key, &propValue)))
+ content->SetValue(key, propValue);
+ PropVariantClear(&propValue);
+ }
+}
+
+static void setUInt32Property(IPropertyStore *content, REFPROPERTYKEY key, quint32 value)
+{
+ PROPVARIANT propValue = {};
+ if (SUCCEEDED(InitPropVariantFromUInt32(ULONG(value), &propValue))) {
+ if (SUCCEEDED(PSCoerceToCanonicalValue(key, &propValue)))
+ content->SetValue(key, propValue);
+ PropVariantClear(&propValue);
+ }
+}
+
+static void setUInt64Property(IPropertyStore *content, REFPROPERTYKEY key, quint64 value)
+{
+ PROPVARIANT propValue = {};
+ if (SUCCEEDED(InitPropVariantFromUInt64(ULONGLONG(value), &propValue))) {
+ if (SUCCEEDED(PSCoerceToCanonicalValue(key, &propValue)))
+ content->SetValue(key, propValue);
+ PropVariantClear(&propValue);
+ }
+}
+
+static void setFileTimeProperty(IPropertyStore *content, REFPROPERTYKEY key, const FILETIME *ft)
+{
+ PROPVARIANT propValue = {};
+ if (SUCCEEDED(InitPropVariantFromFileTime(ft, &propValue))) {
+ if (SUCCEEDED(PSCoerceToCanonicalValue(key, &propValue)))
+ content->SetValue(key, propValue);
+ PropVariantClear(&propValue);
+ }
+}
+
+void MFMetaData::toNative(const QMediaMetaData &metaData, IPropertyStore *content)
+{
+ if (content) {
+
+ for (const auto &key : metaData.keys()) {
+
+ QVariant value = metaData.value(key);
+
+ if (key == QMediaMetaData::Key::MediaType) {
+
+ QString strValue = metaData.stringValue(key);
+ QString v;
+
+ // Sets property to one of the MediaClassPrimaryID values defined by Microsoft:
+ // https://docs.microsoft.com/en-us/windows/win32/wmformat/wm-mediaprimaryid
+ if (strValue == QLatin1String("Music"))
+ v = QLatin1String("{D1607DBC-E323-4BE2-86A1-48A42A28441E}");
+ else if (strValue == QLatin1String("Video"))
+ v = QLatin1String("{DB9830BD-3AB3-4FAB-8A37-1A995F7FF74B}");
+ else if (strValue == QLatin1String("Audio"))
+ v = QLatin1String("{01CD0F29-DA4E-4157-897B-6275D50C4F11}");
+ else
+ v = QLatin1String("{FCF24A76-9A57-4036-990D-E35DD8B244E1}");
+
+ setStringProperty(content, PKEY_Media_ClassPrimaryID, v);
+
+ } else if (key == QMediaMetaData::Key::Duration) {
+
+ setUInt64Property(content, PKEY_Media_Duration, value.toULongLong() * 10000);
+
+ } else if (key == QMediaMetaData::Key::Resolution) {
+
+ QSize res = value.toSize();
+ setUInt32Property(content, PKEY_Video_FrameWidth, quint32(res.width()));
+ setUInt32Property(content, PKEY_Video_FrameHeight, quint32(res.height()));
+
+ } else if (key == QMediaMetaData::Key::Orientation) {
+
+ setUInt32Property(content, PKEY_Video_Orientation, value.toUInt());
+
+ } else if (key == QMediaMetaData::Key::VideoFrameRate) {
+
+ qreal fps = value.toReal();
+ setUInt32Property(content, PKEY_Video_FrameRate, quint32(fps * 1000));
+
+ } else if (key == QMediaMetaData::Key::TrackNumber) {
+
+ setUInt32Property(content, PKEY_Music_TrackNumber, value.toUInt());
+
+ } else if (key == QMediaMetaData::Key::AudioBitRate) {
+
+ setUInt32Property(content, PKEY_Audio_EncodingBitrate, value.toUInt());
+
+ } else if (key == QMediaMetaData::Key::VideoBitRate) {
+
+ setUInt32Property(content, PKEY_Video_EncodingBitrate, value.toUInt());
+
+ } else if (key == QMediaMetaData::Key::Date) {
+
+ // Convert QDateTime to FILETIME by converting to 100-nsecs since
+ // 01/01/1970 UTC and adding the difference from 1601 to 1970.
+ ULARGE_INTEGER t = {};
+ t.QuadPart = ULONGLONG(value.toDateTime().toUTC().toMSecsSinceEpoch() * 10000
+ + 116444736000000000LL);
+
+ FILETIME ft = {};
+ ft.dwHighDateTime = t.HighPart;
+ ft.dwLowDateTime = t.LowPart;
+
+ setFileTimeProperty(content, PKEY_Media_DateEncoded, &ft);
+
+ } else {
+
+ // By default use as string and let PSCoerceToCanonicalValue()
+ // do validation and type conversion.
+ REFPROPERTYKEY propKey = propertyKeyForMetaDataKey(key);
+
+ if (propKey != PKEY_Null) {
+ QString strValue = metaData.stringValue(key);
+ if (!strValue.isEmpty())
+ setStringProperty(content, propKey, strValue);
+ }
+ }
+ }
+ }
+}
+
diff --git a/src/multimedia/platform/windows/player/mfmetadata_p.h b/src/multimedia/platform/windows/common/mfmetadata_p.h
index 813b42cf3..d1846e9c5 100644
--- a/src/multimedia/platform/windows/player/mfmetadata_p.h
+++ b/src/multimedia/platform/windows/common/mfmetadata_p.h
@@ -60,6 +60,7 @@ class MFMetaData
{
public:
static QMediaMetaData fromNative(IMFMediaSource* mediaSource);
+ static void toNative(const QMediaMetaData &metaData, IPropertyStore *content);
};
#endif
diff --git a/src/multimedia/platform/windows/decoder/mfaudiodecodercontrol.cpp b/src/multimedia/platform/windows/decoder/mfaudiodecodercontrol.cpp
index 953281f31..7a460533d 100644
--- a/src/multimedia/platform/windows/decoder/mfaudiodecodercontrol.cpp
+++ b/src/multimedia/platform/windows/decoder/mfaudiodecodercontrol.cpp
@@ -44,8 +44,6 @@ MFAudioDecoderControl::MFAudioDecoderControl(QAudioDecoder *parent)
: QPlatformAudioDecoder(parent)
, m_decoderSourceReader(new MFDecoderSourceReader)
, m_sourceResolver(new SourceResolver)
- , m_resampler(0)
- , m_state(QAudioDecoder::StoppedState)
, m_device(0)
, m_mfInputStreamID(0)
, m_mfOutputStreamID(0)
@@ -56,21 +54,10 @@ MFAudioDecoderControl::MFAudioDecoderControl(QAudioDecoder *parent)
, m_mfOutputType(0)
, m_convertSample(0)
, m_sourceReady(false)
- , m_resamplerDirty(false)
{
- CoCreateInstance(CLSID_CResamplerMediaObject, NULL, CLSCTX_INPROC_SERVER, IID_IMFTransform, (LPVOID*)(&m_resampler));
- if (!m_resampler) {
- qCritical("MFAudioDecoderControl: Failed to create resampler(CLSID_CResamplerMediaObject)!");
- return;
- }
- m_resampler->AddInputStreams(1, &m_mfInputStreamID);
-
connect(m_sourceResolver, SIGNAL(mediaSourceReady()), this, SLOT(handleMediaSourceReady()));
connect(m_sourceResolver, SIGNAL(error(long)), this, SLOT(handleMediaSourceError(long)));
connect(m_decoderSourceReader, SIGNAL(finished()), this, SLOT(handleSourceFinished()));
-
- QAudioFormat defaultFormat;
- setAudioFormat(defaultFormat);
}
MFAudioDecoderControl::~MFAudioDecoderControl()
@@ -80,13 +67,6 @@ MFAudioDecoderControl::~MFAudioDecoderControl()
m_decoderSourceReader->shutdown();
m_decoderSourceReader->Release();
m_sourceResolver->Release();
- if (m_resampler)
- m_resampler->Release();
-}
-
-QAudioDecoder::State MFAudioDecoderControl::state() const
-{
- return m_state;
}
QUrl MFAudioDecoderControl::source() const
@@ -107,9 +87,9 @@ void MFAudioDecoderControl::onSourceCleared()
durationDirty = true;
}
if (positionDirty)
- emit positionChanged(m_position);
+ positionChanged(m_position);
if (durationDirty)
- emit durationChanged(m_duration);
+ durationChanged(m_duration);
}
void MFAudioDecoderControl::setSource(const QUrl &fileName)
@@ -118,7 +98,7 @@ void MFAudioDecoderControl::setSource(const QUrl &fileName)
return;
m_sourceReady = false;
m_sourceResolver->cancel();
- m_decoderSourceReader->setSource(0, m_audioFormat);
+ m_decoderSourceReader->setSource(nullptr);
m_device = 0;
m_source = fileName;
if (!m_source.isEmpty()) {
@@ -128,7 +108,7 @@ void MFAudioDecoderControl::setSource(const QUrl &fileName)
} else {
onSourceCleared();
}
- emit sourceChanged();
+ sourceChanged();
}
QIODevice* MFAudioDecoderControl::sourceDevice() const
@@ -142,7 +122,7 @@ void MFAudioDecoderControl::setSourceDevice(QIODevice *device)
return;
m_sourceReady = false;
m_sourceResolver->cancel();
- m_decoderSourceReader->setSource(0, m_audioFormat);
+ m_decoderSourceReader->setSource(nullptr);
m_source.clear();
m_device = device;
if (m_device) {
@@ -152,48 +132,17 @@ void MFAudioDecoderControl::setSourceDevice(QIODevice *device)
} else {
onSourceCleared();
}
- emit sourceChanged();
-}
-
-void MFAudioDecoderControl::updateResamplerOutputType()
-{
- m_resamplerDirty = false;
- if (m_audioFormat == m_sourceOutputFormat)
- return;
- HRESULT hr = m_resampler->SetOutputType(m_mfOutputStreamID, m_mfOutputType, 0);
- if (SUCCEEDED(hr)) {
- MFT_OUTPUT_STREAM_INFO streamInfo;
- m_resampler->GetOutputStreamInfo(m_mfOutputStreamID, &streamInfo);
- if ((streamInfo.dwFlags & (MFT_OUTPUT_STREAM_PROVIDES_SAMPLES | MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES)) == 0) {
- //if resampler does not allocate output sample memory, we do it here
- if (m_convertSample) {
- m_convertSample->Release();
- m_convertSample = 0;
- }
- if (SUCCEEDED(MFCreateSample(&m_convertSample))) {
- IMFMediaBuffer *mbuf = 0;;
- if (SUCCEEDED(MFCreateMemoryBuffer(streamInfo.cbSize, &mbuf))) {
- m_convertSample->AddBuffer(mbuf);
- mbuf->Release();
- }
- }
- }
- } else {
- qWarning() << "MFAudioDecoderControl: failed to SetOutputType of resampler" << hr;
- }
+ sourceChanged();
}
void MFAudioDecoderControl::handleMediaSourceReady()
{
m_loadingSource = false;
m_sourceReady = true;
- IMFMediaType *mediaType = m_decoderSourceReader->setSource(m_sourceResolver->mediaSource(), m_audioFormat);
+ IMFMediaType *mediaType = m_decoderSourceReader->setSource(m_sourceResolver->mediaSource());
m_sourceOutputFormat = QAudioFormat();
if (mediaType) {
- m_sourceOutputFormat = m_audioFormat;
- QAudioFormat af = m_audioFormat;
-
UINT32 val = 0;
if (SUCCEEDED(mediaType->GetUINT32(MF_MT_AUDIO_NUM_CHANNELS, &val))) {
m_sourceOutputFormat.setChannelCount(int(val));
@@ -210,30 +159,15 @@ void MFAudioDecoderControl::handleMediaSourceReady()
m_sourceOutputFormat.setSampleFormat(QAudioFormat::Float);
} else if (bitsPerSample == 8) {
m_sourceOutputFormat.setSampleFormat(QAudioFormat::UInt8);
- } else {
+ } else if (bitsPerSample == 16) {
m_sourceOutputFormat.setSampleFormat(QAudioFormat::Int16);
+ } else if (bitsPerSample == 32){
+ m_sourceOutputFormat.setSampleFormat(QAudioFormat::Int32);
}
}
-
- if (m_audioFormat.channelCount() <= 0) {
- af.setChannelCount(m_sourceOutputFormat.channelCount());
- }
- if (m_audioFormat.sampleRate() <= 0) {
- af.setSampleRate(m_sourceOutputFormat.sampleRate());
- }
- setAudioFormat(af);
}
if (m_sourceResolver->mediaSource()) {
- if (mediaType && m_resampler) {
- HRESULT hr = S_OK;
- hr = m_resampler->SetInputType(m_mfInputStreamID, mediaType, 0);
- if (SUCCEEDED(hr)) {
- updateResamplerOutputType();
- } else {
- qWarning() << "MFAudioDecoderControl: failed to SetInputType of resampler" << hr;
- }
- }
IMFPresentationDescriptor *pd;
if (SUCCEEDED(m_sourceResolver->mediaSource()->CreatePresentationDescriptor(&pd))) {
UINT64 duration = 0;
@@ -242,15 +176,14 @@ void MFAudioDecoderControl::handleMediaSourceReady()
duration /= 10000;
if (m_duration != qint64(duration)) {
m_duration = qint64(duration);
- emit durationChanged(m_duration);
+ durationChanged(m_duration);
}
}
- if (m_state == QAudioDecoder::DecodingState) {
+ if (isDecoding()) {
activatePipeline();
}
- } else if (m_state != QAudioDecoder::StoppedState) {
- m_state = QAudioDecoder::StoppedState;
- emit stateChanged(m_state);
+ } else if (isDecoding()) {
+ setIsDecoding(false);
}
}
@@ -258,58 +191,49 @@ void MFAudioDecoderControl::handleMediaSourceError(long hr)
{
Q_UNUSED(hr);
m_loadingSource = false;
- m_decoderSourceReader->setSource(0, m_audioFormat);
- if (m_state != QAudioDecoder::StoppedState) {
- m_state = QAudioDecoder::StoppedState;
- emit stateChanged(m_state);
- }
+ m_decoderSourceReader->setSource(nullptr);
+ setIsDecoding(false);
}
void MFAudioDecoderControl::activatePipeline()
{
Q_ASSERT(!m_bufferReady);
- m_state = QAudioDecoder::DecodingState;
+ setIsDecoding(true);
connect(m_decoderSourceReader, SIGNAL(sampleAdded()), this, SLOT(handleSampleAdded()));
- if (m_resamplerDirty) {
- updateResamplerOutputType();
- }
m_decoderSourceReader->reset();
m_decoderSourceReader->readNextSample();
if (m_position != 0) {
m_position = 0;
- emit positionChanged(0);
+ positionChanged(0);
}
}
void MFAudioDecoderControl::start()
{
- if (m_state != QAudioDecoder::StoppedState)
+ if (isDecoding())
return;
if (m_loadingSource) {
//deferred starting
- m_state = QAudioDecoder::DecodingState;
- emit stateChanged(m_state);
+ setIsDecoding(true);
return;
}
if (!m_decoderSourceReader->mediaSource())
return;
activatePipeline();
- emit stateChanged(m_state);
}
void MFAudioDecoderControl::stop()
{
- if (m_state == QAudioDecoder::StoppedState)
+ if (!isDecoding())
return;
- m_state = QAudioDecoder::StoppedState;
disconnect(m_decoderSourceReader, SIGNAL(sampleAdded()), this, SLOT(handleSampleAdded()));
if (m_bufferReady) {
m_bufferReady = false;
emit bufferAvailableChanged(m_bufferReady);
}
- emit stateChanged(m_state);
+ setIsDecoding(false);
}
void MFAudioDecoderControl::handleSampleAdded()
@@ -317,64 +241,29 @@ void MFAudioDecoderControl::handleSampleAdded()
QList<IMFSample*> samples = m_decoderSourceReader->takeSamples();
Q_ASSERT(samples.count() > 0);
Q_ASSERT(!m_bufferReady);
- Q_ASSERT(m_resampler);
LONGLONG sampleStartTime = 0;
IMFSample *firstSample = samples.first();
firstSample->GetSampleTime(&sampleStartTime);
QByteArray abuf;
- if (m_sourceOutputFormat == m_audioFormat) {
- //no need for resampling
- for (IMFSample *s : qAsConst(samples)) {
- IMFMediaBuffer *buffer;
- s->ConvertToContiguousBuffer(&buffer);
- DWORD bufLen = 0;
- BYTE *buf = 0;
- if (SUCCEEDED(buffer->Lock(&buf, NULL, &bufLen))) {
- abuf.push_back(QByteArray(reinterpret_cast<char*>(buf), bufLen));
- buffer->Unlock();
- }
- buffer->Release();
- LONGLONG sampleTime = 0, sampleDuration = 0;
- s->GetSampleTime(&sampleTime);
- s->GetSampleDuration(&sampleDuration);
- m_position = qint64(sampleTime + sampleDuration) / 10000;
- s->Release();
- }
- } else {
- for (IMFSample *s : qAsConst(samples)) {
- HRESULT hr = m_resampler->ProcessInput(m_mfInputStreamID, s, 0);
- if (SUCCEEDED(hr)) {
- MFT_OUTPUT_DATA_BUFFER outputDataBuffer;
- outputDataBuffer.dwStreamID = m_mfOutputStreamID;
- while (true) {
- outputDataBuffer.pEvents = 0;
- outputDataBuffer.dwStatus = 0;
- outputDataBuffer.pSample = m_convertSample;
- DWORD status = 0;
- if (SUCCEEDED(m_resampler->ProcessOutput(0, 1, &outputDataBuffer, &status))) {
- IMFMediaBuffer *buffer;
- outputDataBuffer.pSample->ConvertToContiguousBuffer(&buffer);
- DWORD bufLen = 0;
- BYTE *buf = 0;
- if (SUCCEEDED(buffer->Lock(&buf, NULL, &bufLen))) {
- abuf.push_back(QByteArray(reinterpret_cast<char*>(buf), bufLen));
- buffer->Unlock();
- }
- buffer->Release();
- } else {
- break;
- }
- }
- }
- LONGLONG sampleTime = 0, sampleDuration = 0;
- s->GetSampleTime(&sampleTime);
- s->GetSampleDuration(&sampleDuration);
- m_position = qint64(sampleTime + sampleDuration) / 10000;
- s->Release();
+ for (IMFSample *s : qAsConst(samples)) {
+ IMFMediaBuffer *buffer;
+ s->ConvertToContiguousBuffer(&buffer);
+ DWORD bufLen = 0;
+ BYTE *buf = 0;
+ if (SUCCEEDED(buffer->Lock(&buf, NULL, &bufLen))) {
+ abuf.push_back(QByteArray(reinterpret_cast<char*>(buf), bufLen));
+ buffer->Unlock();
}
+ buffer->Release();
+ LONGLONG sampleTime = 0, sampleDuration = 0;
+ s->GetSampleTime(&sampleTime);
+ s->GetSampleDuration(&sampleDuration);
+ m_position = qint64(sampleTime + sampleDuration) / 10000;
+ s->Release();
}
+
// WMF uses 100-nanosecond units, QAudioDecoder uses milliseconds, QAudioBuffer uses microseconds...
- m_cachedAudioBuffer = QAudioBuffer(abuf, m_audioFormat, qint64(sampleStartTime / 10));
+ m_cachedAudioBuffer = QAudioBuffer(abuf, m_sourceOutputFormat, qint64(sampleStartTime / 10));
m_bufferReady = true;
emit positionChanged(m_position);
emit bufferAvailableChanged(m_bufferReady);
@@ -387,54 +276,6 @@ void MFAudioDecoderControl::handleSourceFinished()
emit finished();
}
-QAudioFormat MFAudioDecoderControl::audioFormat() const
-{
- return m_audioFormat;
-}
-
-void MFAudioDecoderControl::setAudioFormat(const QAudioFormat &format)
-{
- if (m_audioFormat == format || !m_resampler)
- return;
- m_audioFormat = format;
-
- if (m_audioFormat.isValid()) {
- IMFMediaType *mediaType = 0;
- MFCreateMediaType(&mediaType);
- mediaType->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio);
- if (format.sampleFormat() == QAudioFormat::Float) {
- mediaType->SetGUID(MF_MT_SUBTYPE, MFAudioFormat_Float);
- } else {
- mediaType->SetGUID(MF_MT_SUBTYPE, MFAudioFormat_PCM);
- }
-
- mediaType->SetUINT32(MF_MT_AUDIO_NUM_CHANNELS, UINT32(m_audioFormat.channelCount()));
- mediaType->SetUINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, UINT32(m_audioFormat.sampleRate()));
- UINT32 alignmentBlock = UINT32(m_audioFormat.bytesPerFrame());
- mediaType->SetUINT32(MF_MT_AUDIO_BLOCK_ALIGNMENT, alignmentBlock);
- UINT32 avgBytesPerSec = UINT32(m_audioFormat.sampleRate() * m_audioFormat.bytesPerFrame());
- mediaType->SetUINT32(MF_MT_AUDIO_AVG_BYTES_PER_SECOND, avgBytesPerSec);
- mediaType->SetUINT32(MF_MT_AUDIO_BITS_PER_SAMPLE, UINT32(m_audioFormat.bytesPerSample()*8));
- mediaType->SetUINT32(MF_MT_ALL_SAMPLES_INDEPENDENT, TRUE);
-
- if (m_mfOutputType)
- m_mfOutputType->Release();
- m_mfOutputType = mediaType;
- } else {
- if (m_mfOutputType)
- m_mfOutputType->Release();
- m_mfOutputType = NULL;
- }
-
- if (m_sourceReady && m_state == QAudioDecoder::StoppedState) {
- updateResamplerOutputType();
- } else {
- m_resamplerDirty = true;
- }
-
- emit formatChanged(m_audioFormat);
-}
-
QAudioBuffer MFAudioDecoderControl::read()
{
if (!m_bufferReady)
diff --git a/src/multimedia/platform/windows/decoder/mfaudiodecodercontrol_p.h b/src/multimedia/platform/windows/decoder/mfaudiodecodercontrol_p.h
index 56edb95c0..8cd769e67 100644
--- a/src/multimedia/platform/windows/decoder/mfaudiodecodercontrol_p.h
+++ b/src/multimedia/platform/windows/decoder/mfaudiodecodercontrol_p.h
@@ -64,8 +64,6 @@ public:
MFAudioDecoderControl(QAudioDecoder *parent);
~MFAudioDecoderControl();
- QAudioDecoder::State state() const;
-
QUrl source() const;
void setSource(const QUrl &fileName);
@@ -75,9 +73,6 @@ public:
void start();
void stop();
- QAudioFormat audioFormat() const;
- void setAudioFormat(const QAudioFormat &format);
-
QAudioBuffer read();
bool bufferAvailable() const;
@@ -91,17 +86,13 @@ private Q_SLOTS:
void handleSourceFinished();
private:
- void updateResamplerOutputType();
void activatePipeline();
void onSourceCleared();
MFDecoderSourceReader *m_decoderSourceReader;
SourceResolver *m_sourceResolver;
- IMFTransform *m_resampler;
- QAudioDecoder::State m_state;
QUrl m_source;
QIODevice *m_device;
- QAudioFormat m_audioFormat;
DWORD m_mfInputStreamID;
DWORD m_mfOutputStreamID;
bool m_bufferReady;
@@ -113,7 +104,6 @@ private:
IMFSample *m_convertSample;
QAudioFormat m_sourceOutputFormat;
bool m_sourceReady;
- bool m_resamplerDirty;
};
#endif//MFAUDIODECODERCONTROL_H
diff --git a/src/multimedia/platform/windows/decoder/mfdecodersourcereader.cpp b/src/multimedia/platform/windows/decoder/mfdecodersourcereader.cpp
index 381c60dc5..d10839a63 100644
--- a/src/multimedia/platform/windows/decoder/mfdecodersourcereader.cpp
+++ b/src/multimedia/platform/windows/decoder/mfdecodersourcereader.cpp
@@ -64,7 +64,7 @@ IMFMediaSource* MFDecoderSourceReader::mediaSource()
return m_source;
}
-IMFMediaType* MFDecoderSourceReader::setSource(IMFMediaSource *source, const QAudioFormat &audioFormat)
+IMFMediaType* MFDecoderSourceReader::setSource(IMFMediaSource *source)
{
IMFMediaType *mediaType = NULL;
if (m_source == source)
@@ -90,12 +90,7 @@ IMFMediaType* MFDecoderSourceReader::setSource(IMFMediaSource *source, const QAu
IMFMediaType *pPartialType = NULL;
MFCreateMediaType(&pPartialType);
pPartialType->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio);
-
- if (audioFormat.sampleFormat() == QAudioFormat::Float) {
- pPartialType->SetGUID(MF_MT_SUBTYPE, MFAudioFormat_Float);
- } else {
- pPartialType->SetGUID(MF_MT_SUBTYPE, MFAudioFormat_PCM);
- }
+ pPartialType->SetGUID(MF_MT_SUBTYPE, MFAudioFormat_PCM);
m_sourceReader->SetCurrentMediaType(DWORD(MF_SOURCE_READER_FIRST_AUDIO_STREAM), NULL, pPartialType);
pPartialType->Release();
diff --git a/src/multimedia/platform/windows/decoder/mfdecodersourcereader_p.h b/src/multimedia/platform/windows/decoder/mfdecodersourcereader_p.h
index 7d63f5368..6730dbf7f 100644
--- a/src/multimedia/platform/windows/decoder/mfdecodersourcereader_p.h
+++ b/src/multimedia/platform/windows/decoder/mfdecodersourcereader_p.h
@@ -69,7 +69,7 @@ public:
void shutdown();
IMFMediaSource* mediaSource();
- IMFMediaType* setSource(IMFMediaSource *source, const QAudioFormat &audioFormat);
+ IMFMediaType* setSource(IMFMediaSource *source);
void reset();
void readNextSample();
diff --git a/src/multimedia/platform/windows/mediacapture/qwindowscamera.cpp b/src/multimedia/platform/windows/mediacapture/qwindowscamera.cpp
index 8be1ab1e1..d5e8ecc97 100644
--- a/src/multimedia/platform/windows/mediacapture/qwindowscamera.cpp
+++ b/src/multimedia/platform/windows/mediacapture/qwindowscamera.cpp
@@ -68,28 +68,6 @@ void QWindowsCamera::setActive(bool active)
m_mediaDeviceSession->setActive(active);
emit activeChanged(m_active);
- updateStatus();
-}
-
-QCamera::Status QWindowsCamera::status() const
-{
- if (!m_mediaDeviceSession)
- return QCamera::InactiveStatus;
-
- if (m_active)
- return m_mediaDeviceSession->isActive() ? QCamera::ActiveStatus : QCamera::StartingStatus;
-
- return m_mediaDeviceSession->isActive() ? QCamera::StoppingStatus : QCamera::InactiveStatus;
-}
-
-void QWindowsCamera::updateStatus()
-{
- QCamera::Status newStatus = status();
-
- if (m_lastStatus != newStatus) {
- m_lastStatus = newStatus;
- statusChanged(m_lastStatus);
- }
}
void QWindowsCamera::setCamera(const QCameraDevice &camera)
@@ -107,8 +85,11 @@ void QWindowsCamera::setCaptureSession(QPlatformMediaCaptureSession *session)
if (m_captureService == captureService)
return;
- if (m_mediaDeviceSession)
+ if (m_mediaDeviceSession) {
m_mediaDeviceSession->setActive(false);
+ m_mediaDeviceSession->setCameraFormat({});
+ m_mediaDeviceSession->setActiveCamera({});
+ }
m_captureService = captureService;
if (!m_captureService) {
@@ -118,7 +99,7 @@ void QWindowsCamera::setCaptureSession(QPlatformMediaCaptureSession *session)
m_mediaDeviceSession = m_captureService->session();
Q_ASSERT(m_mediaDeviceSession);
- connect(m_mediaDeviceSession, SIGNAL(activeChanged(bool)), SLOT(updateStatus()));
+ connect(m_mediaDeviceSession, SIGNAL(activeChanged(bool)), SLOT(setActive(bool)));
m_mediaDeviceSession->setActiveCamera(m_cameraDevice);
m_mediaDeviceSession->setCameraFormat(m_cameraFormat);
diff --git a/src/multimedia/platform/windows/mediacapture/qwindowscamera_p.h b/src/multimedia/platform/windows/mediacapture/qwindowscamera_p.h
index 1665c492d..c1dce1e7b 100644
--- a/src/multimedia/platform/windows/mediacapture/qwindowscamera_p.h
+++ b/src/multimedia/platform/windows/mediacapture/qwindowscamera_p.h
@@ -66,9 +66,6 @@ public:
virtual ~QWindowsCamera();
bool isActive() const override;
- void setActive(bool active) override;
-
- QCamera::Status status() const override;
void setCamera(const QCameraDevice &camera) override;
@@ -77,14 +74,13 @@ public:
bool setCameraFormat(const QCameraFormat &format) override;
private Q_SLOTS:
- void updateStatus();
+ void setActive(bool active) override;
private:
QWindowsMediaCaptureService *m_captureService = nullptr;
QWindowsMediaDeviceSession *m_mediaDeviceSession = nullptr;
QCameraDevice m_cameraDevice;
QCameraFormat m_cameraFormat;
- QCamera::Status m_lastStatus = QCamera::InactiveStatus;
bool m_active = false;
};
diff --git a/src/multimedia/platform/windows/mediacapture/qwindowscameraimagecapture.cpp b/src/multimedia/platform/windows/mediacapture/qwindowsimagecapture.cpp
index b4499d61c..0c5e188ca 100644
--- a/src/multimedia/platform/windows/mediacapture/qwindowscameraimagecapture.cpp
+++ b/src/multimedia/platform/windows/mediacapture/qwindowsimagecapture.cpp
@@ -37,7 +37,7 @@
**
****************************************************************************/
-#include "qwindowscameraimagecapture_p.h"
+#include "qwindowsimagecapture_p.h"
#include "qwindowsmediadevicesession_p.h"
#include "qwindowsmediacapture_p.h"
@@ -47,21 +47,21 @@
QT_BEGIN_NAMESPACE
-QWindowsCameraImageCapture::QWindowsCameraImageCapture(QCameraImageCapture *parent)
- : QPlatformCameraImageCapture(parent)
+QWindowsImageCapture::QWindowsImageCapture(QImageCapture *parent)
+ : QPlatformImageCapture(parent)
{
}
-QWindowsCameraImageCapture::~QWindowsCameraImageCapture() = default;
+QWindowsImageCapture::~QWindowsImageCapture() = default;
-bool QWindowsCameraImageCapture::isReadyForCapture() const
+bool QWindowsImageCapture::isReadyForCapture() const
{
if (!m_mediaDeviceSession)
return false;
return !m_capturing && m_mediaDeviceSession->isActive() && !m_mediaDeviceSession->activeCamera().isNull();
}
-int QWindowsCameraImageCapture::capture(const QString &fileName)
+int QWindowsImageCapture::capture(const QString &fileName)
{
QString ext = writerFormat(m_settings.format());
QString path = m_storageLocation.generateFileName(fileName, QWindowsStorageLocation::Image,
@@ -69,12 +69,12 @@ int QWindowsCameraImageCapture::capture(const QString &fileName)
return doCapture(path);
}
-int QWindowsCameraImageCapture::captureToBuffer()
+int QWindowsImageCapture::captureToBuffer()
{
return doCapture(QString());
}
-int QWindowsCameraImageCapture::doCapture(const QString &fileName)
+int QWindowsImageCapture::doCapture(const QString &fileName)
{
if (!isReadyForCapture())
return -1;
@@ -83,17 +83,17 @@ int QWindowsCameraImageCapture::doCapture(const QString &fileName)
return m_captureId;
}
-QImageEncoderSettings QWindowsCameraImageCapture::imageSettings() const
+QImageEncoderSettings QWindowsImageCapture::imageSettings() const
{
return m_settings;
}
-void QWindowsCameraImageCapture::setImageSettings(const QImageEncoderSettings &settings)
+void QWindowsImageCapture::setImageSettings(const QImageEncoderSettings &settings)
{
m_settings = settings;
}
-void QWindowsCameraImageCapture::setCaptureSession(QPlatformMediaCaptureSession *session)
+void QWindowsImageCapture::setCaptureSession(QPlatformMediaCaptureSession *session)
{
QWindowsMediaCaptureService *captureService = static_cast<QWindowsMediaCaptureService *>(session);
if (m_captureService == captureService)
@@ -118,7 +118,7 @@ void QWindowsCameraImageCapture::setCaptureSession(QPlatformMediaCaptureSession
this, SLOT(handleNewVideoFrame(QVideoFrame)));
}
-void QWindowsCameraImageCapture::handleNewVideoFrame(const QVideoFrame &frame)
+void QWindowsImageCapture::handleNewVideoFrame(const QVideoFrame &frame)
{
if (m_capturing) {
@@ -136,7 +136,7 @@ void QWindowsCameraImageCapture::handleNewVideoFrame(const QVideoFrame &frame)
if (!m_fileName.isEmpty()) {
- (void)QtConcurrent::run(&QWindowsCameraImageCapture::saveImage, this,
+ (void)QtConcurrent::run(&QWindowsImageCapture::saveImage, this,
m_captureId, m_fileName, image, metaData, m_settings);
}
@@ -145,7 +145,7 @@ void QWindowsCameraImageCapture::handleNewVideoFrame(const QVideoFrame &frame)
}
}
-void QWindowsCameraImageCapture::saveImage(int captureId, const QString &fileName,
+void QWindowsImageCapture::saveImage(int captureId, const QString &fileName,
const QImage &image, const QMediaMetaData &metaData,
const QImageEncoderSettings &settings)
{
@@ -169,21 +169,21 @@ void QWindowsCameraImageCapture::saveImage(int captureId, const QString &fileNam
Q_ARG(int, captureId), Q_ARG(QString, fileName));
}
-QString QWindowsCameraImageCapture::writerFormat(QCameraImageCapture::FileFormat reqFormat)
+QString QWindowsImageCapture::writerFormat(QImageCapture::FileFormat reqFormat)
{
QString format;
switch (reqFormat) {
- case QCameraImageCapture::FileFormat::JPEG:
+ case QImageCapture::FileFormat::JPEG:
format = QLatin1String("jpg");
break;
- case QCameraImageCapture::FileFormat::PNG:
+ case QImageCapture::FileFormat::PNG:
format = QLatin1String("png");
break;
- case QCameraImageCapture::FileFormat::WebP:
+ case QImageCapture::FileFormat::WebP:
format = QLatin1String("webp");
break;
- case QCameraImageCapture::FileFormat::Tiff:
+ case QImageCapture::FileFormat::Tiff:
format = QLatin1String("tiff");
break;
default:
@@ -198,22 +198,22 @@ QString QWindowsCameraImageCapture::writerFormat(QCameraImageCapture::FileFormat
return QLatin1String("jpg");
}
-int QWindowsCameraImageCapture::writerQuality(const QString &writerFormat,
- QCameraImageCapture::Quality quality)
+int QWindowsImageCapture::writerQuality(const QString &writerFormat,
+ QImageCapture::Quality quality)
{
if (writerFormat.compare(QLatin1String("jpg"), Qt::CaseInsensitive) == 0 ||
writerFormat.compare(QLatin1String("jpeg"), Qt::CaseInsensitive) == 0) {
switch (quality) {
- case QCameraImageCapture::Quality::VeryLowQuality:
+ case QImageCapture::Quality::VeryLowQuality:
return 10;
- case QCameraImageCapture::Quality::LowQuality:
+ case QImageCapture::Quality::LowQuality:
return 30;
- case QCameraImageCapture::Quality::NormalQuality:
+ case QImageCapture::Quality::NormalQuality:
return 75;
- case QCameraImageCapture::Quality::HighQuality:
+ case QImageCapture::Quality::HighQuality:
return 90;
- case QCameraImageCapture::Quality::VeryHighQuality:
+ case QImageCapture::Quality::VeryHighQuality:
return 98;
default:
return 75;
diff --git a/src/multimedia/platform/windows/mediacapture/qwindowscameraimagecapture_p.h b/src/multimedia/platform/windows/mediacapture/qwindowsimagecapture_p.h
index 4cd405454..cafc71087 100644
--- a/src/multimedia/platform/windows/mediacapture/qwindowscameraimagecapture_p.h
+++ b/src/multimedia/platform/windows/mediacapture/qwindowsimagecapture_p.h
@@ -37,8 +37,8 @@
**
****************************************************************************/
-#ifndef QWINDOWSCAMERAIMAGECAPTURE_H
-#define QWINDOWSCAMERAIMAGECAPTURE_H
+#ifndef QWindowsImageCapture_H
+#define QWindowsImageCapture_H
//
// W A R N I N G
@@ -53,19 +53,19 @@
#include "qwindowsstoragelocation_p.h"
-#include <private/qplatformcameraimagecapture_p.h>
+#include <private/qplatformimagecapture_p.h>
QT_BEGIN_NAMESPACE
class QWindowsMediaDeviceSession;
class QWindowsMediaCaptureService;
-class QWindowsCameraImageCapture : public QPlatformCameraImageCapture
+class QWindowsImageCapture : public QPlatformImageCapture
{
Q_OBJECT
public:
- explicit QWindowsCameraImageCapture(QCameraImageCapture *parent);
- virtual ~QWindowsCameraImageCapture();
+ explicit QWindowsImageCapture(QImageCapture *parent);
+ virtual ~QWindowsImageCapture();
bool isReadyForCapture() const override;
@@ -85,9 +85,9 @@ private:
void saveImage(int captureId, const QString &fileName,
const QImage &image, const QMediaMetaData &metaData,
const QImageEncoderSettings &settings);
- QString writerFormat(QCameraImageCapture::FileFormat reqFormat);
+ QString writerFormat(QImageCapture::FileFormat reqFormat);
int writerQuality(const QString &writerFormat,
- QCameraImageCapture::Quality quality);
+ QImageCapture::Quality quality);
QWindowsMediaCaptureService *m_captureService = nullptr;
QWindowsMediaDeviceSession *m_mediaDeviceSession = nullptr;
@@ -100,4 +100,4 @@ private:
QT_END_NAMESPACE
-#endif // QWINDOWSCAMERAIMAGECAPTURE_H
+#endif // QWindowsImageCapture_H
diff --git a/src/multimedia/platform/windows/mediacapture/qwindowsmediacapture.cpp b/src/multimedia/platform/windows/mediacapture/qwindowsmediacapture.cpp
index 043e3ac41..34be2e7cb 100644
--- a/src/multimedia/platform/windows/mediacapture/qwindowsmediacapture.cpp
+++ b/src/multimedia/platform/windows/mediacapture/qwindowsmediacapture.cpp
@@ -42,7 +42,7 @@
#include "qwindowsmediaencoder_p.h"
#include "qwindowscamera_p.h"
#include "qwindowsmediadevicesession_p.h"
-#include "qwindowscameraimagecapture_p.h"
+#include "qwindowsimagecapture_p.h"
#include "qmediadevices.h"
#include "qaudiodevice.h"
#include "qplatformaudioinput_p.h"
@@ -79,14 +79,14 @@ void QWindowsMediaCaptureService::setCamera(QPlatformCamera *camera)
emit cameraChanged();
}
-QPlatformCameraImageCapture *QWindowsMediaCaptureService::imageCapture()
+QPlatformImageCapture *QWindowsMediaCaptureService::imageCapture()
{
return m_imageCapture;
}
-void QWindowsMediaCaptureService::setImageCapture(QPlatformCameraImageCapture *imageCapture)
+void QWindowsMediaCaptureService::setImageCapture(QPlatformImageCapture *imageCapture)
{
- QWindowsCameraImageCapture *control = static_cast<QWindowsCameraImageCapture *>(imageCapture);
+ QWindowsImageCapture *control = static_cast<QWindowsImageCapture *>(imageCapture);
if (m_imageCapture == control)
return;
diff --git a/src/multimedia/platform/windows/mediacapture/qwindowsmediacapture_p.h b/src/multimedia/platform/windows/mediacapture/qwindowsmediacapture_p.h
index f5da2f498..a1a167a6d 100644
--- a/src/multimedia/platform/windows/mediacapture/qwindowsmediacapture_p.h
+++ b/src/multimedia/platform/windows/mediacapture/qwindowsmediacapture_p.h
@@ -58,7 +58,7 @@ QT_BEGIN_NAMESPACE
class QWindowsMediaEncoder;
class QWindowsCamera;
class QWindowsMediaDeviceSession;
-class QWindowsCameraImageCapture;
+class QWindowsImageCapture;
class QPlatformAudioInput;
class QWindowsMediaCaptureService : public QPlatformMediaCaptureSession
@@ -72,8 +72,8 @@ public:
QPlatformCamera *camera() override;
void setCamera(QPlatformCamera *camera) override;
- QPlatformCameraImageCapture *imageCapture() override;
- void setImageCapture(QPlatformCameraImageCapture *imageCapture) override;
+ QPlatformImageCapture *imageCapture() override;
+ void setImageCapture(QPlatformImageCapture *imageCapture) override;
QPlatformMediaEncoder *mediaEncoder() override;
void setMediaEncoder(QPlatformMediaEncoder *encoder) override;
@@ -87,7 +87,7 @@ public:
private:
QWindowsCamera *m_camera = nullptr;
QWindowsMediaDeviceSession *m_mediaDeviceSession = nullptr;
- QWindowsCameraImageCapture *m_imageCapture = nullptr;
+ QWindowsImageCapture *m_imageCapture = nullptr;
QWindowsMediaEncoder *m_encoder = nullptr;
};
diff --git a/src/multimedia/platform/windows/mediacapture/qwindowsmediaencoder.cpp b/src/multimedia/platform/windows/mediacapture/qwindowsmediaencoder.cpp
index 1ecd8af0b..28c387d2e 100644
--- a/src/multimedia/platform/windows/mediacapture/qwindowsmediaencoder.cpp
+++ b/src/multimedia/platform/windows/mediacapture/qwindowsmediaencoder.cpp
@@ -41,9 +41,11 @@
#include "qwindowsmediadevicesession_p.h"
#include "qwindowsmediacapture_p.h"
+#include "mfmetadata_p.h"
#include <QtCore/QUrl>
#include <QtCore/QMimeType>
#include <Mferror.h>
+#include <shobjidl.h>
QT_BEGIN_NAMESPACE
@@ -56,14 +58,8 @@ QWindowsMediaEncoder::QWindowsMediaEncoder(QMediaRecorder *parent)
m_settings.mimeType();
}
-QUrl QWindowsMediaEncoder::outputLocation() const
+bool QWindowsMediaEncoder::isLocationWritable(const QUrl &location) const
{
- return m_outputLocation;
-}
-
-bool QWindowsMediaEncoder::setOutputLocation(const QUrl &location)
-{
- m_outputLocation = location;
return location.scheme() == QLatin1String("file") || location.scheme().isEmpty();
}
@@ -128,21 +124,21 @@ void QWindowsMediaEncoder::setState(QMediaRecorder::RecorderState state)
const bool audioOnly = m_settings.videoCodec() == QMediaFormat::VideoCodec::Unspecified;
- const QString path = (m_outputLocation.scheme() == QLatin1String("file") ?
- m_outputLocation.path() : m_outputLocation.toString());
+ const QString path = (outputLocation().scheme() == QLatin1String("file") ?
+ outputLocation().path() : outputLocation().toString());
- QString fileName = m_storageLocation.generateFileName(path, audioOnly
- ? QWindowsStorageLocation::Audio
- : QWindowsStorageLocation::Video,
- QLatin1String("clip_"),
- m_settings.mimeType().preferredSuffix());
+ m_fileName = m_storageLocation.generateFileName(path, audioOnly
+ ? QWindowsStorageLocation::Audio
+ : QWindowsStorageLocation::Video,
+ QLatin1String("clip_"),
+ m_settings.mimeType().preferredSuffix());
- if (m_mediaDeviceSession->startRecording(fileName, audioOnly)) {
+ if (m_mediaDeviceSession->startRecording(m_fileName, audioOnly)) {
m_state = QMediaRecorder::RecordingState;
m_lastStatus = QMediaRecorder::StartingStatus;
- actualLocationChanged(QUrl::fromLocalFile(fileName));
+ actualLocationChanged(QUrl::fromLocalFile(m_fileName));
stateChanged(m_state);
statusChanged(m_lastStatus);
@@ -203,6 +199,35 @@ void QWindowsMediaEncoder::setCaptureSession(QPlatformMediaCaptureSession *sessi
onCameraChanged();
}
+void QWindowsMediaEncoder::setMetaData(const QMediaMetaData &metaData)
+{
+ m_metaData = metaData;
+}
+
+QMediaMetaData QWindowsMediaEncoder::metaData() const
+{
+ return m_metaData;
+}
+
+void QWindowsMediaEncoder::saveMetadata()
+{
+ if (!m_metaData.isEmpty()) {
+
+ const QString nativeFileName = QDir::toNativeSeparators(m_fileName);
+
+ IPropertyStore *store = nullptr;
+
+ if (SUCCEEDED(SHGetPropertyStoreFromParsingName(reinterpret_cast<LPCWSTR>(nativeFileName.utf16()),
+ nullptr, GPS_READWRITE, IID_PPV_ARGS(&store)))) {
+
+ MFMetaData::toNative(m_metaData, store);
+
+ store->Commit();
+ store->Release();
+ }
+ }
+}
+
void QWindowsMediaEncoder::onDurationChanged(qint64 duration)
{
m_duration = duration;
@@ -235,6 +260,8 @@ void QWindowsMediaEncoder::onRecordingStarted()
void QWindowsMediaEncoder::onRecordingStopped()
{
+ saveMetadata();
+
auto lastState = m_state;
auto lastStatus = m_lastStatus;
m_state = QMediaRecorder::StoppedState;
diff --git a/src/multimedia/platform/windows/mediacapture/qwindowsmediaencoder_p.h b/src/multimedia/platform/windows/mediacapture/qwindowsmediaencoder_p.h
index ffa73b428..f7ec37b03 100644
--- a/src/multimedia/platform/windows/mediacapture/qwindowsmediaencoder_p.h
+++ b/src/multimedia/platform/windows/mediacapture/qwindowsmediaencoder_p.h
@@ -70,8 +70,7 @@ class QWindowsMediaEncoder : public QObject, public QPlatformMediaEncoder
public:
explicit QWindowsMediaEncoder(QMediaRecorder *parent);
- QUrl outputLocation() const override;
- bool setOutputLocation(const QUrl &location) override;
+ bool isLocationWritable(const QUrl &location) const override;
QMediaRecorder::RecorderState state() const override;
QMediaRecorder::Status status() const override;
qint64 duration() const override;
@@ -79,6 +78,9 @@ public:
void setEncoderSettings(const QMediaEncoderSettings &settings) override;
+ void setMetaData(const QMediaMetaData &metaData) override;
+ QMediaMetaData metaData() const override;
+
void setCaptureSession(QPlatformMediaCaptureSession *session);
public Q_SLOTS:
@@ -92,13 +94,16 @@ private Q_SLOTS:
void onStreamingError(int errorCode);
private:
+ void saveMetadata();
+
QWindowsMediaCaptureService *m_captureService = nullptr;
QWindowsMediaDeviceSession *m_mediaDeviceSession = nullptr;
- QUrl m_outputLocation;
QMediaRecorder::RecorderState m_state = QMediaRecorder::StoppedState;
QMediaRecorder::Status m_lastStatus = QMediaRecorder::StoppedStatus;
QMediaEncoderSettings m_settings;
QWindowsStorageLocation m_storageLocation;
+ QString m_fileName;
+ QMediaMetaData m_metaData;
qint64 m_duration = 0;
};
diff --git a/src/multimedia/platform/windows/player/mfplayersession.cpp b/src/multimedia/platform/windows/player/mfplayersession.cpp
index 1fa05c33a..50a022fc3 100644
--- a/src/multimedia/platform/windows/player/mfplayersession.cpp
+++ b/src/multimedia/platform/windows/player/mfplayersession.cpp
@@ -53,7 +53,7 @@
#include "mfplayercontrol_p.h"
#include "mfevrvideowindowcontrol_p.h"
#include "mfvideorenderercontrol_p.h"
-#include "mfmetadata_p.h"
+#include <private/mfmetadata_p.h>
#include "mfplayersession_p.h"
#include <mferror.h>
diff --git a/src/multimedia/platform/windows/qwindowsformatinfo.cpp b/src/multimedia/platform/windows/qwindowsformatinfo.cpp
index 2e308ffbe..cda24d6eb 100644
--- a/src/multimedia/platform/windows/qwindowsformatinfo.cpp
+++ b/src/multimedia/platform/windows/qwindowsformatinfo.cpp
@@ -81,7 +81,7 @@ QWindowsFormatInfo::QWindowsFormatInfo()
};
// ####
- imageFormats = { QCameraImageCapture::JPEG, QCameraImageCapture::PNG };
+ imageFormats = { QImageCapture::JPEG, QImageCapture::PNG };
}
diff --git a/src/multimedia/platform/windows/qwindowsintegration.cpp b/src/multimedia/platform/windows/qwindowsintegration.cpp
index 7509205a4..8f259beb7 100644
--- a/src/multimedia/platform/windows/qwindowsintegration.cpp
+++ b/src/multimedia/platform/windows/qwindowsintegration.cpp
@@ -41,7 +41,7 @@
#include <private/qwindowsmediadevices_p.h>
#include <private/qwindowsformatinfo_p.h>
#include <private/qwindowsmediacapture_p.h>
-#include <private/qwindowscameraimagecapture_p.h>
+#include <private/qwindowsimagecapture_p.h>
#include <private/qwindowscamera_p.h>
#include <private/qwindowsmediaencoder_p.h>
#include <private/mfplayercontrol_p.h>
@@ -113,9 +113,9 @@ QPlatformMediaEncoder *QWindowsIntegration::createEncoder(QMediaRecorder *encode
return new QWindowsMediaEncoder(encoder);
}
-QPlatformCameraImageCapture *QWindowsIntegration::createImageCapture(QCameraImageCapture *imageCapture)
+QPlatformImageCapture *QWindowsIntegration::createImageCapture(QImageCapture *imageCapture)
{
- return new QWindowsCameraImageCapture(imageCapture);
+ return new QWindowsImageCapture(imageCapture);
}
QPlatformVideoSink *QWindowsIntegration::createVideoSink(QVideoSink *sink)
diff --git a/src/multimedia/platform/windows/qwindowsintegration_p.h b/src/multimedia/platform/windows/qwindowsintegration_p.h
index 9d3c9b836..44edf8900 100644
--- a/src/multimedia/platform/windows/qwindowsintegration_p.h
+++ b/src/multimedia/platform/windows/qwindowsintegration_p.h
@@ -76,7 +76,7 @@ public:
QPlatformMediaPlayer *createPlayer(QMediaPlayer *parent) override;
QPlatformCamera *createCamera(QCamera *camera) override;
QPlatformMediaEncoder *createEncoder(QMediaRecorder *encoder) override;
- QPlatformCameraImageCapture *createImageCapture(QCameraImageCapture *imageCapture) override;
+ QPlatformImageCapture *createImageCapture(QImageCapture *imageCapture) override;
QPlatformVideoSink *createVideoSink(QVideoSink *sink) override;
diff --git a/src/multimedia/qmediaformat.cpp b/src/multimedia/qmediaformat.cpp
index c91b23425..ca9fc0cd3 100644
--- a/src/multimedia/qmediaformat.cpp
+++ b/src/multimedia/qmediaformat.cpp
@@ -432,8 +432,7 @@ bool QMediaFormat::operator==(const QMediaFormat &other) const
*/
void QMediaFormat::resolveForEncoding(ResolveFlags flags)
{
- if (isSupported(Encode))
- return;
+ const bool requiresVideo = (flags & ResolveFlags::RequiresVideo) != 0;
QMediaFormat nullFormat;
auto supportedFormats = nullFormat.supportedFileFormats(QMediaFormat::Encode);
@@ -456,6 +455,10 @@ void QMediaFormat::resolveForEncoding(ResolveFlags flags)
return *list;
};
+ // reset format if it does not support video when video is required
+ if (requiresVideo && this->supportedVideoCodecs(QMediaFormat::Encode).isEmpty())
+ fmt = QMediaFormat::UnspecifiedFormat;
+
// reset non supported formats and codecs
if (!supportedFormats.contains(fmt))
fmt = QMediaFormat::UnspecifiedFormat;
@@ -464,7 +467,7 @@ void QMediaFormat::resolveForEncoding(ResolveFlags flags)
if ((flags == NoFlags) || !supportedVideoCodecs.contains(video))
video = QMediaFormat::VideoCodec::Unspecified;
- if (!(flags == NoFlags)) {
+ if (requiresVideo) {
// try finding a file format that is supported
if (fmt == QMediaFormat::UnspecifiedFormat)
fmt = bestSupportedFileFormat(audio, video);
@@ -483,7 +486,7 @@ void QMediaFormat::resolveForEncoding(ResolveFlags flags)
return;
// find a working video codec
- if (!(flags == NoFlags)) {
+ if (requiresVideo) {
// reset the audio codec, so that we won't throw away the video codec
// if it is supported (choosing the specified video codec has higher
// priority than the specified audio codec)
diff --git a/src/multimedia/qmediaformat.h b/src/multimedia/qmediaformat.h
index 68dc16103..b74ac39ec 100644
--- a/src/multimedia/qmediaformat.h
+++ b/src/multimedia/qmediaformat.h
@@ -115,6 +115,7 @@ public:
Encode,
Decode
};
+ Q_ENUM(ConversionMode)
enum ResolveFlags
{
@@ -146,13 +147,13 @@ public:
void setAudioCodec(AudioCodec codec) { audio = codec; }
AudioCodec audioCodec() const { return audio; }
- bool isSupported(ConversionMode mode) const;
+ Q_INVOKABLE bool isSupported(ConversionMode mode) const;
QMimeType mimeType() const;
- QList<QMediaFormat::FileFormat> supportedFileFormats(ConversionMode m);
- QList<QMediaFormat::VideoCodec> supportedVideoCodecs(ConversionMode m);
- QList<QMediaFormat::AudioCodec> supportedAudioCodecs(ConversionMode m);
+ Q_INVOKABLE QList<QMediaFormat::FileFormat> supportedFileFormats(ConversionMode m);
+ Q_INVOKABLE QList<QMediaFormat::VideoCodec> supportedVideoCodecs(ConversionMode m);
+ Q_INVOKABLE QList<QMediaFormat::AudioCodec> supportedAudioCodecs(ConversionMode m);
static QString fileFormatName(QMediaFormat::FileFormat c);
static QString audioCodecName(QMediaFormat::AudioCodec c);
diff --git a/src/multimedia/recording/qmediacapturesession.cpp b/src/multimedia/recording/qmediacapturesession.cpp
index d82800e35..90cd27066 100644
--- a/src/multimedia/recording/qmediacapturesession.cpp
+++ b/src/multimedia/recording/qmediacapturesession.cpp
@@ -41,7 +41,7 @@
#include "qaudiodevice.h"
#include "qcamera.h"
#include "qmediarecorder.h"
-#include "qcameraimagecapture.h"
+#include "qimagecapture.h"
#include "qvideosink.h"
#include <qpointer.h>
@@ -61,7 +61,7 @@ public:
QAudioInput *audioInput = nullptr;
QAudioOutput *audioOutput = nullptr;
QCamera *camera = nullptr;
- QCameraImageCapture *imageCapture = nullptr;
+ QImageCapture *imageCapture = nullptr;
QMediaRecorder *encoder = nullptr;
QVideoSink *videoSink = nullptr;
QPointer<QObject> videoOutput;
@@ -94,13 +94,13 @@ public:
A preview of the captured media can be seen by setting a QVideoSink of QVideoWidget using setVideoOutput()
and heard by routing the audio to an output device using setAudioOutput().
- You can capture still images from a camera by setting a QCameraImageCapture object on the capture session,
+ You can capture still images from a camera by setting a QImageCapture object on the capture session,
and record audio/video using a QMediaRecorder.
If you need a simple class that records media from the default camera and microphone, you can use QMediaRecorder.
That class uses a QMediaCaptureSession behind the scene to support audio and video capture.
- \sa QCamera, QAudioDevice, QMediaRecorder, QCameraImageCapture, QMediaRecorder
+ \sa QCamera, QAudioDevice, QMediaRecorder, QImageCapture, QMediaRecorder
*/
/*!
@@ -112,6 +112,7 @@ QMediaCaptureSession::QMediaCaptureSession(QObject *parent)
{
d_ptr->q = this;
d_ptr->captureSession = QPlatformMediaIntegration::instance()->createCaptureSession();
+ Q_ASSERT(d_ptr->captureSession);
}
/*!
@@ -131,14 +132,6 @@ QMediaCaptureSession::~QMediaCaptureSession()
}
/*!
- Returns false if media capture is not supported.
- */
-bool QMediaCaptureSession::isAvailable() const
-{
- return d_ptr->captureSession != nullptr;
-}
-
-/*!
Returns the device that is being used to capture audio.
*/
QAudioInput *QMediaCaptureSession::audioInput() const
@@ -194,15 +187,15 @@ void QMediaCaptureSession::setCamera(QCamera *camera)
\brief the object used to capture still images.
- Add a QCameraImageCapture object to the capture session to enable
+ Add a QImageCapture object to the capture session to enable
capturing of still images from the camera.
*/
-QCameraImageCapture *QMediaCaptureSession::imageCapture()
+QImageCapture *QMediaCaptureSession::imageCapture()
{
return d_ptr->imageCapture;
}
-void QMediaCaptureSession::setImageCapture(QCameraImageCapture *imageCapture)
+void QMediaCaptureSession::setImageCapture(QImageCapture *imageCapture)
{
if (d_ptr->imageCapture == imageCapture)
return;
diff --git a/src/multimedia/recording/qmediacapturesession.h b/src/multimedia/recording/qmediacapturesession.h
index 8d662a3bd..50ece6aff 100644
--- a/src/multimedia/recording/qmediacapturesession.h
+++ b/src/multimedia/recording/qmediacapturesession.h
@@ -49,7 +49,7 @@ class QCamera;
class QAudioInput;
class QAudioOutput;
class QCameraDevice;
-class QCameraImageCapture; // ### rename to QMediaImageCapture
+class QImageCapture; // ### rename to QMediaImageCapture
class QMediaRecorder;
class QPlatformMediaCaptureSession;
class QVideoSink;
@@ -60,31 +60,29 @@ class Q_MULTIMEDIA_EXPORT QMediaCaptureSession : public QObject
Q_OBJECT
Q_PROPERTY(QAudioInput *audioInput READ audioInput WRITE setAudioInput NOTIFY audioInputChanged)
Q_PROPERTY(QCamera *camera READ camera WRITE setCamera NOTIFY cameraChanged)
- Q_PROPERTY(QCameraImageCapture *imageCapture READ imageCapture WRITE setImageCapture NOTIFY imageCaptureChanged)
+ Q_PROPERTY(QImageCapture *imageCapture READ imageCapture WRITE setImageCapture NOTIFY imageCaptureChanged)
Q_PROPERTY(QMediaRecorder *encoder READ encoder WRITE setEncoder NOTIFY encoderChanged)
Q_PROPERTY(QObject *videoOutput READ videoOutput WRITE setVideoOutput NOTIFY videoOutputChanged)
public:
explicit QMediaCaptureSession(QObject *parent = nullptr);
~QMediaCaptureSession();
- bool isAvailable() const;
-
QAudioInput *audioInput() const;
void setAudioInput(QAudioInput *device);
QCamera *camera() const;
void setCamera(QCamera *camera);
- QCameraImageCapture *imageCapture();
- void setImageCapture(QCameraImageCapture *imageCapture);
+ QImageCapture *imageCapture();
+ void setImageCapture(QImageCapture *imageCapture);
QMediaRecorder *encoder();
void setEncoder(QMediaRecorder *recorder);
- void setVideoOutput(QObject *preview);
+ void setVideoOutput(QObject *output);
QObject *videoOutput() const;
- void setVideoSink(QVideoSink *preview);
+ void setVideoSink(QVideoSink *sink);
QVideoSink *videoSink() const;
void setAudioOutput(QAudioOutput *output);
diff --git a/src/multimedia/recording/qmediarecorder.cpp b/src/multimedia/recording/qmediarecorder.cpp
index 69a07ada3..2091980ac 100644
--- a/src/multimedia/recording/qmediarecorder.cpp
+++ b/src/multimedia/recording/qmediarecorder.cpp
@@ -144,12 +144,11 @@ void QMediaRecorder::setCaptureSession(QMediaCaptureSession *session)
Setting the location can fail, for example when the service supports only
local file system locations but a network URL was passed. If the service
- does not support media recording this setting the output location will
- always fail.
+ does not support media recording, setting the output location will
+ always fail. If the operation fails an errorOccured signal is emitted.
The \a location can be relative or empty;
- in this case the encoder uses the system specific place and file naming scheme.
- After recording has stated, QMediaRecorder::outputLocation() returns the actual output location.
+ in the latter case the encoder uses the system specific place and file naming scheme.
*/
/*!
@@ -175,15 +174,17 @@ QUrl QMediaRecorder::outputLocation() const
return d_func()->control ? d_func()->control->outputLocation() : QUrl();
}
-bool QMediaRecorder::setOutputLocation(const QUrl &location)
+void QMediaRecorder::setOutputLocation(const QUrl &location)
{
Q_D(QMediaRecorder);
- if (!d->control)
- return false;
+ if (!d->control) {
+ emit errorOccurred(QMediaRecorder::ResourceError, tr("Not available"));
+ return;
+ }
+ d->control->setOutputLocation(location);
d->control->clearActualLocation();
- if (d->control && d->captureSession)
- return d->control->setOutputLocation(location);
- return false;
+ if (!location.isEmpty() && !d->control->isLocationWritable(location))
+ emit errorOccurred(QMediaRecorder::LocationNotWritable, tr("Output location not writable"));
}
QUrl QMediaRecorder::actualLocation() const
diff --git a/src/multimedia/recording/qmediarecorder.h b/src/multimedia/recording/qmediarecorder.h
index d92cd3ec9..d65d516b1 100644
--- a/src/multimedia/recording/qmediarecorder.h
+++ b/src/multimedia/recording/qmediarecorder.h
@@ -116,7 +116,8 @@ public:
NoError,
ResourceError,
FormatError,
- OutOfSpaceError
+ OutOfSpaceError,
+ LocationNotWritable
};
Q_ENUM(Error)
@@ -126,7 +127,7 @@ public:
bool isAvailable() const;
QUrl outputLocation() const;
- bool setOutputLocation(const QUrl &location);
+ void setOutputLocation(const QUrl &location);
QUrl actualLocation() const;
diff --git a/src/multimediaquick/qquickimagecapture.cpp b/src/multimediaquick/qquickimagecapture.cpp
index 27f655c85..76a25db46 100644
--- a/src/multimediaquick/qquickimagecapture.cpp
+++ b/src/multimediaquick/qquickimagecapture.cpp
@@ -87,7 +87,7 @@ QT_BEGIN_NAMESPACE
*/
QQuickImageCapture::QQuickImageCapture(QObject *parent)
- : QCameraImageCapture(parent)
+ : QImageCapture(parent)
{
connect(this, SIGNAL(imageCaptured(int,QImage)), this, SLOT(_q_imageCaptured(int,QImage)));
}
diff --git a/src/multimediaquick/qquickimagecapture_p.h b/src/multimediaquick/qquickimagecapture_p.h
index f01d95ecf..9b88232c0 100644
--- a/src/multimediaquick/qquickimagecapture_p.h
+++ b/src/multimediaquick/qquickimagecapture_p.h
@@ -52,7 +52,7 @@
//
#include <qcamera.h>
-#include <qcameraimagecapture.h>
+#include <qimagecapture.h>
#include <qmediametadata.h>
#include <QtQml/qqml.h>
@@ -61,7 +61,7 @@ QT_BEGIN_NAMESPACE
class QUrl;
-class QQuickImageCapture : public QCameraImageCapture
+class QQuickImageCapture : public QImageCapture
{
Q_OBJECT
Q_PROPERTY(QString preview READ preview NOTIFY previewChanged)
diff --git a/src/multimediaquick/qtmultimediaquicktypes_p.h b/src/multimediaquick/qtmultimediaquicktypes_p.h
index f44e3245b..dc4de9450 100644
--- a/src/multimediaquick/qtmultimediaquicktypes_p.h
+++ b/src/multimediaquick/qtmultimediaquicktypes_p.h
@@ -85,10 +85,10 @@ struct QCameraForeign
QML_NAMED_ELEMENT(Camera)
};
-struct QCameraImageCaptureForeign
+struct QImageCaptureForeign
{
Q_GADGET
- QML_FOREIGN(QCameraImageCapture)
+ QML_FOREIGN(QImageCapture)
QML_NAMED_ELEMENT(ImageCapture)
};
diff --git a/src/multimediawidgets/doc/snippets/multimedia-snippets/camera.cpp b/src/multimediawidgets/doc/snippets/multimedia-snippets/camera.cpp
index a63bf50a9..f6984e7d3 100644
--- a/src/multimediawidgets/doc/snippets/multimedia-snippets/camera.cpp
+++ b/src/multimediawidgets/doc/snippets/multimedia-snippets/camera.cpp
@@ -41,12 +41,12 @@
// Extracted from src/multimedia/doc/snippets/multimedia-snippets/camera.cpp
#include "qcamera.h"
#include "qvideowidget.h"
-#include "qcameraimagecapture.h"
+#include "qimagecapture.h"
/* Globals so that everything is consistent. */
QCamera *camera = 0;
QCameraViewfinder *viewfinder = 0;
-QCameraImageCapture *imageCapture = 0;
+QImageCapture *imageCapture = 0;
void camera_blah()
{
@@ -58,7 +58,7 @@ void camera_blah()
camera->setViewfinder(viewfinder);
- imageCapture = new QCameraImageCapture(camera);
+ imageCapture = new QImageCapture(camera);
camera->setCaptureMode(QCamera::CaptureStillImage);
camera->start();
diff --git a/tests/auto/integration/qaudiodecoderbackend/tst_qaudiodecoderbackend.cpp b/tests/auto/integration/qaudiodecoderbackend/tst_qaudiodecoderbackend.cpp
index 8a948e905..5e32efa16 100644
--- a/tests/auto/integration/qaudiodecoderbackend/tst_qaudiodecoderbackend.cpp
+++ b/tests/auto/integration/qaudiodecoderbackend/tst_qaudiodecoderbackend.cpp
@@ -72,7 +72,7 @@ void tst_QAudioDecoderBackend::init()
void tst_QAudioDecoderBackend::initTestCase()
{
QAudioDecoder d;
- if (!d.isAvailable())
+ if (!d.isSupported())
QSKIP("Audio decoder service is not available");
}
@@ -102,30 +102,29 @@ void tst_QAudioDecoderBackend::fileTest()
int byteCount = 0;
int sampleCount = 0;
- QVERIFY(d.state() == QAudioDecoder::StoppedState);
+ QVERIFY(!d.isDecoding());
QVERIFY(d.bufferAvailable() == false);
QCOMPARE(d.source(), QString(""));
- QVERIFY(d.audioFormat() == QAudioFormat());
// Test local file
QFileInfo fileInfo(QFINDTESTDATA(TEST_FILE_NAME));
QUrl url = QUrl::fromLocalFile(fileInfo.absoluteFilePath());
d.setSource(url);
- QVERIFY(d.state() == QAudioDecoder::StoppedState);
+ QVERIFY(!d.isDecoding());
QVERIFY(!d.bufferAvailable());
QCOMPARE(d.source(), url);
QSignalSpy readySpy(&d, SIGNAL(bufferReady()));
QSignalSpy bufferChangedSpy(&d, SIGNAL(bufferAvailableChanged(bool)));
QSignalSpy errorSpy(&d, SIGNAL(error(QAudioDecoder::Error)));
- QSignalSpy stateSpy(&d, SIGNAL(stateChanged(QAudioDecoder::State)));
+ QSignalSpy isDecodingSpy(&d, SIGNAL(isDecodingChanged(bool)));
QSignalSpy durationSpy(&d, SIGNAL(durationChanged(qint64)));
QSignalSpy finishedSpy(&d, SIGNAL(finished()));
QSignalSpy positionSpy(&d, SIGNAL(positionChanged(qint64)));
d.start();
- QTRY_VERIFY(d.state() == QAudioDecoder::DecodingState);
- QTRY_VERIFY(!stateSpy.isEmpty());
+ QTRY_VERIFY(d.isDecoding());
+ QTRY_VERIFY(!isDecodingSpy.isEmpty());
QTRY_VERIFY(!readySpy.isEmpty());
QTRY_VERIFY(!bufferChangedSpy.isEmpty());
QVERIFY(d.bufferAvailable());
@@ -141,11 +140,6 @@ void tst_QAudioDecoderBackend::fileTest()
QCOMPARE(buffer.format().sampleFormat(), QAudioFormat::Int16);
QCOMPARE(buffer.byteCount(), buffer.sampleCount() * 2); // 16bit mono
- // This does not make a lot of sense
- // The decoder's audioFormat() should report the actual buffer format?
- // // The decoder should still have no format set
- // QVERIFY(d.audioFormat() == QAudioFormat());
-
QVERIFY(errorSpy.isEmpty());
duration += buffer.duration();
@@ -179,94 +173,10 @@ void tst_QAudioDecoderBackend::fileTest()
QVERIFY(qAbs((d.position() + (buffer.duration() / 1000)) - 1000) < 20);
QTRY_COMPARE(finishedSpy.count(), 1);
QVERIFY(!d.bufferAvailable());
- QTRY_COMPARE(d.state(), QAudioDecoder::StoppedState);
-
- d.stop();
- QTRY_COMPARE(d.state(), QAudioDecoder::StoppedState);
- QTRY_COMPARE(durationSpy.count(), 2);
- QCOMPARE(d.duration(), qint64(-1));
- QVERIFY(!d.bufferAvailable());
- readySpy.clear();
- bufferChangedSpy.clear();
- stateSpy.clear();
- durationSpy.clear();
- finishedSpy.clear();
- positionSpy.clear();
-
- // change output audio format
- QAudioFormat format;
- format.setChannelCount(2);
- format.setSampleRate(11050);
- format.setSampleFormat(QAudioFormat::UInt8);
-
- d.setAudioFormat(format);
-
- // We expect 1 second still, at 11050 * 2 samples == 22k samples.
- // (at 1 byte/sample -> 22kb)
-
- // Make sure it stuck
- QVERIFY(d.audioFormat() == format);
-
- duration = 0;
- sampleCount = 0;
- byteCount = 0;
-
- d.start();
- QTRY_VERIFY(d.state() == QAudioDecoder::DecodingState);
- QTRY_VERIFY(!stateSpy.isEmpty());
- QTRY_VERIFY(!readySpy.isEmpty());
- QTRY_VERIFY(!bufferChangedSpy.isEmpty());
- QVERIFY(d.bufferAvailable());
- QTRY_VERIFY(!durationSpy.isEmpty());
- QVERIFY(qAbs(d.duration() - 1000) < 20);
-
- buffer = d.read();
- QVERIFY(buffer.isValid());
- // See if we got the right format
- QVERIFY(buffer.format() == format);
-
- // The decoder should still have the same format
- QVERIFY(d.audioFormat() == format);
-
- QVERIFY(errorSpy.isEmpty());
-
- duration += buffer.duration();
- sampleCount += buffer.sampleCount();
- byteCount += buffer.byteCount();
-
- // Now drain the decoder
- if (duration < 998000) {
- QTRY_COMPARE(d.bufferAvailable(), true);
- }
-
- while (d.bufferAvailable()) {
- buffer = d.read();
- QVERIFY(buffer.isValid());
- QTRY_VERIFY(!positionSpy.isEmpty());
- QVERIFY(positionSpy.takeLast().at(0).toLongLong() == qint64(duration / 1000));
- QVERIFY(d.position() - (duration / 1000) < 20);
-
- duration += buffer.duration();
- sampleCount += buffer.sampleCount();
- byteCount += buffer.byteCount();
-
- if (duration < 998000) {
- QTRY_COMPARE(d.bufferAvailable(), true);
- }
- }
-
- // Resampling might end up with fewer or more samples
- // so be a bit sloppy
- QVERIFY(qAbs(sampleCount - 22047) < 100);
- QVERIFY(qAbs(byteCount - 22047) < 100);
- QVERIFY(qAbs(qint64(duration) - 1000000) < 20000);
- QVERIFY(qAbs((d.position() + (buffer.duration() / 1000)) - 1000) < 20);
- QTRY_COMPARE(finishedSpy.count(), 1);
- QVERIFY(!d.bufferAvailable());
- QTRY_COMPARE(d.state(), QAudioDecoder::StoppedState);
+ QTRY_VERIFY(!d.isDecoding());
d.stop();
- QTRY_COMPARE(d.state(), QAudioDecoder::StoppedState);
+ QTRY_VERIFY(!d.isDecoding());
QTRY_COMPARE(durationSpy.count(), 2);
QCOMPARE(d.duration(), qint64(-1));
QVERIFY(!d.bufferAvailable());
@@ -282,31 +192,29 @@ void tst_QAudioDecoderBackend::unsupportedFileTest()
QSKIP("There is no audio decoding support on this platform.");
QAudioBuffer buffer;
- QVERIFY(d.state() == QAudioDecoder::StoppedState);
+ QVERIFY(!d.isDecoding());
QVERIFY(d.bufferAvailable() == false);
QCOMPARE(d.source(), QString(""));
- QVERIFY(d.audioFormat() == QAudioFormat());
// Test local file
QFileInfo fileInfo(QFINDTESTDATA(TEST_UNSUPPORTED_FILE_NAME));
QUrl url = QUrl::fromLocalFile(fileInfo.absoluteFilePath());
d.setSource(url);
- QVERIFY(d.state() == QAudioDecoder::StoppedState);
+ QVERIFY(!d.isDecoding());
QVERIFY(!d.bufferAvailable());
QCOMPARE(d.source(), url);
QSignalSpy readySpy(&d, SIGNAL(bufferReady()));
QSignalSpy bufferChangedSpy(&d, SIGNAL(bufferAvailableChanged(bool)));
QSignalSpy errorSpy(&d, SIGNAL(error(QAudioDecoder::Error)));
- QSignalSpy stateSpy(&d, SIGNAL(stateChanged(QAudioDecoder::State)));
+ QSignalSpy isDecodingSpy(&d, SIGNAL(isDecodingChanged(bool)));
QSignalSpy durationSpy(&d, SIGNAL(durationChanged(qint64)));
QSignalSpy finishedSpy(&d, SIGNAL(finished()));
QSignalSpy positionSpy(&d, SIGNAL(positionChanged(qint64)));
d.start();
- QTRY_VERIFY(d.state() == QAudioDecoder::StoppedState);
+ QTRY_VERIFY(!d.isDecoding());
QVERIFY(!d.bufferAvailable());
- QCOMPARE(d.audioFormat(), QAudioFormat());
QCOMPARE(d.duration(), qint64(-1));
QCOMPARE(d.position(), qint64(-1));
@@ -321,7 +229,7 @@ void tst_QAudioDecoderBackend::unsupportedFileTest()
// Check all other spies.
QVERIFY(readySpy.isEmpty());
QVERIFY(bufferChangedSpy.isEmpty());
- QVERIFY(stateSpy.isEmpty());
+ QVERIFY(isDecodingSpy.isEmpty());
QVERIFY(finishedSpy.isEmpty());
QVERIFY(positionSpy.isEmpty());
QVERIFY(durationSpy.isEmpty());
@@ -330,7 +238,7 @@ void tst_QAudioDecoderBackend::unsupportedFileTest()
// Try read even if the file is not supported to test robustness.
buffer = d.read();
- QTRY_VERIFY(d.state() == QAudioDecoder::StoppedState);
+ QTRY_VERIFY(!d.isDecoding());
QVERIFY(!buffer.isValid());
QVERIFY(!d.bufferAvailable());
QCOMPARE(d.position(), qint64(-1));
@@ -338,14 +246,14 @@ void tst_QAudioDecoderBackend::unsupportedFileTest()
QVERIFY(errorSpy.isEmpty());
QVERIFY(readySpy.isEmpty());
QVERIFY(bufferChangedSpy.isEmpty());
- QVERIFY(stateSpy.isEmpty());
+ QVERIFY(isDecodingSpy.isEmpty());
QVERIFY(finishedSpy.isEmpty());
QVERIFY(positionSpy.isEmpty());
QVERIFY(durationSpy.isEmpty());
d.stop();
- QTRY_COMPARE(d.state(), QAudioDecoder::StoppedState);
+ QTRY_VERIFY(!d.isDecoding());
QCOMPARE(d.duration(), qint64(-1));
QVERIFY(!d.bufferAvailable());
}
@@ -361,31 +269,29 @@ void tst_QAudioDecoderBackend::corruptedFileTest()
QSKIP("There is no audio decoding support on this platform.");
QAudioBuffer buffer;
- QVERIFY(d.state() == QAudioDecoder::StoppedState);
+ QVERIFY(!d.isDecoding());
QVERIFY(d.bufferAvailable() == false);
QCOMPARE(d.source(), QUrl());
- QVERIFY(d.audioFormat() == QAudioFormat());
// Test local file
QFileInfo fileInfo(QFINDTESTDATA(TEST_CORRUPTED_FILE_NAME));
QUrl url = QUrl::fromLocalFile(fileInfo.absoluteFilePath());
d.setSource(url);
- QVERIFY(d.state() == QAudioDecoder::StoppedState);
+ QVERIFY(!d.isDecoding());
QVERIFY(!d.bufferAvailable());
QCOMPARE(d.source(), url);
QSignalSpy readySpy(&d, SIGNAL(bufferReady()));
QSignalSpy bufferChangedSpy(&d, SIGNAL(bufferAvailableChanged(bool)));
QSignalSpy errorSpy(&d, SIGNAL(error(QAudioDecoder::Error)));
- QSignalSpy stateSpy(&d, SIGNAL(stateChanged(QAudioDecoder::State)));
+ QSignalSpy isDecodingSpy(&d, SIGNAL(isDecodingChanged(bool)));
QSignalSpy durationSpy(&d, SIGNAL(durationChanged(qint64)));
QSignalSpy finishedSpy(&d, SIGNAL(finished()));
QSignalSpy positionSpy(&d, SIGNAL(positionChanged(qint64)));
d.start();
- QTRY_VERIFY(d.state() == QAudioDecoder::StoppedState);
+ QTRY_VERIFY(!d.isDecoding());
QVERIFY(!d.bufferAvailable());
- QCOMPARE(d.audioFormat(), QAudioFormat());
QCOMPARE(d.duration(), qint64(-1));
QCOMPARE(d.position(), qint64(-1));
@@ -400,7 +306,7 @@ void tst_QAudioDecoderBackend::corruptedFileTest()
// Check all other spies.
QVERIFY(readySpy.isEmpty());
QVERIFY(bufferChangedSpy.isEmpty());
- QVERIFY(stateSpy.isEmpty());
+ QVERIFY(isDecodingSpy.isEmpty());
QVERIFY(finishedSpy.isEmpty());
QVERIFY(positionSpy.isEmpty());
QVERIFY(durationSpy.isEmpty());
@@ -409,7 +315,7 @@ void tst_QAudioDecoderBackend::corruptedFileTest()
// Try read even if the file is corrupted to test the robustness.
buffer = d.read();
- QTRY_VERIFY(d.state() == QAudioDecoder::StoppedState);
+ QTRY_VERIFY(!d.isDecoding());
QVERIFY(!buffer.isValid());
QVERIFY(!d.bufferAvailable());
QCOMPARE(d.position(), qint64(-1));
@@ -417,14 +323,14 @@ void tst_QAudioDecoderBackend::corruptedFileTest()
QVERIFY(errorSpy.isEmpty());
QVERIFY(readySpy.isEmpty());
QVERIFY(bufferChangedSpy.isEmpty());
- QVERIFY(stateSpy.isEmpty());
+ QVERIFY(isDecodingSpy.isEmpty());
QVERIFY(finishedSpy.isEmpty());
QVERIFY(positionSpy.isEmpty());
QVERIFY(durationSpy.isEmpty());
d.stop();
- QTRY_COMPARE(d.state(), QAudioDecoder::StoppedState);
+ QTRY_VERIFY(!d.isDecoding());
QCOMPARE(d.duration(), qint64(-1));
QVERIFY(!d.bufferAvailable());
}
@@ -436,31 +342,29 @@ void tst_QAudioDecoderBackend::invalidSource()
QSKIP("There is no audio decoding support on this platform.");
QAudioBuffer buffer;
- QVERIFY(d.state() == QAudioDecoder::StoppedState);
+ QVERIFY(!d.isDecoding());
QVERIFY(d.bufferAvailable() == false);
QCOMPARE(d.source(), QUrl());
- QVERIFY(d.audioFormat() == QAudioFormat());
// Test invalid file source
QFileInfo fileInfo(TEST_INVALID_SOURCE);
QUrl url = QUrl::fromLocalFile(fileInfo.absoluteFilePath());
d.setSource(url);
- QVERIFY(d.state() == QAudioDecoder::StoppedState);
+ QVERIFY(!d.isDecoding());
QVERIFY(!d.bufferAvailable());
QCOMPARE(d.source(), url);
QSignalSpy readySpy(&d, SIGNAL(bufferReady()));
QSignalSpy bufferChangedSpy(&d, SIGNAL(bufferAvailableChanged(bool)));
QSignalSpy errorSpy(&d, SIGNAL(error(QAudioDecoder::Error)));
- QSignalSpy stateSpy(&d, SIGNAL(stateChanged(QAudioDecoder::State)));
+ QSignalSpy isDecodingSpy(&d, SIGNAL(isDecodingChanged(bool)));
QSignalSpy durationSpy(&d, SIGNAL(durationChanged(qint64)));
QSignalSpy finishedSpy(&d, SIGNAL(finished()));
QSignalSpy positionSpy(&d, SIGNAL(positionChanged(qint64)));
d.start();
- QTRY_VERIFY(d.state() == QAudioDecoder::StoppedState);
+ QTRY_VERIFY(!d.isDecoding());
QVERIFY(!d.bufferAvailable());
- QCOMPARE(d.audioFormat(), QAudioFormat());
QCOMPARE(d.duration(), qint64(-1));
QCOMPARE(d.position(), qint64(-1));
@@ -475,7 +379,7 @@ void tst_QAudioDecoderBackend::invalidSource()
// Check all other spies.
QVERIFY(readySpy.isEmpty());
QVERIFY(bufferChangedSpy.isEmpty());
- QVERIFY(stateSpy.isEmpty());
+ QVERIFY(isDecodingSpy.isEmpty());
QVERIFY(finishedSpy.isEmpty());
QVERIFY(positionSpy.isEmpty());
QVERIFY(durationSpy.isEmpty());
@@ -483,7 +387,7 @@ void tst_QAudioDecoderBackend::invalidSource()
errorSpy.clear();
d.stop();
- QTRY_COMPARE(d.state(), QAudioDecoder::StoppedState);
+ QTRY_VERIFY(!d.isDecoding());
QCOMPARE(d.duration(), qint64(-1));
QVERIFY(!d.bufferAvailable());
@@ -493,9 +397,8 @@ void tst_QAudioDecoderBackend::invalidSource()
d.setSourceDevice(&file);
d.start();
- QTRY_VERIFY(d.state() == QAudioDecoder::StoppedState);
+ QTRY_VERIFY(!d.isDecoding());
QVERIFY(!d.bufferAvailable());
- QCOMPARE(d.audioFormat(), QAudioFormat());
QCOMPARE(d.duration(), qint64(-1));
QCOMPARE(d.position(), qint64(-1));
@@ -508,7 +411,7 @@ void tst_QAudioDecoderBackend::invalidSource()
// Check all other spies.
QVERIFY(readySpy.isEmpty());
QVERIFY(bufferChangedSpy.isEmpty());
- QVERIFY(stateSpy.isEmpty());
+ QVERIFY(isDecodingSpy.isEmpty());
QVERIFY(finishedSpy.isEmpty());
QVERIFY(positionSpy.isEmpty());
QVERIFY(durationSpy.isEmpty());
@@ -516,7 +419,7 @@ void tst_QAudioDecoderBackend::invalidSource()
errorSpy.clear();
d.stop();
- QTRY_COMPARE(d.state(), QAudioDecoder::StoppedState);
+ QTRY_VERIFY(!d.isDecoding());
QCOMPARE(d.duration(), qint64(-1));
QVERIFY(!d.bufferAvailable());
}
@@ -536,15 +439,14 @@ void tst_QAudioDecoderBackend::deviceTest()
QSignalSpy readySpy(&d, SIGNAL(bufferReady()));
QSignalSpy bufferChangedSpy(&d, SIGNAL(bufferAvailableChanged(bool)));
QSignalSpy errorSpy(&d, SIGNAL(error(QAudioDecoder::Error)));
- QSignalSpy stateSpy(&d, SIGNAL(stateChanged(QAudioDecoder::State)));
+ QSignalSpy isDecodingSpy(&d, SIGNAL(isDecodingChanged(bool)));
QSignalSpy durationSpy(&d, SIGNAL(durationChanged(qint64)));
QSignalSpy finishedSpy(&d, SIGNAL(finished()));
QSignalSpy positionSpy(&d, SIGNAL(positionChanged(qint64)));
- QVERIFY(d.state() == QAudioDecoder::StoppedState);
+ QVERIFY(!d.isDecoding());
QVERIFY(d.bufferAvailable() == false);
QCOMPARE(d.source(), QString(""));
- QVERIFY(d.audioFormat() == QAudioFormat());
QFileInfo fileInfo(QFINDTESTDATA(TEST_FILE_NAME));
QFile file(fileInfo.absoluteFilePath());
@@ -554,13 +456,10 @@ void tst_QAudioDecoderBackend::deviceTest()
QVERIFY(d.sourceDevice() == &file);
QVERIFY(d.source().isEmpty());
- // We haven't set the format yet
- QVERIFY(d.audioFormat() == QAudioFormat());
-
d.start();
- QTRY_VERIFY(d.state() == QAudioDecoder::DecodingState);
- QTRY_VERIFY(!stateSpy.isEmpty());
+ QTRY_VERIFY(d.isDecoding());
+ QTRY_VERIFY(!isDecodingSpy.isEmpty());
QTRY_VERIFY(!readySpy.isEmpty());
QTRY_VERIFY(!bufferChangedSpy.isEmpty());
QVERIFY(d.bufferAvailable());
@@ -605,52 +504,10 @@ void tst_QAudioDecoderBackend::deviceTest()
QVERIFY(qAbs((d.position() + (buffer.duration() / 1000)) - 1000) < 20);
QTRY_COMPARE(finishedSpy.count(), 1);
QVERIFY(!d.bufferAvailable());
- QTRY_COMPARE(d.state(), QAudioDecoder::StoppedState);
-
- d.stop();
- QTRY_COMPARE(d.state(), QAudioDecoder::StoppedState);
- QVERIFY(!d.bufferAvailable());
- QTRY_COMPARE(durationSpy.count(), 2);
- QCOMPARE(d.duration(), qint64(-1));
- readySpy.clear();
- bufferChangedSpy.clear();
- stateSpy.clear();
- durationSpy.clear();
- finishedSpy.clear();
- positionSpy.clear();
-
- // Now try changing formats
- QAudioFormat format;
- format.setChannelCount(2);
- format.setSampleRate(8000);
- format.setSampleFormat(QAudioFormat::UInt8);
-
- d.setAudioFormat(format);
-
- // Make sure it stuck
- QVERIFY(d.audioFormat() == format);
-
- d.start();
- QTRY_VERIFY(d.state() == QAudioDecoder::DecodingState);
- QTRY_VERIFY(!stateSpy.isEmpty());
- QTRY_VERIFY(!readySpy.isEmpty());
- QTRY_VERIFY(!bufferChangedSpy.isEmpty());
- QVERIFY(d.bufferAvailable());
- QTRY_VERIFY(!durationSpy.isEmpty());
- QVERIFY(qAbs(d.duration() - 1000) < 20);
-
- buffer = d.read();
- QVERIFY(buffer.isValid());
- // See if we got the right format
- QVERIFY(buffer.format() == format);
-
- // The decoder should still have the same format
- QVERIFY(d.audioFormat() == format);
-
- QVERIFY(errorSpy.isEmpty());
+ QTRY_VERIFY(!d.isDecoding());
d.stop();
- QTRY_COMPARE(d.state(), QAudioDecoder::StoppedState);
+ QTRY_VERIFY(!d.isDecoding());
QVERIFY(!d.bufferAvailable());
QTRY_COMPARE(durationSpy.count(), 2);
QCOMPARE(d.duration(), qint64(-1));
diff --git a/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp b/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp
index 75e06a4a4..a656c1da0 100644
--- a/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp
+++ b/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp
@@ -33,10 +33,10 @@
#include <QDebug>
#include <private/qplatformcamera_p.h>
-#include <private/qplatformcameraimagecapture_p.h>
+#include <private/qplatformimagecapture_p.h>
#include <qcamera.h>
#include <qcameradevice.h>
-#include <qcameraimagecapture.h>
+#include <qimagecapture.h>
#include <qmediacapturesession.h>
#include <qobject.h>
#include <qmediadevices.h>
@@ -158,16 +158,14 @@ void tst_QCameraBackend::testCameraStates()
QMediaCaptureSession session;
QCamera camera;
camera.setCameraDevice(QCameraDevice());
- QCameraImageCapture imageCapture;
+ QImageCapture imageCapture;
session.setCamera(&camera);
session.setImageCapture(&imageCapture);
QSignalSpy errorSignal(&camera, SIGNAL(errorOccurred(QCamera::Error, const QString &)));
QSignalSpy activeChangedSignal(&camera, SIGNAL(activeChanged(bool)));
- QSignalSpy statusChangedSignal(&camera, SIGNAL(statusChanged(QCamera::Status)));
QCOMPARE(camera.isActive(), false);
- QCOMPARE(camera.status(), QCamera::InactiveStatus);
// Camera should not startup with a null QCameraDevice as device
camera.start();
@@ -182,14 +180,10 @@ void tst_QCameraBackend::testCameraStates()
QCOMPARE(camera.isActive(), true);
QTRY_COMPARE(activeChangedSignal.size(), 1);
QCOMPARE(activeChangedSignal.last().first().value<bool>(), true);
- QTRY_COMPARE(camera.status(), QCamera::ActiveStatus);
- QCOMPARE(statusChangedSignal.last().first().value<QCamera::Status>(), QCamera::ActiveStatus);
camera.stop();
QCOMPARE(camera.isActive(), false);
QCOMPARE(activeChangedSignal.last().first().value<bool>(), false);
- QTRY_COMPARE(camera.status(), QCamera::InactiveStatus);
- QCOMPARE(statusChangedSignal.last().first().value<QCamera::Status>(), QCamera::InactiveStatus);
QCOMPARE(camera.errorString(), QString());
}
@@ -212,7 +206,6 @@ void tst_QCameraBackend::testCameraStartParallel()
camera2.start();
QCOMPARE(camera1.isActive(), true);
- QTRY_COMPARE(camera1.status(), QCamera::ActiveStatus);
QCOMPARE(camera1.error(), QCamera::NoError);
QCOMPARE(camera2.isActive(), true);
QCOMPARE(camera2.error(), QCamera::NoError);
@@ -225,7 +218,7 @@ void tst_QCameraBackend::testCameraCapture()
{
QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture;
+ QImageCapture imageCapture;
session.setCamera(&camera);
session.setImageCapture(&imageCapture);
@@ -236,11 +229,11 @@ void tst_QCameraBackend::testCameraCapture()
QSignalSpy capturedSignal(&imageCapture, SIGNAL(imageCaptured(int,QImage)));
QSignalSpy savedSignal(&imageCapture, SIGNAL(imageSaved(int,QString)));
- QSignalSpy errorSignal(&imageCapture, SIGNAL(errorOccurred(int,QCameraImageCapture::Error,const QString&)));
+ QSignalSpy errorSignal(&imageCapture, SIGNAL(errorOccurred(int,QImageCapture::Error,const QString&)));
imageCapture.captureToFile();
QTRY_COMPARE(errorSignal.size(), 1);
- QCOMPARE(imageCapture.error(), QCameraImageCapture::NotReadyError);
+ QCOMPARE(imageCapture.error(), QImageCapture::NotReadyError);
QCOMPARE(capturedSignal.size(), 0);
errorSignal.clear();
@@ -250,7 +243,7 @@ void tst_QCameraBackend::testCameraCapture()
camera.start();
QTRY_VERIFY(imageCapture.isReadyForCapture());
- QCOMPARE(camera.status(), QCamera::ActiveStatus);
+ QVERIFY(camera.isActive());
QCOMPARE(errorSignal.size(), 0);
int id = imageCapture.captureToFile();
@@ -260,7 +253,7 @@ void tst_QCameraBackend::testCameraCapture()
QTRY_COMPARE(capturedSignal.size(), 1);
QCOMPARE(capturedSignal.last().first().toInt(), id);
QCOMPARE(errorSignal.size(), 0);
- QCOMPARE(imageCapture.error(), QCameraImageCapture::NoError);
+ QCOMPARE(imageCapture.error(), QImageCapture::NoError);
QCOMPARE(savedSignal.last().first().toInt(), id);
QString location = savedSignal.last().last().toString();
@@ -281,7 +274,7 @@ void tst_QCameraBackend::testCaptureToBuffer()
QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture;
+ QImageCapture imageCapture;
session.setCamera(&camera);
session.setImageCapture(&imageCapture);
@@ -289,12 +282,12 @@ void tst_QCameraBackend::testCaptureToBuffer()
camera.setActive(true);
- QTRY_COMPARE(camera.status(), QCamera::ActiveStatus);
+ QTRY_VERIFY(camera.isActive());
QSignalSpy capturedSignal(&imageCapture, SIGNAL(imageCaptured(int,QImage)));
QSignalSpy imageAvailableSignal(&imageCapture, SIGNAL(imageAvailable(int,QVideoFrame)));
QSignalSpy savedSignal(&imageCapture, SIGNAL(imageSaved(int,QString)));
- QSignalSpy errorSignal(&imageCapture, SIGNAL(errorOccurred(int,QCameraImageCapture::Error,const QString&)));
+ QSignalSpy errorSignal(&imageCapture, SIGNAL(errorOccurred(int,QImageCapture::Error,const QString&)));
camera.start();
QTRY_VERIFY(imageCapture.isReadyForCapture());
@@ -330,7 +323,7 @@ void tst_QCameraBackend::testCameraCaptureMetadata()
QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture;
+ QImageCapture imageCapture;
session.setCamera(&camera);
session.setImageCapture(&imageCapture);
@@ -377,7 +370,7 @@ void tst_QCameraBackend::testExposureCompensation()
//exposure compensation should be preserved during start
camera.start();
- QTRY_COMPARE(camera.status(), QCamera::ActiveStatus);
+ QTRY_VERIFY(camera.isActive());
QCOMPARE(camera.exposureCompensation(), 1.0);
@@ -407,7 +400,7 @@ void tst_QCameraBackend::testExposureMode()
}
camera.stop();
- QTRY_COMPARE(camera.status(), QCamera::InactiveStatus);
+ QTRY_VERIFY(!camera.isActive());
// Auto
camera.setExposureMode(QCamera::ExposureAuto);
@@ -472,7 +465,7 @@ void tst_QCameraBackend::testVideoRecording()
}
QTRY_VERIFY(camera->isActive());
- QTRY_COMPARE(camera->status(), QCamera::ActiveStatus);
+ QTRY_VERIFY(camera->isActive());
QTRY_COMPARE(recorder.status(), QMediaRecorder::StoppedStatus);
for (int recordings = 0; recordings < 2; ++recordings) {
diff --git a/tests/auto/unit/mockbackend/qmockaudiodecoder.h b/tests/auto/unit/mockbackend/qmockaudiodecoder.h
index 24cd98756..a106a83d2 100644
--- a/tests/auto/unit/mockbackend/qmockaudiodecoder.h
+++ b/tests/auto/unit/mockbackend/qmockaudiodecoder.h
@@ -49,7 +49,6 @@ class QMockAudioDecoder : public QPlatformAudioDecoder
public:
QMockAudioDecoder(QAudioDecoder *parent = 0)
: QPlatformAudioDecoder(parent)
- , mState(QAudioDecoder::StoppedState)
, mDevice(0)
, mPosition(-1)
, mSerial(0)
@@ -59,29 +58,11 @@ public:
mFormat.setSampleRate(1000);
}
- QAudioDecoder::State state() const
- {
- return mState;
- }
-
QUrl source() const
{
return mSource;
}
- QAudioFormat audioFormat() const
- {
- return mFormat;
- }
-
- void setAudioFormat(const QAudioFormat &format)
- {
- if (mFormat != format) {
- mFormat = format;
- emit formatChanged(mFormat);
- }
- }
-
void setSource(const QUrl &fileName)
{
mSource = fileName;
@@ -106,10 +87,9 @@ public:
// 5 buffers
void start()
{
- if (mState == QAudioDecoder::StoppedState) {
+ if (!isDecoding()) {
if (!mSource.isEmpty()) {
- mState = QAudioDecoder::DecodingState;
- emit stateChanged(mState);
+ setIsDecoding(true);
emit durationChanged(duration());
QTimer::singleShot(50, this, SLOT(pretendDecode()));
@@ -121,12 +101,11 @@ public:
void stop()
{
- if (mState != QAudioDecoder::StoppedState) {
- mState = QAudioDecoder::StoppedState;
+ if (isDecoding()) {
mSerial = 0;
mPosition = 0;
mBuffers.clear();
- emit stateChanged(mState);
+ setIsDecoding(false);
emit bufferAvailableChanged(false);
}
}
@@ -143,9 +122,7 @@ public:
emit bufferAvailableChanged(false);
if (mBuffers.isEmpty() && mSerial >= MOCK_DECODER_MAX_BUFFERS) {
- mState = QAudioDecoder::StoppedState;
emit finished();
- emit stateChanged(mState);
} else
QTimer::singleShot(50, this, SLOT(pretendDecode()));
}
@@ -189,7 +166,6 @@ private slots:
}
public:
- QAudioDecoder::State mState;
QUrl mSource;
QIODevice *mDevice;
QAudioFormat mFormat;
diff --git a/tests/auto/unit/mockbackend/qmockcamera.h b/tests/auto/unit/mockbackend/qmockcamera.h
index f10c972f9..2184f464a 100644
--- a/tests/auto/unit/mockbackend/qmockcamera.h
+++ b/tests/auto/unit/mockbackend/qmockcamera.h
@@ -50,7 +50,6 @@ public:
QMockCamera(QCamera *parent)
: QPlatformCamera(parent),
- m_status(QCamera::InactiveStatus),
m_propertyChangesSupported(false)
{
if (!simpleCamera) {
@@ -71,25 +70,15 @@ public:
if (m_active == active)
return;
m_active = active;
- setStatus(active ? QCamera::ActiveStatus : QCamera::InactiveStatus);
emit activeChanged(active);
}
- QCamera::Status status() const override { return m_status; }
-
/* helper method to emit the signal error */
void setError(QCamera::Error err, QString errorString)
{
emit error(err, errorString);
}
- /* helper method to emit the signal statusChaged */
- void setStatus(QCamera::Status newStatus)
- {
- m_status = newStatus;
- emit statusChanged(newStatus);
- }
-
void setCamera(const QCameraDevice &camera) override
{
m_camera = camera;
@@ -183,7 +172,6 @@ public:
}
bool m_active = false;
- QCamera::Status m_status;
QCameraDevice m_camera;
bool m_propertyChangesSupported;
};
diff --git a/tests/auto/unit/mockbackend/qmockimagecapture.cpp b/tests/auto/unit/mockbackend/qmockimagecapture.cpp
index 23e9fad60..9e2396113 100644
--- a/tests/auto/unit/mockbackend/qmockimagecapture.cpp
+++ b/tests/auto/unit/mockbackend/qmockimagecapture.cpp
@@ -29,11 +29,11 @@
#include <qmockimagecapture.h>
#include <qmockcamera.h>
#include <qmockmediacapturesession.h>
-#include <qcameraimagecapture.h>
+#include <qimagecapture.h>
#include <qcamera.h>
-QMockImageCapture::QMockImageCapture(QCameraImageCapture *parent)
- : QPlatformCameraImageCapture(parent)
+QMockImageCapture::QMockImageCapture(QImageCapture *parent)
+ : QPlatformImageCapture(parent)
{
}
@@ -51,7 +51,7 @@ int QMockImageCapture::capture(const QString &fileName)
QTimer::singleShot(5, this, SLOT(captured()));
return m_captureRequest;
} else {
- emit error(-1, QCameraImageCapture::NotReadyError,
+ emit error(-1, QImageCapture::NotReadyError,
QLatin1String("Could not capture in stopped state"));
}
diff --git a/tests/auto/unit/mockbackend/qmockimagecapture.h b/tests/auto/unit/mockbackend/qmockimagecapture.h
index 139c12474..8d7cea1a4 100644
--- a/tests/auto/unit/mockbackend/qmockimagecapture.h
+++ b/tests/auto/unit/mockbackend/qmockimagecapture.h
@@ -33,18 +33,18 @@
#include <QTimer>
#include <QtMultimedia/qmediametadata.h>
-#include "private/qplatformcameraimagecapture_p.h"
+#include "private/qplatformimagecapture_p.h"
#include "private/qplatformcamera_p.h"
QT_BEGIN_NAMESPACE
class QMockMediaCaptureSession;
-class QMockImageCapture : public QPlatformCameraImageCapture
+class QMockImageCapture : public QPlatformImageCapture
{
Q_OBJECT
public:
- QMockImageCapture(QCameraImageCapture *parent);
+ QMockImageCapture(QImageCapture *parent);
~QMockImageCapture()
{
diff --git a/tests/auto/unit/mockbackend/qmockintegration.cpp b/tests/auto/unit/mockbackend/qmockintegration.cpp
index 614542042..16e65a7b8 100644
--- a/tests/auto/unit/mockbackend/qmockintegration.cpp
+++ b/tests/auto/unit/mockbackend/qmockintegration.cpp
@@ -94,7 +94,7 @@ QPlatformCamera *QMockIntegration::createCamera(QCamera *parent)
return m_lastCamera;
}
-QPlatformCameraImageCapture *QMockIntegration::createImageCapture(QCameraImageCapture *capture)
+QPlatformImageCapture *QMockIntegration::createImageCapture(QImageCapture *capture)
{
return new QMockImageCapture(capture);
}
diff --git a/tests/auto/unit/mockbackend/qmockintegration_p.h b/tests/auto/unit/mockbackend/qmockintegration_p.h
index e46b35713..7c32d7783 100644
--- a/tests/auto/unit/mockbackend/qmockintegration_p.h
+++ b/tests/auto/unit/mockbackend/qmockintegration_p.h
@@ -75,7 +75,7 @@ public:
QPlatformMediaPlayer *createPlayer(QMediaPlayer *) override;
QPlatformCamera *createCamera(QCamera *) override;
QPlatformMediaEncoder *createEncoder(QMediaRecorder *) override;
- QPlatformCameraImageCapture *createImageCapture(QCameraImageCapture *) override;
+ QPlatformImageCapture *createImageCapture(QImageCapture *) override;
QPlatformMediaCaptureSession *createCaptureSession() override;
QPlatformVideoSink *createVideoSink(QVideoSink *) override;
diff --git a/tests/auto/unit/mockbackend/qmockmediacapturesession.h b/tests/auto/unit/mockbackend/qmockmediacapturesession.h
index 8ddbeefcd..1d18c664b 100644
--- a/tests/auto/unit/mockbackend/qmockmediacapturesession.h
+++ b/tests/auto/unit/mockbackend/qmockmediacapturesession.h
@@ -60,11 +60,11 @@ public:
mockCameraControl = control;
}
- void setImageCapture(QPlatformCameraImageCapture *imageCapture) override
+ void setImageCapture(QPlatformImageCapture *imageCapture) override
{
mockImageCapture = imageCapture;
}
- QPlatformCameraImageCapture *imageCapture() override { return hasControls ? mockImageCapture : nullptr; }
+ QPlatformImageCapture *imageCapture() override { return hasControls ? mockImageCapture : nullptr; }
QPlatformMediaEncoder *mediaEncoder() override { return hasControls ? mockControl : nullptr; }
void setMediaEncoder(QPlatformMediaEncoder *encoder) override
@@ -88,7 +88,7 @@ public:
}
QMockCamera *mockCameraControl = nullptr;
- QPlatformCameraImageCapture *mockImageCapture = nullptr;
+ QPlatformImageCapture *mockImageCapture = nullptr;
QMockMediaEncoder *mockControl = nullptr;
QPlatformAudioInput *m_audioInput = nullptr;
bool hasControls;
diff --git a/tests/auto/unit/mockbackend/qmockmediaencoder.h b/tests/auto/unit/mockbackend/qmockmediaencoder.h
index f49fc5e78..7c1cb07a6 100644
--- a/tests/auto/unit/mockbackend/qmockmediaencoder.h
+++ b/tests/auto/unit/mockbackend/qmockmediaencoder.h
@@ -46,14 +46,8 @@ public:
{
}
- QUrl outputLocation() const
+ bool isLocationWritable(const QUrl &) const
{
- return m_sink;
- }
-
- bool setOutputLocation(const QUrl &sink)
- {
- m_sink = sink;
return true;
}
@@ -98,7 +92,7 @@ public:
emit statusChanged(m_status);
emit durationChanged(m_position);
- QUrl actualLocation = m_sink.isEmpty() ? QUrl::fromLocalFile("default_name.mp4") : m_sink;
+ QUrl actualLocation = outputLocation().isEmpty() ? QUrl::fromLocalFile("default_name.mp4") : outputLocation();
emit actualLocationChanged(actualLocation);
}
@@ -136,7 +130,6 @@ public:
public:
QMediaMetaData m_metaData;
- QUrl m_sink;
QMediaRecorder::RecorderState m_state;
QMediaRecorder::Status m_status;
QMediaEncoderSettings m_settings;
diff --git a/tests/auto/unit/multimedia/CMakeLists.txt b/tests/auto/unit/multimedia/CMakeLists.txt
index 4ed5121f8..46e48ca6c 100644
--- a/tests/auto/unit/multimedia/CMakeLists.txt
+++ b/tests/auto/unit/multimedia/CMakeLists.txt
@@ -6,7 +6,8 @@ add_subdirectory(qaudioformat)
add_subdirectory(qaudionamespace)
add_subdirectory(qcamera)
add_subdirectory(qcameradevice)
-add_subdirectory(qcameraimagecapture)
+add_subdirectory(qimagecapture)
+add_subdirectory(qmediaformat)
add_subdirectory(qmediaplayer)
add_subdirectory(qmediaplaylist)
add_subdirectory(qmediarecorder)
diff --git a/tests/auto/unit/multimedia/qaudiodecoder/tst_qaudiodecoder.cpp b/tests/auto/unit/multimedia/qaudiodecoder/tst_qaudiodecoder.cpp
index cd404d448..1c200cb21 100644
--- a/tests/auto/unit/multimedia/qaudiodecoder/tst_qaudiodecoder.cpp
+++ b/tests/auto/unit/multimedia/qaudiodecoder/tst_qaudiodecoder.cpp
@@ -61,12 +61,12 @@ tst_QAudioDecoder::tst_QAudioDecoder()
void tst_QAudioDecoder::ctors()
{
QAudioDecoder d;
- QVERIFY(d.state() == QAudioDecoder::StoppedState);
+ QVERIFY(!d.isDecoding());
QVERIFY(d.bufferAvailable() == false);
QCOMPARE(d.source(), QString(""));
d.setSource(QUrl());
- QVERIFY(d.state() == QAudioDecoder::StoppedState);
+ QVERIFY(!d.isDecoding());
QVERIFY(d.bufferAvailable() == false);
QCOMPARE(d.source(), QUrl());
}
@@ -74,7 +74,7 @@ void tst_QAudioDecoder::ctors()
void tst_QAudioDecoder::read()
{
QAudioDecoder d;
- QVERIFY(d.state() == QAudioDecoder::StoppedState);
+ QVERIFY(!d.isDecoding());
QVERIFY(d.bufferAvailable() == false);
QSignalSpy readySpy(&d, SIGNAL(bufferReady()));
@@ -84,7 +84,7 @@ void tst_QAudioDecoder::read()
// Starting with empty source == error
d.start();
- QVERIFY(d.state() == QAudioDecoder::StoppedState);
+ QVERIFY(!d.isDecoding());
QVERIFY(d.bufferAvailable() == false);
QCOMPARE(readySpy.count(), 0);
@@ -100,7 +100,7 @@ void tst_QAudioDecoder::read()
bufferChangedSpy.clear();
d.start();
- QCOMPARE(d.state(), QAudioDecoder::DecodingState);
+ QVERIFY(d.isDecoding());
QCOMPARE(d.bufferAvailable(), false); // not yet
// Try to read
@@ -135,7 +135,7 @@ void tst_QAudioDecoder::read()
void tst_QAudioDecoder::stop()
{
QAudioDecoder d;
- QVERIFY(d.state() == QAudioDecoder::StoppedState);
+ QVERIFY(!d.isDecoding());
QVERIFY(d.bufferAvailable() == false);
QSignalSpy readySpy(&d, SIGNAL(bufferReady()));
@@ -145,7 +145,7 @@ void tst_QAudioDecoder::stop()
// Starting with empty source == error
d.start();
- QVERIFY(d.state() == QAudioDecoder::StoppedState);
+ QVERIFY(!d.isDecoding());
QVERIFY(d.bufferAvailable() == false);
QCOMPARE(readySpy.count(), 0);
@@ -161,7 +161,7 @@ void tst_QAudioDecoder::stop()
bufferChangedSpy.clear();
d.start();
- QCOMPARE(d.state(), QAudioDecoder::DecodingState);
+ QVERIFY(d.isDecoding());
QCOMPARE(d.bufferAvailable(), false); // not yet
// Try to read
@@ -180,14 +180,14 @@ void tst_QAudioDecoder::stop()
// Now stop
d.stop();
- QVERIFY(d.state() == QAudioDecoder::StoppedState);
+ QVERIFY(!d.isDecoding());
QVERIFY(d.bufferAvailable() == false);
}
void tst_QAudioDecoder::format()
{
QAudioDecoder d;
- QVERIFY(d.state() == QAudioDecoder::StoppedState);
+ QVERIFY(!d.isDecoding());
QVERIFY(d.bufferAvailable() == false);
QSignalSpy readySpy(&d, SIGNAL(bufferReady()));
@@ -203,7 +203,7 @@ void tst_QAudioDecoder::format()
bufferChangedSpy.clear();
d.start();
- QCOMPARE(d.state(), QAudioDecoder::DecodingState);
+ QVERIFY(d.isDecoding());
QCOMPARE(d.bufferAvailable(), false); // not yet
// Try to read
@@ -218,28 +218,7 @@ void tst_QAudioDecoder::format()
QTRY_VERIFY(d.bufferAvailable());
b = d.read();
- QVERIFY(d.audioFormat() == b.format());
-
- // Setting format while decoding is forbidden
- QAudioFormat f(d.audioFormat());
- f.setChannelCount(2);
-
- d.setAudioFormat(f);
- QVERIFY(d.audioFormat() != f);
- QVERIFY(d.audioFormat() == b.format());
-
- // Now stop, and set something specific
- d.stop();
- d.setAudioFormat(f);
- QVERIFY(d.audioFormat() == f);
-
- // Decode again
- d.start();
- QTRY_VERIFY(d.bufferAvailable());
-
- b = d.read();
- QVERIFY(d.audioFormat() == f);
- QVERIFY(b.format() == f);
+ QVERIFY(b.format().isValid());
}
void tst_QAudioDecoder::source()
@@ -275,18 +254,18 @@ void tst_QAudioDecoder::readAll()
{
QAudioDecoder d;
d.setSource(QUrl::fromLocalFile("Foo"));
- QVERIFY(d.state() == QAudioDecoder::StoppedState);
+ QVERIFY(!d.isDecoding());
QSignalSpy durationSpy(&d, SIGNAL(durationChanged(qint64)));
QSignalSpy positionSpy(&d, SIGNAL(positionChanged(qint64)));
- QSignalSpy stateSpy(&d, SIGNAL(stateChanged(QAudioDecoder::State)));
+ QSignalSpy isDecodingSpy(&d, SIGNAL(isDecodingChanged(bool)));
QSignalSpy finishedSpy(&d, SIGNAL(finished()));
QSignalSpy bufferAvailableSpy(&d, SIGNAL(bufferAvailableChanged(bool)));
d.start();
int i = 0;
forever {
- QVERIFY(d.state() == QAudioDecoder::DecodingState);
- QCOMPARE(stateSpy.count(), 1);
+ QVERIFY(d.isDecoding());
+ QCOMPARE(isDecodingSpy.count(), 1);
QCOMPARE(durationSpy.count(), 1);
QVERIFY(finishedSpy.isEmpty());
QTRY_VERIFY(bufferAvailableSpy.count() >= 1);
@@ -301,10 +280,10 @@ void tst_QAudioDecoder::readAll()
i++;
if (i == MOCK_DECODER_MAX_BUFFERS) {
QCOMPARE(finishedSpy.count(), 1);
- QCOMPARE(stateSpy.count(), 2);
- QVERIFY(d.state() == QAudioDecoder::StoppedState);
- QList<QVariant> arguments = stateSpy.takeLast();
- QVERIFY(arguments.at(0).toInt() == (int)QAudioDecoder::StoppedState);
+ QCOMPARE(isDecodingSpy.count(), 2);
+ QVERIFY(!d.isDecoding());
+ QList<QVariant> arguments = isDecodingSpy.takeLast();
+ QVERIFY(arguments.at(0).toBool() == false);
QVERIFY(!d.bufferAvailable());
QVERIFY(!bufferAvailableSpy.isEmpty());
arguments = bufferAvailableSpy.takeLast();
@@ -324,7 +303,7 @@ void tst_QAudioDecoder::nullControl()
QVERIFY(d.error() == QAudioDecoder::NotSupportedError);
QVERIFY(!d.errorString().isEmpty());
- QVERIFY(d.state() == QAudioDecoder::StoppedState);
+ QVERIFY(!d.isDecoding());
QVERIFY(d.source().isEmpty());
d.setSource(QUrl::fromLocalFile("test"));
@@ -335,12 +314,6 @@ void tst_QAudioDecoder::nullControl()
d.setSourceDevice(&f);
QVERIFY(d.sourceDevice() == nullptr);
- QAudioFormat format;
- format.setChannelCount(2);
- QVERIFY(!d.audioFormat().isValid());
- d.setAudioFormat(format);
- QVERIFY(!d.audioFormat().isValid());
-
QVERIFY(!d.read().isValid());
QVERIFY(!d.bufferAvailable());
@@ -350,7 +323,7 @@ void tst_QAudioDecoder::nullControl()
d.start();
QVERIFY(d.error() == QAudioDecoder::NotSupportedError);
QVERIFY(!d.errorString().isEmpty());
- QVERIFY(d.state() == QAudioDecoder::StoppedState);
+ QVERIFY(!d.isDecoding());
d.stop();
}
diff --git a/tests/auto/unit/multimedia/qcamera/tst_qcamera.cpp b/tests/auto/unit/multimedia/qcamera/tst_qcamera.cpp
index 2137ac4ca..8955e08fc 100644
--- a/tests/auto/unit/multimedia/qcamera/tst_qcamera.cpp
+++ b/tests/auto/unit/multimedia/qcamera/tst_qcamera.cpp
@@ -33,10 +33,10 @@
#include <qvideosink.h>
#include <private/qplatformcamera_p.h>
-#include <private/qplatformcameraimagecapture_p.h>
+#include <private/qplatformimagecapture_p.h>
#include <qcamera.h>
#include <qcameradevice.h>
-#include <qcameraimagecapture.h>
+#include <qimagecapture.h>
#include <qmediacapturesession.h>
#include <qobject.h>
#include <qmediadevices.h>
@@ -76,7 +76,6 @@ private slots:
void testErrorSignal();
void testError();
void testErrorString();
- void testStatus();
// Test cases to for focus handling
@@ -212,26 +211,26 @@ void tst_QCamera::testSimpleCameraCapture()
QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture;
+ QImageCapture imageCapture;
session.setCamera(&camera);
session.setImageCapture(&imageCapture);
QVERIFY(!imageCapture.isReadyForCapture());
QVERIFY(imageCapture.isAvailable());
- QCOMPARE(imageCapture.error(), QCameraImageCapture::NoError);
+ QCOMPARE(imageCapture.error(), QImageCapture::NoError);
QVERIFY(imageCapture.errorString().isEmpty());
- QSignalSpy errorSignal(&imageCapture, SIGNAL(errorOccurred(int,QCameraImageCapture::Error,QString)));
+ QSignalSpy errorSignal(&imageCapture, SIGNAL(errorOccurred(int,QImageCapture::Error,QString)));
imageCapture.captureToFile(QString::fromLatin1("/dev/null"));
QCOMPARE(errorSignal.size(), 1);
- QCOMPARE(imageCapture.error(), QCameraImageCapture::NotReadyError);
+ QCOMPARE(imageCapture.error(), QImageCapture::NotReadyError);
QVERIFY(!imageCapture.errorString().isEmpty());
camera.start();
imageCapture.captureToFile(QString::fromLatin1("/dev/null"));
QCOMPARE(errorSignal.size(), 1);
- QCOMPARE(imageCapture.error(), QCameraImageCapture::NoError);
+ QCOMPARE(imageCapture.error(), QImageCapture::NoError);
QVERIFY(imageCapture.errorString().isEmpty());
}
@@ -239,19 +238,19 @@ void tst_QCamera::testCameraCapture()
{
QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture;
+ QImageCapture imageCapture;
session.setCamera(&camera);
session.setImageCapture(&imageCapture);
QVERIFY(!imageCapture.isReadyForCapture());
QSignalSpy capturedSignal(&imageCapture, SIGNAL(imageCaptured(int,QImage)));
- QSignalSpy errorSignal(&imageCapture, SIGNAL(errorOccurred(int,QCameraImageCapture::Error,QString)));
+ QSignalSpy errorSignal(&imageCapture, SIGNAL(errorOccurred(int,QImageCapture::Error,QString)));
imageCapture.captureToFile(QString::fromLatin1("/dev/null"));
QCOMPARE(capturedSignal.size(), 0);
QCOMPARE(errorSignal.size(), 1);
- QCOMPARE(imageCapture.error(), QCameraImageCapture::NotReadyError);
+ QCOMPARE(imageCapture.error(), QImageCapture::NotReadyError);
errorSignal.clear();
@@ -263,14 +262,14 @@ void tst_QCamera::testCameraCapture()
QTRY_COMPARE(capturedSignal.size(), 1);
QCOMPARE(errorSignal.size(), 0);
- QCOMPARE(imageCapture.error(), QCameraImageCapture::NoError);
+ QCOMPARE(imageCapture.error(), QImageCapture::NoError);
}
void tst_QCamera::testCameraCaptureMetadata()
{
QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture;
+ QImageCapture imageCapture;
session.setCamera(&camera);
session.setImageCapture(&imageCapture);
@@ -441,18 +440,15 @@ void tst_QCamera::testCameraEncodingProperyChange()
{
QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture;
+ QImageCapture imageCapture;
session.setCamera(&camera);
session.setImageCapture(&imageCapture);
- QSignalSpy statusChangedSignal(&camera, SIGNAL(statusChanged(QCamera::Status)));
+ QSignalSpy activeChangedSignal(&camera, SIGNAL(activeChanged(bool)));
camera.start();
QCOMPARE(camera.isActive(), true);
- QCOMPARE(camera.status(), QCamera::ActiveStatus);
-
- QCOMPARE(statusChangedSignal.count(), 1);
- statusChangedSignal.clear();
+ QCOMPARE(activeChangedSignal.count(), 1);
}
void tst_QCamera::testSetVideoOutput()
@@ -543,8 +539,6 @@ void tst_QCamera::testSetVideoOutputDestruction()
void tst_QCamera::testEnumDebug()
{
- QTest::ignoreMessage(QtDebugMsg, "QCamera::ActiveStatus");
- qDebug() << QCamera::ActiveStatus;
QTest::ignoreMessage(QtDebugMsg, "QCamera::CameraError");
qDebug() << QCamera::CameraError;
// QTest::ignoreMessage(QtDebugMsg, "QCameraDevice::FrontFace");
@@ -705,27 +699,6 @@ void tst_QCamera::testErrorString()
QVERIFY(camera.errorString() == QString("CameraError Error"));
}
-/* Test case for verifying Status of QCamera. */
-void tst_QCamera::testStatus()
-{
- QMediaCaptureSession session;
- QCamera camera;
- session.setCamera(&camera);
- auto *service = integration.lastCaptureService();
-
- /* Set the QPlatformCamera status and verify if it is set correctly in QCamera */
- service->mockCameraControl->setStatus(QCamera::StartingStatus);
- QVERIFY(camera.status() == QCamera::StartingStatus);
-
- /* Set the QPlatformCamera status and verify if it is set correctly in QCamera */
- service->mockCameraControl->setStatus(QCamera::StartingStatus);
- QVERIFY(camera.status() == QCamera::StartingStatus);
-
- /* Set the QPlatformCamera status and verify if it is set correctly in QCamera */
- service->mockCameraControl->setStatus(QCamera::UnavailableStatus);
- QVERIFY(camera.status() == QCamera::UnavailableStatus);
-}
-
//Added this code to cover QCamera::FocusModeHyperfocal and QCamera::FocusModeAutoNear
//As the FocusModeHyperfocal and FocusModeAutoNear are not supported we can not set the focus mode to these Focus Modes
void tst_QCamera::testFocusMode()
diff --git a/tests/auto/unit/multimedia/qcameraimagecapture/CMakeLists.txt b/tests/auto/unit/multimedia/qimagecapture/CMakeLists.txt
index 11b5c643a..11a2c79bc 100644
--- a/tests/auto/unit/multimedia/qcameraimagecapture/CMakeLists.txt
+++ b/tests/auto/unit/multimedia/qimagecapture/CMakeLists.txt
@@ -1,12 +1,12 @@
-# Generated from qcameraimagecapture.pro.
+# Generated from qimagecapture.pro.
#####################################################################
-## tst_qcameraimagecapture Test:
+## tst_qimagecapture Test:
#####################################################################
-qt_internal_add_test(tst_qcameraimagecapture
+qt_internal_add_test(tst_qimagecapture
SOURCES
- tst_qcameraimagecapture.cpp
+ tst_qimagecapture.cpp
INCLUDE_DIRECTORIES
../../mockbackend
PUBLIC_LIBRARIES
diff --git a/tests/auto/unit/multimedia/qcameraimagecapture/tst_qcameraimagecapture.cpp b/tests/auto/unit/multimedia/qimagecapture/tst_qimagecapture.cpp
index c69af0621..b81f989db 100644
--- a/tests/auto/unit/multimedia/qcameraimagecapture/tst_qcameraimagecapture.cpp
+++ b/tests/auto/unit/multimedia/qimagecapture/tst_qimagecapture.cpp
@@ -30,9 +30,9 @@
#include <QDebug>
#include <private/qplatformcamera_p.h>
-#include <private/qplatformcameraimagecapture_p.h>
+#include <private/qplatformimagecapture_p.h>
#include <qcamera.h>
-#include <qcameraimagecapture.h>
+#include <qimagecapture.h>
#include <qmediacapturesession.h>
#include "qmockmediacapturesession.h"
@@ -40,7 +40,7 @@
QT_USE_NAMESPACE
-class tst_QCameraImageCapture: public QObject
+class tst_QImageCapture: public QObject
{
Q_OBJECT
@@ -68,40 +68,40 @@ private:
QMockIntegration *mockIntegration;
};
-void tst_QCameraImageCapture::initTestCase()
+void tst_QImageCapture::initTestCase()
{
mockIntegration = new QMockIntegration;
}
-void tst_QCameraImageCapture::init()
+void tst_QImageCapture::init()
{
}
-void tst_QCameraImageCapture::cleanup()
+void tst_QImageCapture::cleanup()
{
}
-void tst_QCameraImageCapture::cleanupTestCase()
+void tst_QImageCapture::cleanupTestCase()
{
delete mockIntegration;
}
-void tst_QCameraImageCapture::constructor()
+void tst_QImageCapture::constructor()
{
QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture;
+ QImageCapture imageCapture;
session.setCamera(&camera);
session.setImageCapture(&imageCapture);
QVERIFY(imageCapture.isAvailable() == true);
}
-void tst_QCameraImageCapture::isAvailable()
+void tst_QImageCapture::isAvailable()
{
{
QMediaCaptureSession session;
- QCameraImageCapture imageCapture;
+ QImageCapture imageCapture;
session.setImageCapture(&imageCapture);
QVERIFY(!imageCapture.isAvailable());
@@ -110,7 +110,7 @@ void tst_QCameraImageCapture::isAvailable()
{
QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture;
+ QImageCapture imageCapture;
session.setCamera(&camera);
session.setImageCapture(&imageCapture);
@@ -118,11 +118,11 @@ void tst_QCameraImageCapture::isAvailable()
}
}
-void tst_QCameraImageCapture::deleteMediaSource()
+void tst_QImageCapture::deleteMediaSource()
{
QMediaCaptureSession session;
QCamera *camera = new QCamera;
- QCameraImageCapture *capture = new QCameraImageCapture;
+ QImageCapture *capture = new QImageCapture;
session.setCamera(camera);
session.setImageCapture(capture);
@@ -137,11 +137,11 @@ void tst_QCameraImageCapture::deleteMediaSource()
delete capture;
}
-void tst_QCameraImageCapture::isReadyForCapture()
+void tst_QImageCapture::isReadyForCapture()
{
QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture;
+ QImageCapture imageCapture;
session.setCamera(&camera);
session.setImageCapture(&imageCapture);
@@ -154,11 +154,11 @@ void tst_QCameraImageCapture::isReadyForCapture()
camera.stop();
}
-void tst_QCameraImageCapture::capture()
+void tst_QImageCapture::capture()
{
QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture;
+ QImageCapture imageCapture;
session.setCamera(&camera);
session.setImageCapture(&imageCapture);
@@ -172,77 +172,77 @@ void tst_QCameraImageCapture::capture()
camera.stop();
}
-void tst_QCameraImageCapture::encodingSettings()
+void tst_QImageCapture::encodingSettings()
{
QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture;
+ QImageCapture imageCapture;
session.setCamera(&camera);
session.setImageCapture(&imageCapture);
QVERIFY(imageCapture.isAvailable() == true);
- imageCapture.setFileFormat(QCameraImageCapture::JPEG);
- imageCapture.setQuality(QCameraImageCapture::NormalQuality);
- QVERIFY(imageCapture.fileFormat() == QCameraImageCapture::JPEG);
- QVERIFY(imageCapture.quality() == QCameraImageCapture::NormalQuality);
+ imageCapture.setFileFormat(QImageCapture::JPEG);
+ imageCapture.setQuality(QImageCapture::NormalQuality);
+ QVERIFY(imageCapture.fileFormat() == QImageCapture::JPEG);
+ QVERIFY(imageCapture.quality() == QImageCapture::NormalQuality);
}
-void tst_QCameraImageCapture::errors()
+void tst_QImageCapture::errors()
{
QMockCamera::Simple simple;
{
QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture;
+ QImageCapture imageCapture;
session.setCamera(&camera);
session.setImageCapture(&imageCapture);
QVERIFY(imageCapture.isAvailable() == true);
imageCapture.captureToFile(QString::fromLatin1("/dev/null"));
- QCOMPARE(imageCapture.error(), QCameraImageCapture::NotReadyError);
+ QCOMPARE(imageCapture.error(), QImageCapture::NotReadyError);
QVERIFY(!imageCapture.errorString().isEmpty());
}
QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture;
+ QImageCapture imageCapture;
session.setCamera(&camera);
session.setImageCapture(&imageCapture);
camera.start();
QVERIFY(imageCapture.isAvailable() == true);
- QVERIFY(imageCapture.error() == QCameraImageCapture::NoError);
+ QVERIFY(imageCapture.error() == QImageCapture::NoError);
QVERIFY(imageCapture.errorString().isEmpty());
imageCapture.captureToFile();
- QVERIFY(imageCapture.error() == QCameraImageCapture::NoError);
+ QVERIFY(imageCapture.error() == QImageCapture::NoError);
QVERIFY(imageCapture.errorString().isEmpty());
}
-void tst_QCameraImageCapture::error()
+void tst_QImageCapture::error()
{
QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture;
+ QImageCapture imageCapture;
session.setCamera(&camera);
session.setImageCapture(&imageCapture);
- QSignalSpy spy(&imageCapture, SIGNAL(errorOccurred(int,QCameraImageCapture::Error,QString)));
+ QSignalSpy spy(&imageCapture, SIGNAL(errorOccurred(int,QImageCapture::Error,QString)));
imageCapture.captureToFile();
QTest::qWait(30);
QVERIFY(spy.count() == 1);
QVERIFY(qvariant_cast<int>(spy.at(0).at(0)) == -1);
- QVERIFY(qvariant_cast<QCameraImageCapture::Error>(spy.at(0).at(1)) == QCameraImageCapture::NotReadyError);
+ QVERIFY(qvariant_cast<QImageCapture::Error>(spy.at(0).at(1)) == QImageCapture::NotReadyError);
QVERIFY(qvariant_cast<QString>(spy.at(0).at(2)) == "Could not capture in stopped state");
spy.clear();
}
-void tst_QCameraImageCapture::imageCaptured()
+void tst_QImageCapture::imageCaptured()
{
QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture;
+ QImageCapture imageCapture;
session.setCamera(&camera);
session.setImageCapture(&imageCapture);
@@ -261,11 +261,11 @@ void tst_QCameraImageCapture::imageCaptured()
camera.stop();
}
-void tst_QCameraImageCapture::imageExposed()
+void tst_QImageCapture::imageExposed()
{
QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture;
+ QImageCapture imageCapture;
session.setCamera(&camera);
session.setImageCapture(&imageCapture);
@@ -282,11 +282,11 @@ void tst_QCameraImageCapture::imageExposed()
camera.stop();
}
-void tst_QCameraImageCapture::imageSaved()
+void tst_QImageCapture::imageSaved()
{
QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture;
+ QImageCapture imageCapture;
session.setCamera(&camera);
session.setImageCapture(&imageCapture);
@@ -304,11 +304,11 @@ void tst_QCameraImageCapture::imageSaved()
camera.stop();
}
-void tst_QCameraImageCapture::readyForCaptureChanged()
+void tst_QImageCapture::readyForCaptureChanged()
{
QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture;
+ QImageCapture imageCapture;
session.setCamera(&camera);
session.setImageCapture(&imageCapture);
@@ -329,6 +329,6 @@ void tst_QCameraImageCapture::readyForCaptureChanged()
spy.clear();
}
-QTEST_MAIN(tst_QCameraImageCapture)
+QTEST_MAIN(tst_QImageCapture)
-#include "tst_qcameraimagecapture.moc"
+#include "tst_qimagecapture.moc"
diff --git a/tests/auto/unit/multimedia/qmediaformat/CMakeLists.txt b/tests/auto/unit/multimedia/qmediaformat/CMakeLists.txt
new file mode 100644
index 000000000..23c4ad18c
--- /dev/null
+++ b/tests/auto/unit/multimedia/qmediaformat/CMakeLists.txt
@@ -0,0 +1,7 @@
+qt_internal_add_test(tst_qmediaformat
+ SOURCES
+ tst_qmediaformat.cpp
+ PUBLIC_LIBRARIES
+ Qt::Gui
+ Qt::MultimediaPrivate
+)
diff --git a/tests/auto/unit/multimedia/qmediaformat/tst_qmediaformat.cpp b/tests/auto/unit/multimedia/qmediaformat/tst_qmediaformat.cpp
new file mode 100644
index 000000000..b7a31d300
--- /dev/null
+++ b/tests/auto/unit/multimedia/qmediaformat/tst_qmediaformat.cpp
@@ -0,0 +1,68 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** 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 General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** 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-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest/QtTest>
+#include <QDebug>
+#include <QtMultimedia/qmediaformat.h>
+
+class tst_QMediaFormat : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void testResolveForEncoding();
+};
+
+void tst_QMediaFormat::testResolveForEncoding()
+{
+ QMediaFormat format;
+
+ auto hasVideoCodecs = !format.supportedVideoCodecs(QMediaFormat::Encode).isEmpty();
+
+ // Resolve codecs for audio only stream
+ format.resolveForEncoding(QMediaFormat::NoFlags);
+ QVERIFY(format.audioCodec() != QMediaFormat::AudioCodec::Unspecified);
+ QVERIFY(format.fileFormat() != QMediaFormat::FileFormat::UnspecifiedFormat);
+ QVERIFY(format.videoCodec() == QMediaFormat::VideoCodec::Unspecified);
+
+ // Resolve codecs for audio/video stream
+ format.resolveForEncoding(QMediaFormat::RequiresVideo);
+ QVERIFY(format.audioCodec() != QMediaFormat::AudioCodec::Unspecified);
+ QVERIFY(format.fileFormat() != QMediaFormat::FileFormat::UnspecifiedFormat);
+ if (hasVideoCodecs)
+ QVERIFY(format.videoCodec() != QMediaFormat::VideoCodec::Unspecified);
+ else
+ QVERIFY(format.videoCodec() == QMediaFormat::VideoCodec::Unspecified);
+
+ // Resolve again for audio only stream
+ format.resolveForEncoding(QMediaFormat::NoFlags);
+ QVERIFY(format.videoCodec() == QMediaFormat::VideoCodec::Unspecified);
+}
+
+QTEST_MAIN(tst_QMediaFormat)
+#include "tst_qmediaformat.moc"
diff --git a/tests/auto/unit/multimedia/qmediarecorder/tst_qmediarecorder.cpp b/tests/auto/unit/multimedia/qmediarecorder/tst_qmediarecorder.cpp
index 5529f470f..ed7b90234 100644
--- a/tests/auto/unit/multimedia/qmediarecorder/tst_qmediarecorder.cpp
+++ b/tests/auto/unit/multimedia/qmediarecorder/tst_qmediarecorder.cpp
@@ -132,7 +132,7 @@ void tst_QMediaRecorder::testNullControls()
QCOMPARE(recorder.duration(), qint64(0));
recorder.setOutputLocation(QUrl("file://test/save/file.mp4"));
- QCOMPARE(recorder.outputLocation(), QUrl());
+ QCOMPARE(recorder.outputLocation(), QUrl("file://test/save/file.mp4"));
QCOMPARE(recorder.actualLocation(), QUrl());
QMediaFormat format;
diff --git a/tests/auto/unit/multimediawidgets/qcamerawidgets/tst_qcamerawidgets.cpp b/tests/auto/unit/multimediawidgets/qcamerawidgets/tst_qcamerawidgets.cpp
index 3314ad547..7db456190 100644
--- a/tests/auto/unit/multimediawidgets/qcamerawidgets/tst_qcamerawidgets.cpp
+++ b/tests/auto/unit/multimediawidgets/qcamerawidgets/tst_qcamerawidgets.cpp
@@ -32,10 +32,10 @@
#include <QDebug>
#include <private/qplatformcamera_p.h>
-#include <private/qplatformcameraimagecapture_p.h>
+#include <private/qplatformimagecapture_p.h>
#include <qmediacapturesession.h>
#include <qcamera.h>
-#include <qcameraimagecapture.h>
+#include <qimagecapture.h>
#include <qgraphicsvideoitem.h>
#include <qobject.h>
#include <qvideowidget.h>
@@ -76,17 +76,16 @@ void tst_QCameraWidgets::testCameraEncodingProperyChange()
{
QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture;
+ QImageCapture imageCapture;
session.setCamera(&camera);
session.setImageCapture(&imageCapture);
- QSignalSpy statusChangedSignal(&camera, SIGNAL(statusChanged(QCamera::Status)));
+ QSignalSpy activeChangedSignal(&camera, SIGNAL(activeChanged(bool)));
camera.start();
QCOMPARE(camera.isActive(), true);
- QCOMPARE(camera.status(), QCamera::ActiveStatus);
- QCOMPARE(statusChangedSignal.count(), 1);
+ QCOMPARE(activeChangedSignal.count(), 1);
}
void tst_QCameraWidgets::testSetVideoOutput()