summaryrefslogtreecommitdiff
path: root/subprojects/packagefiles/ffmpeg-compat
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/packagefiles/ffmpeg-compat')
-rw-r--r--subprojects/packagefiles/ffmpeg-compat/ffmpeg.git-effadce6c756247ea8bae32dc13bb3e6f464f0eb.patch73
-rw-r--r--subprojects/packagefiles/ffmpeg-compat/meson.build197
2 files changed, 270 insertions, 0 deletions
diff --git a/subprojects/packagefiles/ffmpeg-compat/ffmpeg.git-effadce6c756247ea8bae32dc13bb3e6f464f0eb.patch b/subprojects/packagefiles/ffmpeg-compat/ffmpeg.git-effadce6c756247ea8bae32dc13bb3e6f464f0eb.patch
new file mode 100644
index 0000000..b4fec43
--- /dev/null
+++ b/subprojects/packagefiles/ffmpeg-compat/ffmpeg.git-effadce6c756247ea8bae32dc13bb3e6f464f0eb.patch
@@ -0,0 +1,73 @@
+From: Rémi Denis-Courmont <remi@remlab.net>
+Date: Sun, 16 Jul 2023 15:18:02 +0000 (+0300)
+Subject: avcodec/x86/mathops: clip constants used with shift instructions within inline assembly
+X-Git-Tag: n6.1~1007
+X-Git-Url: http://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff_plain/effadce6c756247ea8bae32dc13bb3e6f464f0eb
+
+avcodec/x86/mathops: clip constants used with shift instructions within inline assembly
+
+Fixes assembling with binutil as >= 2.41
+
+Signed-off-by: James Almer <jamrial@gmail.com>
+---
+
+diff --git a/libavcodec/x86/mathops.h b/libavcodec/x86/mathops.h
+index 6298f5ed19..ca7e2dffc1 100644
+--- a/libavcodec/x86/mathops.h
++++ b/libavcodec/x86/mathops.h
+@@ -35,12 +35,20 @@
+ static av_always_inline av_const int MULL(int a, int b, unsigned shift)
+ {
+ int rt, dummy;
++ if (__builtin_constant_p(shift))
+ __asm__ (
+ "imull %3 \n\t"
+ "shrdl %4, %%edx, %%eax \n\t"
+ :"=a"(rt), "=d"(dummy)
+- :"a"(a), "rm"(b), "ci"((uint8_t)shift)
++ :"a"(a), "rm"(b), "i"(shift & 0x1F)
+ );
++ else
++ __asm__ (
++ "imull %3 \n\t"
++ "shrdl %4, %%edx, %%eax \n\t"
++ :"=a"(rt), "=d"(dummy)
++ :"a"(a), "rm"(b), "c"((uint8_t)shift)
++ );
+ return rt;
+ }
+
+@@ -113,19 +121,31 @@ __asm__ volatile(\
+ // avoid +32 for shift optimization (gcc should do that ...)
+ #define NEG_SSR32 NEG_SSR32
+ static inline int32_t NEG_SSR32( int32_t a, int8_t s){
++ if (__builtin_constant_p(s))
+ __asm__ ("sarl %1, %0\n\t"
+ : "+r" (a)
+- : "ic" ((uint8_t)(-s))
++ : "i" (-s & 0x1F)
+ );
++ else
++ __asm__ ("sarl %1, %0\n\t"
++ : "+r" (a)
++ : "c" ((uint8_t)(-s))
++ );
+ return a;
+ }
+
+ #define NEG_USR32 NEG_USR32
+ static inline uint32_t NEG_USR32(uint32_t a, int8_t s){
++ if (__builtin_constant_p(s))
+ __asm__ ("shrl %1, %0\n\t"
+ : "+r" (a)
+- : "ic" ((uint8_t)(-s))
++ : "i" (-s & 0x1F)
+ );
++ else
++ __asm__ ("shrl %1, %0\n\t"
++ : "+r" (a)
++ : "c" ((uint8_t)(-s))
++ );
+ return a;
+ }
+
diff --git a/subprojects/packagefiles/ffmpeg-compat/meson.build b/subprojects/packagefiles/ffmpeg-compat/meson.build
new file mode 100644
index 0000000..7aeeb71
--- /dev/null
+++ b/subprojects/packagefiles/ffmpeg-compat/meson.build
@@ -0,0 +1,197 @@
+project('ffmpeg', 'c', version: '3.4.14', meson_version: '>=0.57.0')
+
+ffmpeg_version_string = meson.project_version()
+
+compiler = meson.get_compiler('c')
+
+cpu = target_machine.cpu_family()
+is_64bit = (cpu == 'x86_64' or cpu == 'aarch64')
+is_debug = get_option('debug')
+is_minsize = get_option('optimization') == 's'
+is_linux = host_machine.system() == 'linux'
+is_windows = host_machine.system() == 'windows'
+is_msvc = compiler.get_id() == 'msvc' or compiler.get_id() == 'clang-cl'
+is_mingw = is_windows and not is_msvc
+is_android = host_machine.system() == 'android'
+
+extra_options = []
+
+if not is_debug
+ extra_options += ['--disable-debug']
+endif
+
+if is_minsize
+ extra_options += ['--enable-small']
+endif
+
+extra_options += ['--arch=' + cpu]
+extra_options += ['--cc=' + compiler.cmd_array()[0]]
+if meson.is_cross_build()
+ if is_msvc
+ extra_options += ['--ld=' + compiler.get_linker_id()]
+ endif
+ extra_options += ['--ar=' + meson.get_external_property('ar', 'ar')]
+ extra_options += ['--nm=' + meson.get_external_property('nm', 'nm')]
+endif
+
+if cpu == 'x86_64' or cpu == 'x86'
+ extra_options += ['--enable-x86asm']
+endif
+
+if is_windows
+ extra_options += ['--extra-cflags=-D_WIN32_WINNT=0x0502'] # Windows Server 2003 with SP1, Windows XP with SP2.
+ if is_64bit
+ extra_options += ['--target-os=win64']
+ else
+ extra_options += ['--target-os=win32']
+ endif
+ if is_msvc
+ extra_options += ['--toolchain=msvc']
+ endif
+ extra_options += ['--enable-w32threads']
+elif is_android
+ extra_options += ['--target-os=android']
+endif
+
+#'--extra-ldflags=-Lbuild/subprojects/libalabaster -l:libalabaster.a',
+#'--malloc-prefix=al_',
+
+decoders = 'flac,mp3,mp3float,aac,opus,vorbis,h264,hevc,av1,vp9'
+decoders += ',pcm_s32be,pcm_s32le,pcm_s24be,pcm_s24le,pcm_s16be,pcm_s16le'
+#decoders += ',pcm_f32be,pcm_f32le,pcm_s32le_planar,pcm_s16be_planar,pcm_s16le_planar'
+decoders += ',dca,eac3'
+decoders += ',pcm_dvd,mpegvideo,mpeg2video'
+#decoders += ',ass,srt'
+
+demuxers = ''
+parsers = ''
+if not get_option('sink-only')
+ demuxers += 'flac,mp3,aac,wav,matroska,mov,avi'
+ demuxers += ',pcm_s32be,pcm_s32le,pcm_s24be,pcm_s24le,pcm_s16be,pcm_s16le'
+ #demuxers += ',pcm_f32be,pcm_f32le,pcm_s32le_planar,pcm_s16be_planar,pcm_s16le_planar'
+ demuxers += ',eac3'
+ demuxers += ',mpegts,mpegtsraw,mpegps,mpegvideo'
+ #demuxers += ',ass,srt'
+ parsers += 'aac,opus,h264,hevc,av1,vp9'
+ parsers += ',dca'
+ parsers += ',mpegaudio,mpegvideo,dvd_nav'
+ extra_options += ['--enable-bzlib'] # matroska
+endif
+
+extra_options += ['--enable-zlib']
+decoders += ',png,apng,mjpeg,jpeg2000,gif,'
+if not get_option('sink-only')
+ demuxers += ',image_png_pipe,image2,mjpeg,image2pipe,image_jpeg_pipe,gif'
+ parsers += ',png,mjpeg,jpeg2000,gif'
+endif
+
+bsfs = ''
+if not get_option('sink-only')
+ bsfs += 'extract_extradata,mp3_header_decompress'
+endif
+
+hwaccels = ''
+if get_option('codec-hwaccel').enabled()
+ if get_option('renderer-api') == 'vulkan'
+ extra_options += ['--enable-vulkan']
+ hwaccels += 'h264_vulkan,hevc_vulkan,av1_vulkan,vp9_vulkan'
+ elif is_windows
+ extra_options += ['--enable-d3d11va']
+ hwaccels += 'h264_d3d11va,hevc_d3d11va,av1_d3d11va,vp9_d3d11va'
+ hwaccels += ',h264_d3d11va2,hevc_d3d11va2,av1_d3d11va2,vp9_d3d11va2'
+ #extra_options += ['--enable-dxva2']
+ #hwaccels += ',h264_dxva2,hevc_dxva2,av1_dxva2,vp9_dxva2'
+ elif is_android
+ extra_options += ['--enable-jni', '--enable-mediacodec']
+ decoders += ',h264_mediacodec,hevc_mediacodec,av1_mediacodec,vp9_mediacodec'
+ elif is_linux
+ extra_options += ['--enable-vaapi']
+ endif
+else
+ extra_options += ['--disable-hwaccels']
+endif
+
+protocols = ''
+if not get_option('sink-only')
+ protocols += 'cache'
+endif
+
+if decoders != ''
+ extra_options += ['--enable-decoder=' + decoders]
+endif
+
+if demuxers != ''
+ extra_options += ['--enable-demuxer=' + demuxers]
+endif
+
+if parsers != ''
+ extra_options += ['--enable-parser=' + parsers]
+endif
+
+if bsfs != ''
+ extra_options += ['--enable-bsf=' + bsfs]
+endif
+
+if protocols != ''
+ extra_options += ['--enable-protocol=' + protocols]
+endif
+
+if hwaccels != ''
+ extra_options += ['--enable-hwaccel=' + hwaccels]
+endif
+
+if is_linux or is_mingw
+ extra_options += ['--enable-libsoxr']
+endif
+
+ext_proj = import('unstable-external_project')
+
+proj = ext_proj.add_project('configure',
+ configure_options: [
+ '--prefix=@PREFIX@',
+ '--libdir=@PREFIX@/@LIBDIR@',
+ '--incdir=@PREFIX@/@INCLUDEDIR@',
+ '--enable-pic',
+ '--enable-static',
+ '--disable-shared',
+ '--disable-logging',
+ '--disable-all',
+ '--disable-autodetect',
+ '--disable-everything',
+ '--disable-programs',
+ '--disable-doc',
+ '--disable-htmlpages',
+ '--disable-manpages',
+ '--disable-podpages',
+ '--disable-txtpages',
+ '--disable-safe-bitstream-reader',
+ '--disable-schannel',
+ '--disable-network',
+ '--disable-securetransport',
+ #'--disable-iconv',
+ '--enable-gpl',
+ '--enable-version3',
+ '--disable-nonfree',
+ '--enable-runtime-cpudetect',
+ '--enable-asm',
+ '--enable-inline-asm',
+ '--enable-avutil',
+ '--enable-avformat',
+ '--enable-avcodec',
+ #'--enable-avdevice',
+ '--enable-swresample',
+ '--enable-swscale',
+ '--disable-indevs',
+ '--disable-outdevs',
+ extra_options
+ ],
+ cross_configure_options: ['--enable-cross-compile'],
+ verbose: true)
+
+avutil = proj.dependency('avutil')
+avformat = proj.dependency('avformat')
+avcodec = proj.dependency('avcodec')
+#avdevice = proj.dependency('avdevice')
+swresample = proj.dependency('swresample')
+swscale = proj.dependency('swscale')
+ffmpeg_include = declare_dependency(include_directories: include_directories('.', 'build/'))