summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorYoann Lopes <yoann.lopes@digia.com>2012-09-25 16:58:44 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-09-26 12:18:30 +0200
commit28c053ccaddb4d8afa8581023a9618c2679dd16c (patch)
tree2b8d2982a9bb70df1ac07f22b4714e38b5ff234e /examples
parentb5fb793b9a7c96451893892e2734ad2fb10e5f4d (diff)
Use QVideoWidget in the videowidget example.
The videowidget example now uses QVideoWidget instead of a custom QAbstractVideoSurface, the former being the most straightforward and fastest way of showing a video in a QWidget. The old code has been moved to a new example: "customvideosurface". Change-Id: I15fb4482d0e77bafd24d4cb03316fc8f4ef13c35 Reviewed-by: Lars Knoll <lars.knoll@digia.com> Reviewed-by: Jason Barron <jason.barron@digia.com>
Diffstat (limited to 'examples')
-rw-r--r--examples/customvideosurface/customvideosurface.pro23
-rw-r--r--examples/customvideosurface/main.cpp53
-rw-r--r--examples/customvideosurface/videoplayer.cpp143
-rw-r--r--examples/customvideosurface/videoplayer.h77
-rw-r--r--examples/customvideosurface/videowidget.cpp (renamed from examples/videowidget/videowidget.cpp)0
-rw-r--r--examples/customvideosurface/videowidget.h (renamed from examples/videowidget/videowidget.h)0
-rw-r--r--examples/customvideosurface/videowidgetsurface.cpp (renamed from examples/videowidget/videowidgetsurface.cpp)0
-rw-r--r--examples/customvideosurface/videowidgetsurface.h (renamed from examples/videowidget/videowidgetsurface.h)0
-rw-r--r--examples/examples.pro3
-rw-r--r--examples/videowidget/main.cpp1
-rw-r--r--examples/videowidget/videoplayer.cpp7
-rw-r--r--examples/videowidget/videowidget.pro8
12 files changed, 304 insertions, 11 deletions
diff --git a/examples/customvideosurface/customvideosurface.pro b/examples/customvideosurface/customvideosurface.pro
new file mode 100644
index 000000000..9ddb7ed12
--- /dev/null
+++ b/examples/customvideosurface/customvideosurface.pro
@@ -0,0 +1,23 @@
+TEMPLATE = app
+TARGET = customvideosurface
+
+QT += multimedia multimediawidgets
+
+HEADERS = \
+ videoplayer.h \
+ videowidget.h \
+ videowidgetsurface.h
+
+SOURCES = \
+ main.cpp \
+ videoplayer.cpp \
+ videowidget.cpp \
+ videowidgetsurface.cpp
+
+target.path = $$[QT_INSTALL_EXAMPLES]/qtmultimedia/customvideosurface
+sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS *.pro
+sources.path = $$[QT_INSTALL_EXAMPLES]/qtmultimedia/customvideosurface
+
+INSTALLS += target sources
+
+QT+=widgets
diff --git a/examples/customvideosurface/main.cpp b/examples/customvideosurface/main.cpp
new file mode 100644
index 000000000..8b7aba641
--- /dev/null
+++ b/examples/customvideosurface/main.cpp
@@ -0,0 +1,53 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "videoplayer.h"
+
+#include <QtWidgets/QApplication>
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ VideoPlayer player;
+ player.show();
+
+ return app.exec();
+}
diff --git a/examples/customvideosurface/videoplayer.cpp b/examples/customvideosurface/videoplayer.cpp
new file mode 100644
index 000000000..639c32461
--- /dev/null
+++ b/examples/customvideosurface/videoplayer.cpp
@@ -0,0 +1,143 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "videoplayer.h"
+
+#include "videowidget.h"
+
+#include <QtWidgets>
+#include <qvideosurfaceformat.h>
+
+VideoPlayer::VideoPlayer(QWidget *parent)
+ : QWidget(parent)
+ , mediaPlayer(0, QMediaPlayer::VideoSurface)
+ , playButton(0)
+ , positionSlider(0)
+{
+ VideoWidget *videoWidget = new VideoWidget;
+
+ QAbstractButton *openButton = new QPushButton(tr("Open..."));
+ connect(openButton, SIGNAL(clicked()), this, SLOT(openFile()));
+
+ playButton = new QPushButton;
+ playButton->setEnabled(false);
+ playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
+
+ connect(playButton, SIGNAL(clicked()),
+ this, SLOT(play()));
+
+ positionSlider = new QSlider(Qt::Horizontal);
+ positionSlider->setRange(0, 0);
+
+ connect(positionSlider, SIGNAL(sliderMoved(int)),
+ this, SLOT(setPosition(int)));
+
+ QBoxLayout *controlLayout = new QHBoxLayout;
+ controlLayout->setMargin(0);
+ controlLayout->addWidget(openButton);
+ controlLayout->addWidget(playButton);
+ controlLayout->addWidget(positionSlider);
+
+ QBoxLayout *layout = new QVBoxLayout;
+ layout->addWidget(videoWidget);
+ layout->addLayout(controlLayout);
+
+ setLayout(layout);
+
+ mediaPlayer.setVideoOutput(videoWidget->videoSurface());
+ connect(&mediaPlayer, SIGNAL(stateChanged(QMediaPlayer::State)),
+ this, SLOT(mediaStateChanged(QMediaPlayer::State)));
+ connect(&mediaPlayer, SIGNAL(positionChanged(qint64)), this, SLOT(positionChanged(qint64)));
+ connect(&mediaPlayer, SIGNAL(durationChanged(qint64)), this, SLOT(durationChanged(qint64)));
+}
+
+VideoPlayer::~VideoPlayer()
+{
+}
+
+void VideoPlayer::openFile()
+{
+ QString fileName = QFileDialog::getOpenFileName(this, tr("Open Movie"),QDir::homePath());
+
+ if (!fileName.isEmpty()) {
+ mediaPlayer.setMedia(QUrl::fromLocalFile(fileName));
+
+ playButton->setEnabled(true);
+ }
+}
+
+void VideoPlayer::play()
+{
+ switch(mediaPlayer.state()) {
+ case QMediaPlayer::PlayingState:
+ mediaPlayer.pause();
+ break;
+ default:
+ mediaPlayer.play();
+ break;
+ }
+}
+
+void VideoPlayer::mediaStateChanged(QMediaPlayer::State state)
+{
+ switch(state) {
+ case QMediaPlayer::PlayingState:
+ playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPause));
+ break;
+ default:
+ playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
+ break;
+ }
+}
+
+void VideoPlayer::positionChanged(qint64 position)
+{
+ positionSlider->setValue(position);
+}
+
+void VideoPlayer::durationChanged(qint64 duration)
+{
+ positionSlider->setRange(0, duration);
+}
+
+void VideoPlayer::setPosition(int position)
+{
+ mediaPlayer.setPosition(position);
+}
diff --git a/examples/customvideosurface/videoplayer.h b/examples/customvideosurface/videoplayer.h
new file mode 100644
index 000000000..ddad18724
--- /dev/null
+++ b/examples/customvideosurface/videoplayer.h
@@ -0,0 +1,77 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef VIDEOPLAYER_H
+#define VIDEOPLAYER_H
+
+#include <qmediaplayer.h>
+
+#include <QtGui/QMovie>
+#include <QtWidgets/QWidget>
+
+QT_BEGIN_NAMESPACE
+class QAbstractButton;
+class QSlider;
+QT_END_NAMESPACE
+
+class VideoPlayer : public QWidget
+{
+ Q_OBJECT
+public:
+ VideoPlayer(QWidget *parent = 0);
+ ~VideoPlayer();
+
+public slots:
+ void openFile();
+ void play();
+
+private slots:
+ void mediaStateChanged(QMediaPlayer::State state);
+ void positionChanged(qint64 position);
+ void durationChanged(qint64 duration);
+ void setPosition(int position);
+
+private:
+ QMediaPlayer mediaPlayer;
+ QAbstractButton *playButton;
+ QSlider *positionSlider;
+};
+
+#endif
diff --git a/examples/videowidget/videowidget.cpp b/examples/customvideosurface/videowidget.cpp
index 38c386e6e..38c386e6e 100644
--- a/examples/videowidget/videowidget.cpp
+++ b/examples/customvideosurface/videowidget.cpp
diff --git a/examples/videowidget/videowidget.h b/examples/customvideosurface/videowidget.h
index c7688dd38..c7688dd38 100644
--- a/examples/videowidget/videowidget.h
+++ b/examples/customvideosurface/videowidget.h
diff --git a/examples/videowidget/videowidgetsurface.cpp b/examples/customvideosurface/videowidgetsurface.cpp
index df157206b..df157206b 100644
--- a/examples/videowidget/videowidgetsurface.cpp
+++ b/examples/customvideosurface/videowidgetsurface.cpp
diff --git a/examples/videowidget/videowidgetsurface.h b/examples/customvideosurface/videowidgetsurface.h
index 6cfa346b0..6cfa346b0 100644
--- a/examples/videowidget/videowidgetsurface.h
+++ b/examples/customvideosurface/videowidgetsurface.h
diff --git a/examples/examples.pro b/examples/examples.pro
index 65b4d3fe6..cf9dae1b3 100644
--- a/examples/examples.pro
+++ b/examples/examples.pro
@@ -14,7 +14,8 @@ SUBDIRS += audiodecoder
audiooutput \
videographicsitem \
videowidget \
- player
+ player \
+ customvideosurface
QT += widgets
}
diff --git a/examples/videowidget/main.cpp b/examples/videowidget/main.cpp
index 8b7aba641..b0d83d010 100644
--- a/examples/videowidget/main.cpp
+++ b/examples/videowidget/main.cpp
@@ -47,6 +47,7 @@ int main(int argc, char *argv[])
QApplication app(argc, argv);
VideoPlayer player;
+ player.resize(320, 240);
player.show();
return app.exec();
diff --git a/examples/videowidget/videoplayer.cpp b/examples/videowidget/videoplayer.cpp
index 639c32461..d961a63ff 100644
--- a/examples/videowidget/videoplayer.cpp
+++ b/examples/videowidget/videoplayer.cpp
@@ -40,9 +40,8 @@
#include "videoplayer.h"
-#include "videowidget.h"
-
#include <QtWidgets>
+#include <qvideowidget.h>
#include <qvideosurfaceformat.h>
VideoPlayer::VideoPlayer(QWidget *parent)
@@ -51,7 +50,7 @@ VideoPlayer::VideoPlayer(QWidget *parent)
, playButton(0)
, positionSlider(0)
{
- VideoWidget *videoWidget = new VideoWidget;
+ QVideoWidget *videoWidget = new QVideoWidget;
QAbstractButton *openButton = new QPushButton(tr("Open..."));
connect(openButton, SIGNAL(clicked()), this, SLOT(openFile()));
@@ -81,7 +80,7 @@ VideoPlayer::VideoPlayer(QWidget *parent)
setLayout(layout);
- mediaPlayer.setVideoOutput(videoWidget->videoSurface());
+ mediaPlayer.setVideoOutput(videoWidget);
connect(&mediaPlayer, SIGNAL(stateChanged(QMediaPlayer::State)),
this, SLOT(mediaStateChanged(QMediaPlayer::State)));
connect(&mediaPlayer, SIGNAL(positionChanged(qint64)), this, SLOT(positionChanged(qint64)));
diff --git a/examples/videowidget/videowidget.pro b/examples/videowidget/videowidget.pro
index 76e5f36da..914f48e31 100644
--- a/examples/videowidget/videowidget.pro
+++ b/examples/videowidget/videowidget.pro
@@ -4,15 +4,11 @@ TARGET = videowidget
QT += multimedia multimediawidgets
HEADERS = \
- videoplayer.h \
- videowidget.h \
- videowidgetsurface.h
+ videoplayer.h
SOURCES = \
main.cpp \
- videoplayer.cpp \
- videowidget.cpp \
- videowidgetsurface.cpp
+ videoplayer.cpp
target.path = $$[QT_INSTALL_EXAMPLES]/qtmultimedia/videowidget
sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS *.pro