From 79a2b96d1c461274b04898bbbaeaa3a5d7030240 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Mon, 23 Dec 2024 13:37:52 -0500 Subject: [PATCH] Meta: Consolidate checking for the system audio backend The goal here is to ensure we check for audio backends in a way that makes sense. On macOS, let's just always use Audio Unit (and thus avoid any checks for Pulse, to reduce needless/confusing build log noise). We will also only use the Qt audio backend if no other backend was found, rather than only checking for Pulse. --- Libraries/LibMedia/CMakeLists.txt | 16 +++++++--------- Meta/CMake/audio.cmake | 20 ++++++++++++++++++++ Meta/CMake/pulseaudio.cmake | 8 -------- Services/WebContent/CMakeLists.txt | 4 ++-- Tests/LibMedia/CMakeLists.txt | 6 ++++++ 5 files changed, 35 insertions(+), 19 deletions(-) create mode 100644 Meta/CMake/audio.cmake delete mode 100644 Meta/CMake/pulseaudio.cmake diff --git a/Libraries/LibMedia/CMakeLists.txt b/Libraries/LibMedia/CMakeLists.txt index b20e0640f91..0fb840e4e26 100644 --- a/Libraries/LibMedia/CMakeLists.txt +++ b/Libraries/LibMedia/CMakeLists.txt @@ -1,6 +1,7 @@ +include(audio) + if (NOT ANDROID AND NOT WIN32) include(ffmpeg) - include(pulseaudio) endif() set(SOURCES @@ -30,23 +31,20 @@ else() target_sources(LibMedia PRIVATE FFmpeg/FFmpegVideoDecoderStub.cpp) endif() -# Audio backend -- how we output audio to the speakers -if (HAVE_PULSEAUDIO) +if (LADYBIRD_AUDIO_BACKEND STREQUAL "PULSE") target_sources(LibMedia PRIVATE Audio/PlaybackStreamPulseAudio.cpp Audio/PulseAudioWrappers.cpp ) target_link_libraries(LibMedia PRIVATE PkgConfig::PULSEAUDIO) - target_compile_definitions(LibMedia PUBLIC HAVE_PULSEAUDIO=1) -elseif (APPLE AND NOT IOS) +elseif (LADYBIRD_AUDIO_BACKEND STREQUAL "AUDIO_UNIT") target_sources(LibMedia PRIVATE Audio/PlaybackStreamAudioUnit.cpp) - find_library(AUDIO_UNIT AudioUnit REQUIRED) target_link_libraries(LibMedia PRIVATE ${AUDIO_UNIT}) -elseif (ANDROID) +elseif (LADYBIRD_AUDIO_BACKEND STREQUAL "OBOE") target_sources(LibMedia PRIVATE Audio/PlaybackStreamOboe.cpp) find_package(oboe REQUIRED CONFIG) target_link_libraries(LibMedia PRIVATE log oboe::oboe) -else() - message(WARNING "No audio backend available") +elseif (DEFINED LADYBIRD_AUDIO_BACKEND) + message(FATAL_ERROR "Please update ${CMAKE_CURRENT_LIST_FILE} for audio backend ${LADYBIRD_AUDIO_BACKEND}") endif() diff --git a/Meta/CMake/audio.cmake b/Meta/CMake/audio.cmake new file mode 100644 index 00000000000..a8cbc8daa0f --- /dev/null +++ b/Meta/CMake/audio.cmake @@ -0,0 +1,20 @@ +include_guard() + +# Audio backend -- how we output audio to the speakers. +if (APPLE AND NOT IOS) + set(LADYBIRD_AUDIO_BACKEND "AUDIO_UNIT") + return() +elseif (ANDROID) + set(LADYBIRD_AUDIO_BACKEND "OBOE") + return() +elseif (NOT WIN32) + find_package(PkgConfig REQUIRED) + pkg_check_modules(PULSEAUDIO IMPORTED_TARGET libpulse) + + if (PULSEAUDIO_FOUND) + set(LADYBIRD_AUDIO_BACKEND "PULSE") + return() + endif() +endif() + +message(WARNING "No audio backend available") diff --git a/Meta/CMake/pulseaudio.cmake b/Meta/CMake/pulseaudio.cmake deleted file mode 100644 index 6b73a9fbf8e..00000000000 --- a/Meta/CMake/pulseaudio.cmake +++ /dev/null @@ -1,8 +0,0 @@ -include_guard() - -find_package(PkgConfig REQUIRED) -pkg_check_modules(PULSEAUDIO IMPORTED_TARGET libpulse) - -if (PULSEAUDIO_FOUND) - set(HAVE_PULSEAUDIO ON CACHE BOOL "" FORCE) -endif() diff --git a/Services/WebContent/CMakeLists.txt b/Services/WebContent/CMakeLists.txt index 244a6a6bcf5..65c89ba49ff 100644 --- a/Services/WebContent/CMakeLists.txt +++ b/Services/WebContent/CMakeLists.txt @@ -1,4 +1,4 @@ -include(pulseaudio) +include(audio) set(SOURCES ConnectionFromClient.cpp @@ -35,7 +35,7 @@ if (ENABLE_QT) target_link_libraries(WebContent PRIVATE Qt::Core) target_compile_definitions(WebContent PRIVATE HAVE_QT=1) - if (NOT HAVE_PULSEAUDIO) + if (NOT DEFINED LADYBIRD_AUDIO_BACKEND) find_package(Qt6 REQUIRED COMPONENTS Multimedia) target_sources(WebContent PRIVATE diff --git a/Tests/LibMedia/CMakeLists.txt b/Tests/LibMedia/CMakeLists.txt index 232f995e7fa..0116596ac75 100644 --- a/Tests/LibMedia/CMakeLists.txt +++ b/Tests/LibMedia/CMakeLists.txt @@ -1,3 +1,5 @@ +include(audio) + set(TEST_SOURCES TestH264Decode.cpp TestParseMatroska.cpp @@ -10,3 +12,7 @@ set(TEST_SOURCES foreach(source IN LISTS TEST_SOURCES) lagom_test("${source}" LibMedia LIBS LibMedia LibFileSystem WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}") endforeach() + +if (LADYBIRD_AUDIO_BACKEND STREQUAL "PULSE") + target_compile_definitions(TestPlaybackStream PRIVATE HAVE_PULSEAUDIO=1) +endif()