mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-25 03:01:03 +00:00
subprojects: bump opus wrap to 1.5.2
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7085>
This commit is contained in:
parent
5d18d8a109
commit
03a60c9950
2 changed files with 5 additions and 310 deletions
|
@ -1,11 +1,9 @@
|
|||
[wrap-file]
|
||||
directory = opus-1.5.1
|
||||
source_url = https://downloads.xiph.org/releases/opus/opus-1.5.1.tar.gz
|
||||
source_fallback_url = https://gstreamer.freedesktop.org/data/src/mirror/opus-1.5.1.tar.gz
|
||||
source_filename = opus-1.5.1.tar.gz
|
||||
source_hash = b84610959b8d417b611aa12a22565e0a3732097c6389d19098d844543e340f85
|
||||
# Remove when bumping to 1.5.2
|
||||
diff_files = opus-1.5.1/fixes-from-main-branch.patch
|
||||
directory = opus-1.5.2
|
||||
source_url = https://downloads.xiph.org/releases/opus/opus-1.5.2.tar.gz
|
||||
source_fallback_url = https://gstreamer.freedesktop.org/data/src/mirror/opus-1.5.2.tar.gz
|
||||
source_filename = opus-1.5.2.tar.gz
|
||||
source_hash = 65c1d2f78b9f2fb20082c38cbe47c951ad5839345876e46941612ee87f9a7ce1
|
||||
|
||||
[provide]
|
||||
opus = opus_dep
|
||||
|
|
|
@ -1,303 +0,0 @@
|
|||
From 84a85e9e63ea687544375fbed3100051249a033b Mon Sep 17 00:00:00 2001
|
||||
From: Jean-Marc Valin <jmvalin@jmvalin.ca>
|
||||
Date: Tue, 12 Mar 2024 02:03:22 -0400
|
||||
Subject: [PATCH 1/8] Fix meson AVX2 fixed-point
|
||||
|
||||
---
|
||||
silk/meson.build | 4 +---
|
||||
1 file changed, 1 insertion(+), 3 deletions(-)
|
||||
|
||||
diff --git a/silk/meson.build b/silk/meson.build
|
||||
index 80a59b05..35d95578 100644
|
||||
--- a/silk/meson.build
|
||||
+++ b/silk/meson.build
|
||||
@@ -44,9 +44,7 @@ foreach intr_name : ['sse4_1', 'avx2', 'neon_intr']
|
||||
endif
|
||||
|
||||
intr_sources = get_variable('silk_sources_' + intr_name)
|
||||
- if opt_fixed_point
|
||||
- intr_sources += get_variable('silk_sources_fixed_' + intr_name)
|
||||
- else
|
||||
+ if not opt_fixed_point
|
||||
intr_sources += get_variable('silk_sources_float_' + intr_name)
|
||||
endif
|
||||
|
||||
--
|
||||
2.44.0
|
||||
|
||||
From 556c2d446b396cff11987ac1b74ed7bbf0297d78 Mon Sep 17 00:00:00 2001
|
||||
From: Jean-Marc Valin <jmvalin@jmvalin.ca>
|
||||
Date: Wed, 13 Mar 2024 15:11:08 -0400
|
||||
Subject: [PATCH 3/8] Adding MSVC AVX2 support for meson build
|
||||
|
||||
Extracted from this MR from Marcus Asteborg:
|
||||
https://gitlab.xiph.org/xiph/opus/-/merge_requests/82/
|
||||
---
|
||||
meson.build | 16 +++++++++-------
|
||||
1 file changed, 9 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/meson.build b/meson.build
|
||||
index 8624f0c3..2bb85d6f 100644
|
||||
--- a/meson.build
|
||||
+++ b/meson.build
|
||||
@@ -490,10 +490,10 @@ if not opt_intrinsics.disabled()
|
||||
elif host_cpu_family in ['x86', 'x86_64']
|
||||
# XXX: allow external override/specification of the flags
|
||||
x86_intrinsics = [
|
||||
- [ 'SSE', 'xmmintrin.h', '__m128', '_mm_setzero_ps()', ['-msse'] ],
|
||||
- [ 'SSE2', 'emmintrin.h', '__m128i', '_mm_setzero_si128()', ['-msse2'] ],
|
||||
- [ 'SSE4.1', 'smmintrin.h', '__m128i', '_mm_setzero_si128(); mtest = _mm_cmpeq_epi64(mtest, mtest)', ['-msse4.1'] ],
|
||||
- [ 'AVX2', 'immintrin.h', '__m256i', '_mm256_abs_epi32(_mm256_setzero_si256())', ['-mavx', '-mfma', '-mavx2'] ],
|
||||
+ [ 'SSE', 'xmmintrin.h', '__m128', '_mm_setzero_ps()', ['-msse'], [] ],
|
||||
+ [ 'SSE2', 'emmintrin.h', '__m128i', '_mm_setzero_si128()', ['-msse2'], [] ],
|
||||
+ [ 'SSE4.1', 'smmintrin.h', '__m128i', '_mm_setzero_si128(); mtest = _mm_cmpeq_epi64(mtest, mtest)', ['-msse4.1'], [] ],
|
||||
+ [ 'AVX2', 'immintrin.h', '__m256i', '_mm256_abs_epi32(_mm256_setzero_si256())', ['-mavx', '-mfma', '-mavx2'], ['/arch:AVX2'] ],
|
||||
]
|
||||
|
||||
foreach intrin : x86_intrinsics
|
||||
@@ -504,9 +504,11 @@ if not opt_intrinsics.disabled()
|
||||
return *((unsigned char *) &mtest) != 0;
|
||||
}'''.format(intrin[1],intrin[2],intrin[3])
|
||||
intrin_name = intrin[0]
|
||||
- # Intrinsics arguments are not available with MSVC-like compilers
|
||||
- intrin_args = cc.get_argument_syntax() == 'msvc' ? [] : intrin[4]
|
||||
- if cc.links(intrin_check, name : 'compiler supports @0@ intrinsics'.format(intrin_name))
|
||||
+ intrin_args = cc.get_argument_syntax() == 'msvc' ? intrin[5] : intrin[4]
|
||||
+ if cc.get_argument_syntax() == 'msvc' and intrin_args.length() == 0 and cc.links(intrin_check, name : 'compiler supports @0@ intrinsics'.format(intrin_name))
|
||||
+ may_have_intrin = true
|
||||
+ presume_intrin = opus_can_presume_simd
|
||||
+ elif cc.get_argument_syntax() != 'msvc' and cc.links(intrin_check, name : 'compiler supports @0@ intrinsics'.format(intrin_name))
|
||||
may_have_intrin = true
|
||||
presume_intrin = opus_can_presume_simd
|
||||
elif intrin_args.length() > 0
|
||||
--
|
||||
2.44.0
|
||||
|
||||
From e7d4e82bc065747d94829d93cc9d8a9d1eab7951 Mon Sep 17 00:00:00 2001
|
||||
From: "Timothy B. Terriberry" <tterribe@xiph.org>
|
||||
Date: Thu, 14 Mar 2024 08:00:53 -0700
|
||||
Subject: [PATCH 4/8] Fix _mm_loadu_si32 detection for vendored Clang.
|
||||
|
||||
Apple uses different __clang_major__ version numbers than upstream,
|
||||
so our test did not work.
|
||||
This caused compilation failures with, e.g., XCode 10.1, which
|
||||
reports __clang_major__ as 10 despite being forked from upstream's
|
||||
7.0 branch.
|
||||
|
||||
Fixes #2369
|
||||
|
||||
Signed-off-by: Jean-Marc Valin <jmvalin@jmvalin.ca>
|
||||
---
|
||||
celt/x86/x86cpu.h | 18 ++++++++++++++++--
|
||||
1 file changed, 16 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/celt/x86/x86cpu.h b/celt/x86/x86cpu.h
|
||||
index 8ae9be8d..1e5b6a4c 100644
|
||||
--- a/celt/x86/x86cpu.h
|
||||
+++ b/celt/x86/x86cpu.h
|
||||
@@ -68,8 +68,22 @@ int opus_select_arch(void);
|
||||
Use this to work around those restrictions (which should hopefully all get
|
||||
optimized to a single MOVD instruction).
|
||||
GCC implemented _mm_loadu_si32() since GCC 11; HOWEVER, there is a bug!
|
||||
- https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99754 */
|
||||
-# if !defined(_MSC_VER) && !OPUS_GNUC_PREREQ(11,3) && !(defined(__clang__) && (__clang_major__ >= 8))
|
||||
+ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99754
|
||||
+ LLVM implemented _mm_loadu_si32() since Clang 8.0, however the
|
||||
+ __clang_major__ version number macro is unreliable, as vendors
|
||||
+ (specifically, Apple) will use different numbering schemes than upstream.
|
||||
+ Clang's advice is "use feature detection", but they do not provide feature
|
||||
+ detection support for specific SIMD functions.
|
||||
+ We follow the approach from the SIMDe project and instead detect unrelated
|
||||
+ features that should be available in the version we want (see
|
||||
+ <https://github.com/simd-everywhere/simde/blob/master/simde/simde-detect-clang.h>).*/
|
||||
+# if defined(__clang__)
|
||||
+# if __has_warning("-Wextra-semi-stmt") || \
|
||||
+ __has_builtin(__builtin_rotateleft32)
|
||||
+# define OPUS_CLANG_8 (1)
|
||||
+# endif
|
||||
+# endif
|
||||
+# if !defined(_MSC_VER) && !OPUS_GNUC_PREREQ(11,3) && !defined(OPUS_CLANG_8)
|
||||
# include <string.h>
|
||||
# include <emmintrin.h>
|
||||
|
||||
--
|
||||
2.44.0
|
||||
|
||||
From ca901e65aab8d4b5b85d2cb2649819c24e0b1602 Mon Sep 17 00:00:00 2001
|
||||
From: Xavier Claessens <xavier.claessens@collabora.com>
|
||||
Date: Tue, 20 Jun 2023 08:18:00 -0400
|
||||
Subject: [PATCH 5/8] meson: Use pkgconfig generator
|
||||
|
||||
It is much less error prone because Meson can detect dependencies
|
||||
automatically. As bonus Meson will also generate the opus-uninstalled.pc
|
||||
file.
|
||||
|
||||
Signed-off-by: Jean-Marc Valin <jmvalin@jmvalin.ca>
|
||||
---
|
||||
meson.build | 28 +++++-----------------------
|
||||
1 file changed, 5 insertions(+), 23 deletions(-)
|
||||
|
||||
diff --git a/meson.build b/meson.build
|
||||
index 2bb85d6f..5638dd1d 100644
|
||||
--- a/meson.build
|
||||
+++ b/meson.build
|
||||
@@ -662,29 +662,11 @@ if not opt_tests.disabled()
|
||||
subdir('tests')
|
||||
endif
|
||||
|
||||
-# pkg-config files (not using pkg module so we can use the existing .pc.in file)
|
||||
-pkgconf = configuration_data()
|
||||
-
|
||||
-pkgconf.set('prefix', join_paths(get_option('prefix')))
|
||||
-pkgconf.set('exec_prefix', '${prefix}')
|
||||
-pkgconf.set('libdir', '${prefix}/@0@'.format(get_option('libdir')))
|
||||
-pkgconf.set('includedir', '${prefix}/@0@'.format(get_option('includedir')))
|
||||
-pkgconf.set('VERSION', opus_version)
|
||||
-pkgconf.set('PC_BUILD', pc_build)
|
||||
-pkgconf.set('LIBM', libm.found() ? '-lm' : '')
|
||||
-
|
||||
-pkg_install_dir = '@0@/pkgconfig'.format(get_option('libdir'))
|
||||
-
|
||||
-configure_file(input : 'opus.pc.in',
|
||||
- output : 'opus.pc',
|
||||
- configuration : pkgconf,
|
||||
- install_dir : pkg_install_dir)
|
||||
-
|
||||
-# The uninstalled one has hardcoded libtool + static lib stuff, skip it for now
|
||||
-#configure_file(input : 'opus-uninstalled.pc.in',
|
||||
-# output : 'opus-uninstalled.pc',
|
||||
-# configuration : pkgconf,
|
||||
-# install : false)
|
||||
+pkg = import('pkgconfig')
|
||||
+pkg.generate(opus_lib,
|
||||
+ description: 'Opus IETF audio codec (floating-point build)',
|
||||
+ subdirs: 'opus',
|
||||
+)
|
||||
|
||||
doxygen = find_program('doxygen', required: get_option('docs'))
|
||||
if doxygen.found()
|
||||
--
|
||||
2.44.0
|
||||
|
||||
From 12239ced101ffee481781a2eb3b8c88bea523085 Mon Sep 17 00:00:00 2001
|
||||
From: Jean-Marc Valin <jmvalin@jmvalin.ca>
|
||||
Date: Thu, 14 Mar 2024 15:17:33 -0400
|
||||
Subject: [PATCH 6/8] renaming DNN options in meson
|
||||
|
||||
---
|
||||
dnn/meson.build | 6 +++---
|
||||
meson.build | 20 ++++++++++++++++----
|
||||
meson_options.txt | 8 ++++----
|
||||
tests/meson.build | 4 ++++
|
||||
5 files changed, 28 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/dnn/meson.build b/dnn/meson.build
|
||||
index 737d4a02..7b324016 100644
|
||||
--- a/dnn/meson.build
|
||||
+++ b/dnn/meson.build
|
||||
@@ -1,12 +1,12 @@
|
||||
dnn_sources = sources['DEEP_PLC_SOURCES']
|
||||
|
||||
dred_sources = sources['DRED_SOURCES']
|
||||
-if opt_enable_dred
|
||||
+if opt_dred.enabled()
|
||||
dnn_sources += dred_sources
|
||||
endif
|
||||
|
||||
osce_sources = sources['OSCE_SOURCES']
|
||||
-if opt_enable_osce
|
||||
+if opt_osce.enabled()
|
||||
dnn_sources += osce_sources
|
||||
endif
|
||||
|
||||
@@ -51,7 +51,7 @@ if host_machine.system() == 'windows'
|
||||
endif
|
||||
|
||||
|
||||
-if opt_enable_deep_plc
|
||||
+if opt_deep_plc.enabled()
|
||||
dnn_lib = static_library('opus-dnn',
|
||||
dnn_sources,
|
||||
c_args: dnn_c_args,
|
||||
diff --git a/meson.build b/meson.build
|
||||
index 5638dd1d..d040ddfd 100644
|
||||
--- a/meson.build
|
||||
+++ b/meson.build
|
||||
@@ -146,9 +146,6 @@ opts = [
|
||||
[ 'fixed-point-debug', 'FIXED_DEBUG' ],
|
||||
[ 'custom-modes', 'CUSTOM_MODES' ],
|
||||
[ 'float-approx', 'FLOAT_APPROX' ],
|
||||
- [ 'enable-deep-plc', 'ENABLE_DEEP_PLC' ],
|
||||
- [ 'enable-dred', 'ENABLE_DRED' ],
|
||||
- [ 'enable-osce', 'ENABLE_OSCE' ],
|
||||
[ 'assertions', 'ENABLE_ASSERTIONS' ],
|
||||
[ 'hardening', 'ENABLE_HARDENING' ],
|
||||
[ 'fuzzing', 'FUZZING' ],
|
||||
@@ -164,6 +161,21 @@ foreach opt : opts
|
||||
set_variable('opt_' + opt[0].underscorify(), opt_foo)
|
||||
endforeach
|
||||
|
||||
+feat = [
|
||||
+ [ 'deep-plc', 'ENABLE_DEEP_PLC' ],
|
||||
+ [ 'dred', 'ENABLE_DRED' ],
|
||||
+ [ 'osce', 'ENABLE_OSCE' ],
|
||||
+]
|
||||
+
|
||||
+foreach opt : feat
|
||||
+ # we assume these are all boolean options
|
||||
+ opt_foo = get_option(opt[0])
|
||||
+ if opt_foo.enabled()
|
||||
+ opus_conf.set(opt[1], 1)
|
||||
+ endif
|
||||
+ set_variable('opt_' + opt[0].underscorify(), opt_foo)
|
||||
+endforeach
|
||||
+
|
||||
opt_asm = get_option('asm')
|
||||
opt_rtcd = get_option('rtcd')
|
||||
opt_intrinsics = get_option('intrinsics')
|
||||
@@ -175,7 +187,7 @@ if disable_float_api
|
||||
opus_conf.set('DISABLE_FLOAT_API', 1)
|
||||
endif
|
||||
|
||||
-if not get_option('enable-dnn-debug-float')
|
||||
+if not get_option('dnn-debug-float').enabled()
|
||||
opus_conf.set('DISABLE_DEBUG_FLOAT', 1)
|
||||
endif
|
||||
|
||||
diff --git a/meson_options.txt b/meson_options.txt
|
||||
index 46099276..a2981d0b 100644
|
||||
--- a/meson_options.txt
|
||||
+++ b/meson_options.txt
|
||||
@@ -7,10 +7,10 @@ option('rtcd', type : 'feature', value : 'auto', description : 'Run-time CPU cap
|
||||
option('asm', type : 'feature', value : 'auto', description : 'Assembly optimizations for ARM (fixed-point)')
|
||||
option('intrinsics', type : 'feature', value : 'auto', description : 'Intrinsics optimizations for ARM NEON or x86')
|
||||
|
||||
-option('enable-deep-plc', type : 'boolean', value : false, description : 'Enable Deep Packet Loss Concealment (PLC)')
|
||||
-option('enable-dred', type : 'boolean', value : false, description : 'Enable Deep Redundancy (DRED)')
|
||||
-option('enable-osce', type : 'boolean', value : false, description : 'Enable Opus Speech Coding Enhancement (OSCE)')
|
||||
-option('enable-dnn-debug-float', type : 'boolean', value : false, description : 'Compute DNN using float weights')
|
||||
+option('deep-plc', type : 'feature', value : 'disabled', description : 'Enable Deep Packet Loss Concealment (PLC)')
|
||||
+option('dred', type : 'feature', value : 'disabled', description : 'Enable Deep Redundancy (DRED)')
|
||||
+option('osce', type : 'feature', value : 'disabled', description : 'Enable Opus Speech Coding Enhancement (OSCE)')
|
||||
+option('dnn-debug-float', type : 'feature', value : 'disabled', description : 'Compute DNN using float weights')
|
||||
|
||||
option('custom-modes', type : 'boolean', value : false, description : 'Enable non-Opus modes, e.g. 44.1 kHz & 2^n frames')
|
||||
option('extra-programs', type : 'feature', value : 'auto', description : 'Extra programs (demo and tests)')
|
||||
diff --git a/tests/meson.build b/tests/meson.build
|
||||
index 1c1ddf07..1a4040b5 100644
|
||||
--- a/tests/meson.build
|
||||
+++ b/tests/meson.build
|
||||
@@ -8,6 +8,10 @@ opus_tests = [
|
||||
['test_opus_projection'],
|
||||
]
|
||||
|
||||
+if opt_dred.enabled()
|
||||
+ opus_tests += [['test_opus_dred', [], 60 * 20]]
|
||||
+endif
|
||||
+
|
||||
foreach t : opus_tests
|
||||
test_name = t.get(0)
|
||||
extra_srcs = t.get(1, [])
|
||||
--
|
||||
2.44.0
|
||||
|
Loading…
Reference in a new issue