Hello community,
here is the log from the commit of package opus for openSUSE:Factory checked in at 2016-01-23 01:14:34
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/opus (Old)
and /work/SRC/openSUSE:Factory/.opus.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "opus"
Changes:
--------
--- /work/SRC/openSUSE:Factory/opus/opus.changes 2015-12-09 19:32:47.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.opus.new/opus.changes 2016-01-23 01:14:35.000000000 +0100
@@ -1,0 +2,11 @@
+Tue Jan 19 13:24:17 UTC 2016 - idonmez@suse.com
+
+- Update to version 1.1.2, fixes the following bugs:
+ + Resetting the encoder or decoder state with OPUS_RESET_STATE
+ would disable some run-time selected architecture-specific
+ optimizations.
+ + In hybrid mode discontinuous transmission (DTX) operation,
+ the comfort noise above 8 kHz was incorrectly estimated
+ and could oscillate in time.
+
+-------------------------------------------------------------------
Old:
----
opus-1.1.1.tar.gz
New:
----
opus-1.1.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ opus.spec ++++++
--- /var/tmp/diff_new_pack.qMwMgp/_old 2016-01-23 01:14:36.000000000 +0100
+++ /var/tmp/diff_new_pack.qMwMgp/_new 2016-01-23 01:14:36.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package opus
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
# Copyright (c) 2012 Pascal Bleser
#
# All modifications and additions to the file contributed by third parties
@@ -18,7 +18,7 @@
Name: opus
-Version: 1.1.1
+Version: 1.1.2
Release: 0
%define soname 0
Summary: Opus Audio Codec Library
++++++ opus-1.1.1.tar.gz -> opus-1.1.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opus-1.1.1/Makefile.in new/opus-1.1.2/Makefile.in
--- old/opus-1.1.1/Makefile.in 2015-11-25 21:46:28.000000000 +0100
+++ new/opus-1.1.2/Makefile.in 2016-01-12 19:17:49.000000000 +0100
@@ -953,6 +953,7 @@
OPUS_LT_AGE = @OPUS_LT_AGE@
OPUS_LT_CURRENT = @OPUS_LT_CURRENT@
OPUS_LT_REVISION = @OPUS_LT_REVISION@
+OPUS_X86_AVX_CFLAGS = @OPUS_X86_AVX_CFLAGS@
OPUS_X86_SSE2_CFLAGS = @OPUS_X86_SSE2_CFLAGS@
OPUS_X86_SSE4_1_CFLAGS = @OPUS_X86_SSE4_1_CFLAGS@
OPUS_X86_SSE_CFLAGS = @OPUS_X86_SSE_CFLAGS@
@@ -973,6 +974,7 @@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
+X86_AVX_CFLAGS = @X86_AVX_CFLAGS@
X86_SSE2_CFLAGS = @X86_SSE2_CFLAGS@
X86_SSE4_1_CFLAGS = @X86_SSE4_1_CFLAGS@
X86_SSE_CFLAGS = @X86_SSE_CFLAGS@
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opus-1.1.1/Makefile.mips new/opus-1.1.2/Makefile.mips
--- old/opus-1.1.1/Makefile.mips 2015-04-22 02:22:07.000000000 +0200
+++ new/opus-1.1.2/Makefile.mips 2016-01-11 21:48:46.000000000 +0100
@@ -108,11 +108,16 @@
OPUSCOMPARE_SRCS_C = src/opus_compare.c
OPUSCOMPARE_OBJS := $(patsubst %.c,%$(OBJSUFFIX),$(OPUSCOMPARE_SRCS_C))
+TESTS := test_opus_api test_opus_decode test_opus_encode test_opus_padding
+
# Rules
-all: lib opus_demo opus_compare test_opus_api test_opus_decode test_opus_encode test_opus_padding
+all: lib opus_demo opus_compare $(TESTS)
lib: $(TARGET)
+check: all
+ for test in $(TESTS); do ./$$test; done
+
$(TARGET): $(OBJS)
$(ARCHIVE.cmdline)
@@ -153,4 +158,4 @@
$(OBJS) $(OPUSDEMO_OBJS) $(OPUSCOMPARE_OBJS) $(TESTOPUSAPI_OBJS) \
$(TESTOPUSDECODE_OBJS) $(TESTOPUSENCODE_OBJS) $(TESTOPUSPADDING_OBJS)
-.PHONY: all lib clean
+.PHONY: all lib clean force check
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opus-1.1.1/Makefile.unix new/opus-1.1.2/Makefile.unix
--- old/opus-1.1.1/Makefile.unix 2015-04-22 02:22:07.000000000 +0200
+++ new/opus-1.1.2/Makefile.unix 2016-01-11 21:48:46.000000000 +0100
@@ -106,11 +106,16 @@
OPUSCOMPARE_SRCS_C = src/opus_compare.c
OPUSCOMPARE_OBJS := $(patsubst %.c,%$(OBJSUFFIX),$(OPUSCOMPARE_SRCS_C))
+TESTS := test_opus_api test_opus_decode test_opus_encode test_opus_padding
+
# Rules
-all: lib opus_demo opus_compare test_opus_api test_opus_decode test_opus_encode test_opus_padding
+all: lib opus_demo opus_compare $(TESTS)
lib: $(TARGET)
+check: all
+ for test in $(TESTS); do ./$$test; done
+
$(TARGET): $(OBJS)
$(ARCHIVE.cmdline)
@@ -151,4 +156,4 @@
$(OBJS) $(OPUSDEMO_OBJS) $(OPUSCOMPARE_OBJS) $(TESTOPUSAPI_OBJS) \
$(TESTOPUSDECODE_OBJS) $(TESTOPUSENCODE_OBJS) $(TESTOPUSPADDING_OBJS)
-.PHONY: all lib clean
+.PHONY: all lib clean force check
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opus-1.1.1/celt/celt_decoder.c new/opus-1.1.2/celt/celt_decoder.c
--- old/opus-1.1.1/celt/celt_decoder.c 2015-10-08 00:09:20.000000000 +0200
+++ new/opus-1.1.2/celt/celt_decoder.c 2015-12-30 20:16:21.000000000 +0100
@@ -457,10 +457,9 @@
VARDECL(celt_norm, X);
#endif
opus_uint32 seed;
- opus_val16 *plcLogE;
int end;
int effEnd;
-
+ opus_val16 decay;
end = st->end;
effEnd = IMAX(start, IMIN(end, mode->effEBands));
@@ -472,19 +471,13 @@
ALLOC(X, C*N, celt_norm); /**< Interleaved normalised MDCTs */
#endif
- if (loss_count >= 5)
- plcLogE = backgroundLogE;
- else {
- /* Energy decay */
- opus_val16 decay = loss_count==0 ?
- QCONST16(1.5f, DB_SHIFT) : QCONST16(.5f, DB_SHIFT);
- c=0; do
- {
- for (i=start;irng;
for (c=0;c>1));
} while (++cdownsample, 0, st->arch);
+ celt_synthesis(mode, X, out_syn, oldBandE, start, effEnd, C, C, 0, LM, st->downsample, 0, st->arch);
} else {
/* Pitch-based PLC */
const opus_val16 *window;
@@ -1037,10 +1030,18 @@
/* In case start or end were to change */
if (!isTransient)
{
+ opus_val16 max_background_increase;
OPUS_COPY(oldLogE2, oldLogE, 2*nbEBands);
OPUS_COPY(oldLogE, oldBandE, 2*nbEBands);
+ /* In normal circumstances, we only allow the noise floor to increase by
+ up to 2.4 dB/second, but when we're in DTX, we allow up to 6 dB
+ increase for each update.*/
+ if (st->loss_count < 10)
+ max_background_increase = M*QCONST16(0.001f,DB_SHIFT);
+ else
+ max_background_increase = QCONST16(1.f,DB_SHIFT);
for (i=0;i<2*nbEBands;i++)
- backgroundLogE[i] = MIN16(backgroundLogE[i] + M*QCONST16(0.001f,DB_SHIFT), oldBandE[i]);
+ backgroundLogE[i] = MIN16(backgroundLogE[i] + max_background_increase, oldBandE[i]);
} else {
for (i=0;i<2*nbEBands;i++)
oldLogE[i] = MIN16(oldLogE[i], oldBandE[i]);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opus-1.1.1/celt/celt_encoder.c new/opus-1.1.2/celt/celt_encoder.c
--- old/opus-1.1.1/celt/celt_encoder.c 2015-11-25 03:03:10.000000000 +0100
+++ new/opus-1.1.2/celt/celt_encoder.c 2016-01-12 18:16:54.000000000 +0100
@@ -343,9 +343,9 @@
{
int id;
#ifdef FIXED_POINT
- id = IMAX(0,IMIN(127,MULT16_32_Q15(tmp[i],norm))); /* Do not round to nearest */
+ id = MAX32(0,MIN32(127,MULT16_32_Q15(tmp[i]+EPSILON,norm))); /* Do not round to nearest */
#else
- id = IMAX(0,IMIN(127,(int)floor(64*norm*tmp[i]))); /* Do not round to nearest */
+ id = (int)MAX32(0,MIN32(127,floor(64*norm*(tmp[i]+EPSILON)))); /* Do not round to nearest */
#endif
unmask += inv_table[id];
}
@@ -375,8 +375,8 @@
/* Looks for sudden increases of energy to decide whether we need to patch
the transient decision */
-int patch_transient_decision(opus_val16 *newE, opus_val16 *oldE, int nbEBands,
- int end, int C)
+static int patch_transient_decision(opus_val16 *newE, opus_val16 *oldE, int nbEBands,
+ int start, int end, int C)
{
int i, c;
opus_val32 mean_diff=0;
@@ -385,28 +385,28 @@
avoid false detection caused by irrelevant bands */
if (C==1)
{
- spread_old[0] = oldE[0];
- for (i=1;i=0;i--)
+ for (i=end-2;i>=start;i--)
spread_old[i] = MAX16(spread_old[i], spread_old[i+1]-QCONST16(1.0f, DB_SHIFT));
/* Compute mean increase */
c=0; do {
- for (i=2;i QCONST16(1.f, DB_SHIFT);
}
@@ -1735,7 +1735,7 @@
time-domain analysis */
if (LM>0 && ec_tell(enc)+3<=total_bits && !isTransient && st->complexity>=5 && !st->lfe)
{
- if (patch_transient_decision(bandLogE, oldBandE, nbEBands, end, C))
+ if (patch_transient_decision(bandLogE, oldBandE, nbEBands, start, end, C))
{
isTransient = 1;
shortBlocks = M;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opus-1.1.1/celt/cpu_support.h new/opus-1.1.2/celt/cpu_support.h
--- old/opus-1.1.1/celt/cpu_support.h 2015-11-25 03:03:10.000000000 +0100
+++ new/opus-1.1.2/celt/cpu_support.h 2015-12-30 20:16:21.000000000 +0100
@@ -45,16 +45,18 @@
#elif (defined(OPUS_X86_MAY_HAVE_SSE) && !defined(OPUS_X86_PRESUME_SSE)) || \
(defined(OPUS_X86_MAY_HAVE_SSE2) && !defined(OPUS_X86_PRESUME_SSE2)) || \
- (defined(OPUS_X86_MAY_HAVE_SSE4_1) && !defined(OPUS_X86_PRESUME_SSE4_1))
+ (defined(OPUS_X86_MAY_HAVE_SSE4_1) && !defined(OPUS_X86_PRESUME_SSE4_1)) || \
+ (defined(OPUS_X86_MAY_HAVE_AVX) && !defined(OPUS_X86_PRESUME_AVX))
#include "x86/x86cpu.h"
-/* We currently support 4 x86 variants:
+/* We currently support 5 x86 variants:
* arch[0] -> non-sse
* arch[1] -> sse
* arch[2] -> sse2
* arch[3] -> sse4.1
+ * arch[4] -> avx
*/
-#define OPUS_ARCHMASK 3
+#define OPUS_ARCHMASK 7
int opus_select_arch(void);
#else
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opus-1.1.1/celt/quant_bands.c new/opus-1.1.2/celt/quant_bands.c
--- old/opus-1.1.1/celt/quant_bands.c 2015-08-03 17:17:17.000000000 +0200
+++ new/opus-1.1.2/celt/quant_bands.c 2015-12-30 20:16:21.000000000 +0100
@@ -292,7 +292,7 @@
#endif
}
if (lfe)
- max_decay=3;
+ max_decay = QCONST16(3.f,DB_SHIFT);
enc_start_state = *enc;
ALLOC(oldEBands_intra, C*m->nbEBands, opus_val16);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opus-1.1.1/celt/rate.c new/opus-1.1.2/celt/rate.c
--- old/opus-1.1.1/celt/rate.c 2015-11-25 03:03:10.000000000 +0100
+++ new/opus-1.1.2/celt/rate.c 2016-01-11 21:48:46.000000000 +0100
@@ -131,7 +131,7 @@
for (i=0;iHW_SSE = (info[3] & (1 << 25)) != 0;
cpu_feature->HW_SSE2 = (info[3] & (1 << 26)) != 0;
cpu_feature->HW_SSE41 = (info[2] & (1 << 19)) != 0;
+ cpu_feature->HW_AVX = (info[2] & (1 << 28)) != 0;
}
else {
cpu_feature->HW_SSE = 0;
cpu_feature->HW_SSE2 = 0;
cpu_feature->HW_SSE41 = 0;
+ cpu_feature->HW_AVX = 0;
}
}
@@ -138,6 +143,12 @@
{
return arch;
}
+ arch++;
+
+ if (!cpu_feature.HW_AVX)
+ {
+ return arch;
+ }
arch++;
return arch;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opus-1.1.1/celt/x86/x86cpu.h new/opus-1.1.2/celt/x86/x86cpu.h
--- old/opus-1.1.1/celt/x86/x86cpu.h 2015-11-25 03:03:10.000000000 +0100
+++ new/opus-1.1.2/celt/x86/x86cpu.h 2015-12-30 20:16:21.000000000 +0100
@@ -46,6 +46,12 @@
# define MAY_HAVE_SSE4_1(name) name ## _c
# endif
+# if defined(OPUS_X86_MAY_HAVE_AVX)
+# define MAY_HAVE_AVX(name) name ## _avx
+# else
+# define MAY_HAVE_AVX(name) name ## _c
+# endif
+
# if defined(OPUS_HAVE_RTCD)
int opus_select_arch(void);
# endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opus-1.1.1/config.h.in new/opus-1.1.2/config.h.in
--- old/opus-1.1.1/config.h.in 2015-11-25 21:46:32.000000000 +0100
+++ new/opus-1.1.2/config.h.in 2016-01-12 19:17:55.000000000 +0100
@@ -121,6 +121,9 @@
/* Use run-time CPU capabilities detection */
#undef OPUS_HAVE_RTCD
+/* Compiler supports X86 AVX Intrinsics */
+#undef OPUS_X86_MAY_HAVE_AVX
+
/* Compiler supports X86 SSE Intrinsics */
#undef OPUS_X86_MAY_HAVE_SSE
@@ -130,6 +133,9 @@
/* Compiler supports X86 SSE4.1 Intrinsics */
#undef OPUS_X86_MAY_HAVE_SSE4_1
+/* Define if binary requires AVX intrinsics support */
+#undef OPUS_X86_PRESUME_AVX
+
/* Define if binary requires SSE intrinsics support */
#undef OPUS_X86_PRESUME_SSE
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opus-1.1.1/configure new/opus-1.1.2/configure
--- old/opus-1.1.1/configure 2015-11-25 21:46:28.000000000 +0100
+++ new/opus-1.1.2/configure 2016-01-12 19:17:49.000000000 +0100
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for opus 1.1.1.
+# Generated by GNU Autoconf 2.69 for opus 1.1.2.
#
# Report bugs to .
#
@@ -590,8 +590,8 @@
# Identity of this package.
PACKAGE_NAME='opus'
PACKAGE_TARNAME='opus'
-PACKAGE_VERSION='1.1.1'
-PACKAGE_STRING='opus 1.1.1'
+PACKAGE_VERSION='1.1.2'
+PACKAGE_STRING='opus 1.1.2'
PACKAGE_BUGREPORT='opus@xiph.org'
PACKAGE_URL=''
@@ -649,6 +649,7 @@
OPUS_ARM_NEON_INTR_TRUE
CPU_ARM_FALSE
CPU_ARM_TRUE
+OPUS_X86_AVX_CFLAGS
OPUS_X86_SSE4_1_CFLAGS
OPUS_X86_SSE2_CFLAGS
OPUS_X86_SSE_CFLAGS
@@ -657,9 +658,12 @@
HAVE_ARM_NE10
OPUS_ARM_NEON_INTR_CFLAGS
ARM_NEON_INTR_CFLAGS
+X86_AVX_CFLAGS
X86_SSE4_1_CFLAGS
X86_SSE2_CFLAGS
X86_SSE_CFLAGS
+HAVE_AVX_FALSE
+HAVE_AVX_TRUE
HAVE_SSE4_1_FALSE
HAVE_SSE4_1_TRUE
HAVE_SSE2_FALSE
@@ -848,6 +852,7 @@
X86_SSE_CFLAGS
X86_SSE2_CFLAGS
X86_SSE4_1_CFLAGS
+X86_AVX_CFLAGS
ARM_NEON_INTR_CFLAGS'
@@ -1389,7 +1394,7 @@
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures opus 1.1.1 to adapt to many kinds of systems.
+\`configure' configures opus 1.1.2 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1459,7 +1464,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of opus 1.1.1:";;
+ short | recursive ) echo "Configuration of opus 1.1.2:";;
esac
cat <<\_ACEOF
@@ -1532,6 +1537,8 @@
C compiler flags to compile SSE2 intrinsics [default=-msse2]
X86_SSE4_1_CFLAGS
C compiler flags to compile SSE4.1 intrinsics [default=-msse4.1]
+ X86_AVX_CFLAGS
+ C compiler flags to compile AVX intrinsics [default=-mavx]
ARM_NEON_INTR_CFLAGS
C compiler flags to compile ARM NEON intrinsics
[default=-mfpu=neon / -mfpu=neon -mfloat-abi=softfp]
@@ -1602,7 +1609,7 @@
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-opus configure 1.1.1
+opus configure 1.1.2
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1971,7 +1978,7 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by opus $as_me 1.1.1, which was
+It was created by opus $as_me 1.1.2, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -2365,7 +2372,7 @@
# For libtool.
OPUS_LT_CURRENT=5
-OPUS_LT_REVISION=1
+OPUS_LT_REVISION=2
OPUS_LT_AGE=5
@@ -2848,7 +2855,7 @@
# Define the identity of the package.
PACKAGE='opus'
- VERSION='1.1.1'
+ VERSION='1.1.2'
# Some tools Automake needs.
@@ -12944,6 +12951,15 @@
HAVE_SSE4_1_FALSE=
fi
+ if false; then
+ HAVE_AVX_TRUE=
+ HAVE_AVX_FALSE='#'
+else
+ HAVE_AVX_TRUE='#'
+ HAVE_AVX_FALSE=
+fi
+
+
@@ -12970,6 +12986,7 @@
+
if ${X86_SSE_CFLAGS+:} false; then :
else
@@ -12985,6 +13002,11 @@
else
X86_SSE4_1_CFLAGS="-msse4.1"
fi
+if ${X86_AVX_CFLAGS+:} false; then :
+
+else
+ X86_AVX_CFLAGS="-mavx"
+fi
if ${ARM_NEON_INTR_CFLAGS+:} false; then :
else
@@ -13468,6 +13490,83 @@
fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler supports AVX intrinsics" >&5
+$as_echo_n "checking if compiler supports AVX intrinsics... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include
+
+int
+main ()
+{
+
+ static __m256 mtest;
+ mtest = _mm256_setzero_ps();
+
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ OPUS_X86_MAY_HAVE_AVX=1
+ OPUS_X86_PRESUME_AVX=1
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+else
+
+ OPUS_X86_PRESUME_AVX=0
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler supports AVX intrinsics with $X86_AVX_CFLAGS" >&5
+$as_echo_n "checking if compiler supports AVX intrinsics with $X86_AVX_CFLAGS... " >&6; }
+ save_CFLAGS="$CFLAGS"; CFLAGS="$X86_AVX_CFLAGS $CFLAGS"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include
+
+int
+main ()
+{
+
+ static __m256 mtest;
+ mtest = _mm256_setzero_ps();
+
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ OPUS_X86_MAY_HAVE_AVX=1
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ OPUS_X86_MAY_HAVE_AVX=0
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS="$save_CFLAGS"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+ if test x"$OPUS_X86_MAY_HAVE_AVX" = x"1" && test x"$OPUS_X86_PRESUME_AVX" != x"1"; then :
+
+ OPUS_X86_AVX_CFLAGS="$X86_AVX_CFLAGS"
+
+
+
+fi
if test x"$rtcd_support" = x"no"; then :
rtcd_support=""
fi
@@ -13536,6 +13635,28 @@
$as_echo "$as_me: WARNING: Compiler does not support SSE4.1 intrinsics" >&2;}
fi
+ if test x"$OPUS_X86_MAY_HAVE_AVX" = x"1"; then :
+
+
+$as_echo "#define OPUS_X86_MAY_HAVE_AVX 1" >>confdefs.h
+
+ intrinsics_support="$intrinsics_support AVX"
+
+ if test x"$OPUS_X86_PRESUME_AVX" = x"1"; then :
+
+$as_echo "#define OPUS_X86_PRESUME_AVX 1" >>confdefs.h
+
+else
+ rtcd_support="$rtcd_support AVX"
+fi
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Compiler does not support AVX intrinsics" >&5
+$as_echo "$as_me: WARNING: Compiler does not support AVX intrinsics" >&2;}
+
+fi
+
if test x"$intrinsics_support" = x""; then :
intrinsics_support=no
else
@@ -13686,6 +13807,14 @@
HAVE_SSE4_1_FALSE=
fi
+ if test x"$OPUS_X86_MAY_HAVE_AVX" = x"1"; then
+ HAVE_AVX_TRUE=
+ HAVE_AVX_FALSE='#'
+else
+ HAVE_AVX_TRUE='#'
+ HAVE_AVX_FALSE=
+fi
+
if test x"$enable_rtcd" = x"yes"; then :
@@ -14086,6 +14215,10 @@
as_fn_error $? "conditional \"HAVE_SSE4_1\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${HAVE_AVX_TRUE}" && test -z "${HAVE_AVX_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_AVX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${CPU_ARM_TRUE}" && test -z "${CPU_ARM_FALSE}"; then
as_fn_error $? "conditional \"CPU_ARM\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -14110,6 +14243,10 @@
as_fn_error $? "conditional \"HAVE_SSE4_1\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${HAVE_AVX_TRUE}" && test -z "${HAVE_AVX_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_AVX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${HAVE_DOXYGEN_TRUE}" && test -z "${HAVE_DOXYGEN_FALSE}"; then
as_fn_error $? "conditional \"HAVE_DOXYGEN\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -14515,7 +14652,7 @@
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by opus $as_me 1.1.1, which was
+This file was extended by opus $as_me 1.1.2, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -14581,7 +14718,7 @@
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-opus config.status 1.1.1
+opus config.status 1.1.2
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opus-1.1.1/configure.ac new/opus-1.1.2/configure.ac
--- old/opus-1.1.1/configure.ac 2015-11-25 21:46:26.000000000 +0100
+++ new/opus-1.1.2/configure.ac 2016-01-12 19:17:47.000000000 +0100
@@ -23,7 +23,7 @@
# For libtool.
dnl Please update these for releases.
OPUS_LT_CURRENT=5
-OPUS_LT_REVISION=1
+OPUS_LT_REVISION=2
OPUS_LT_AGE=5
AC_SUBST(OPUS_LT_CURRENT)
@@ -351,10 +351,12 @@
AM_CONDITIONAL([HAVE_SSE], [false])
AM_CONDITIONAL([HAVE_SSE2], [false])
AM_CONDITIONAL([HAVE_SSE4_1], [false])
+AM_CONDITIONAL([HAVE_AVX], [false])
m4_define([DEFAULT_X86_SSE_CFLAGS], [-msse])
m4_define([DEFAULT_X86_SSE2_CFLAGS], [-msse2])
m4_define([DEFAULT_X86_SSE4_1_CFLAGS], [-msse4.1])
+m4_define([DEFAULT_X86_AVX_CFLAGS], [-mavx])
m4_define([DEFAULT_ARM_NEON_INTR_CFLAGS], [-mfpu=neon])
# With GCC on ARM32 softfp architectures (e.g. Android, or older Ubuntu) you need to specify
# -mfloat-abi=softfp for -mfpu=neon to work. However, on ARM32 hardfp architectures (e.g. newer Ubuntu),
@@ -371,11 +373,13 @@
AC_ARG_VAR([X86_SSE_CFLAGS], [C compiler flags to compile SSE intrinsics @<:@default=]DEFAULT_X86_SSE_CFLAGS[@:>@])
AC_ARG_VAR([X86_SSE2_CFLAGS], [C compiler flags to compile SSE2 intrinsics @<:@default=]DEFAULT_X86_SSE2_CFLAGS[@:>@])
AC_ARG_VAR([X86_SSE4_1_CFLAGS], [C compiler flags to compile SSE4.1 intrinsics @<:@default=]DEFAULT_X86_SSE4_1_CFLAGS[@:>@])
+AC_ARG_VAR([X86_AVX_CFLAGS], [C compiler flags to compile AVX intrinsics @<:@default=]DEFAULT_X86_AVX_CFLAGS[@:>@])
AC_ARG_VAR([ARM_NEON_INTR_CFLAGS], [C compiler flags to compile ARM NEON intrinsics @<:@default=]DEFAULT_ARM_NEON_INTR_CFLAGS / DEFAULT_ARM_NEON_SOFTFP_INTR_CFLAGS[@:>@])
AS_VAR_SET_IF([X86_SSE_CFLAGS], [], [AS_VAR_SET([X86_SSE_CFLAGS], "DEFAULT_X86_SSE_CFLAGS")])
AS_VAR_SET_IF([X86_SSE2_CFLAGS], [], [AS_VAR_SET([X86_SSE2_CFLAGS], "DEFAULT_X86_SSE2_CFLAGS")])
AS_VAR_SET_IF([X86_SSE4_1_CFLAGS], [], [AS_VAR_SET([X86_SSE4_1_CFLAGS], "DEFAULT_X86_SSE4_1_CFLAGS")])
+AS_VAR_SET_IF([X86_AVX_CFLAGS], [], [AS_VAR_SET([X86_AVX_CFLAGS], "DEFAULT_X86_AVX_CFLAGS")])
AS_VAR_SET_IF([ARM_NEON_INTR_CFLAGS], [], [AS_VAR_SET([ARM_NEON_INTR_CFLAGS], ["$RESOLVED_DEFAULT_ARM_NEON_INTR_CFLAGS"])])
AC_DEFUN([OPUS_PATH_NE10],
@@ -566,7 +570,24 @@
AC_SUBST([OPUS_X86_SSE4_1_CFLAGS])
]
)
-
+ OPUS_CHECK_INTRINSICS(
+ [AVX],
+ [$X86_AVX_CFLAGS],
+ [OPUS_X86_MAY_HAVE_AVX],
+ [OPUS_X86_PRESUME_AVX],
+ [[#include
+ ]],
+ [[
+ static __m256 mtest;
+ mtest = _mm256_setzero_ps();
+ ]]
+ )
+ AS_IF([test x"$OPUS_X86_MAY_HAVE_AVX" = x"1" && test x"$OPUS_X86_PRESUME_AVX" != x"1"],
+ [
+ OPUS_X86_AVX_CFLAGS="$X86_AVX_CFLAGS"
+ AC_SUBST([OPUS_X86_AVX_CFLAGS])
+ ]
+ )
AS_IF([test x"$rtcd_support" = x"no"], [rtcd_support=""])
AS_IF([test x"$OPUS_X86_MAY_HAVE_SSE" = x"1"],
[
@@ -606,6 +627,19 @@
[
AC_MSG_WARN([Compiler does not support SSE4.1 intrinsics])
])
+ AS_IF([test x"$OPUS_X86_MAY_HAVE_AVX" = x"1"],
+ [
+ AC_DEFINE([OPUS_X86_MAY_HAVE_AVX], 1, [Compiler supports X86 AVX Intrinsics])
+ intrinsics_support="$intrinsics_support AVX"
+
+ AS_IF([test x"$OPUS_X86_PRESUME_AVX" = x"1"],
+ [AC_DEFINE([OPUS_X86_PRESUME_AVX], 1, [Define if binary requires AVX intrinsics support])],
+ [rtcd_support="$rtcd_support AVX"])
+ ],
+ [
+ AC_MSG_WARN([Compiler does not support AVX intrinsics])
+ ])
+
AS_IF([test x"$intrinsics_support" = x""],
[intrinsics_support=no],
[intrinsics_support="x86$intrinsics_support"]
@@ -672,6 +706,8 @@
[test x"$OPUS_X86_MAY_HAVE_SSE2" = x"1"])
AM_CONDITIONAL([HAVE_SSE4_1],
[test x"$OPUS_X86_MAY_HAVE_SSE4_1" = x"1"])
+AM_CONDITIONAL([HAVE_AVX],
+ [test x"$OPUS_X86_MAY_HAVE_AVX" = x"1"])
AS_IF([test x"$enable_rtcd" = x"yes"],[
AS_IF([test x"$rtcd_support" != x"no"],[
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opus-1.1.1/doc/Makefile.in new/opus-1.1.2/doc/Makefile.in
--- old/opus-1.1.1/doc/Makefile.in 2015-11-25 21:46:28.000000000 +0100
+++ new/opus-1.1.2/doc/Makefile.in 2016-01-12 19:17:49.000000000 +0100
@@ -189,6 +189,7 @@
OPUS_LT_AGE = @OPUS_LT_AGE@
OPUS_LT_CURRENT = @OPUS_LT_CURRENT@
OPUS_LT_REVISION = @OPUS_LT_REVISION@
+OPUS_X86_AVX_CFLAGS = @OPUS_X86_AVX_CFLAGS@
OPUS_X86_SSE2_CFLAGS = @OPUS_X86_SSE2_CFLAGS@
OPUS_X86_SSE4_1_CFLAGS = @OPUS_X86_SSE4_1_CFLAGS@
OPUS_X86_SSE_CFLAGS = @OPUS_X86_SSE_CFLAGS@
@@ -209,6 +210,7 @@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
+X86_AVX_CFLAGS = @X86_AVX_CFLAGS@
X86_SSE2_CFLAGS = @X86_SSE2_CFLAGS@
X86_SSE4_1_CFLAGS = @X86_SSE4_1_CFLAGS@
X86_SSE_CFLAGS = @X86_SSE_CFLAGS@
@@ -388,8 +390,8 @@
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
-@HAVE_DOXYGEN_FALSE@uninstall-local:
@HAVE_DOXYGEN_FALSE@clean-local:
+@HAVE_DOXYGEN_FALSE@uninstall-local:
@HAVE_DOXYGEN_FALSE@install-data-local:
clean: clean-am
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opus-1.1.1/include/opus_defines.h new/opus-1.1.2/include/opus_defines.h
--- old/opus-1.1.1/include/opus_defines.h 2015-10-23 19:17:41.000000000 +0200
+++ new/opus-1.1.2/include/opus_defines.h 2016-01-12 18:17:00.000000000 +0100
@@ -523,10 +523,19 @@
* @hideinitializer */
#define OPUS_GET_DTX(x) OPUS_GET_DTX_REQUEST, __opus_check_int_ptr(x)
/** Configures the depth of signal being encoded.
+ *
* This is a hint which helps the encoder identify silence and near-silence.
+ * It represents the number of significant bits of linear intensity below
+ * which the signal contains ignorable quantization or other noise.
+ *
+ * For example, OPUS_SET_LSB_DEPTH(14) would be an appropriate setting
+ * for G.711 u-law input. OPUS_SET_LSB_DEPTH(16) would be appropriate
+ * for 16-bit linear pcm input with opus_encode_float().
+ *
* When using opus_encode() instead of opus_encode_float(), or when libopus
* is compiled for fixed-point, the encoder uses the minimum of the value
* set here and the value 16.
+ *
* @see OPUS_GET_LSB_DEPTH
* @param[in] x <tt>opus_int32</tt>: Input precision in bits, between 8 and 24
* (default: 24).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opus-1.1.1/package_version new/opus-1.1.2/package_version
--- old/opus-1.1.1/package_version 2015-11-25 21:46:32.000000000 +0100
+++ new/opus-1.1.2/package_version 2016-01-12 19:17:56.000000000 +0100
@@ -1 +1 @@
-PACKAGE_VERSION="1.1.1"
+PACKAGE_VERSION="1.1.2"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opus-1.1.1/silk/decode_pulses.c new/opus-1.1.2/silk/decode_pulses.c
--- old/opus-1.1.1/silk/decode_pulses.c 2015-04-22 02:22:07.000000000 +0200
+++ new/opus-1.1.2/silk/decode_pulses.c 2016-01-11 21:48:46.000000000 +0100
@@ -69,9 +69,9 @@
sum_pulses[ i ] = ec_dec_icdf( psRangeDec, cdf_ptr, 8 );
/* LSB indication */
- while( sum_pulses[ i ] == MAX_PULSES + 1 ) {
+ while( sum_pulses[ i ] == SILK_MAX_PULSES + 1 ) {
nLshifts[ i ]++;
- /* When we've already got 10 LSBs, we shift the table to not allow (MAX_PULSES + 1) */
+ /* When we've already got 10 LSBs, we shift the table to not allow (SILK_MAX_PULSES + 1) */
sum_pulses[ i ] = ec_dec_icdf( psRangeDec,
silk_pulses_per_block_iCDF[ N_RATE_LEVELS - 1] + ( nLshifts[ i ] == 10 ), 8 );
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opus-1.1.1/silk/define.h new/opus-1.1.2/silk/define.h
--- old/opus-1.1.1/silk/define.h 2014-02-14 20:54:59.000000000 +0100
+++ new/opus-1.1.2/silk/define.h 2016-01-11 21:48:46.000000000 +0100
@@ -169,7 +169,7 @@
#define N_RATE_LEVELS 10
/* Maximum sum of pulses per shell coding frame */
-#define MAX_PULSES 16
+#define SILK_MAX_PULSES 16
#define MAX_MATRIX_SIZE MAX_LPC_ORDER /* Max of LPC Order and LTP order */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opus-1.1.1/silk/encode_pulses.c new/opus-1.1.2/silk/encode_pulses.c
--- old/opus-1.1.1/silk/encode_pulses.c 2014-02-14 20:54:59.000000000 +0100
+++ new/opus-1.1.2/silk/encode_pulses.c 2016-01-11 21:48:46.000000000 +0100
@@ -142,7 +142,7 @@
sumBits_Q5 = silk_rate_levels_BITS_Q5[ signalType >> 1 ][ k ];
for( i = 0; i < iter; i++ ) {
if( nRshifts[ i ] > 0 ) {
- sumBits_Q5 += nBits_ptr[ MAX_PULSES + 1 ];
+ sumBits_Q5 += nBits_ptr[ SILK_MAX_PULSES + 1 ];
} else {
sumBits_Q5 += nBits_ptr[ sum_pulses[ i ] ];
}
@@ -162,9 +162,9 @@
if( nRshifts[ i ] == 0 ) {
ec_enc_icdf( psRangeEnc, sum_pulses[ i ], cdf_ptr, 8 );
} else {
- ec_enc_icdf( psRangeEnc, MAX_PULSES + 1, cdf_ptr, 8 );
+ ec_enc_icdf( psRangeEnc, SILK_MAX_PULSES + 1, cdf_ptr, 8 );
for( k = 0; k < nRshifts[ i ] - 1; k++ ) {
- ec_enc_icdf( psRangeEnc, MAX_PULSES + 1, silk_pulses_per_block_iCDF[ N_RATE_LEVELS - 1 ], 8 );
+ ec_enc_icdf( psRangeEnc, SILK_MAX_PULSES + 1, silk_pulses_per_block_iCDF[ N_RATE_LEVELS - 1 ], 8 );
}
ec_enc_icdf( psRangeEnc, sum_pulses[ i ], silk_pulses_per_block_iCDF[ N_RATE_LEVELS - 1 ], 8 );
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opus-1.1.1/silk/tables.h new/opus-1.1.2/silk/tables.h
--- old/opus-1.1.1/silk/tables.h 2014-02-14 20:54:59.000000000 +0100
+++ new/opus-1.1.2/silk/tables.h 2016-01-11 21:48:46.000000000 +0100
@@ -47,8 +47,8 @@
extern const opus_uint8 silk_pitch_contour_10_ms_iCDF[ 12 ]; /* 12 */
extern const opus_uint8 silk_pitch_contour_10_ms_NB_iCDF[ 3 ]; /* 3 */
-extern const opus_uint8 silk_pulses_per_block_iCDF[ N_RATE_LEVELS ][ MAX_PULSES + 2 ]; /* 180 */
-extern const opus_uint8 silk_pulses_per_block_BITS_Q5[ N_RATE_LEVELS - 1 ][ MAX_PULSES + 2 ]; /* 162 */
+extern const opus_uint8 silk_pulses_per_block_iCDF[ N_RATE_LEVELS ][ SILK_MAX_PULSES + 2 ]; /* 180 */
+extern const opus_uint8 silk_pulses_per_block_BITS_Q5[ N_RATE_LEVELS - 1 ][ SILK_MAX_PULSES + 2 ]; /* 162 */
extern const opus_uint8 silk_rate_levels_iCDF[ 2 ][ N_RATE_LEVELS - 1 ]; /* 18 */
extern const opus_uint8 silk_rate_levels_BITS_Q5[ 2 ][ N_RATE_LEVELS - 1 ]; /* 18 */
@@ -59,7 +59,7 @@
extern const opus_uint8 silk_shell_code_table1[ 152 ]; /* 152 */
extern const opus_uint8 silk_shell_code_table2[ 152 ]; /* 152 */
extern const opus_uint8 silk_shell_code_table3[ 152 ]; /* 152 */
-extern const opus_uint8 silk_shell_code_table_offsets[ MAX_PULSES + 1 ]; /* 17 */
+extern const opus_uint8 silk_shell_code_table_offsets[ SILK_MAX_PULSES + 1 ]; /* 17 */
extern const opus_uint8 silk_lsb_iCDF[ 2 ]; /* 2 */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opus-1.1.1/silk/x86/x86_silk_map.c new/opus-1.1.2/silk/x86/x86_silk_map.c
--- old/opus-1.1.1/silk/x86/x86_silk_map.c 2015-11-25 03:03:10.000000000 +0100
+++ new/opus-1.1.2/silk/x86/x86_silk_map.c 2015-12-30 20:16:21.000000000 +0100
@@ -50,6 +50,7 @@
silk_inner_prod16_aligned_64_c,
silk_inner_prod16_aligned_64_c,
MAY_HAVE_SSE4_1( silk_inner_prod16_aligned_64 ), /* sse4.1 */
+ MAY_HAVE_SSE4_1( silk_inner_prod16_aligned_64 ) /* avx */
};
#endif
@@ -62,6 +63,7 @@
silk_VAD_GetSA_Q8_c,
silk_VAD_GetSA_Q8_c,
MAY_HAVE_SSE4_1( silk_VAD_GetSA_Q8 ), /* sse4.1 */
+ MAY_HAVE_SSE4_1( silk_VAD_GetSA_Q8 ) /* avx */
};
void (*const SILK_NSQ_IMPL[ OPUS_ARCHMASK + 1 ] )(
@@ -85,6 +87,7 @@
silk_NSQ_c,
silk_NSQ_c,
MAY_HAVE_SSE4_1( silk_NSQ ), /* sse4.1 */
+ MAY_HAVE_SSE4_1( silk_NSQ ) /* avx */
};
void (*const SILK_VQ_WMAT_EC_IMPL[ OPUS_ARCHMASK + 1 ] )(
@@ -104,6 +107,7 @@
silk_VQ_WMat_EC_c,
silk_VQ_WMat_EC_c,
MAY_HAVE_SSE4_1( silk_VQ_WMat_EC ), /* sse4.1 */
+ MAY_HAVE_SSE4_1( silk_VQ_WMat_EC ) /* avx */
};
void (*const SILK_NSQ_DEL_DEC_IMPL[ OPUS_ARCHMASK + 1 ] )(
@@ -127,6 +131,7 @@
silk_NSQ_del_dec_c,
silk_NSQ_del_dec_c,
MAY_HAVE_SSE4_1( silk_NSQ_del_dec ), /* sse4.1 */
+ MAY_HAVE_SSE4_1( silk_NSQ_del_dec ) /* avx */
};
#if defined(FIXED_POINT)
@@ -144,6 +149,7 @@
silk_warped_LPC_analysis_filter_FIX_c,
silk_warped_LPC_analysis_filter_FIX_c,
MAY_HAVE_SSE4_1( silk_warped_LPC_analysis_filter_FIX ), /* sse4.1 */
+ MAY_HAVE_SSE4_1( silk_warped_LPC_analysis_filter_FIX ) /* avx */
};
void (*const SILK_BURG_MODIFIED_IMPL[ OPUS_ARCHMASK + 1 ] )(
@@ -161,6 +167,7 @@
silk_burg_modified_c,
silk_burg_modified_c,
MAY_HAVE_SSE4_1( silk_burg_modified ), /* sse4.1 */
+ MAY_HAVE_SSE4_1( silk_burg_modified ) /* avx */
};
#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opus-1.1.1/src/analysis.c new/opus-1.1.2/src/analysis.c
--- old/opus-1.1.1/src/analysis.c 2015-10-08 00:09:20.000000000 +0200
+++ new/opus-1.1.2/src/analysis.c 2016-01-12 18:16:54.000000000 +0100
@@ -138,6 +138,21 @@
}
}
+void tonality_analysis_init(TonalityAnalysisState *tonal)
+{
+ /* Initialize reusable fields. */
+ tonal->arch = opus_select_arch();
+ /* Clear remaining fields. */
+ tonality_analysis_reset(tonal);
+}
+
+void tonality_analysis_reset(TonalityAnalysisState *tonal)
+{
+ /* Clear non-reusable fields. */
+ char *start = (char*)&tonal->TONALITY_ANALYSIS_RESET_START;
+ OPUS_CLEAR(start, sizeof(TonalityAnalysisState) - (start - (char*)tonal));
+}
+
void tonality_get_info(TonalityAnalysisState *tonal, AnalysisInfo *info_out, int len)
{
int pos;
@@ -187,7 +202,7 @@
info_out->music_prob = psum;
}
-static void tonality_analysis(TonalityAnalysisState *tonal, const CELTMode *celt_mode, const void *x, int len, int offset, int c1, int c2, int C, int lsb_depth, downmix_func downmix, int arch)
+static void tonality_analysis(TonalityAnalysisState *tonal, const CELTMode *celt_mode, const void *x, int len, int offset, int c1, int c2, int C, int lsb_depth, downmix_func downmix)
{
int i, b;
const kiss_fft_state *kfft;
@@ -260,7 +275,7 @@
remaining = len - (ANALYSIS_BUF_SIZE-tonal->mem_fill);
downmix(x, &tonal->inmem[240], remaining, offset+ANALYSIS_BUF_SIZE-tonal->mem_fill, c1, c2, C);
tonal->mem_fill = 240 + remaining;
- opus_fft(kfft, in, out, arch);
+ opus_fft(kfft, in, out, tonal->arch);
#ifndef FIXED_POINT
/* If there's any NaN on the input, the entire output will be NaN, so we only need to check one value. */
if (celt_isnan(out[0].r))
@@ -633,7 +648,7 @@
void run_analysis(TonalityAnalysisState *analysis, const CELTMode *celt_mode, const void *analysis_pcm,
int analysis_frame_size, int frame_size, int c1, int c2, int C, opus_int32 Fs,
- int lsb_depth, downmix_func downmix, AnalysisInfo *analysis_info, int arch)
+ int lsb_depth, downmix_func downmix, AnalysisInfo *analysis_info)
{
int offset;
int pcm_len;
@@ -646,7 +661,7 @@
pcm_len = analysis_frame_size - analysis->analysis_offset;
offset = analysis->analysis_offset;
do {
- tonality_analysis(analysis, celt_mode, analysis_pcm, IMIN(480, pcm_len), offset, c1, c2, C, lsb_depth, downmix, arch);
+ tonality_analysis(analysis, celt_mode, analysis_pcm, IMIN(480, pcm_len), offset, c1, c2, C, lsb_depth, downmix);
offset += 480;
pcm_len -= 480;
} while (pcm_len>0);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opus-1.1.1/src/analysis.h new/opus-1.1.2/src/analysis.h
--- old/opus-1.1.1/src/analysis.h 2015-10-08 00:09:20.000000000 +0200
+++ new/opus-1.1.2/src/analysis.h 2016-01-11 21:48:46.000000000 +0100
@@ -39,6 +39,8 @@
#define DETECT_SIZE 200
typedef struct {
+ int arch;
+#define TONALITY_ANALYSIS_RESET_START angle
float angle[240];
float d_angle[240];
float d2_angle[240];
@@ -78,10 +80,24 @@
AnalysisInfo info[DETECT_SIZE];
} TonalityAnalysisState;
+/** Initialize a TonalityAnalysisState struct.
+ *
+ * This performs some possibly slow initialization steps which should
+ * not be repeated every analysis step. No allocated memory is retained
+ * by the state struct, so no cleanup call is required.
+ */
+void tonality_analysis_init(TonalityAnalysisState *analysis);
+
+/** Reset a TonalityAnalysisState stuct.
+ *
+ * Call this when there's a discontinuity in the data.
+ */
+void tonality_analysis_reset(TonalityAnalysisState *analysis);
+
void tonality_get_info(TonalityAnalysisState *tonal, AnalysisInfo *info_out, int len);
void run_analysis(TonalityAnalysisState *analysis, const CELTMode *celt_mode, const void *analysis_pcm,
int analysis_frame_size, int frame_size, int c1, int c2, int C, opus_int32 Fs,
- int lsb_depth, downmix_func downmix, AnalysisInfo *analysis_info, int arch);
+ int lsb_depth, downmix_func downmix, AnalysisInfo *analysis_info);
#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opus-1.1.1/src/opus_decoder.c new/opus-1.1.2/src/opus_decoder.c
--- old/opus-1.1.1/src/opus_decoder.c 2015-08-24 00:02:52.000000000 +0200
+++ new/opus-1.1.2/src/opus_decoder.c 2016-01-11 21:48:46.000000000 +0100
@@ -59,6 +59,7 @@
opus_int32 Fs; /** Sampling rate (at the API level) */
silk_DecControlStruct DecControl;
int decode_gain;
+ int arch;
/* Everything beyond this point gets cleared on a reset */
#define OPUS_DECODER_RESET_START stream_channels
@@ -75,7 +76,6 @@
#endif
opus_uint32 rangeFinal;
- int arch;
};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opus-1.1.1/src/opus_demo.c new/opus-1.1.2/src/opus_demo.c
--- old/opus-1.1.1/src/opus_demo.c 2015-08-20 15:43:36.000000000 +0200
+++ new/opus-1.1.2/src/opus_demo.c 2016-01-12 18:16:54.000000000 +0100
@@ -866,7 +866,7 @@
1e-3*bits_max*sampling_rate/frame_size);
if (!decode_only)
fprintf (stderr, "active bitrate: %7.3f kb/s\n",
- 1e-3*bits_act*sampling_rate/(frame_size*(double)count_act));
+ 1e-3*bits_act*sampling_rate/(1e-15+frame_size*(double)count_act));
fprintf (stderr, "bitrate standard deviation: %7.3f kb/s\n",
1e-3*sqrt(bits2/count - bits*bits/(count*(double)count))*sampling_rate/frame_size);
/* Close any files to which intermediate results were stored */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opus-1.1.1/src/opus_encoder.c new/opus-1.1.2/src/opus_encoder.c
--- old/opus-1.1.1/src/opus_encoder.c 2015-11-25 03:03:10.000000000 +0100
+++ new/opus-1.1.2/src/opus_encoder.c 2016-01-12 18:16:54.000000000 +0100
@@ -81,6 +81,10 @@
int lsb_depth;
int encoder_buffer;
int lfe;
+ int arch;
+#ifndef DISABLE_FLOAT_API
+ TonalityAnalysisState analysis;
+#endif
#define OPUS_ENCODER_RESET_START stream_channels
int stream_channels;
@@ -100,12 +104,9 @@
StereoWidthState width_mem;
opus_val16 delay_buffer[MAX_ENCODER_BUFFER*2];
#ifndef DISABLE_FLOAT_API
- TonalityAnalysisState analysis;
int detected_bandwidth;
- int analysis_offset;
#endif
opus_uint32 rangeFinal;
- int arch;
};
/* Transition tables for the voice and music. First column is the
@@ -243,6 +244,10 @@
st->mode = MODE_HYBRID;
st->bandwidth = OPUS_BANDWIDTH_FULLBAND;
+#ifndef DISABLE_FLOAT_API
+ tonality_analysis_init(&st->analysis);
+#endif
+
return OPUS_OK;
}
@@ -1006,7 +1011,7 @@
analysis_read_subframe_bak = st->analysis.read_subframe;
run_analysis(&st->analysis, celt_mode, analysis_pcm, analysis_size, frame_size,
c1, c2, analysis_channels, st->Fs,
- lsb_depth, downmix, &analysis_info, st->arch);
+ lsb_depth, downmix, &analysis_info);
}
#else
(void)analysis_pcm;
@@ -2449,11 +2454,14 @@
{
void *silk_enc;
silk_EncControlStruct dummy;
+ char *start;
silk_enc = (char*)st+st->silk_enc_offset;
+#ifndef DISABLE_FLOAT_API
+ tonality_analysis_reset(&st->analysis);
+#endif
- OPUS_CLEAR((char*)&st->OPUS_ENCODER_RESET_START,
- sizeof(OpusEncoder)-
- ((char*)&st->OPUS_ENCODER_RESET_START - (char*)st));
+ start = (char*)&st->OPUS_ENCODER_RESET_START;
+ OPUS_CLEAR(start, sizeof(OpusEncoder) - (start - (char*)st));
celt_encoder_ctl(celt_enc, OPUS_RESET_STATE);
silk_InitEncoder( silk_enc, st->arch, &dummy );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opus-1.1.1/version.mk new/opus-1.1.2/version.mk
--- old/opus-1.1.1/version.mk 2015-11-25 03:06:45.000000000 +0100
+++ new/opus-1.1.2/version.mk 2016-01-12 19:14:41.000000000 +0100
@@ -1,2 +1,2 @@
# static version string; update manually every release.
-PACKAGE_VERSION = "1.1.1"
+PACKAGE_VERSION = "1.1.2"