1a00e98661
--- more thorough commit message which was generated by the wonderful copilot AI tool: Refactor and enhance audio encoding and decoding pipelines - Introduced CodecUtils.h for utility functions related to audio codec selection, including sample format and bitrate clamping. - Added DecoderPipeline.h to manage audio decoding, including opening files and retrieving audio stream information. - Implemented EncoderPipeline.h to handle audio encoding, including encoder setup, resampling, and writing output files. - Created OutputPathBuilder.h to generate output file paths based on reencode job specifications. - Refactored SpectrogramWidget to improve OpenGL handling and ensure safe context usage. - Updated ReencodeDialog.h to enhance code readability and maintainability. - Improved error handling and logging throughout the audio processing components.
155 lines
4.3 KiB
CMake
155 lines
4.3 KiB
CMake
cmake_minimum_required(VERSION 3.22)
|
|
project(SubWave LANGUAGES CXX)
|
|
set(CMAKE_CXX_STANDARD 20)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_AUTOMOC ON)
|
|
set(CMAKE_AUTORCC ON)
|
|
|
|
# dependencies
|
|
find_package(Qt6 REQUIRED COMPONENTS
|
|
Core Widgets Multimedia OpenGL OpenGLWidgets
|
|
)
|
|
find_package(PkgConfig REQUIRED)
|
|
pkg_check_modules(FFMPEG REQUIRED IMPORTED_TARGET
|
|
libavformat
|
|
libavcodec
|
|
libavutil
|
|
libswresample
|
|
)
|
|
pkg_check_modules(FFTW REQUIRED IMPORTED_TARGET fftw3)
|
|
|
|
# sources
|
|
set(SOURCES
|
|
src/main.cpp
|
|
src/config/Config.cpp
|
|
src/gui/CoverArtWidget.cpp
|
|
src/gui/SpectrogramWidget.cpp
|
|
src/gui/GradientDialog.cpp
|
|
src/gui/EqualizerWidget.cpp
|
|
src/gui/EqualizerPresetManager.cpp
|
|
src/gui/FreqCurveWidget.cpp
|
|
src/gui/TrackDelegate.cpp
|
|
src/gui/MainWindow.cpp
|
|
src/gui/NowPlayingPanel.cpp
|
|
# controllers
|
|
src/controllers/PlaybackController.cpp
|
|
src/controllers/LibraryController.cpp
|
|
# engine
|
|
src/engine/AudioEngine.cpp
|
|
src/engine/EqProcessor.cpp
|
|
src/engine/SpectrumAnalyzer.cpp
|
|
src/engine/MusicLibrary.cpp
|
|
src/engine/MetadataReader.cpp
|
|
# engine/encoder
|
|
src/engine/encoder/AlbumReencoder.cpp
|
|
src/engine/encoder/TrackEncoder.cpp
|
|
src/engine/encoder/StageBuffer.cpp
|
|
# ffmpeg
|
|
src/engine/ffmpeg/FormatContext.cpp
|
|
src/engine/ffmpeg/CodecContext.cpp
|
|
src/engine/ffmpeg/Resampler.cpp
|
|
src/engine/ffmpeg/FFmpegDecoder.cpp
|
|
# playlists
|
|
src/playlists/PlaylistModel.cpp
|
|
src/playlists/PlaylistManager.cpp
|
|
src/playlists/PlaylistCreatorDialog.cpp
|
|
src/playlists/PlaylistBrowserDialog.cpp
|
|
# reencode
|
|
src/gui/ReencodeDialog.cpp
|
|
)
|
|
|
|
set(HEADERS
|
|
src/config/Config.h
|
|
src/gui/CoverArtWidget.h
|
|
src/gui/SpectrogramWidget.h
|
|
src/gui/GradientDialog.h
|
|
src/gui/EqualizerWidget.h
|
|
src/gui/EqualizerPresetManager.h
|
|
src/gui/FreqCurveWidget.h
|
|
src/gui/TrackDelegate.h
|
|
src/gui/MainWindow.h
|
|
src/gui/NowPlayingPanel.h
|
|
# controllers
|
|
src/controllers/PlaybackController.h
|
|
src/controllers/LibraryController.h
|
|
# engine
|
|
src/engine/AudioEngine.h
|
|
src/engine/EqProcessor.h
|
|
src/engine/SpectrumAnalyzer.h
|
|
src/engine/AudioBuffer.h
|
|
src/engine/Track.h
|
|
src/engine/MetadataReader.h
|
|
src/engine/MusicLibrary.h
|
|
# engine/encoder
|
|
src/engine/encoder/ReencodeJob.h
|
|
src/engine/encoder/AlbumReencoder.h
|
|
src/engine/encoder/TrackEncoder.h
|
|
src/engine/encoder/StageBuffer.h
|
|
src/engine/encoder/FfmpegGuards.h
|
|
src/engine/encoder/SampleRateUtils.h
|
|
src/engine/encoder/CodecUtils.h # new: pickSampleFormat/pickChannelCount/clampBitrate/ChannelLayoutGuard
|
|
src/engine/encoder/OutputPathBuilder.h # new: buildOutputPath
|
|
src/engine/encoder/DecoderPipeline.h # new: input open + decoder context
|
|
src/engine/encoder/EncoderPipeline.h # new: encoder + muxer + SWR + encode frame
|
|
# ffmpeg wrapper
|
|
src/engine/ffmpeg/FormatContext.h
|
|
src/engine/ffmpeg/CodecContext.h
|
|
src/engine/ffmpeg/Resampler.h
|
|
src/engine/ffmpeg/FFmpegDecoder.h
|
|
# playlists
|
|
src/playlists/PlaylistModel.h
|
|
src/playlists/PlaylistManager.h
|
|
src/playlists/PlaylistCreatorDialog.h
|
|
src/playlists/PlaylistBrowserDialog.h
|
|
# reencode
|
|
src/gui/ReencodeDialog.h
|
|
)
|
|
|
|
# qrc resources
|
|
set(RESOURCES
|
|
src/shaders.qrc
|
|
src/application.qrc
|
|
)
|
|
|
|
# target
|
|
add_executable(SubWave ${SOURCES} ${HEADERS} ${RESOURCES})
|
|
|
|
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
|
message(STATUS "Setting build type to 'RelWithDebInfo' as none was specified.")
|
|
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Choose the type of build." FORCE)
|
|
endif()
|
|
|
|
if(MSVC)
|
|
target_compile_options(SubWave PRIVATE /O2 /fp:fast)
|
|
else()
|
|
target_compile_options(SubWave PRIVATE -O3 -ffast-math -march=native)
|
|
endif()
|
|
|
|
# headers
|
|
target_include_directories(SubWave PRIVATE
|
|
src
|
|
src/config
|
|
src/controllers
|
|
src/engine
|
|
src/engine/encoder # covers CodecUtils.h, OutputPathBuilder.h, DecoderPipeline.h, EncoderPipeline.h
|
|
src/engine/ffmpeg
|
|
src/playlists
|
|
src/gui
|
|
)
|
|
|
|
# link to qt and ffmpeg and fftw
|
|
target_link_libraries(SubWave PRIVATE
|
|
Qt6::Core
|
|
Qt6::Widgets
|
|
Qt6::Multimedia
|
|
Qt6::OpenGL
|
|
Qt6::OpenGLWidgets
|
|
PkgConfig::FFMPEG
|
|
PkgConfig::FFTW
|
|
)
|
|
|
|
# For windows stupid ahh
|
|
if(WIN32)
|
|
set_target_properties(SubWave PROPERTIES WIN32_EXECUTABLE TRUE)
|
|
endif()
|