Jean-Marc Valin
84043f7cf7
Fixes a shift<0 issue in transient_analysis()
...
Fixes a potential overflow in high-passed signal for transient detection
and ensures that the shift can never go negative
2016-07-24 21:36:06 -04:00
Jean-Marc Valin
6fccb4b615
Adds some smoothing to the energy quantization
...
When the energy is stable, we slightly bias energy quantization towards
the previous error to make the gain more stable (a constant offset is
better than fluctuations).
We reduce the bitrate by about 0.2% to 1% at low bitrate for the same quality.
2016-07-19 16:11:50 -04:00
Jean-Marc Valin
7780d4a6b1
Retuning the tf_analysis() lambda
...
Increasing the value at low rate seems to help a bit.
2016-07-19 16:11:50 -04:00
Jean-Marc Valin
1484591656
Fixes equiv_rate for CBR
2016-07-19 16:11:50 -04:00
Jean-Marc Valin
2ca6df03df
Minor TF cleanup (tf_sum was useless), plus comments
2016-07-19 16:11:50 -04:00
Jean-Marc Valin
f705e9b5bd
Use SPREAD_AGGRESSIVE on non-transient hybrid frames
2016-07-19 16:11:50 -04:00
Jean-Marc Valin
8229f07d3b
Don't use too much temporal resolution on hybrid frames at low rate
...
Otherwise, we risk having "temporal holes" in the HF that anti-collapse
can't always fill in.
2016-07-19 16:11:50 -04:00
Jean-Marc Valin
92d2492bfd
Disable patch_transient_decision() on hybrid since it's causing artifacts
...
It would trigger on the second frame of "S"s, causing holes in the spectrum
2016-07-19 16:11:50 -04:00
Jean-Marc Valin
78fc664c0c
Boosting the high-band bitrate on transients for hybrid mode
2016-07-17 15:05:54 -04:00
Jean-Marc Valin
61714e9edb
Quality: Increase CELT rate for voiced frames in hybrid mode
2016-07-17 15:05:54 -04:00
Jean-Marc Valin
7e0ca4337f
Using "hybrid" flag instead of "start!=0"
2016-07-15 17:51:45 -04:00
Jean-Marc Valin
bcd6abad43
Quality: Makes real CELT VBR work for hybrid too
2016-07-15 17:51:45 -04:00
Jean-Marc Valin
0247d34d6a
Quality: Forces trim to 5 on hybrid mode
...
This saves bits and makes more sense since alloc_trim_analysis()
mostly looks at the lower bands that are coded with SILK
2016-07-15 17:51:45 -04:00
Jean-Marc Valin
59618a5fa2
Quality: removes VBR attenuation at low bitrate
...
Turns out that even low bitrates benefit from VBR
2016-07-15 17:51:45 -04:00
Jean-Marc Valin
b66080a879
Fixes minor code quality issues in CELT
...
Reported by Durandal.
2016-06-20 12:11:05 -04:00
Jean-Marc Valin
b370a938ca
Fixes an overflow in the constrained VBR code for bitrate>64000
2016-06-17 20:58:30 -04:00
Jean-Marc Valin
99618099ab
Fixes patch_transient_decision() for hybrid mode
...
...and also make it not ignore the right channel
2015-12-23 16:14:11 -05:00
Jean-Marc Valin
eda57aa386
Fixes the transient detector on silence
...
Previously silence would cause the divide approximation on 0/0 to return a
very large value, which would be interpreted as a transient
2015-12-04 13:45:57 -05:00
Viswanath Puttagunta
19c5406cde
armv7(float): Optimize decode usecase using NE10 library
...
Optimize opus decode (float only) use case using ARM NE10.
Mainly effects opus_ifft and ctl_mdct_backward and related
functions.
Work based on previous Encode optimization using ARM NE10
library. See previous commit for details on how to enable
this.
Signed-off-by: Timothy B. Terriberry <tterribe@xiph.org>
2015-10-07 18:09:20 -04:00
Viswanath Puttagunta
f48abe8308
armv7(float): Optimize encode usecase using NE10 library
...
Optimize opus encode (float only) usecase using ARM NE10
library. Mainly effects opus_fft and ctl_mdct_forward
and related functions.
This optimization can be used for ARM CPUs that have NEON
VFP unit. This patch only enables optimizations for ARMv7.
Official ARM NE10 library page available at
http://projectne10.github.io/Ne10/
To enable this optimization, use
--enable-intrinsics --with-NE10=<install_prefix>
or
--enable-intrinsics --with-NE10-libraries=<NE10_lib_dir> --with-NE10-includes=<NE10_includes_dir>
Compile time checks made during configure process to make sure
optimization option available only when compiler supports NEON
instrinsics.
Runtime checks made to make sure optimized functions only called
on appropriate hardware.
Signed-off-by: Timothy B. Terriberry <tterribe@xiph.org>
2015-10-07 18:09:20 -04:00
Jonathan Lennox
43120f0075
Reorganize x86 SSE intrinsics code.
...
Enable x86 intrinsics when building in floating-point mode.
Support SSE as an arch value.
Use RTCD to conditionally enable existing floating-point Celt SSE code.
Call functions directly (without RTCD) when their architecture can be presumed.
Use SSE4.1 intrinsics optimized code for Silk even in floating-point mode.
2015-09-01 17:21:31 -04:00
Timothy B. Terriberry
23f503ad1c
Fix warnings in pedantic build.
...
This should suppress our current issues with unused parameters,
unused variables, and set-but-not-used variables.
2014-12-26 08:31:39 -08:00
xiangmingzhu
c95c9a048f
Cisco optimization for x86 & fixed point
...
1. Only for fixed point on x86 platform (32bit and 64bit, uses SIMD
intrinsics up to SSE4.2)
2. Use "configure --enable-fixed-point --enable-intrinsics" to enable
optimization, default is disabled.
3. Official test cases are verified and passed.
Signed-off-by: Timothy B. Terriberry <tterribe@xiph.org>
2014-10-03 21:16:00 -04:00
Gregory Maxwell
6d2d5c424d
Suppress some coverity false positives.
2014-04-16 18:29:26 -07:00
Jean-Marc Valin
ce1173c77f
Fixes use of uninitialized values in dynalloc_analysis()
2014-01-20 18:46:33 -05:00
Jean-Marc Valin
379af35fd4
Minor cleanup in dynalloc_analysis()
2014-01-19 01:42:04 -05:00
Jean-Marc Valin
05548fa1c1
Adds a median filter to make dynalloc_analysis() more conservative
...
This should prevent extreme dynalloc behaviour in cases where some
bands are heavily attenuated.
2014-01-19 01:32:53 -05:00
Jean-Marc Valin
bdc7b93358
Reduces decoder stack usage by only storing one channel of denormalized MDCT
2014-01-06 08:58:38 -05:00
Jean-Marc Valin
4a6744a446
Some cleaning up of the synthesis code.
2014-01-05 21:40:02 -05:00
Jean-Marc Valin
e1f846208e
Minor cleanup -- nothing to see here
2013-12-29 18:45:49 -05:00
Jean-Marc Valin
306d7f5a30
fixed-point: slight (but free) accuracy improvement in compute_band_energies()
...
Also moves the VSHR32() condition outside the loop just in case some compilers
don't optimize that properly.
2013-12-16 01:08:21 -05:00
Jean-Marc Valin
4a168eb343
Remove useless code in alloc_trim_analysis()
2013-12-11 01:34:06 -05:00
Jean-Marc Valin
91f8010108
Removing indirections
2013-12-10 22:09:33 -05:00
Pedro Becerra
a9b7def9f5
s/MAX16/MAX32/ in transient_analysis()
...
Signed-off-by: Jean-Marc Valin <jmvalin@jmvalin.ca>
2013-12-09 16:08:29 -05:00
Jean-Marc Valin
57cd849cf7
Defining celt_inner_prod() and using it instead of explicit loops.
...
Also adds an SSE-optimized celt_inner_prod().
2013-12-09 15:26:58 -05:00
Jean-Marc Valin
ff072009fe
Replaces inline copies and initialization with OPUS_*() macros.
...
This is a bit faster at -O2 because memcpy()/memmove()/memset() are
vectorized. The code is also cleaner.
2013-12-09 15:26:52 -05:00
Jean-Marc Valin
c94e4bb103
Optimizes encoder NaN detection and clipping by only running them when needed
...
NaN detection should now be able to catch values that would create NaNs
further down.
2013-12-09 15:26:03 -05:00
Jean-Marc Valin
5626908ec3
Fixed-point fast-path for normal 48 kHz encoding in celt_preemphasis()
2013-12-05 16:40:59 -05:00
Jean-Marc Valin
aed1009df9
Turns a 16x32 multiply into a 16x16 one in celt_preemphasis().
2013-12-05 13:36:48 -05:00
Jean-Marc Valin
96408b6295
Fixes Opus-custom preemphasis
...
Also adds denorm avoidance for non-48 kHz rates
2013-12-02 20:02:37 -05:00
Jean-Marc Valin
086ea7c7e5
Whoa! This fixes a pretty bad fixed-point stereo regression
2013-11-29 16:47:52 -05:00
Jean-Marc Valin
d6eb9c468f
Silences a warning in fixed-point
2013-11-25 22:33:43 -05:00
Jean-Marc Valin
2924af4db0
Merges surround and stereo intensity stereo thresholds again.
...
The different results for surround were mostly due to a bug in squishyball.
2013-11-25 21:24:30 -05:00
Jean-Marc Valin
a47d6f308f
Intensity stereo update, partially based on Monty's listening
...
Intensity stereo is now based on equiv_rate and should no longer oscillate
in hybrid mode. Also, there is now a separate set of thresholds for
surround tuned by Monty. The non-surround thresholds were also updated at
low bitrate to be closer to what Monty found for surround.
2013-11-25 00:03:31 -05:00
Jean-Marc Valin
41e8906cd6
opus_custom_encoder_init() now only needed for custom modes.
2013-11-20 19:34:14 -05:00
Timothy B. Terriberry
39386e0b85
Adds Neon assembly for correlation/convolution
...
Optimizing celt_pitch_xcorr()/xcorr_kernel() which also speeds up
FIRs, IIRs and auto-correlations
Signed-off-by: Jean-Marc Valin <jmvalin@jmvalin.ca>
2013-11-18 13:41:17 -05:00
Jean-Marc Valin
1b28e0cae5
Oops, missing semicolon on RESTORE_STACK in previous commit
2013-11-15 01:57:25 -05:00
Jean-Marc Valin
e83d2aa3f7
Adds missing RESTORE_STACKs in celt_encode_with_ec()
2013-11-15 01:52:28 -05:00
Jean-Marc Valin
2dc27dfa13
Rename preemphasis() to celt_preemphasis() to avoid amrnb symbol clash
...
http://lists.xiph.org/pipermail/opus/2013-November/002372.html
2013-11-13 23:18:26 -05:00
Jean-Marc Valin
ab86a9cca7
Fixes more warnings
2013-11-13 23:06:25 -05:00