summaryrefslogtreecommitdiffstats
path: root/examples/videowidget
diff options
context:
space:
mode:
Diffstat (limited to 'examples/videowidget')
-rw-r--r--examples/videowidget/main.cpp1
-rw-r--r--examples/videowidget/videoplayer.cpp7
-rw-r--r--examples/videowidget/videowidget.cpp113
-rw-r--r--examples/videowidget/videowidget.h75
-rw-r--r--examples/videowidget/videowidget.pro8
-rw-r--r--examples/videowidget/videowidgetsurface.cpp173
-rw-r--r--examples/videowidget/videowidgetsurface.h80
7 files changed, 6 insertions, 451 deletions
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.cpp b/examples/videowidget/videowidget.cpp
deleted file mode 100644
index 38c386e6e..000000000
--- a/examples/videowidget/videowidget.cpp
+++ /dev/null
@@ -1,113 +0,0 @@
-/****************************************************************************
-**
-** 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 "videowidget.h"
-
-#include "videowidgetsurface.h"
-
-#include <QtWidgets>
-#include <qvideosurfaceformat.h>
-
-//! [0]
-VideoWidget::VideoWidget(QWidget *parent)
- : QWidget(parent)
- , surface(0)
-{
- setAutoFillBackground(false);
- setAttribute(Qt::WA_NoSystemBackground, true);
-
- QPalette palette = this->palette();
- palette.setColor(QPalette::Background, Qt::black);
- setPalette(palette);
-
- setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
-
- surface = new VideoWidgetSurface(this);
-}
-//! [0]
-
-//! [1]
-VideoWidget::~VideoWidget()
-{
- delete surface;
-}
-//! [1]
-
-//! [2]
-QSize VideoWidget::sizeHint() const
-{
- return surface->surfaceFormat().sizeHint();
-}
-//! [2]
-
-
-//! [3]
-void VideoWidget::paintEvent(QPaintEvent *event)
-{
- QPainter painter(this);
-
- if (surface->isActive()) {
- const QRect videoRect = surface->videoRect();
-
- if (!videoRect.contains(event->rect())) {
- QRegion region = event->region();
- region = region.subtracted(videoRect);
-
- QBrush brush = palette().background();
-
- foreach (const QRect &rect, region.rects())
- painter.fillRect(rect, brush);
- }
-
- surface->paint(&painter);
- } else {
- painter.fillRect(event->rect(), palette().background());
- }
-}
-//! [3]
-
-//! [4]
-void VideoWidget::resizeEvent(QResizeEvent *event)
-{
- QWidget::resizeEvent(event);
-
- surface->updateVideoRect();
-}
-//! [4]
diff --git a/examples/videowidget/videowidget.h b/examples/videowidget/videowidget.h
deleted file mode 100644
index c7688dd38..000000000
--- a/examples/videowidget/videowidget.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/****************************************************************************
-**
-** 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 VIDEOWIDGET_H
-#define VIDEOWIDGET_H
-
-#include "videowidgetsurface.h"
-
-#include <QtWidgets/QWidget>
-
-QT_BEGIN_NAMESPACE
-class QAbstractVideoSurface;
-QT_END_NAMESPACE
-
-class VideoWidgetSurface;
-
-//! [0]
-class VideoWidget : public QWidget
-{
- Q_OBJECT
-public:
- VideoWidget(QWidget *parent = 0);
- ~VideoWidget();
-
- QAbstractVideoSurface *videoSurface() const { return surface; }
-
- QSize sizeHint() const;
-
-protected:
- void paintEvent(QPaintEvent *event);
- void resizeEvent(QResizeEvent *event);
-
-private:
- VideoWidgetSurface *surface;
-};
-//! [0]
-
-#endif
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
diff --git a/examples/videowidget/videowidgetsurface.cpp b/examples/videowidget/videowidgetsurface.cpp
deleted file mode 100644
index df157206b..000000000
--- a/examples/videowidget/videowidgetsurface.cpp
+++ /dev/null
@@ -1,173 +0,0 @@
-/****************************************************************************
-**
-** 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 "videowidgetsurface.h"
-
-#include <QtWidgets>
-#include <qabstractvideosurface.h>
-#include <qvideosurfaceformat.h>
-
-VideoWidgetSurface::VideoWidgetSurface(QWidget *widget, QObject *parent)
- : QAbstractVideoSurface(parent)
- , widget(widget)
- , imageFormat(QImage::Format_Invalid)
-{
-}
-
-//! [0]
-QList<QVideoFrame::PixelFormat> VideoWidgetSurface::supportedPixelFormats(
- QAbstractVideoBuffer::HandleType handleType) const
-{
- if (handleType == QAbstractVideoBuffer::NoHandle) {
- return QList<QVideoFrame::PixelFormat>()
- << QVideoFrame::Format_RGB32
- << QVideoFrame::Format_ARGB32
- << QVideoFrame::Format_ARGB32_Premultiplied
- << QVideoFrame::Format_RGB565
- << QVideoFrame::Format_RGB555;
- } else {
- return QList<QVideoFrame::PixelFormat>();
- }
-}
-//! [0]
-
-//! [1]
-bool VideoWidgetSurface::isFormatSupported(const QVideoSurfaceFormat &format) const
-{
- const QImage::Format imageFormat = QVideoFrame::imageFormatFromPixelFormat(format.pixelFormat());
- const QSize size = format.frameSize();
-
- return imageFormat != QImage::Format_Invalid
- && !size.isEmpty()
- && format.handleType() == QAbstractVideoBuffer::NoHandle;
-}
-//! [1]
-
-//! [2]
-bool VideoWidgetSurface::start(const QVideoSurfaceFormat &format)
-{
- const QImage::Format imageFormat = QVideoFrame::imageFormatFromPixelFormat(format.pixelFormat());
- const QSize size = format.frameSize();
-
- if (imageFormat != QImage::Format_Invalid && !size.isEmpty()) {
- this->imageFormat = imageFormat;
- imageSize = size;
- sourceRect = format.viewport();
-
- QAbstractVideoSurface::start(format);
-
- widget->updateGeometry();
- updateVideoRect();
-
- return true;
- } else {
- return false;
- }
-}
-//! [2]
-
-//! [3]
-void VideoWidgetSurface::stop()
-{
- currentFrame = QVideoFrame();
- targetRect = QRect();
-
- QAbstractVideoSurface::stop();
-
- widget->update();
-}
-//! [3]
-
-//! [4]
-bool VideoWidgetSurface::present(const QVideoFrame &frame)
-{
- if (surfaceFormat().pixelFormat() != frame.pixelFormat()
- || surfaceFormat().frameSize() != frame.size()) {
- setError(IncorrectFormatError);
- stop();
-
- return false;
- } else {
- currentFrame = frame;
-
- widget->repaint(targetRect);
-
- return true;
- }
-}
-//! [4]
-
-//! [5]
-void VideoWidgetSurface::updateVideoRect()
-{
- QSize size = surfaceFormat().sizeHint();
- size.scale(widget->size().boundedTo(size), Qt::KeepAspectRatio);
-
- targetRect = QRect(QPoint(0, 0), size);
- targetRect.moveCenter(widget->rect().center());
-}
-//! [5]
-
-//! [6]
-void VideoWidgetSurface::paint(QPainter *painter)
-{
- if (currentFrame.map(QAbstractVideoBuffer::ReadOnly)) {
- const QTransform oldTransform = painter->transform();
-
- if (surfaceFormat().scanLineDirection() == QVideoSurfaceFormat::BottomToTop) {
- painter->scale(1, -1);
- painter->translate(0, -widget->height());
- }
-
- QImage image(
- currentFrame.bits(),
- currentFrame.width(),
- currentFrame.height(),
- currentFrame.bytesPerLine(),
- imageFormat);
-
- painter->drawImage(targetRect, image, sourceRect);
-
- painter->setTransform(oldTransform);
-
- currentFrame.unmap();
- }
-}
-//! [6]
diff --git a/examples/videowidget/videowidgetsurface.h b/examples/videowidget/videowidgetsurface.h
deleted file mode 100644
index 6cfa346b0..000000000
--- a/examples/videowidget/videowidgetsurface.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/****************************************************************************
-**
-** 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 VIDEOWIDGETSURFACE_H
-#define VIDEOWIDGETSURFACE_H
-
-#include <QtCore/QRect>
-#include <QtGui/QImage>
-#include <qabstractvideosurface.h>
-#include <qvideoframe.h>
-
-//! [0]
-class VideoWidgetSurface : public QAbstractVideoSurface
-{
- Q_OBJECT
-public:
- VideoWidgetSurface(QWidget *widget, QObject *parent = 0);
-
- QList<QVideoFrame::PixelFormat> supportedPixelFormats(
- QAbstractVideoBuffer::HandleType handleType = QAbstractVideoBuffer::NoHandle) const;
- bool isFormatSupported(const QVideoSurfaceFormat &format) const;
-
- bool start(const QVideoSurfaceFormat &format);
- void stop();
-
- bool present(const QVideoFrame &frame);
-
- QRect videoRect() const { return targetRect; }
- void updateVideoRect();
-
- void paint(QPainter *painter);
-
-private:
- QWidget *widget;
- QImage::Format imageFormat;
- QRect targetRect;
- QSize imageSize;
- QRect sourceRect;
- QVideoFrame currentFrame;
-};
-//! [0]
-
-#endif