summaryrefslogtreecommitdiffstats
path: root/cmake
Commit message (Collapse)AuthorAgeFilesLines
* CMake: fix styleTim Blechmann12 days2-5/+5
| | | | | | | | | by removing the space after `if` `endif` Pick-to: 6.5 6.7 Change-Id: I5fdec78af7e92d4f5a88ad79feca222cfeb5b7d1 Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io> Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
* Fix unsetting cmake variables in FindFFmpeg.cmakeArtem Dyomin2024-03-201-19/+3
| | | | | | | | | The variable are cached, so we need to pass the CACHE specifier to achieve the desired behavior. Pick-to: 6.7 6.6 6.5 Change-Id: I3996998544a95a6b401813056a43268705847f8e Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Relax rule of finding shared ffmpegArtem Dyomin2024-03-051-7/+12
| | | | | | | | | | | | | | | | | The main reason for the refactoring: - we've got a problem on CI with integrating QT_DEPLOY_FFMPEG=TRUE and shared ffmpeg on macOS arm. Now it's not possible to integrate both together at the same time. Even though the problem is only with arm, it makes sense to keep the behavior the same on other platforms. After the patch developers and CI will be able to compile the FFmpeg plugin with static FFmpeg and QT_DEPLOY_FFMPEG=TRUE, and get a warning message in this case while running cmake. Pick-to: 6.7 6.6 6.5 Change-Id: I1fccc9e3a8360190f1e393a0c4805068bca47c5f Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Fix spelling of FFmpeg in (end-)user-visible stringsVolker Hilsheimer2024-03-011-4/+4
| | | | | | | | | It's two capital "FF", lowercase "mpeg". Pick-to: 6.7 6.6 6.5 Change-Id: I96d90ba959c5f52e998323800e97c8e72c731910 Reviewed-by: Kai Köhne <kai.koehne@qt.io> Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
* Fix finding dynamic ffmpeg on Windows/arm/llvm-mingwArtem Dyomin2024-02-261-4/+25
| | | | | | | | | | | | | | | | | | Handle the corner case on Windows/arm/llvm-mingw compiler: The compiler generates auxiliary static libs in the 'lib' folder and cmake finds those instead of *.lib in the 'bin' folder. The libs look like lib/libavutil.dll.a. The previous approach didn't find the matching dll. Let's handle the corner case even though we don't have it on CI. The message with dumping found shared libs helps easily check on CI whether the libs are found. Pick-to: 6.7 6.6 6.5 Change-Id: Idc5b4aba0f9c60361336321138b1c078526075d4 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io> Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
* cmake: mark some library variables as adancedTim Blechmann2024-02-263-1/+10
| | | | | | | | | | Marking some cmake variables as advanced prevents them from prominently showing up in the build configuration Pick-to: 6.5 6.6 6.7 Change-Id: I29af7f631b5ad9d4f435f8201ec31b187e8af6b0 Reviewed-by: Artem Dyomin <artem.dyomin@qt.io> Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io>
* Print found shared ffmpeg libs in cmake logsArtem Dyomin2024-02-261-0/+2
| | | | | | | | | | | Dumping of shared ffmpeg libs is useful for us for easy check if the proper libs were found on CI. Pick-to: 6.7 6.6 6.5 Change-Id: If0d6f9f8e46c9d76d1823a6c47a79b62d5248f94 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io> Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
* Fix finding ffmpeg if cached libs have been deletedArtem Dyomin2024-01-081-5/+15
| | | | | | | | | | | | | | | | | The fix is useful after implementation of copying ffmpeg libs to lib folder. In this case the following development flow is possible: - build QtMM in with QT_DEPLOY_FFMPEG (ffmpeg is copied to libs) - clean only QtMM build + cmake cache, run cmake and build it again. (now ffmpeg libs may be found in qtbase/libs dir). - clean qtbase/libs dir without cleaning cmake cache and build agian. (cached ffmpeg libs paths have become invalid). The patch fixes the corner case above. Pick-to: 6.7 6.6 6.5 Change-Id: Ifee6b249f1d2fb459c5fe88f676f7c96e0c04588 Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io> Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
* Implement shipping of dynamic ffmpeg together with the ffmpeg pluginArtem Dyomin2023-12-211-76/+84
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is the first patch that implements ffmpeg shipping for both cases, building and installation. * deploy ffmpeg to plugins/multimedia/ffmpeg, as it should go together with the ffmpeg plugin. * ffmpeg deployment should be explicitly enquired via the option: -DQT_DEPLOY_FFMPEG=TRUE. The idea is to turn it on only when we or users need it, as users might have other compilation environments (e.g. it's so with boot2qt). Setting the flag for static qt builds is to be implemented later on. * Tested on Windows, Linux, macOS, some platform-specific details - On Unix platforms, ffmpeg libs might be put to plugins/multimedia/ffmpeg, closer to the ffmpeg plugin. However, on the current step, it was decided to deploy to the library directory. - On Windows, ffmpeg shared libs are linked through auxiliary static ones, it's handled in cmake scripts in the patch. - On Linux and Android, we will compile openssl and maybe vaapi stub shared libs and deploy the together with ffmpeg. - For Unix platforms, we will need to implement fixing of rpaths e.g. set 'ORIGIN' and hardcoded dylib deps (macOS). It will be done on the level of ffmpeg building on CI (install-ffmpeg.sh). Pick-to: 6.7 6.6 6.5 Change-Id: Ib7ce480b5412302f5d7ae9b247d5a5e87406a806 Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io> Reviewed-by: Artem Dyomin <artem.dyomin@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Fix dynamic symbols resolving if ffmpeg linked dynamicallyArtem Dyomin2023-11-101-19/+19
| | | | | | | | | | | | | * QtMM doesn't use openssl explicitly, loading openssl symbols should be disabled if ffmpeg is linked dynamically. * VAAPI-related warning message should be skipped for dynamically linked ffmpeg as the message doesn't make sense. Pick-to: 6.6 6.5 Change-Id: I89a4c70840f22117d65ef8eed3c40448555c57a0 Reviewed-by: Pavel Dubsky <pavel.dubsky@qt.io> Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io> Reviewed-by: Lars Knoll <lars@knoll.priv.no>
* Android: Turn on dynamic openSSL symbol resolvingBartlomiej Moskal2023-09-271-1/+3
| | | | | | | | | | | | | Set ENABLE_DYNAMIC_RESOLVE_OPENSSL_SYMBOLS variable to True also for Android OS. That will allow to try to turn on DYNAMIC_RESOLVE_OPENSSL_SYMBOLS (for ssl or crypto libs). Task-number: QTBUG-110805 Task-number: QTBUG-114954 Task-number: QTBUG-113980 Pick-to: 6.6 6.5 Change-Id: Ic916b1419cf85425c2c11d24e9f65e70c46e7cd3 Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
* Implement dynamic resolve vaapi symbolsArtem Dyomin2023-08-311-5/+23
| | | | | | | | | Let's get rid of the linking vaapi dependency, load and resolve in runtime instead. Pick-to: 6.5 6.6 Change-Id: Icbc72470c935c1ae711c5457c8e85e4f96977a3b Reviewed-by: Lars Knoll <lars@knoll.priv.no>
* Implement dynamic symbols resolve for openssl in ffmpegArtem Dyomin2023-08-301-1/+7
| | | | | | | | | | | | | | | We should ship the networking QtMM functionality to Linux users. Having openssl as a dependency is a bad idea since users might not have openssl. The patch implements dynamic symbols loading and resolving on QtMM initialization. We might reuse the approach to address other linking dependencies. Pick-to: 6.6 6.5 Change-Id: I0b21e44a66ebf892fb03f93844549e0877443481 Reviewed-by: Lars Knoll <lars@knoll.priv.no>
* Fix parsing *.pc file in FindFFmpeg.cmakeArtem Dyomin2023-08-111-15/+18
| | | | | | | | | | | | | | The build failure is not reproduced on CI but can be reproduced locally if adding additional deps to the ffmpeg build. In this case, deps may contain '-L:/usr/.../arm64-linux-gnu', the prev regex found -l in the middle of the path and caused a compilation error. Pick-to: 6.6 6.5 Change-Id: I56c229513a1d3752804d3da08e08785738feee0a Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io> Reviewed-by: Lars Knoll <lars@knoll.priv.no>
* Revert "Add IMPORTED_LINK_INTERFACE_LANGUAGES to WMF::WMF target"Amir Masoud Abdol2023-05-311-2/+1
| | | | | | | | | | This reverts commit 148cf063e4efb87fc1ff07429b5723ff35ad0ef0. Reason for revert: It was not fixing the issue. Pick-to: 6.5 Change-Id: I3f57721f4f24a7cd537cfb44d0b12dae9f533096 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Add IMPORTED_LINK_INTERFACE_LANGUAGES to WMF::WMF targetAmir Masoud Abdol2023-04-261-1/+2
| | | | | | | | | | | | | To make sure that CMake sets and uses the `CMAKE_C_IMPLICIT_LINK_DIRECTORIES`, we need to specify the `IMPORTED_LINK_INTERFACE_LANGUAGES`, otherwise, if user projects don't enable C, CMake might not know where to look, as seen in the bug. Pick-to: 6.5 Fixes: QTBUG-112832 Change-Id: I5f26563cbbe4532b39933b4ffdec44bbccaf4062 Reviewed-by: Alexey Edelev <alexey.edelev@qt.io> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Use lower-case header/library names for with mingw-w64Marius Kittler2023-04-121-5/+5
| | | | | | | | | | When compiling under GNU/Linux with mingw-w64 this is required as the filesystem is usually case-sensitive and mingw-w64 headers and libraries all have lower-case names. This change shouldn't hurt when compiling under Windows. Change-Id: I46c64a8f2923cbe21ce3e6b922ce8b099681e528 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* Change the license of all CMakeLists.txt and *.cmake files to BSDLucie Gérard2022-08-239-9/+9
| | | | | | | Task-number: QTBUG-105718 Change-Id: Iaf0950f30b9332ec7f04113971bc58547e31a2b9 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
* CMake: Remove the COPYING-CMAKE-SCRIPTS reference in FindFFmpeg.cmakeChristophe Giboudeaux2022-07-231-2/+0
| | | | | | | | FindFFmpeg.cmake already contains a SPDX license header. Pick-to: 6.4 Change-Id: I3f7cde136644f94e49f221b4a04972f181c36baf Reviewed-by: Kai Koehne <kai.koehne@qt.io>
* FFmpeg: fix typos in FindFFmpeg.cmakeChristophe Giboudeaux2022-07-211-4/+4
| | | | | | | Pick-to: 6.4 Change-Id: I8a9f4f0d02cb7a55769ea205946ddc429e86245d Reviewed-by: Piotr Srebrny <piotr.srebrny@qt.io> Reviewed-by: Lars Knoll <lars.knoll@gmail.com>
* FFmpeg: Don't link to private target when building shared librariesChristophe Giboudeaux2022-07-211-1/+9
| | | | | | | Task-number: QTBUG-102645 Pick-to: 6.4 Change-Id: I9eca70ca28118a344f2d7e021bcfd8baad668a1b Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Add license headers to cmake filesLucie Gérard2022-07-079-0/+26
| | | | | | | | | | | | CMakeLists.txt and .cmake files of significant size (more than 2 lines according to our check in tst_license.pl) now have the copyright and license header. Existing copyright statements remain intact Task-number: QTBUG-88621 Change-Id: If5c61e7ebea0452847d411ea230438095111e030 Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
* Improve regex to account for dots and pluses in the library namesPiotr Srebrny2022-05-251-7/+7
| | | | | | Fixes: QTBUG-102645 Change-Id: I15c4ded5a1e68cb09c4d3afdf63f9ae7955fd5c0 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Android: Enable FFmpeg playback - SW renderingSamuel Mira2022-05-181-0/+16
| | | | | | | | | | | | This patch enables video playback on Android using the FFmpeg backend. For now, just Software rendering with audio subsystem integration. Also, to get basic rendering working, this patch adds the conversion of content scheme URLs into qmediaplayer.cpp. Task-number: QTBUG-102232 Task-number: QTBUG-100474 Change-Id: I0e0efa8d05ad9c1bfaaedd2a18d6d2e7a163b999 Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
* Hide symbols for all ffmpeg components to avoid relocation problemPiotr Srebrny2022-05-051-4/+3
| | | | | | | | | | The recent changes in qtmultimedia code led to problems when resolving symbol relocations for statically linked swscale library. This patch applies --exclude-libs flag to all FFmpeg library components to avoid this problem in the future with other library components. Change-Id: I712432d95f0e638ac09feb1656f84d986d3fc534 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Prefer explicitly selected FFmpeg lib over available in systemPiotr Srebrny2022-03-311-1/+1
| | | | | | | | If the FFmpeg library is explicitly selected with FFMPEG_DIR variable during configuration, use it and not the one available with pkgconfig. Change-Id: If1bdf1102b291b61b77ce07aa1d56541a6913d89 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Link static ffmpeg library to ffmpeg multimedia pluginPiotr Srebrny2022-03-291-1/+38
| | | | | | | | | | | | | | | | | | | | | | | | This patch enables linking of the static FFmpeg library. When linking the static library we have to provide the library dependencies. These are found in the pkgconfig files generated during the library build and are parsed with the __ffmpeg_internal_set_dependencies function. The function adds dependencies listed in lines starting with Libs and Libs.private. While dependencies from Libs.private should suffice this is not the case on Windows where dependencies are listed in the Libs line. The -Wl,--exclude-libs=libavcodec flag fixes linking on Linux which otherwise fails with relocation problems on ff_pw_9 symbol in libavcodec. The flag prevents export of the libavcodec symbols, thus linker can optimize access to the static variables (including ff_pw_9) which otherwise are bound to the shared library GOT. The patch fixes the order of FFmpeg libraries linked to FFmpeg plugin to correctly display the dependencies between FFmpeg libraries. Change-Id: I119d975fcff2b610280e27478ad186b4ffbc2b25 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* CMake: Ever so slightly tidy up FindFFmpeg.cmakeAlexandru Croitor2022-03-071-4/+13
| | | | | | | | | | Show the found components on first configuration. Don't keep appending libraries to the cache variable each time the repo is reconfigured. Don't show the found libraries on each reconfigure. Change-Id: I1f76cd7e0d37cb9f34f3deeb0ed3d69a78b8576b Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
* CMake: Remove multiplicity property from ffmpeg INTERFACE libsAlexandru Croitor2022-03-071-1/+1
| | | | | | | | | | | | | | | | | | | IMPORTED_LINK_INTERFACE_MULTIPLICITY can only be set on IMPORTED INTERFACE libraries. Setting it on an INTERFACE library has no effect, and with an older version of CMake (like 3.16) it causes a configuration error like: CMake Error at cmake/FindFFmpeg.cmake:182 (set_target_properties): INTERFACE_LIBRARY targets may only have whitelisted properties. The property "IMPORTED_LINK_INTERFACE_MULTIPLICITY" is not allowed. Amends e91557637b3ed751ab4123588467d2ab2bedda3f Task-number: QTQAINFRA-4844 Change-Id: Id92309f4776ee0bc0b90397215284f32f0d1fc28 Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
* FFmpeg: Support playback on macOSLars Knoll2022-01-191-2/+5
| | | | | | | | | | Some initial work to support FFmpeg on macOS. The device handling is not really clean, we should probably separate audio and camera to make it easier to re-use the platform specific code from the other backends. Change-Id: Ib3c1cc8cb97a9467fc70d8e472377b63c2233672 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* FFmpeg: Provide FFMpeg lib dir with FFMPEG_DIR variablePiotr Srebrny2022-01-191-8/+19
| | | | | Change-Id: Idb6c66eaa4ecbca9c8cd764550adabe957d98fea Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* FFmpeg: Add support for a zero copy path when using egl and vaapiLars Knoll2022-01-191-0/+57
| | | | | | | | | | Use DMA buffers to copy the VAAPI surface over to OpenGL. This only works when using QT_XCB_GL_INTEGRATION=xcb_egl. For GLX, the DMA buffer integration is unfortunately not usable. It should work on wayland as well, but that's untested. Change-Id: Ib72d88621261b5b59b13d52d66796320ac02b8ae Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Start of an FFmpeg backendLars Knoll2022-01-191-0/+221
| | | | | | | Nothing working, just trying to enumerate devices and formats. Change-Id: I8dddfe823a13d166f5d3c36030fd6e9882a6815d Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Fix compilation of the audio backend classes for QNXLars Knoll2022-01-171-0/+9
| | | | | | | | | | | | | Comment out everything related to playback and capture for the moment so the module starts compiling. Also start renaming files to match the naming of the matching front-end classes. Pick-to: 6.2 Change-Id: Idfca67de22f0321148b9aed46d95c595161c8b51 Reviewed-by: Piotr Srebrny <piotr.srebrny@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Run through configure without errors for QNXLars Knoll2022-01-171-2/+2
| | | | | | | | | | | Adjust the cmake files to correctly configure Qt Multimedia for QNX. Pick-to: 6.2 Change-Id: I6271005a250f3d127e2d7f6860167b4707855078 Reviewed-by: Piotr Srebrny <piotr.srebrny@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Doris Verria <doris.verria@qt.io>
* Add support for building WMF backend with MinGW 9.0.0André de la Rocha2021-09-241-16/+19
| | | | | | | | | | | Allows building QtMultimedia with a working Microsoft Media Foundation backend, using MinGW 9.0.0, which has better support for WMF. Also fixes warnings generated by newer GCC releases. Pick-to: 6.2 Fixes: QTBUG-95234 Change-Id: I76e68c3b8dc4240f63543bbbb73a233289c67421 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Fix build without pkg-config supportJoerg Bornemann2021-09-132-4/+4
| | | | | | | | | | | Fix several issues in cmake/Find* in the code path that's hit when pkg-config is not used. Pick-to: 6.2 Task-number: QTBUG-96401 Change-Id: Iac6af560976ba6408d877027ed44a0354d32d2b7 Reviewed-by: Alexey Edelev <alexey.edelev@qt.io> Reviewed-by: Doris Verria <doris.verria@qt.io>
* Enable compilation of the Qt Multimedia module in CILars Knoll2021-05-282-0/+12
| | | | | | | | | | | | | | And fix a couple of smaller issues found by CI. Add some hacks/workarounds for issues with gstreamer packages and packageconfig files. Disable compilation of the QNX backend (as it's broken currently), and use the wnf and wmsdk feature tests to determine whether to compile the windows backend. Change-Id: I12f8983132f50b337cb15eb473d87299d3259745 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Cleanup QCameraInfoLars Knoll2021-01-291-0/+0
| | | | | | | | | | | | | | | | | | | Various API changes to QCameraInfo: * Remove the camera orientation from our API This is an implementation detail that should never be exposed to the user. For fixed cameras it's uninteresting and for mobile cameras, we can use the physical orientation of the device to create a stream that is oriented the correct way. * Add a QVideoFormat class describing a video format * Add a QList<QVideoFormat> videoFormats() * Add a QList<QSize> photoResolutions() * Implement the API for gstreamer and macOS. Change-Id: I9ffd9caeb6d07a6f267608a6bd794d99699fffbb Reviewed-by: Doris Verria <doris.verria@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Add find modules for 3rd party libraries and fix CMake filesDoris Verria2021-01-286-0/+307
Detect gstreamer, avfoundation, pulseaudio, alsa, mmrenderer and wmf with cmake. Regenerate and adjust configure.cmake and CMakeLists.txt files accordingly. Change-Id: I550136909498d3870e0babd6294652774a718f64 Reviewed-by: Lars Knoll <lars.knoll@qt.io>