User:Joger/Building Qt Multimedia with FFmpeg: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
(Replaced doc with references to Qt Multimedia documentation)
Tags: Replaced Visual edit
 
(11 intermediate revisions by 2 users not shown)
Line 1: Line 1:
Building Qt Multimedia and FFmpeg from source are described in the Qt Documentation:


==My build setup==
* [https://doc-snapshots.qt.io/qt6-dev/qtmultimedia-building-ffmpeg.html Building FFmpeg from source].  
 
* [https://doc-snapshots.qt.io/qt6-dev/qtmultimedia-building-from-source.html Building Qt Multimedia from sources]
* OS: Windows 11 with dev drive mounted on D: (Using a dev drive makes builds faster when using Windows Defender antivirus)
* Qt source tree: D:\qt\qt6\
* Build directory containing all builds: D:\qt\build\
* Main (host) build for dev branch: D:\qt\build\dev\
* Visual Studio 2022 (MSVC)
* Don't have perl in path as it can cause hard to understand build failures
* Have cmake in path
 
==Developer setup for Qt Multimedia on Windows==
 
===Initializing Qt Repo for Qt 6 with necessary dependencies for QtMultimedia===
This init-repository initializes the necessary Qt submodules for working with QtMultimedia. By only initializing the repository with the necessary modules, the main Qt build is faster than doing a full build.<blockquote>C:\Strawberry\perl\bin\perl init-repository --module-subset=qtbase,qtquick3d,qtdeclarative,qtsvg,qtshadertools,qtmultimedia,qtrepotools -f --codereview-username johanseg</blockquote>
 
===Building FFmpeg on Windows===
 
#Install 7-zip from provisioning: Run qt6\coin\provisioning\common\windows\install-sevenzip.ps1 as admin
#*Needed by provisioning script for FFmpeg to unzip downloaded FFmpeg
#Install msys2 from provisioning: Run qt6\coin\provisioning\common\windows\install-msys2.ps1 as admin
#*Needed by provisioning script for FFmpeg because FFmpeg requires tools from msys to configure
#Install FFmpeg from provisioning: Run qt6\coin\provisioning\common\windows\install-ffmpeg.ps1 as admin
#*Since I only need MSVC build, I edit the install-ffmpeg.ps1 first, to comment out unnecessary versions
#*This sets FFMPEG_DIR=C:\FFmpeg-n6.0\build\msvc\installed\
 
===Configure Qt main build===
I build Qt as stand-alone module to make builds run faster when working in QtMultimedia. But first, we need to build the necessary dependencies. I do this from command line with D:\qt\build\dev as current directory.<blockquote>..\..\qt6\configure.bat -debug -developer-build -submodules QtMultimedia -nomake tests -nomake examples -- -DFFMPEG_DIR=C:\FFmpeg-n6.0\build\msvc\installed --fresh & ninja</blockquote>I work almost exclusively using debug builds. If you need a release build, configure the release build in a separate build directory. This is a developer build, and we can use D:\qt\build\dev\qtbase\ as CMAKE_PREFIX_PATH when developing other Qt modules. By configuring this way, QtMultimedia is built, which is not strictly necessary since I develop QtMultimedia in a separate build tree, but it is an easy way to make sure all QtMultimedia dependencies are built.
 
===Configure Qt multimedia===
I configure QtMultimedia using a CMakeUserPresets.json file that is located in D:\qt\qt6\qtmultimedia instead of using a configure script. This way, I can open the D:\qt\qt6\qtmultimedia as a folder in Visual Studio and configure it from there.
 
The benefit of using CMakeUserPresets.json is that Visual Studio knows how to debug the tests and examples. I have not found a way that allows Visual Studio to use an existing CMakeCache as a starting point.
 
<code>
{
    "version": 5,
    "configurePresets": [
        {
            "name": "msvc-64",
            "hidden": true,
            "condition": {
                "type": "equals",
                "lhs": "${hostSystemName}",
                "rhs": "Windows"
            },
            "generator": "Ninja",
            "cacheVariables": {
                "CMAKE_CXX_COMPILER": "cl.exe",
                "CMAKE_C_COMPILER": "cl.exe"
            },
            "toolset": {
                "value": "v143,host=x64",
                "strategy": "external"
            },
            "architecture": {
                "value": "x64",
                "strategy": "external"
            }
        },
        {
            "name": "Debug",
            "hidden": true,
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "Debug"
            }
        },
        {
            "name": "qt6-dev-base",
            "hidden": true,
            "cacheVariables": {
                "FEATURE_developer_build": true,
                "BUILD_qttools": false,
                "BUILD_qtdoc": false,
                "BUILD_qttranslations": false,
                "QT_BUILD_EXAMPLES": false,
                "QT_BUILD_EXAMPLES_BY_DEFAULT": false,
                "QT_BUILD_EXAMPLES_AS_EXTERNAL": false,
                "QT_BUILD_TESTS": false,
                "QT_BUILD_TESTS_BY_DEFAULT": false
            },
            "environment": {
                "PATH": "D:/qt/build/dev/qtbase/bin;$penv{PATH}"
            }
        },
        {
            "name": "qt6-dev-debug",
            "hidden": true,
            "inherits": [
                "qt6-dev-base",
                "msvc-64",
                "Debug"
            ],
            "cacheVariables": {
                "CMAKE_PREFIX_PATH": "D:/qt/build/dev/qtbase/"
            },
            "environment": {
                "PATH": "D:/qt/build/dev/qtbase/bin;$penv{PATH}"
            }
        },
        {
            "name": "QtMultimedia",
            "inherits": "qt6-dev-debug",
            "binaryDir": "D:/qt/build/qtmultimedia/",
            "cacheVariables": {
                "QT_BUILD_EXAMPLES": true,
                "QT_BUILD_EXAMPLES_BY_DEFAULT": true,
                "QT_BUILD_TESTS": true,
                "QT_BUILD_TESTS_BY_DEFAULT": true,
                "QT_BUILD_EXAMPLES_AS_EXTERNAL": false,
                "QT_BUILD_MANUAL_TESTS": false,
                "QT_DEPLOY_FFMPEG": true,
                "FEATURE_ffmpeg": true,
                "FFMPEG_DIR": "C:\\ffmpeg-n6.0\\build\\msvc\\installed"
            }
        }
    ],
    "buildPresets": [
        {
            "name": "Build-Qt-Multimedia-MSVC-Debug-64",
            "displayName": "Build Qt Multimedia MSVC Debug 64",
            "configurePreset": "QtMultimedia"
        }
    ]
}
</code>

Latest revision as of 16:02, 13 November 2024

Building Qt Multimedia and FFmpeg from source are described in the Qt Documentation: