summaryrefslogtreecommitdiffstats
path: root/examples/multimedia/videographicsitem
diff options
context:
space:
mode:
Diffstat (limited to 'examples/multimedia/videographicsitem')
-rw-r--r--examples/multimedia/videographicsitem/CMakeLists.txt39
-rw-r--r--examples/multimedia/videographicsitem/doc/images/video-videographicsitem.pngbin0 -> 54436 bytes
-rw-r--r--examples/multimedia/videographicsitem/doc/src/videographicsitem.qdoc19
-rw-r--r--examples/multimedia/videographicsitem/main.cpp39
-rw-r--r--examples/multimedia/videographicsitem/videographicsitem.pro14
-rw-r--r--examples/multimedia/videographicsitem/videoplayer.cpp139
-rw-r--r--examples/multimedia/videographicsitem/videoplayer.h48
7 files changed, 298 insertions, 0 deletions
diff --git a/examples/multimedia/videographicsitem/CMakeLists.txt b/examples/multimedia/videographicsitem/CMakeLists.txt
new file mode 100644
index 000000000..653627c25
--- /dev/null
+++ b/examples/multimedia/videographicsitem/CMakeLists.txt
@@ -0,0 +1,39 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(videographicsitem LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/multimedia/videographicsitem")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Multimedia MultimediaWidgets Widgets)
+
+qt_add_executable(videographicsitem
+ main.cpp
+ videoplayer.cpp videoplayer.h
+)
+
+set_target_properties(videographicsitem PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(videographicsitem PUBLIC
+ Qt::Core
+ Qt::Gui
+ Qt::Multimedia
+ Qt::MultimediaWidgets
+ Qt::Widgets
+)
+
+install(TARGETS videographicsitem
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/examples/multimedia/videographicsitem/doc/images/video-videographicsitem.png b/examples/multimedia/videographicsitem/doc/images/video-videographicsitem.png
new file mode 100644
index 000000000..e333c54a2
--- /dev/null
+++ b/examples/multimedia/videographicsitem/doc/images/video-videographicsitem.png
Binary files differ
diff --git a/examples/multimedia/videographicsitem/doc/src/videographicsitem.qdoc b/examples/multimedia/videographicsitem/doc/src/videographicsitem.qdoc
new file mode 100644
index 000000000..5dcb7143e
--- /dev/null
+++ b/examples/multimedia/videographicsitem/doc/src/videographicsitem.qdoc
@@ -0,0 +1,19 @@
+// Copyright (C) 2015 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \example videographicsitem
+ \title Video Graphics Item Example
+ \ingroup multimedia_examples
+ \brief Streaming video on a graphics scene.
+ \meta {tag} {widgets}
+
+ \e{Video Graphics Item} demonstrates how to implement a QGraphicsItem that
+ displays video on a graphics scene using QVideoSink.
+
+ \image video-videographicsitem.png
+
+ \sa {Video Widget Example}
+
+ \include examples-run.qdocinc
+*/
diff --git a/examples/multimedia/videographicsitem/main.cpp b/examples/multimedia/videographicsitem/main.cpp
new file mode 100644
index 000000000..85d1ec92b
--- /dev/null
+++ b/examples/multimedia/videographicsitem/main.cpp
@@ -0,0 +1,39 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "videoplayer.h"
+
+#include <QApplication>
+#include <QCommandLineParser>
+#include <QCommandLineOption>
+#include <QDir>
+#include <QUrl>
+
+int main(int argc, char **argv)
+{
+ QApplication app(argc, argv);
+
+ QCoreApplication::setApplicationName("Player Example");
+ QCoreApplication::setOrganizationName("QtProject");
+ QCoreApplication::setApplicationVersion(QT_VERSION_STR);
+ QCommandLineParser parser;
+ parser.setApplicationDescription("Qt MultiMedia Player QGraphicsView Example");
+ parser.addHelpOption();
+ parser.addVersionOption();
+ parser.addPositionalArgument("url", "The URL to open.");
+ parser.process(app);
+
+ VideoPlayer player;
+
+ if (!parser.positionalArguments().isEmpty() && player.isPlayerAvailable()) {
+ const QUrl url =
+ QUrl::fromUserInput(parser.positionalArguments().constFirst(),
+ QDir::currentPath(), QUrl::AssumeLocalFile);
+ player.load(url);
+ }
+
+ player.show();
+
+ return app.exec();
+}
+
diff --git a/examples/multimedia/videographicsitem/videographicsitem.pro b/examples/multimedia/videographicsitem/videographicsitem.pro
new file mode 100644
index 000000000..3415ef64c
--- /dev/null
+++ b/examples/multimedia/videographicsitem/videographicsitem.pro
@@ -0,0 +1,14 @@
+TEMPLATE = app
+TARGET = videographicsitem
+
+QT += multimedia multimediawidgets
+
+HEADERS += videoplayer.h
+
+SOURCES += main.cpp \
+ videoplayer.cpp
+
+target.path = $$[QT_INSTALL_EXAMPLES]/multimedia/videographicsitem
+INSTALLS += target
+
+QT+=widgets
diff --git a/examples/multimedia/videographicsitem/videoplayer.cpp b/examples/multimedia/videographicsitem/videoplayer.cpp
new file mode 100644
index 000000000..096fabd77
--- /dev/null
+++ b/examples/multimedia/videographicsitem/videoplayer.cpp
@@ -0,0 +1,139 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "videoplayer.h"
+
+#include <QtWidgets>
+#include <QGraphicsVideoItem>
+
+VideoPlayer::VideoPlayer(QWidget *parent)
+ : QWidget(parent)
+{
+ m_mediaPlayer = new QMediaPlayer(this);
+ const QSize screenGeometry = screen()->availableSize();
+ m_videoItem = new QGraphicsVideoItem;
+ m_videoItem->setSize(QSizeF(screenGeometry.width() / 3, screenGeometry.height() / 2));
+
+ QGraphicsScene *scene = new QGraphicsScene(this);
+ QGraphicsView *graphicsView = new QGraphicsView(scene);
+
+ scene->addItem(m_videoItem);
+
+ QSlider *rotateSlider = new QSlider(Qt::Horizontal);
+ rotateSlider->setToolTip(tr("Rotate Video"));
+ rotateSlider->setRange(-180, 180);
+ rotateSlider->setValue(0);
+
+ connect(rotateSlider, &QAbstractSlider::valueChanged,
+ this, &VideoPlayer::rotateVideo);
+
+ QAbstractButton *openButton = new QPushButton(tr("Open..."));
+ connect(openButton, &QAbstractButton::clicked, this, &VideoPlayer::openFile);
+
+ m_playButton = new QPushButton;
+ m_playButton->setEnabled(false);
+ m_playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
+
+ connect(m_playButton, &QAbstractButton::clicked, this, &VideoPlayer::play);
+
+ m_positionSlider = new QSlider(Qt::Horizontal);
+ m_positionSlider->setRange(0, 0);
+
+ connect(m_positionSlider, &QAbstractSlider::sliderMoved,
+ this, &VideoPlayer::setPosition);
+
+ QBoxLayout *controlLayout = new QHBoxLayout;
+ controlLayout->setContentsMargins(0, 0, 0, 0);
+ controlLayout->addWidget(openButton);
+ controlLayout->addWidget(m_playButton);
+ controlLayout->addWidget(m_positionSlider);
+
+ QBoxLayout *layout = new QVBoxLayout(this);
+ layout->addWidget(graphicsView);
+ layout->addWidget(rotateSlider);
+ layout->addLayout(controlLayout);
+
+ m_mediaPlayer->setVideoOutput(m_videoItem);
+ connect(m_mediaPlayer, &QMediaPlayer::playbackStateChanged,
+ this, &VideoPlayer::mediaStateChanged);
+ connect(m_mediaPlayer, &QMediaPlayer::positionChanged, this, &VideoPlayer::positionChanged);
+ connect(m_mediaPlayer, &QMediaPlayer::durationChanged, this, &VideoPlayer::durationChanged);
+}
+
+VideoPlayer::~VideoPlayer()
+{
+}
+
+QSize VideoPlayer::sizeHint() const
+{
+ return (m_videoItem->size() * qreal(3) / qreal(2)).toSize();
+}
+
+bool VideoPlayer::isPlayerAvailable() const
+{
+ return m_mediaPlayer->isAvailable();
+}
+
+void VideoPlayer::openFile()
+{
+ QFileDialog fileDialog(this);
+ fileDialog.setAcceptMode(QFileDialog::AcceptOpen);
+ fileDialog.setWindowTitle(tr("Open Movie"));
+ fileDialog.setDirectory(QStandardPaths::standardLocations(QStandardPaths::MoviesLocation).value(0, QDir::homePath()));
+ if (fileDialog.exec() == QDialog::Accepted)
+ load(fileDialog.selectedUrls().constFirst());
+}
+
+void VideoPlayer::load(const QUrl &url)
+{
+ m_mediaPlayer->setSource(url);
+ m_playButton->setEnabled(true);
+}
+
+void VideoPlayer::play()
+{
+ switch (m_mediaPlayer->playbackState()) {
+ case QMediaPlayer::PlayingState:
+ m_mediaPlayer->pause();
+ break;
+ default:
+ m_mediaPlayer->play();
+ break;
+ }
+}
+
+void VideoPlayer::mediaStateChanged(QMediaPlayer::PlaybackState state)
+{
+ switch(state) {
+ case QMediaPlayer::PlayingState:
+ m_playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPause));
+ break;
+ default:
+ m_playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
+ break;
+ }
+}
+
+void VideoPlayer::positionChanged(qint64 position)
+{
+ m_positionSlider->setValue(position);
+}
+
+void VideoPlayer::durationChanged(qint64 duration)
+{
+ m_positionSlider->setRange(0, duration);
+}
+
+void VideoPlayer::setPosition(int position)
+{
+ m_mediaPlayer->setPosition(position);
+}
+
+
+void VideoPlayer::rotateVideo(int angle)
+{
+ //rotate around the center of video element
+ qreal x = m_videoItem->boundingRect().width() / 2.0;
+ qreal y = m_videoItem->boundingRect().height() / 2.0;
+ m_videoItem->setTransform(QTransform().translate(x, y).rotate(angle).translate(-x, -y));
+}
diff --git a/examples/multimedia/videographicsitem/videoplayer.h b/examples/multimedia/videographicsitem/videoplayer.h
new file mode 100644
index 000000000..a5be31efc
--- /dev/null
+++ b/examples/multimedia/videographicsitem/videoplayer.h
@@ -0,0 +1,48 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef VIDEOPLAYER_H
+#define VIDEOPLAYER_H
+
+#include <QMediaPlayer>
+#include <QWidget>
+
+QT_BEGIN_NAMESPACE
+class QAbstractButton;
+class QSlider;
+class QGraphicsVideoItem;
+QT_END_NAMESPACE
+
+class VideoPlayer : public QWidget
+{
+ Q_OBJECT
+
+public:
+ VideoPlayer(QWidget *parent = nullptr);
+ ~VideoPlayer();
+
+ void load(const QUrl &url);
+ bool isPlayerAvailable() const;
+
+ QSize sizeHint() const override;
+
+public slots:
+ void openFile();
+ void play();
+
+private slots:
+ void mediaStateChanged(QMediaPlayer::PlaybackState state);
+ void positionChanged(qint64 position);
+ void durationChanged(qint64 duration);
+ void setPosition(int position);
+ void rotateVideo(int angle);
+
+private:
+ QMediaPlayer *m_mediaPlayer = nullptr;
+ QGraphicsVideoItem *m_videoItem = nullptr;
+ QAbstractButton *m_playButton = nullptr;
+ QSlider *m_positionSlider = nullptr;
+};
+
+#endif
+