diff options
Diffstat (limited to 'tests/manual/minimal-player')
-rw-r--r-- | tests/manual/minimal-player/CMakeLists.txt | 35 | ||||
-rw-r--r-- | tests/manual/minimal-player/Info.plist.in | 46 | ||||
-rw-r--r-- | tests/manual/minimal-player/minimal-player.cpp | 94 |
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); +} |