From 5eca9224306d4a5ada3687840b420acbbd9d77b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Damstedt=20Rasmussen?= Date: Wed, 30 Oct 2024 09:04:16 +0100 Subject: [PATCH] Change to FFmpeg v4.0 Add VideoToolBox dependency to macOS. AudioToolBox was already there but is not introduced before FFmpeg v4.0. Update GNU assembler for FFmpeg v4.0. --- .../TeamTalkLib/avstream/FFmpegStreamer.cpp | 10 +- .../TeamTalkLib/build/ffmpeg/CMakeLists.txt | 102 ++++++++++++------ 2 files changed, 72 insertions(+), 40 deletions(-) diff --git a/Library/TeamTalkLib/avstream/FFmpegStreamer.cpp b/Library/TeamTalkLib/avstream/FFmpegStreamer.cpp index 53ef180960..5741936d8b 100644 --- a/Library/TeamTalkLib/avstream/FFmpegStreamer.cpp +++ b/Library/TeamTalkLib/avstream/FFmpegStreamer.cpp @@ -39,7 +39,7 @@ extern "C" { #include #include #include -#include +#include #include #include #include @@ -694,8 +694,8 @@ AVFilterGraph* createAudioFilterGraph(AVFormatContext *fmt_ctx, //init filters AVFilterGraph *filter_graph = NULL; - AVFilter *abuffersrc = avfilter_get_by_name("abuffer"); - AVFilter *abuffersink = avfilter_get_by_name("abuffersink"); + const AVFilter *abuffersrc = avfilter_get_by_name("abuffer"); + const AVFilter *abuffersink = avfilter_get_by_name("abuffersink"); AVFilterInOut *outputs = avfilter_inout_alloc(); //TODO: Free?? AVFilterInOut *inputs = avfilter_inout_alloc(); //TODO: Free?? const enum AVSampleFormat out_sample_fmts[] = { AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE }; @@ -812,8 +812,8 @@ AVFilterGraph* createVideoFilterGraph(AVFormatContext *fmt_ctx, AVFilterGraph *filter_graph; char args[512]; int ret; - AVFilter *buffersrc = avfilter_get_by_name("buffer"); - AVFilter *buffersink = avfilter_get_by_name("buffersink"); + const AVFilter *buffersrc = avfilter_get_by_name("buffer"); + const AVFilter *buffersink = avfilter_get_by_name("buffersink"); AVFilterInOut *outputs = avfilter_inout_alloc(); AVFilterInOut *inputs = avfilter_inout_alloc(); const enum AVPixelFormat pix_fmts[] = { output_pixfmt, AV_PIX_FMT_NONE }; diff --git a/Library/TeamTalkLib/build/ffmpeg/CMakeLists.txt b/Library/TeamTalkLib/build/ffmpeg/CMakeLists.txt index c5f620527e..d6ac17b9f2 100644 --- a/Library/TeamTalkLib/build/ffmpeg/CMakeLists.txt +++ b/Library/TeamTalkLib/build/ffmpeg/CMakeLists.txt @@ -14,26 +14,38 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") ExternalProject_Add(ffmpeg-arm64-src GIT_REPOSITORY https://github.com/FFmpeg/FFmpeg - GIT_TAG n3.4.13 + GIT_TAG n4.0 GIT_SHALLOW TRUE UPDATE_COMMAND "" PREFIX ${TOOLCHAIN_BUILD_PREFIX}/ffmpeg-arm64 INSTALL_DIR ${TOOLCHAIN_INSTALL_PREFIX_FFMPEG}-arm64 - PATCH_COMMAND git apply ${CMAKE_CURRENT_LIST_DIR}/0001-Fix-signature-of-read_probe-AVProbeData-p-in-libavfo.patch - COMMAND git apply ${CMAKE_CURRENT_LIST_DIR}/0002-Fix-int-vs.-ptrdiff_t-signature-for-weight_h264_pixe.patch - CONFIGURE_COMMAND export PKG_CONFIG_PATH=${OPENSSL_DIR}/lib/pkgconfig && - /configure --prefix= --disable-iconv - --disable-libxcb --disable-libxcb-shm --disable-libxcb-xfixes - --disable-libxcb-shape --disable-securetransport - --disable-schannel --disable-xlib --disable-jack + CONFIGURE_COMMAND export PKG_CONFIG_PATH=${OPENSSL_DIR}/lib/pkgconfig && /configure + --prefix= + # External libraries: + --disable-iconv + --disable-libxcb + --disable-libxcb-shape + --disable-libxcb-shm + --disable-libxcb-xfixes --disable-lzma + --disable-schannel + --disable-sdl2 + --disable-securetransport + --disable-xlib + --enable-openssl + # Programs/docs + --disable-doc + --disable-programs + # Compile options (yasm does not work for arm64) + --disable-asm + --disable-optimizations + --disable-stripping + --enable-debug=3 --extra-cflags=-mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}\ -arch\ arm64 --extra-cxxflags=-mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}\ -arch\ arm64 --extra-ldexeflags=-mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}\ -arch\ arm64 - --disable-videotoolbox --disable-sdl2 --pkg-config-flags=--static - --enable-debug=3 --disable-optimizations --disable-stripping --enable-openssl - --enable-cross-compile --target-os=darwin --arch=arm64 --disable-asm - # Seems --arch=arm64 has no effect and '-arch arm64' has to be applied + --pkg-config-flags=--static + --enable-cross-compile --target-os=darwin --arch=arm64 BUILD_COMMAND make ${TOOLCHAIN_BUILD_MAKEJOBS} INSTALL_COMMAND make ${TOOLCHAIN_BUILD_MAKEJOBS} install BUILD_BYPRODUCTS /lib/libavdevice.a @@ -49,24 +61,36 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") ExternalProject_Add(ffmpeg-intel-src GIT_REPOSITORY https://github.com/FFmpeg/FFmpeg - GIT_TAG n3.4.13 + GIT_TAG n4.0 GIT_SHALLOW TRUE UPDATE_COMMAND "" PREFIX ${TOOLCHAIN_BUILD_PREFIX}/ffmpeg-intel INSTALL_DIR ${TOOLCHAIN_INSTALL_PREFIX_FFMPEG}-intel - PATCH_COMMAND git apply ${CMAKE_CURRENT_LIST_DIR}/0001-Fix-signature-of-read_probe-AVProbeData-p-in-libavfo.patch - COMMAND git apply ${CMAKE_CURRENT_LIST_DIR}/0002-Fix-int-vs.-ptrdiff_t-signature-for-weight_h264_pixe.patch - CONFIGURE_COMMAND export PKG_CONFIG_PATH=${OPENSSL_DIR}/lib/pkgconfig && - /configure --prefix= --disable-iconv - --disable-libxcb --disable-libxcb-shm --disable-libxcb-xfixes - --disable-libxcb-shape --disable-securetransport - --disable-schannel --disable-xlib --disable-jack + CONFIGURE_COMMAND export PKG_CONFIG_PATH=${OPENSSL_DIR}/lib/pkgconfig && /configure + --prefix= + # External libraries: + --disable-iconv + --disable-libxcb + --disable-libxcb-shape + --disable-libxcb-shm + --disable-libxcb-xfixes --disable-lzma + --disable-schannel + --disable-sdl2 + --disable-securetransport + --disable-xlib + --enable-openssl + # Programs/docs + --disable-doc + --disable-programs + # Compile options + --disable-optimizations + --disable-stripping + --enable-debug=3 --extra-cflags=-mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}\ -arch\ x86_64 --extra-cxxflags=-mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}\ -arch\ x86_64 --extra-ldexeflags=-mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}\ -arch\ x86_64 - --disable-videotoolbox --disable-sdl2 --pkg-config-flags=--static - --enable-debug=3 --disable-optimizations --disable-stripping --enable-openssl + --pkg-config-flags=--static --enable-cross-compile --target-os=darwin --arch=x86_64 BUILD_COMMAND make ${TOOLCHAIN_BUILD_MAKEJOBS} INSTALL_COMMAND make ${TOOLCHAIN_BUILD_MAKEJOBS} install @@ -126,6 +150,7 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") find_library(QUARTZCORE_LIBRARY QuartzCore) find_library(BZ2_LIBRARY bz2) find_library (AUDIOTOOLBOX_LIBRARY AudioToolBox) + find_library (VIDEOTOOLBOX_LIBRARY VideoToolBox) set (FFMPEG_LINK ${COCOA_LIBRARY} ${AVFOUNDATION_LIBRARY} ${COREMEDIA_LIBRARY} @@ -134,7 +159,8 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") ${VIDEODECODEACCELERATION_LIBRARY} ${QUARTZCORE_LIBRARY} ${BZ2_LIBRARY} - ${AUDIOTOOLBOX_LIBRARY}) + ${AUDIOTOOLBOX_LIBRARY} + ${VIDEOTOOLBOX_LIBRARY}) add_library(ffmpeg-avdevice STATIC IMPORTED GLOBAL) if (TOOLCHAIN_BUILD_EXTERNALPROJECTS) @@ -200,7 +226,7 @@ elseif (${CMAKE_SYSTEM_NAME} MATCHES "iOS") if (TOOLCHAIN_BUILD_EXTERNALPROJECTS) ExternalProject_Add(gas-preprocessor GIT_REPOSITORY https://github.com/FFmpeg/gas-preprocessor - GIT_TAG cbe8847 + GIT_TAG 7380ac2 UPDATE_COMMAND "" PREFIX ${TOOLCHAIN_BUILD_PREFIX}/gas-preprocessor INSTALL_DIR "" @@ -244,13 +270,11 @@ elseif (${CMAKE_SYSTEM_NAME} MATCHES "iOS") ExternalProject_Add(ffmpeg-src GIT_REPOSITORY https://github.com/FFmpeg/FFmpeg - GIT_TAG n3.4.13 + GIT_TAG n4.0 GIT_SHALLOW TRUE UPDATE_COMMAND "" PREFIX ${TOOLCHAIN_BUILD_PREFIX}/ffmpeg INSTALL_DIR ${TOOLCHAIN_INSTALL_PREFIX_FFMPEG} - PATCH_COMMAND git apply ${CMAKE_CURRENT_LIST_DIR}/0001-Fix-signature-of-read_probe-AVProbeData-p-in-libavfo.patch - COMMAND git apply ${CMAKE_CURRENT_LIST_DIR}/0002-Fix-int-vs.-ptrdiff_t-signature-for-weight_h264_pixe.patch CONFIGURE_COMMAND /configure --prefix= ${FFMPEG_CFG_FLAGS} BUILD_COMMAND make ${TOOLCHAIN_BUILD_MAKEJOBS} INSTALL_COMMAND make ${TOOLCHAIN_BUILD_MAKEJOBS} install @@ -332,16 +356,20 @@ elseif (${CMAKE_SYSTEM_NAME} MATCHES "Linux") if (TOOLCHAIN_BUILD_EXTERNALPROJECTS) ExternalProject_Add(ffmpeg-src GIT_REPOSITORY https://github.com/FFmpeg/FFmpeg - GIT_TAG n3.4.13 + GIT_TAG n4.0 GIT_SHALLOW TRUE UPDATE_COMMAND "" PREFIX ${TOOLCHAIN_BUILD_PREFIX}/ffmpeg INSTALL_DIR ${TOOLCHAIN_INSTALL_PREFIX_FFMPEG} - PATCH_COMMAND git apply ${CMAKE_CURRENT_LIST_DIR}/0001-Fix-signature-of-read_probe-AVProbeData-p-in-libavfo.patch - COMMAND git apply ${CMAKE_CURRENT_LIST_DIR}/0002-Fix-int-vs.-ptrdiff_t-signature-for-weight_h264_pixe.patch CONFIGURE_COMMAND /configure --prefix= - --enable-pic --enable-openssl --disable-jack + # External libraries: --disable-libxcb + --enable-openssl + # Programs/docs + --disable-doc + --disable-programs + # Compile options + --enable-pic BUILD_COMMAND make ${TOOLCHAIN_BUILD_MAKEJOBS} INSTALL_COMMAND make ${TOOLCHAIN_BUILD_MAKEJOBS} install BUILD_BYPRODUCTS /lib/libavdevice.a @@ -485,16 +513,20 @@ elseif (${CMAKE_SYSTEM_NAME} MATCHES "Android") ExternalProject_Add(ffmpeg-src GIT_REPOSITORY https://github.com/FFmpeg/FFmpeg - GIT_TAG n3.4.13 + GIT_TAG n4.0 GIT_SHALLOW TRUE UPDATE_COMMAND "" PREFIX ${TOOLCHAIN_BUILD_PREFIX}/ffmpeg INSTALL_DIR ${TOOLCHAIN_INSTALL_PREFIX_FFMPEG} - PATCH_COMMAND git apply ${CMAKE_CURRENT_LIST_DIR}/0001-Fix-signature-of-read_probe-AVProbeData-p-in-libavfo.patch - COMMAND git apply ${CMAKE_CURRENT_LIST_DIR}/0002-Fix-int-vs.-ptrdiff_t-signature-for-weight_h264_pixe.patch CONFIGURE_COMMAND ${FFMPEG_EXPORT} && /configure ${FFMPEG_CFG} --prefix= + # External libraries: + --disable-indev=v4l2 + # Programs/docs + --disable-doc + --disable-programs + # Compile options + --enable-pic --enable-cross-compile --sysroot=${CMAKE_SYSROOT} --target-os=android - --enable-pic --disable-doc --disable-programs --disable-indev=v4l2 BUILD_COMMAND ${FFMPEG_EXPORT} && make ${TOOLCHAIN_BUILD_MAKEJOBS} INSTALL_COMMAND ${FFMPEG_EXPORT} && make ${TOOLCHAIN_BUILD_MAKEJOBS} install BUILD_BYPRODUCTS /lib/libavdevice.a