diff options
author | Yoann Lopes <yoann.lopes@digia.com> | 2012-10-01 17:50:55 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2012-10-02 14:13:46 +0200 |
commit | b616dd5165a2f1e554eda1f85acf6c6000ba24b9 (patch) | |
tree | b4dcc215e5145a7130d017f62c00970c303db103 /examples | |
parent | 439d5b0e53f564dc75e427743ccce75c6a62f1c6 (diff) |
Use QVideoGraphicsItem in the videographicsitem example.
The videographicsitem example now uses QVideoGraphicsItem instead of a
custom QAbstractVideoSurface.
The old code has been moved to a new example:
"customvideosurface/customvideoitem".
Change-Id: I83212f36168ef94d670b447eb1a742a39753939d
Reviewed-by: Jason Barron <jason.barron@digia.com>
Diffstat (limited to 'examples')
18 files changed, 366 insertions, 32 deletions
diff --git a/examples/customvideosurface/customvideoitem/customvideoitem.pro b/examples/customvideosurface/customvideoitem/customvideoitem.pro new file mode 100644 index 000000000..a2a7a1e6e --- /dev/null +++ b/examples/customvideosurface/customvideoitem/customvideoitem.pro @@ -0,0 +1,21 @@ +TEMPLATE = app +TARGET = customvideoitem + +QT += multimedia multimediawidgets + +contains(QT_CONFIG, opengl): QT += opengl + +HEADERS += videoplayer.h \ + videoitem.h + +SOURCES += main.cpp \ + videoplayer.cpp \ + videoitem.cpp + +target.path = $$[QT_INSTALL_EXAMPLES]/qtmultimedia/customvideoitem +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS *.pro +sources.path = $$[QT_INSTALL_EXAMPLES]/qtmultimedia/customvideoitem + +INSTALLS += target sources + +QT+=widgets diff --git a/examples/customvideosurface/customvideoitem/main.cpp b/examples/customvideosurface/customvideoitem/main.cpp new file mode 100644 index 000000000..d1899c7bb --- /dev/null +++ b/examples/customvideosurface/customvideoitem/main.cpp @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** 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/videographicsitem/videoitem.cpp b/examples/customvideosurface/customvideoitem/videoitem.cpp index f42d8bbd5..f42d8bbd5 100644 --- a/examples/videographicsitem/videoitem.cpp +++ b/examples/customvideosurface/customvideoitem/videoitem.cpp diff --git a/examples/videographicsitem/videoitem.h b/examples/customvideosurface/customvideoitem/videoitem.h index 75261dded..75261dded 100644 --- a/examples/videographicsitem/videoitem.h +++ b/examples/customvideosurface/customvideoitem/videoitem.h diff --git a/examples/customvideosurface/customvideoitem/videoplayer.cpp b/examples/customvideosurface/customvideoitem/videoplayer.cpp new file mode 100644 index 000000000..da4aa88c9 --- /dev/null +++ b/examples/customvideosurface/customvideoitem/videoplayer.cpp @@ -0,0 +1,174 @@ +/**************************************************************************** +** +** 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 "videoitem.h" + +#include <QtWidgets> +#include <qvideosurfaceformat.h> + +#if !defined(QT_NO_OPENGL) +# include <QtOpenGL/QGLWidget> +#endif + +VideoPlayer::VideoPlayer(QWidget *parent, Qt::WindowFlags flags) + : QWidget(parent, flags) + , mediaPlayer(0, QMediaPlayer::VideoSurface) + , videoItem(0) + , playButton(0) + , positionSlider(0) +{ + videoItem = new VideoItem; + + QGraphicsScene *scene = new QGraphicsScene(this); + QGraphicsView *graphicsView = new QGraphicsView(scene); + +#if !defined(QT_NO_OPENGL) + graphicsView->setViewport(new QGLWidget); +#endif + + scene->addItem(videoItem); + + QSlider *rotateSlider = new QSlider(Qt::Horizontal); + rotateSlider->setRange(-180, 180); + rotateSlider->setValue(0); + + connect(rotateSlider, SIGNAL(valueChanged(int)), + this, SLOT(rotateVideo(int))); + + 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(graphicsView); + layout->addWidget(rotateSlider); + layout->addLayout(controlLayout); + + setLayout(layout); + + mediaPlayer.setVideoOutput(videoItem); + 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); +} + + +void VideoPlayer::rotateVideo(int angle) +{ + //rotate around the center of video element + qreal x = videoItem->boundingRect().width() / 2.0; + qreal y = videoItem->boundingRect().height() / 2.0; + videoItem->setTransform(QTransform().translate(x, y).rotate(angle).translate(-x, -y)); +} diff --git a/examples/customvideosurface/customvideoitem/videoplayer.h b/examples/customvideosurface/customvideoitem/videoplayer.h new file mode 100644 index 000000000..2fcbe09f5 --- /dev/null +++ b/examples/customvideosurface/customvideoitem/videoplayer.h @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** 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 VideoItem; + +class VideoPlayer : public QWidget +{ + Q_OBJECT +public: + VideoPlayer(QWidget *parent = 0, Qt::WindowFlags flags = 0); + ~VideoPlayer(); + + QSize sizeHint() const { return QSize(800, 600); } + +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); + void rotateVideo(int angle); + +private: + QMediaPlayer mediaPlayer; + VideoItem *videoItem; + QAbstractButton *playButton; + QSlider *positionSlider; +}; + +#endif + diff --git a/examples/customvideosurface/customvideosurface.pro b/examples/customvideosurface/customvideosurface.pro index 9ddb7ed12..1230f2cc6 100644 --- a/examples/customvideosurface/customvideosurface.pro +++ b/examples/customvideosurface/customvideosurface.pro @@ -1,23 +1,3 @@ -TEMPLATE = app -TARGET = customvideosurface +TEMPLATE = subdirs -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 +SUBDIRS += customvideoitem customvideowidget diff --git a/examples/customvideosurface/customvideowidget/customvideowidget.pro b/examples/customvideosurface/customvideowidget/customvideowidget.pro new file mode 100644 index 000000000..c3ac2cde0 --- /dev/null +++ b/examples/customvideosurface/customvideowidget/customvideowidget.pro @@ -0,0 +1,23 @@ +TEMPLATE = app +TARGET = customvideowidget + +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/customvideowidget +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS *.pro +sources.path = $$[QT_INSTALL_EXAMPLES]/qtmultimedia/customvideowidget + +INSTALLS += target sources + +QT+=widgets diff --git a/examples/customvideosurface/main.cpp b/examples/customvideosurface/customvideowidget/main.cpp index 8b7aba641..8b7aba641 100644 --- a/examples/customvideosurface/main.cpp +++ b/examples/customvideosurface/customvideowidget/main.cpp diff --git a/examples/customvideosurface/videoplayer.cpp b/examples/customvideosurface/customvideowidget/videoplayer.cpp index 639c32461..639c32461 100644 --- a/examples/customvideosurface/videoplayer.cpp +++ b/examples/customvideosurface/customvideowidget/videoplayer.cpp diff --git a/examples/customvideosurface/videoplayer.h b/examples/customvideosurface/customvideowidget/videoplayer.h index ddad18724..ddad18724 100644 --- a/examples/customvideosurface/videoplayer.h +++ b/examples/customvideosurface/customvideowidget/videoplayer.h diff --git a/examples/customvideosurface/videowidget.cpp b/examples/customvideosurface/customvideowidget/videowidget.cpp index 38c386e6e..38c386e6e 100644 --- a/examples/customvideosurface/videowidget.cpp +++ b/examples/customvideosurface/customvideowidget/videowidget.cpp diff --git a/examples/customvideosurface/videowidget.h b/examples/customvideosurface/customvideowidget/videowidget.h index c7688dd38..c7688dd38 100644 --- a/examples/customvideosurface/videowidget.h +++ b/examples/customvideosurface/customvideowidget/videowidget.h diff --git a/examples/customvideosurface/videowidgetsurface.cpp b/examples/customvideosurface/customvideowidget/videowidgetsurface.cpp index df157206b..df157206b 100644 --- a/examples/customvideosurface/videowidgetsurface.cpp +++ b/examples/customvideosurface/customvideowidget/videowidgetsurface.cpp diff --git a/examples/customvideosurface/videowidgetsurface.h b/examples/customvideosurface/customvideowidget/videowidgetsurface.h index 6cfa346b0..6cfa346b0 100644 --- a/examples/customvideosurface/videowidgetsurface.h +++ b/examples/customvideosurface/customvideowidget/videowidgetsurface.h diff --git a/examples/videographicsitem/videographicsitem.pro b/examples/videographicsitem/videographicsitem.pro index 66ed4f683..a0a3cdc74 100644 --- a/examples/videographicsitem/videographicsitem.pro +++ b/examples/videographicsitem/videographicsitem.pro @@ -5,12 +5,10 @@ QT += multimedia multimediawidgets contains(QT_CONFIG, opengl): QT += opengl -HEADERS += videoplayer.h \ - videoitem.h +HEADERS += videoplayer.h SOURCES += main.cpp \ - videoplayer.cpp \ - videoitem.cpp + videoplayer.cpp target.path = $$[QT_INSTALL_EXAMPLES]/qtmultimedia/videographicsitem sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS *.pro diff --git a/examples/videographicsitem/videoplayer.cpp b/examples/videographicsitem/videoplayer.cpp index da4aa88c9..4cf1c082c 100644 --- a/examples/videographicsitem/videoplayer.cpp +++ b/examples/videographicsitem/videoplayer.cpp @@ -39,10 +39,10 @@ ****************************************************************************/ #include "videoplayer.h" -#include "videoitem.h" #include <QtWidgets> #include <qvideosurfaceformat.h> +#include <qgraphicsvideoitem.h> #if !defined(QT_NO_OPENGL) # include <QtOpenGL/QGLWidget> @@ -55,7 +55,8 @@ VideoPlayer::VideoPlayer(QWidget *parent, Qt::WindowFlags flags) , playButton(0) , positionSlider(0) { - videoItem = new VideoItem; + videoItem = new QGraphicsVideoItem; + videoItem->setSize(QSizeF(640, 480)); QGraphicsScene *scene = new QGraphicsScene(this); QGraphicsView *graphicsView = new QGraphicsView(scene); diff --git a/examples/videographicsitem/videoplayer.h b/examples/videographicsitem/videoplayer.h index 2fcbe09f5..a43911bb2 100644 --- a/examples/videographicsitem/videoplayer.h +++ b/examples/videographicsitem/videoplayer.h @@ -49,11 +49,9 @@ QT_BEGIN_NAMESPACE class QAbstractButton; class QSlider; +class QGraphicsVideoItem; QT_END_NAMESPACE - -class VideoItem; - class VideoPlayer : public QWidget { Q_OBJECT @@ -76,7 +74,7 @@ private slots: private: QMediaPlayer mediaPlayer; - VideoItem *videoItem; + QGraphicsVideoItem *videoItem; QAbstractButton *playButton; QSlider *positionSlider; }; |