diff options
| author | 2025-05-25 18:49:20 -0400 | |
|---|---|---|
| committer | 2025-05-25 18:49:20 -0400 | |
| commit | 2fa7ea95c891981684a55b41977172d040c2cc55 (patch) | |
| tree | d349e810b3178045a420b625f6dbe5634b64807b /subprojects/packagefiles/ffmpeg-compat | |
| parent | 01f852081b1291da7fc342976bf5228ffb618736 (diff) | |
| download | camu-2fa7ea95c891981684a55b41977172d040c2cc55.tar.gz camu-2fa7ea95c891981684a55b41977172d040c2cc55.tar.bz2 camu-2fa7ea95c891981684a55b41977172d040c2cc55.zip | |
Support Windows XP (Old FFmpeg and build fixes)
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'subprojects/packagefiles/ffmpeg-compat')
| -rw-r--r-- | subprojects/packagefiles/ffmpeg-compat/ffmpeg.git-effadce6c756247ea8bae32dc13bb3e6f464f0eb.patch | 73 | ||||
| -rw-r--r-- | subprojects/packagefiles/ffmpeg-compat/meson.build | 197 |
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/')) |