@ -80,148 +80,148 @@ if (NOT WIN32 AND NOT ANDROID)
$ { L I B V A - X 1 1 _ I N C L U D E _ D I R S }
$ { L I B V A - X 1 1 _ I N C L U D E _ D I R S }
$ { L I B V A _ I N C L U D E _ D I R S }
$ { L I B V A _ I N C L U D E _ D I R S }
)
)
message ( STATUS "VA-API found" )
else ( )
set ( FFmpeg_HWACCEL_FLAGS --disable-vaapi )
endif ( )
if ( FFNVCODEC_FOUND )
list ( APPEND FFmpeg_HWACCEL_FLAGS
- - e n a b l e - c u v i d
- - e n a b l e - f f n v c o d e c
- - e n a b l e - n v d e c
- - e n a b l e - h w a c c e l = h 2 6 4 _ n v d e c
- - e n a b l e - h w a c c e l = v p 8 _ n v d e c
- - e n a b l e - h w a c c e l = v p 9 _ n v d e c
)
list ( APPEND FFmpeg_HWACCEL_LIBRARIES ${ FFNVCODEC_LIBRARIES } )
list ( APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${ FFNVCODEC_INCLUDE_DIRS } )
list ( APPEND FFmpeg_HWACCEL_LDFLAGS ${ FFNVCODEC_LDFLAGS } )
message ( STATUS "ffnvcodec libraries version ${FFNVCODEC_VERSION} found" )
# f f n v e n c c o u l d l o a d C U D A l i b r a r i e s a t t h e r u n t i m e u s i n g d l o p e n / d l s y m o r L o a d L i b r a r y / G e t P r o c A d d r e s s
# h e r e w e h a n d l e t h e h a r d - l i n k i n g s e n a r i o w h e r e C U D A i s l i n k e d d u r i n g c o m p i l a t i o n
if ( CUDA_FOUND )
# T h i s l i n e c a u s e s b u i l d e r r o r i f C U D A _ I N C L U D E _ D I R S i s a n y t h i n g b u t a s i n g l e n o n - e m p t y v a l u e
# list ( APPEND FFmpeg_HWACCEL_FLAGS --extra-cflags=-I ${ CUDA_INCLUDE_DIRS } )
list ( APPEND FFmpeg_HWACCEL_LIBRARIES ${ CUDA_LIBRARIES } )
list ( APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${ CUDA_INCLUDE_DIRS } )
list ( APPEND FFmpeg_HWACCEL_LDFLAGS ${ CUDA_LDFLAGS } )
message ( STATUS "CUDA libraries found, hard-linking will be performed" )
endif ( CUDA_FOUND )
endif ( )
message ( STATUS "VA-API found" )
else ( )
set ( FFmpeg_HWACCEL_FLAGS --disable-vaapi )
endif ( )
if ( VDPAU_FOUND )
list ( APPEND FFmpeg_HWACCEL_FLAGS
- - e n a b l e - v d p a u
- - e n a b l e - h w a c c e l = h 2 6 4 _ v d p a u
- - e n a b l e - h w a c c e l = v p 9 _ v d p a u
)
list ( APPEND FFmpeg_HWACCEL_LIBRARIES ${ VDPAU_LIBRARIES } )
list ( APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${ VDPAU_INCLUDE_DIRS } )
list ( APPEND FFmpeg_HWACCEL_LDFLAGS ${ VDPAU_LDFLAGS } )
message ( STATUS "vdpau libraries version ${VDPAU_VERSION} found" )
else ( )
list ( APPEND FFmpeg_HWACCEL_FLAGS --disable-vdpau )
endif ( )
if ( FFNVCODEC_FOUND )
list ( APPEND FFmpeg_HWACCEL_FLAGS
- - e n a b l e - c u v i d
- - e n a b l e - f f n v c o d e c
- - e n a b l e - n v d e c
- - e n a b l e - h w a c c e l = h 2 6 4 _ n v d e c
- - e n a b l e - h w a c c e l = v p 8 _ n v d e c
- - e n a b l e - h w a c c e l = v p 9 _ n v d e c
)
list ( APPEND FFmpeg_HWACCEL_LIBRARIES ${ FFNVCODEC_LIBRARIES } )
list ( APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${ FFNVCODEC_INCLUDE_DIRS } )
list ( APPEND FFmpeg_HWACCEL_LDFLAGS ${ FFNVCODEC_LDFLAGS } )
message ( STATUS "ffnvcodec libraries version ${FFNVCODEC_VERSION} found" )
# f f n v e n c c o u l d l o a d C U D A l i b r a r i e s a t t h e r u n t i m e u s i n g d l o p e n / d l s y m o r L o a d L i b r a r y / G e t P r o c A d d r e s s
# h e r e w e h a n d l e t h e h a r d - l i n k i n g s e n a r i o w h e r e C U D A i s l i n k e d d u r i n g c o m p i l a t i o n
if ( CUDA_FOUND )
# T h i s l i n e c a u s e s b u i l d e r r o r i f C U D A _ I N C L U D E _ D I R S i s a n y t h i n g b u t a s i n g l e n o n - e m p t y v a l u e
# list ( APPEND FFmpeg_HWACCEL_FLAGS --extra-cflags=-I ${ CUDA_INCLUDE_DIRS } )
list ( APPEND FFmpeg_HWACCEL_LIBRARIES ${ CUDA_LIBRARIES } )
list ( APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${ CUDA_INCLUDE_DIRS } )
list ( APPEND FFmpeg_HWACCEL_LDFLAGS ${ CUDA_LDFLAGS } )
message ( STATUS "CUDA libraries found, hard-linking will be performed" )
endif ( CUDA_FOUND )
endif ( )
find_program ( BASH_PROGRAM bash REQUIRED )
if ( VDPAU_FOUND )
list ( APPEND FFmpeg_HWACCEL_FLAGS
- - e n a b l e - v d p a u
- - e n a b l e - h w a c c e l = h 2 6 4 _ v d p a u
- - e n a b l e - h w a c c e l = v p 9 _ v d p a u
)
list ( APPEND FFmpeg_HWACCEL_LIBRARIES ${ VDPAU_LIBRARIES } )
list ( APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${ VDPAU_INCLUDE_DIRS } )
list ( APPEND FFmpeg_HWACCEL_LDFLAGS ${ VDPAU_LDFLAGS } )
message ( STATUS "vdpau libraries version ${VDPAU_VERSION} found" )
else ( )
list ( APPEND FFmpeg_HWACCEL_FLAGS --disable-vdpau )
endif ( )
set ( FFmpeg_CROSS_COMPILE_FLAGS "" )
if ( ANDROID )
string ( TOLOWER "${CMAKE_HOST_SYSTEM_NAME}" FFmpeg_HOST_SYSTEM_NAME )
set ( TOOLCHAIN "${ANDROID_NDK}/toolchains/llvm/prebuilt/${FFmpeg_HOST_SYSTEM_NAME}-${CMAKE_HOST_SYSTEM_PROCESSOR}" )
set ( SYSROOT "${TOOLCHAIN}/sysroot" )
set ( FFmpeg_CPU "armv8-a" )
list ( APPEND FFmpeg_CROSS_COMPILE_FLAGS
- - a r c h = a r m 6 4
# - - c p u = $ { F F m p e g _ C P U }
- - e n a b l e - c r o s s - c o m p i l e
- - c r o s s - p r e f i x = $ { T O O L C H A I N } / b i n / a a r c h 6 4 - l i n u x - a n d r o i d -
- - s y s r o o t = $ { S Y S R O O T }
- - t a r g e t - o s = a n d r o i d
- - e x t r a - l d f l a g s = " - - l d - p a t h = $ { T O O L C H A I N } / b i n / l d . l l d "
- - e x t r a - l d f l a g s = " - n o s t d l i b "
)
endif ( )
find_program ( BASH_PROGRAM bash REQUIRED )
# ` c o n f i g u r e ` p a r a m e t e r s b u i l d s o n l y e x a c t l y w h a t y u z u n e e d s f r o m F F m p e g
# ` - - d i s a b l e - v d p a u ` i s n e e d e d t o a v o i d l i n k i n g i s s u e s
set ( FFmpeg_CC ${ CMAKE_C_COMPILER_LAUNCHER } ${ CMAKE_C_COMPILER } )
set ( FFmpeg_CXX ${ CMAKE_CXX_COMPILER_LAUNCHER } ${ CMAKE_CXX_COMPILER } )
add_custom_command (
O U T P U T
$ { F F m p e g _ M A K E F I L E }
C O M M A N D
$ { B A S H _ P R O G R A M } $ { F F m p e g _ P R E F I X } / c o n f i g u r e
- - d i s a b l e - a v d e v i c e
- - d i s a b l e - a v f o r m a t
- - d i s a b l e - d o c
- - d i s a b l e - e v e r y t h i n g
- - d i s a b l e - f f m p e g
- - d i s a b l e - f f p r o b e
- - d i s a b l e - n e t w o r k
- - d i s a b l e - p o s t p r o c
- - d i s a b l e - s w r e s a m p l e
- - e n a b l e - d e c o d e r = h 2 6 4
- - e n a b l e - d e c o d e r = v p 8
- - e n a b l e - d e c o d e r = v p 9
- - e n a b l e - f i l t e r = y a d i f , s c a l e
- - c c = " $ { F F m p e g _ C C } "
- - c x x = " $ { F F m p e g _ C X X } "
$ { F F m p e g _ H W A C C E L _ F L A G S }
$ { F F m p e g _ C R O S S _ C O M P I L E _ F L A G S }
W O R K I N G _ D I R E C T O R Y
$ { F F m p e g _ B U I L D _ D I R }
set ( FFmpeg_CROSS_COMPILE_FLAGS "" )
if ( ANDROID )
string ( TOLOWER "${CMAKE_HOST_SYSTEM_NAME}" FFmpeg_HOST_SYSTEM_NAME )
set ( TOOLCHAIN "${ANDROID_NDK}/toolchains/llvm/prebuilt/${FFmpeg_HOST_SYSTEM_NAME}-${CMAKE_HOST_SYSTEM_PROCESSOR}" )
set ( SYSROOT "${TOOLCHAIN}/sysroot" )
set ( FFmpeg_CPU "armv8-a" )
list ( APPEND FFmpeg_CROSS_COMPILE_FLAGS
- - a r c h = a r m 6 4
# - - c p u = $ { F F m p e g _ C P U }
- - e n a b l e - c r o s s - c o m p i l e
- - c r o s s - p r e f i x = $ { T O O L C H A I N } / b i n / a a r c h 6 4 - l i n u x - a n d r o i d -
- - s y s r o o t = $ { S Y S R O O T }
- - t a r g e t - o s = a n d r o i d
- - e x t r a - l d f l a g s = " - - l d - p a t h = $ { T O O L C H A I N } / b i n / l d . l l d "
- - e x t r a - l d f l a g s = " - n o s t d l i b "
)
)
unset ( FFmpeg_CC )
unset ( FFmpeg_CXX )
unset ( FFmpeg_HWACCEL_FLAGS )
unset ( FFmpeg_CROSS_COMPILE_FLAGS )
endif ( )
# W o r k a r o u n d f o r U b u n t u 1 8 . 0 4 ' s o l d e r v e r s i o n o f m a k e n o t b e i n g a b l e t o c a l l m a k e a s a c h i l d
# w i t h c o n t e x t o f t h e j o b s e r v e r . A l s o h e l p s n i n j a u s e r s .
execute_process (
C O M M A N D
n p r o c
O U T P U T _ V A R I A B L E
S Y S T E M _ T H R E A D S )
# ` c o n f i g u r e ` p a r a m e t e r s b u i l d s o n l y e x a c t l y w h a t y u z u n e e d s f r o m F F m p e g
# ` - - d i s a b l e - v d p a u ` i s n e e d e d t o a v o i d l i n k i n g i s s u e s
set ( FFmpeg_CC ${ CMAKE_C_COMPILER_LAUNCHER } ${ CMAKE_C_COMPILER } )
set ( FFmpeg_CXX ${ CMAKE_CXX_COMPILER_LAUNCHER } ${ CMAKE_CXX_COMPILER } )
add_custom_command (
O U T P U T
$ { F F m p e g _ M A K E F I L E }
C O M M A N D
$ { B A S H _ P R O G R A M } $ { F F m p e g _ P R E F I X } / c o n f i g u r e
- - d i s a b l e - a v d e v i c e
- - d i s a b l e - a v f o r m a t
- - d i s a b l e - d o c
- - d i s a b l e - e v e r y t h i n g
- - d i s a b l e - f f m p e g
- - d i s a b l e - f f p r o b e
- - d i s a b l e - n e t w o r k
- - d i s a b l e - p o s t p r o c
- - d i s a b l e - s w r e s a m p l e
- - e n a b l e - d e c o d e r = h 2 6 4
- - e n a b l e - d e c o d e r = v p 8
- - e n a b l e - d e c o d e r = v p 9
- - e n a b l e - f i l t e r = y a d i f , s c a l e
- - c c = " $ { F F m p e g _ C C } "
- - c x x = " $ { F F m p e g _ C X X } "
$ { F F m p e g _ H W A C C E L _ F L A G S }
$ { F F m p e g _ C R O S S _ C O M P I L E _ F L A G S }
W O R K I N G _ D I R E C T O R Y
$ { F F m p e g _ B U I L D _ D I R }
)
unset ( FFmpeg_CC )
unset ( FFmpeg_CXX )
unset ( FFmpeg_HWACCEL_FLAGS )
unset ( FFmpeg_CROSS_COMPILE_FLAGS )
set ( FFmpeg_BUILD_LIBRARIES ${ FFmpeg_LIBRARIES } )
add_custom_command (
O U T P U T
$ { F F m p e g _ B U I L D _ L I B R A R I E S }
C O M M A N D
m a k e - j $ { S Y S T E M _ T H R E A D S }
W O R K I N G _ D I R E C T O R Y
$ { F F m p e g _ B U I L D _ D I R }
)
# W o r k a r o u n d f o r U b u n t u 1 8 . 0 4 ' s o l d e r v e r s i o n o f m a k e n o t b e i n g a b l e t o c a l l m a k e a s a c h i l d
# w i t h c o n t e x t o f t h e j o b s e r v e r . A l s o h e l p s n i n j a u s e r s .
execute_process (
C O M M A N D
n p r o c
O U T P U T _ V A R I A B L E
S Y S T E M _ T H R E A D S )
set ( FFmpeg_INCLUDE_DIR
" $ { F F m p e g _ P R E F I X } ; $ { F F m p e g _ B U I L D _ D I R } ; $ { F F m p e g _ H W A C C E L _ I N C L U D E _ D I R S } "
C A C H E P A T H " P a t h t o F F m p e g h e a d e r s " F O R C E )
set ( FFmpeg_BUILD_LIBRARIES ${ FFmpeg_LIBRARIES } )
add_custom_command (
O U T P U T
$ { F F m p e g _ B U I L D _ L I B R A R I E S }
C O M M A N D
m a k e - j $ { S Y S T E M _ T H R E A D S }
W O R K I N G _ D I R E C T O R Y
$ { F F m p e g _ B U I L D _ D I R }
)
set ( FFmpeg_LDFLAGS
" $ { F F m p e g _ H W A C C E L _ L D F L A G S } "
C A C H E S T R I N G " F F m p e g l i n k e r f l a g s " F O R C E )
set ( FFmpeg_INCLUDE_DIR
" $ { F F m p e g _ P R E F I X } ; $ { F F m p e g _ B U I L D _ D I R } ; $ { F F m p e g _ H W A C C E L _ I N C L U D E _ D I R S } "
C A C H E P A T H " P a t h t o F F m p e g h e a d e r s " F O R C E )
# A L L m a k e s t h i s c u s t o m t a r g e t b u i l d e v e r y t i m e
# b u t i t w o n ' t a c t u a l l y b u i l d i f t h e D E P E N D S p a r a m e t e r i s u p t o d a t e
add_custom_target ( ffmpeg-configure ALL DEPENDS ${ FFmpeg_MAKEFILE } )
add_custom_target ( ffmpeg-build ALL DEPENDS ${ FFmpeg_BUILD_LIBRARIES } ffmpeg-configure )
link_libraries ( ${ FFmpeg_LIBVA_LIBRARIES } )
set ( FFmpeg_LIBRARIES ${ FFmpeg_BUILD_LIBRARIES } ${ FFmpeg_HWACCEL_LIBRARIES }
C A C H E P A T H " P a t h s t o F F m p e g l i b r a r i e s " F O R C E )
unset ( FFmpeg_BUILD_LIBRARIES )
unset ( FFmpeg_HWACCEL_FLAGS )
unset ( FFmpeg_HWACCEL_INCLUDE_DIRS )
unset ( FFmpeg_HWACCEL_LDFLAGS )
unset ( FFmpeg_HWACCEL_LIBRARIES )
set ( FFmpeg_LDFLAGS
" $ { F F m p e g _ H W A C C E L _ L D F L A G S } "
C A C H E S T R I N G " F F m p e g l i n k e r f l a g s " F O R C E )
if ( FFmpeg_FOUND )
message ( STATUS "Found FFmpeg version ${FFmpeg_VERSION}" )
else ( )
message ( FATAL_ERROR "FFmpeg not found" )
endif ( )
# A L L m a k e s t h i s c u s t o m t a r g e t b u i l d e v e r y t i m e
# b u t i t w o n ' t a c t u a l l y b u i l d i f t h e D E P E N D S p a r a m e t e r i s u p t o d a t e
add_custom_target ( ffmpeg-configure ALL DEPENDS ${ FFmpeg_MAKEFILE } )
add_custom_target ( ffmpeg-build ALL DEPENDS ${ FFmpeg_BUILD_LIBRARIES } ffmpeg-configure )
link_libraries ( ${ FFmpeg_LIBVA_LIBRARIES } )
set ( FFmpeg_LIBRARIES ${ FFmpeg_BUILD_LIBRARIES } ${ FFmpeg_HWACCEL_LIBRARIES }
C A C H E P A T H " P a t h s t o F F m p e g l i b r a r i e s " F O R C E )
unset ( FFmpeg_BUILD_LIBRARIES )
unset ( FFmpeg_HWACCEL_FLAGS )
unset ( FFmpeg_HWACCEL_INCLUDE_DIRS )
unset ( FFmpeg_HWACCEL_LDFLAGS )
unset ( FFmpeg_HWACCEL_LIBRARIES )
if ( FFmpeg_FOUND )
message ( STATUS "Found FFmpeg version ${FFmpeg_VERSION}" )
else ( )
message ( FATAL_ERROR "FFmpeg not found" )
endif ( )
elseif ( ANDROID )
elseif ( ANDROID )
# U s e y u z u F F m p e g b i n a r i e s
# U s e y u z u F F m p e g b i n a r i e s
if ( ARCHITECTURE_arm64 )
if ( ARCHITECTURE_arm64 )
@ -256,18 +256,21 @@ elseif(ANDROID)
elseif ( WIN32 )
elseif ( WIN32 )
# U s e y u z u F F m p e g b i n a r i e s
# U s e y u z u F F m p e g b i n a r i e s
set ( FFmpeg_EXT_NAME "ffmpeg-7.1.1" )
set ( FFmpeg_EXT_NAME "ffmpeg-7.1.1" )
set ( FFmpeg_PATH "${CMAKE_BINARY_DIR}/externals/${FFmpeg_EXT_NAME}" )
download_bundled_external ( "ffmpeg/" ${ FFmpeg_EXT_NAME } "" )
if ( ARCHITECTURE_x86_64 )
download_bundled_external ( "ffmpeg/" ${ FFmpeg_EXT_NAME } "" )
set ( FFmpeg_PATH "${CMAKE_BINARY_DIR}/externals/${FFmpeg_EXT_NAME}" )
endif ( )
set ( FFmpeg_FOUND YES )
set ( FFmpeg_FOUND YES )
set ( FFmpeg_INCLUDE_DIR "${FFmpeg_PATH}/include" CACHE PATH "Path to FFmpeg headers" FORCE )
set ( FFmpeg_INCLUDE_DIR "${FFmpeg_PATH}/include" CACHE PATH "Path to FFmpeg headers" FORCE )
set ( FFmpeg_LIBRARY_DIR "${FFmpeg_PATH}/bin" CACHE PATH "Path to FFmpeg library directory" FORCE )
set ( FFmpeg_LIBRARY_DIR "${FFmpeg_PATH}/bin" CACHE PATH "Path to FFmpeg library directory" FORCE )
set ( FFmpeg_LDFLAGS "" CACHE STRING "FFmpeg linker flags" FORCE )
set ( FFmpeg_LDFLAGS "" CACHE STRING "FFmpeg linker flags" FORCE )
set ( FFmpeg_LIBRARIES
set ( FFmpeg_LIBRARIES
$ { F F m p e g _ L I B R A R Y _ D I R } / s w s c a l e . l i b
$ { F F m p e g _ L I B R A R Y _ D I R } / a v c o d e c . l i b
$ { F F m p e g _ L I B R A R Y _ D I R } / a v f i l t e r . l i b
$ { F F m p e g _ L I B R A R Y _ D I R } / a v u t i l . l i b
C A C H E P A T H " P a t h s t o F F m p e g l i b r a r i e s " F O R C E )
$ { F F m p e g _ L I B R A R Y _ D I R } / s w s c a l e . l i b
$ { F F m p e g _ L I B R A R Y _ D I R } / a v c o d e c . l i b
$ { F F m p e g _ L I B R A R Y _ D I R } / a v f i l t e r . l i b
$ { F F m p e g _ L I B R A R Y _ D I R } / a v u t i l . l i b
C A C H E P A T H " P a t h s t o F F m p e g l i b r a r i e s " F O R C E )
# e x p o r t e d v a r i a b l e s
# e x p o r t e d v a r i a b l e s
set ( FFmpeg_PATH "${FFmpeg_PATH}" PARENT_SCOPE )
set ( FFmpeg_PATH "${FFmpeg_PATH}" PARENT_SCOPE )
set ( FFmpeg_LDFLAGS "${FFmpeg_LDFLAGS}" PARENT_SCOPE )
set ( FFmpeg_LDFLAGS "${FFmpeg_LDFLAGS}" PARENT_SCOPE )