mirror of
https://github.com/vgmstream/vgmstream.git
synced 2024-12-18 09:25:53 +01:00
191 lines
5.4 KiB
CMake
191 lines
5.4 KiB
CMake
if(USE_FFMPEG)
|
|
if(NOT FFMPEG_PATH AND NOT BUILD_STATIC)
|
|
# FFmpeg detection
|
|
if(WIN32)
|
|
find_package(FFmpeg COMPONENTS AVFORMAT AVUTIL AVCODEC SWRESAMPLE)
|
|
else()
|
|
find_package(FFmpeg QUIET COMPONENTS AVFORMAT AVUTIL AVCODEC SWRESAMPLE)
|
|
endif()
|
|
|
|
if(NOT FFMPEG_LIBRARIES)
|
|
if(WIN32)
|
|
set_ffmpeg(OFF TRUE)
|
|
else()
|
|
set(FFmpeg_FOUND NO)
|
|
endif()
|
|
else()
|
|
if(${AVCODEC_VERSION} VERSION_LESS 57)
|
|
message("libavcodec version mismatch ${AVCODEC_VERSION} expected >=57")
|
|
if(WIN32)
|
|
set_ffmpeg(OFF TRUE)
|
|
else()
|
|
set(FFmpeg_FOUND NO)
|
|
endif()
|
|
elseif(${AVUTIL_VERSION} VERSION_LESS 55)
|
|
message("libavutil version mismatch ${AVUTIL_VERSION} expected >=55")
|
|
if(WIN32)
|
|
set_ffmpeg(OFF TRUE)
|
|
else()
|
|
set(FFmpeg_FOUND NO)
|
|
endif()
|
|
elseif(${SWRESAMPLE_VERSION} VERSION_LESS 2)
|
|
message("libswresample version mismatch ${SWRESAMPLE_VERSION} expected >=2")
|
|
if(WIN32)
|
|
set_ffmpeg(OFF TRUE)
|
|
else()
|
|
set(FFmpeg_FOUND NO)
|
|
endif()
|
|
elseif(${AVFORMAT_VERSION} VERSION_LESS 57)
|
|
message("libavformat version mismatch ${AVFORMAT_VERSION} expected >=57")
|
|
if(WIN32)
|
|
set_ffmpeg(OFF TRUE)
|
|
else()
|
|
set(FFmpeg_FOUND NO)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
if(FFmpeg_FOUND)
|
|
set(FFMPEG_SOURCE "(system)")
|
|
endif()
|
|
endif()
|
|
if(USE_FFMPEG AND NOT WIN32 AND (NOT FFmpeg_FOUND OR FFMPEG_PATH OR BUILD_STATIC))
|
|
set(USE_FFMPEG_LIBOPUS OFF)
|
|
if(NOT EMSCRIPTEN)
|
|
find_package(PkgConfig REQUIRED)
|
|
pkg_check_modules(PC_OPUS QUIET opus>=1.1)
|
|
if(PC_OPUS_FOUND)
|
|
set(USE_FFMPEG_LIBOPUS ON)
|
|
endif()
|
|
endif()
|
|
|
|
FetchDependency(FFMPEG
|
|
DIR ffmpeg
|
|
GIT_REPOSITORY https://git.ffmpeg.org/ffmpeg.git
|
|
GIT_TAG n4.4
|
|
)
|
|
|
|
if(FFMPEG_PATH)
|
|
set(FFMPEG_COMPILE YES)
|
|
|
|
set(FFMPEG_CONF_PARSER
|
|
ac3 mpegaudio xma vorbis opus
|
|
)
|
|
set(FFMPEG_CONF_DEMUXER
|
|
ac3 asf xwma mov oma ogg tak dsf wav aac dts dtshd mp3 bink flac msf xmv caf ape smacker pcm_s8 spdif mpc mpc8
|
|
)
|
|
set(FFMPEG_CONF_DECODER
|
|
ac3 wmapro wmav1 wmav2 wmavoice wmalossless xma1 xma2 dca tak dsd_lsbf dsd_lsbf_planar dsd_mbf dsd_msbf_planar aac atrac3 atrac3p mp1float mp2float mp3float binkaudio_dct binkaudio_rdft flac pcm_s16be pcm_s16be_planar pcm_s16le pcm_s16le_planar vorbis ape adpcm_ima_qt smackaud pcm_s8 pcm_s8_planar mpc7 mpc8 alac adpcm_ima_dk3 adpcm_ima_dk4
|
|
)
|
|
if(USE_FFMPEG_LIBOPUS)
|
|
list(APPEND FFMPEG_CONF_DECODER libopus)
|
|
else()
|
|
list(APPEND FFMPEG_CONF_DECODER opus)
|
|
endif()
|
|
set(FFMPEG_CONF_DISABLE_PARSER
|
|
mpeg4video h263
|
|
)
|
|
set(FFMPEG_CONF_DISABLE_DECODER
|
|
mpeg2video h263 h264 mpeg1video mpeg2video mpeg4 hevc vp9
|
|
)
|
|
string(REPLACE ";" "," FFMPEG_CONF_PARSER "${FFMPEG_CONF_PARSER}")
|
|
string(REPLACE ";" "," FFMPEG_CONF_DEMUXER "${FFMPEG_CONF_DEMUXER}")
|
|
string(REPLACE ";" "," FFMPEG_CONF_DECODER "${FFMPEG_CONF_DECODER}")
|
|
string(REPLACE ";" "," FFMPEG_CONF_DISABLE_PARSER "${FFMPEG_CONF_DISABLE_PARSER}")
|
|
string(REPLACE ";" "," FFMPEG_CONF_DISABLE_DECODER "${FFMPEG_CONF_DISABLE_DECODER}")
|
|
set(FFMPEG_CONF_ARGS
|
|
--enable-static
|
|
--disable-shared
|
|
--enable-gpl
|
|
--disable-doc
|
|
--disable-ffplay
|
|
--disable-ffprobe
|
|
--disable-avdevice
|
|
--disable-ffmpeg
|
|
--disable-postproc
|
|
--disable-avfilter
|
|
--disable-swscale
|
|
--disable-network
|
|
--disable-swscale-alpha
|
|
--disable-vdpau
|
|
--disable-dxva2
|
|
--disable-amf
|
|
--disable-cuda
|
|
--disable-d3d11va
|
|
--disable-ffnvcodec
|
|
--disable-nvenc
|
|
--disable-nvdec
|
|
--disable-hwaccels
|
|
--disable-sdl2
|
|
--disable-iconv
|
|
--disable-everything
|
|
--enable-hwaccels
|
|
--enable-swresample
|
|
--enable-parser=${FFMPEG_CONF_PARSER}
|
|
--enable-demuxer=${FFMPEG_CONF_DEMUXER}
|
|
--enable-decoder=${FFMPEG_CONF_DECODER}
|
|
--disable-parser=${FFMPEG_CONF_DISABLE_PARSER}
|
|
--disable-decoder=${FFMPEG_CONF_DISABLE_DECODER}
|
|
--disable-cuvid
|
|
--disable-version3
|
|
--disable-zlib
|
|
--extra-libs=-static
|
|
--extra-cflags=--static
|
|
--pkg-config-flags=--static
|
|
)
|
|
if(USE_FFMPEG_LIBOPUS)
|
|
list(APPEND FFMPEG_CONF_ARGS
|
|
--enable-libopus
|
|
)
|
|
endif()
|
|
if(EMSCRIPTEN)
|
|
list(APPEND FFMPEG_CONF_ARGS
|
|
--cc=${CMAKE_C_COMPILER}
|
|
--ranlib=${CMAKE_RANLIB}
|
|
--enable-cross-compile
|
|
--target-os=none
|
|
--arch=x86
|
|
--disable-runtime-cpudetect
|
|
--disable-asm
|
|
--disable-fast-unaligned
|
|
--disable-pthreads
|
|
--disable-w32threads
|
|
--disable-os2threads
|
|
--disable-debug
|
|
--disable-stripping
|
|
--disable-safe-bitstream-reader
|
|
)
|
|
endif()
|
|
|
|
set(FFMPEG_LINK_PATH ${FFMPEG_BIN}/bin/usr/local/lib)
|
|
set(FFMPEG_INCLUDE_DIRS ${FFMPEG_BIN}/bin/usr/local/include)
|
|
|
|
file(MAKE_DIRECTORY ${FFMPEG_BIN})
|
|
add_custom_target(FFMPEG_CONFIGURE
|
|
COMMAND "${FFMPEG_PATH}/configure" ${FFMPEG_CONF_ARGS}
|
|
BYPRODUCTS ${FFMPEG_BIN}/Makefile
|
|
WORKING_DIRECTORY ${FFMPEG_BIN}
|
|
)
|
|
add_custom_target(FFMPEG_MAKE
|
|
COMMAND make && make install DESTDIR="${FFMPEG_BIN}/bin"
|
|
DEPENDS ${FFMPEG_BIN}/Makefile
|
|
BYPRODUCTS ${FFMPEG_BIN}
|
|
WORKING_DIRECTORY ${FFMPEG_BIN}
|
|
)
|
|
|
|
foreach(LIB avutil avformat swresample avcodec)
|
|
add_library(${LIB} STATIC IMPORTED)
|
|
if(NOT EXISTS ${FFMPEG_LINK_PATH}/lib${LIB}.a)
|
|
add_dependencies(${LIB} FFMPEG_MAKE)
|
|
endif()
|
|
set_target_properties(${LIB} PROPERTIES
|
|
IMPORTED_LOCATION ${FFMPEG_LINK_PATH}/lib${LIB}.a
|
|
)
|
|
endforeach()
|
|
endif()
|
|
endif()
|
|
endif()
|
|
if(NOT USE_FFMPEG)
|
|
unset(FFMPEG_SOURCE)
|
|
endif()
|