summaryrefslogtreecommitdiffstats
path: root/tests/manual/minimal-player
diff options
context:
space:
mode:
Diffstat (limited to 'tests/manual/minimal-player')
-rw-r--r--tests/manual/minimal-player/CMakeLists.txt35
-rw-r--r--tests/manual/minimal-player/Info.plist.in46
-rw-r--r--tests/manual/minimal-player/minimal-player.cpp94
3 files changed, 175 insertions, 0 deletions
diff --git a/tests/manual/minimal-player/CMakeLists.txt b/tests/manual/minimal-player/CMakeLists.txt
new file mode 100644
index 000000000..6a5f5dfb0
--- /dev/null
+++ b/tests/manual/minimal-player/CMakeLists.txt
@@ -0,0 +1,35 @@
+# Copyright (C) 2024 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(sidepanel LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/multimedia/minimal-player")
+
+find_package(Qt6 REQUIRED COMPONENTS Widgets Multimedia MultimediaWidgets)
+
+qt_add_executable( minimal-player WIN32 MACOSX_BUNDLE
+ minimal-player.cpp
+)
+
+target_link_libraries( minimal-player PUBLIC
+ Qt::Widgets
+ Qt::Multimedia
+ Qt::MultimediaWidgets
+)
+
+install(TARGETS minimal-player
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
+
+set_target_properties( minimal-player PROPERTIES
+ MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in
+)
diff --git a/tests/manual/minimal-player/Info.plist.in b/tests/manual/minimal-player/Info.plist.in
new file mode 100644
index 000000000..46a9ecf2d
--- /dev/null
+++ b/tests/manual/minimal-player/Info.plist.in
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+
+ <key>CFBundleName</key>
+ <string>${MACOSX_BUNDLE_BUNDLE_NAME}</string>
+ <key>CFBundleIdentifier</key>
+ <string>${MACOSX_BUNDLE_GUI_IDENTIFIER}</string>
+ <key>CFBundleExecutable</key>
+ <string>${MACOSX_BUNDLE_EXECUTABLE_NAME}</string>
+
+ <key>CFBundleVersion</key>
+ <string>${MACOSX_BUNDLE_BUNDLE_VERSION}</string>
+ <key>CFBundleShortVersionString</key>
+ <string>${MACOSX_BUNDLE_SHORT_VERSION_STRING}</string>
+ <key>CFBundleLongVersionString</key>
+ <string>${MACOSX_BUNDLE_LONG_VERSION_STRING}</string>
+
+ <key>LSMinimumSystemVersion</key>
+ <string>${CMAKE_OSX_DEPLOYMENT_TARGET}</string>
+
+ <key>CFBundleGetInfoString</key>
+ <string>${MACOSX_BUNDLE_INFO_STRING}</string>
+ <key>NSHumanReadableCopyright</key>
+ <string>${MACOSX_BUNDLE_COPYRIGHT}</string>
+
+ <key>CFBundleIconFile</key>
+ <string>${MACOSX_BUNDLE_ICON_FILE}</string>
+
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+
+ <key>NSCameraUsageDescription</key>
+ <string>Qt Multimedia Example</string>
+ <key>NSMicrophoneUsageDescription</key>
+ <string>Qt Multimedia Example</string>
+
+ <key>NSSupportsAutomaticGraphicsSwitching</key>
+ <true/>
+</dict>
+</plist>
diff --git a/tests/manual/minimal-player/minimal-player.cpp b/tests/manual/minimal-player/minimal-player.cpp
new file mode 100644
index 000000000..17a11b050
--- /dev/null
+++ b/tests/manual/minimal-player/minimal-player.cpp
@@ -0,0 +1,94 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtCore/QTimer>
+#include <QtCore/QCommandLineParser>
+#include <QtMultimedia/QAudioOutput>
+#include <QtMultimedia/QMediaPlayer>
+#include <QtMultimediaWidgets/QVideoWidget>
+#include <QtWidgets/QApplication>
+#include <QtWidgets/QWidget>
+
+using namespace std::chrono_literals;
+using namespace Qt::Literals;
+
+int mainToggleWidgets(QString filename)
+{
+ QMediaPlayer player;
+ QVideoWidget widget1;
+ QVideoWidget widget2;
+ QAudioOutput audioOutput;
+ player.setVideoOutput(&widget1);
+ player.setAudioOutput(&audioOutput);
+ player.setSource(filename);
+
+ QTimer toggleOutput;
+ bool toggled = {};
+
+ toggleOutput.callOnTimeout([&] {
+ toggled = !toggled;
+ if (toggled)
+ player.setVideoOutput(&widget2);
+ else
+ player.setVideoOutput(&widget1);
+ });
+
+ toggleOutput.setInterval(1s);
+ toggleOutput.start();
+
+ widget1.show();
+ widget2.show();
+ player.play();
+ return QApplication::exec();
+}
+
+int mainSimple(QString filename, bool loop)
+{
+ QMediaPlayer player;
+ QVideoWidget widget1;
+ QAudioOutput audioOutput;
+ player.setVideoOutput(&widget1);
+ player.setAudioOutput(&audioOutput);
+ player.setSource(filename);
+
+ widget1.show();
+
+ if (loop)
+ player.setLoops(QMediaPlayer::Infinite);
+
+ player.play();
+ return QApplication::exec();
+}
+
+int main(int argc, char **argv)
+{
+ QApplication app(argc, argv);
+
+ QCommandLineParser parser;
+ parser.setApplicationDescription("Minimal Player");
+ parser.addHelpOption();
+ parser.addVersionOption();
+ parser.addPositionalArgument("media", "File to play");
+
+ QCommandLineOption toggleWidgetsOption{ "toggle-widgets", "Toggle between widgets." };
+ parser.addOption(toggleWidgetsOption);
+
+ QCommandLineOption loopOption{ "loop", "Loop." };
+ parser.addOption(loopOption);
+
+ parser.process(app);
+
+ if (parser.positionalArguments().isEmpty()) {
+ qInfo() << "Please specify a video source";
+ return 0;
+ }
+
+ QString filename = parser.positionalArguments()[0];
+
+ if (parser.isSet(toggleWidgetsOption))
+ return mainToggleWidgets(filename);
+
+ bool loop = parser.isSet(loopOption);
+
+ return mainSimple(filename, loop);
+}