summaryrefslogtreecommitdiffstats
path: root/src/multimedia/doc/snippets/multimedia-snippets/media.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/multimedia/doc/snippets/multimedia-snippets/media.cpp')
-rw-r--r--src/multimedia/doc/snippets/multimedia-snippets/media.cpp318
1 files changed, 39 insertions, 279 deletions
diff --git a/src/multimedia/doc/snippets/multimedia-snippets/media.cpp b/src/multimedia/doc/snippets/multimedia-snippets/media.cpp
index 5ba7fcc25..a4b9a9fb5 100644
--- a/src/multimedia/doc/snippets/multimedia-snippets/media.cpp
+++ b/src/multimedia/doc/snippets/multimedia-snippets/media.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
/* Media related snippets */
#include <QFile>
@@ -44,17 +8,15 @@
#include "qmediaplaylist.h"
#include "qmediarecorder.h"
-#include "qmediaservice.h"
-#include "qmediaplayercontrol.h"
+#include "qplatformmediaplayer_p.h"
#include "qmediaplayer.h"
#include "qvideowidget.h"
-#include "qcameraimagecapture.h"
+#include "qimagecapture.h"
#include "qcamera.h"
#include "qcameraviewfinder.h"
-#include "qaudioprobe.h"
#include "qaudiorecorder.h"
-#include "qvideoprobe.h"
-#include <QAbstractVideoSurface>
+#include "qurl.h"
+#include <QVideoSink>
class MediaExample : public QObject {
Q_OBJECT
@@ -62,28 +24,22 @@ class MediaExample : public QObject {
void MediaControl();
void MediaPlayer();
void MediaRecorder();
- void AudioRecorder();
- void EncoderSettings();
- void ImageEncoderSettings();
- void AudioProbe();
- void VideoProbe();
+ void recorderSettings();
+ void imageSettings();
private:
// Common naming
- QMediaService *mediaService;
QVideoWidget *videoWidget;
QWidget *widget;
QMediaPlayer *player;
+ QAudioOutput *audioOutput;
QMediaPlaylist *playlist;
QMediaContent video;
QMediaRecorder *recorder;
QCamera *camera;
QCameraViewfinder *viewfinder;
- QCameraImageCapture *imageCapture;
+ QImageCapture *imageCapture;
QString fileName;
- QAudioRecorder *audioRecorder;
- QAudioProbe *audioProbe;
- QVideoProbe *videoProbe;
QMediaContent image1;
QMediaContent image2;
@@ -92,258 +48,62 @@ private:
void MediaExample::MediaControl()
{
- {
- //! [Request control]
- QMediaPlayerControl *control = qobject_cast<QMediaPlayerControl *>(
- mediaService->requestControl("org.qt-project.qt.mediaplayercontrol/5.0"));
- //! [Request control]
- Q_UNUSED(control);
- }
-
- {
- //! [Request control templated]
- QMediaPlayerControl *control = mediaService->requestControl<QMediaPlayerControl *>();
- //! [Request control templated]
- Q_UNUSED(control);
- }
}
-void MediaExample::EncoderSettings()
+void MediaExample::recorderSettings()
{
- //! [Audio encoder settings]
- QAudioEncoderSettings audioSettings;
- audioSettings.setCodec("audio/mpeg");
- audioSettings.setChannelCount(2);
-
- recorder->setAudioSettings(audioSettings);
- //! [Audio encoder settings]
+ //! [Media recorder settings]
+ QMediaFormat format(QMediaFormat::MPEG4);
+ format.setVideoCodec(QMediaRecorder::VideoCodec::H264);
+ format.setAudioCodec(QMediaRecorder::AudioCodec::MP3);
- //! [Video encoder settings]
- QVideoEncoderSettings videoSettings;
- videoSettings.setCodec("video/mpeg2");
- videoSettings.setResolution(640, 480);
-
- recorder->setVideoSettings(videoSettings);
- //! [Video encoder settings]
+ recorder->setMediaFormat(settings);
+ //! [Media recorder settings]
}
-void MediaExample::ImageEncoderSettings()
+void MediaExample::imageSettings()
{
- //! [Image encoder settings]
- QImageEncoderSettings imageSettings;
- imageSettings.setCodec("image/jpeg");
- imageSettings.setResolution(1600, 1200);
-
- imageCapture->setEncodingSettings(imageSettings);
- //! [Image encoder settings]
+ //! [Image recorder settings]
+ imageCapture->setFileFormat(QImageCapture::JPEG);
+ imageCapture->setResolution(1600, 1200);
+ //! [Image recorder settings]
}
void MediaExample::MediaPlayer()
{
//! [Player]
player = new QMediaPlayer;
- connect(player, SIGNAL(positionChanged(qint64)), this, SLOT(positionChanged(qint64)));
- player->setMedia(QUrl::fromLocalFile("/Users/me/Music/coolsong.mp3"));
- player->setVolume(50);
+ audioOutput = new QAudioOutput;
+ player->setAudioOutput(audioOutput);
+ connect(player, &QMediaPlayer::positionChanged, this, &MediaExample::positionChanged);
+ player->setSource(QUrl::fromLocalFile("/Users/me/Music/coolsong.mp3"));
+ audioOutput->setVolume(50);
player->play();
//! [Player]
//! [Local playback]
player = new QMediaPlayer;
+ audioOutput = new QAudioOutput;
+ player->setAudioOutput(audioOutput);
// ...
- player->setMedia(QUrl::fromLocalFile("/Users/me/Music/coolsong.mp3"));
- player->setVolume(50);
+ player->setSource(QUrl::fromLocalFile("/Users/me/Music/coolsong.mp3"));
+ audioOutput->setVolume(50);
player->play();
//! [Local playback]
-
- //! [Audio playlist]
- player = new QMediaPlayer;
-
- playlist = new QMediaPlaylist(player);
- playlist->addMedia(QUrl("http://example.com/myfile1.mp3"));
- playlist->addMedia(QUrl("http://example.com/myfile2.mp3"));
- // ...
- playlist->setCurrentIndex(1);
- player->play();
- //! [Audio playlist]
-
- //! [Movie playlist]
- playlist = new QMediaPlaylist;
- playlist->addMedia(QUrl("http://example.com/movie1.mp4"));
- playlist->addMedia(QUrl("http://example.com/movie2.mp4"));
- playlist->addMedia(QUrl("http://example.com/movie3.mp4"));
- playlist->setCurrentIndex(1);
-
- player = new QMediaPlayer;
- player->setPlaylist(playlist);
-
- videoWidget = new QVideoWidget;
- player->setVideoOutput(videoWidget);
- videoWidget->show();
-
- player->play();
- //! [Movie playlist]
-
- //! [Pipeline]
- player = new QMediaPlayer;
- player->setMedia(QUrl("gst-pipeline: videotestsrc ! autovideosink"));
- player->play();
- //! [Pipeline]
-
- //! [Pipeline Surface]
- class Surface : public QAbstractVideoSurface
- {
- public:
- Surface(QObject *p) : QAbstractVideoSurface(p) { }
- QList<QVideoFrame::PixelFormat> supportedPixelFormats(QAbstractVideoBuffer::HandleType) const override
- {
- // Make sure that the driver supports this pixel format.
- return QList<QVideoFrame::PixelFormat>() << QVideoFrame::Format_YUYV;
- }
-
- // Video frames are handled here.
- bool present(const QVideoFrame &) override { return true; }
- };
-
- player = new QMediaPlayer;
- player->setVideoOutput(new Surface(player));
- player->setMedia(QUrl("gst-pipeline: videotestsrc ! qtvideosink"));
- player->play();
- //! [Pipeline Surface]
-
- //! [Pipeline Widget]
- player = new QMediaPlayer;
- videoWidget = new QVideoWidget;
- videoWidget->show();
- player->setVideoOutput(videoWidget);
- player->setMedia(QUrl("gst-pipeline: videotestsrc ! xvimagesink name=\"qtvideosink\""));
- player->play();
- //! [Pipeline Widget]
-
- //! [Pipeline appsrc]
- QImage img("images/qt-logo.png");
- img = img.convertToFormat(QImage::Format_ARGB32);
- QByteArray ba(reinterpret_cast<const char *>(img.bits()), img.sizeInBytes());
- QBuffer buffer(&ba);
- buffer.open(QIODevice::ReadOnly);
- player = new QMediaPlayer;
- player->setMedia(QUrl("gst-pipeline: appsrc blocksize=4294967295 ! \
- video/x-raw,format=BGRx,framerate=30/1,width=200,height=147 ! \
- coloreffects preset=heat ! videoconvert ! video/x-raw,format=I420 ! jpegenc ! rtpjpegpay ! \
- udpsink host=127.0.0.1 port=5000"), &buffer);
- player->play();
-
- QMediaPlayer *receiver = new QMediaPlayer;
- videoWidget = new QVideoWidget;
- receiver->setVideoOutput(videoWidget);
- receiver->setMedia(QUrl("gst-pipeline: udpsrc port=5000 ! \
- application/x-rtp,encoding-name=JPEG,payload=26 ! rtpjpegdepay ! jpegdec ! \
- xvimagesink name=qtvideosink"));
- receiver->play();
- // Content will be shown in this widget.
- videoWidget->show();
- //! [Pipeline appsrc]
}
void MediaExample::MediaRecorder()
{
//! [Media recorder]
- recorder = new QMediaRecorder(camera);
-
- QAudioEncoderSettings audioSettings;
- audioSettings.setCodec("audio/amr");
- audioSettings.setQuality(QMultimedia::HighQuality);
-
- recorder->setAudioSettings(audioSettings);
-
- recorder->setOutputLocation(QUrl::fromLocalFile(fileName));
- recorder->record();
+ QMediaCaptureSession session;
+ QAudioInput audioInput;
+ session.setAudioInput(&input);
+ QMediaRecorder recorder;
+ session.setRecorder(&recorder);
+ recorder.setQuality(QMediaRecorder::HighQuality);
+ recorder.setOutputLocation(QUrl::fromLocalFile("test.mp3"));
+ recorder.record();
//! [Media recorder]
}
-void MediaExample::AudioRecorder()
-{
- //! [Audio recorder]
- audioRecorder = new QAudioRecorder;
-
- QAudioEncoderSettings audioSettings;
- audioSettings.setCodec("audio/amr");
- audioSettings.setQuality(QMultimedia::HighQuality);
-
- audioRecorder->setEncodingSettings(audioSettings);
-
- audioRecorder->setOutputLocation(QUrl::fromLocalFile("test.amr"));
- audioRecorder->record();
- //! [Audio recorder]
-
- //! [Audio recorder inputs]
- const QStringList inputs = audioRecorder->audioInputs();
- QString selectedInput = audioRecorder->defaultAudioInput();
-
- for (const QString &input : inputs) {
- QString description = audioRecorder->audioInputDescription(input);
- // show descriptions to user and allow selection
- selectedInput = input;
- }
-
- audioRecorder->setAudioInput(selectedInput);
- //! [Audio recorder inputs]
-}
-
-void MediaExample::AudioProbe()
-{
- //! [Audio probe]
- audioRecorder = new QAudioRecorder;
-
- QAudioEncoderSettings audioSettings;
- audioSettings.setCodec("audio/amr");
- audioSettings.setQuality(QMultimedia::HighQuality);
-
- audioRecorder->setEncodingSettings(audioSettings);
-
- audioRecorder->setOutputLocation(QUrl::fromLocalFile("test.amr"));
-
- audioProbe = new QAudioProbe(this);
- if (audioProbe->setSource(audioRecorder)) {
- // Probing succeeded, audioProbe->isValid() should be true.
- connect(audioProbe, SIGNAL(audioBufferProbed(QAudioBuffer)),
- this, SLOT(calculateLevel(QAudioBuffer)));
- }
-
- audioRecorder->record();
- // Now audio buffers being recorded should be signaled
- // by the probe, so we can do things like calculating the
- // audio power level, or performing a frequency transform
- //! [Audio probe]
-}
-
-void MediaExample::VideoProbe()
-{
- //! [Video probe]
- camera = new QCamera;
- viewfinder = new QCameraViewfinder();
- camera->setViewfinder(viewfinder);
-
- camera->setCaptureMode(QCamera::CaptureVideo);
-
- videoProbe = new QVideoProbe(this);
-
- if (videoProbe->setSource(camera)) {
- // Probing succeeded, videoProbe->isValid() should be true.
- connect(videoProbe, SIGNAL(videoFrameProbed(QVideoFrame)),
- this, SLOT(detectBarcodes(QVideoFrame)));
- }
-
- camera->start();
- // Viewfinder frames should now also be emitted by
- // the video probe, even in still image capture mode.
- // Another alternative is to install the probe on a
- // QMediaRecorder connected to the camera to get the
- // recorded frames, if they are different from the
- // viewfinder frames.
-
- //! [Video probe]
-}
-
-