opus.git
6 years agoMinor ARMv5E cleanups.
Timothy B. Terriberry [Wed, 22 May 2013 15:52:00 +0000 (08:52 -0700)]
Minor ARMv5E cleanups.

Missed the armv5e extension on a couple of functions.

6 years agoUse a table for PVQ encoding/decoding.
Timothy B. Terriberry [Wed, 22 May 2013 01:16:13 +0000 (18:16 -0700)]
Use a table for PVQ encoding/decoding.

58.4% speedup (2.4x faster) on test_unit_cwrs32 (no custom modes).
Gives a 3.2% speedup on
 ./opus_demo restricted-lowdelay 48000 2 96000 comp48-stereo.sw /dev/null
 on a 600 MHz Cortex A8.

6 years agoAdd new ARM headers to top-level file lists.
Timothy B. Terriberry [Tue, 21 May 2013 20:42:14 +0000 (13:42 -0700)]
Add new ARM headers to top-level file lists.

Otherwise make dist does not include these files in the source
 tarball.

6 years agoMove ARM asm into its own directories.
Timothy B. Terriberry [Tue, 21 May 2013 19:53:33 +0000 (12:53 -0700)]
Move ARM asm into its own directories.

6 years agoClean up register constraints.
Timothy B. Terriberry [Mon, 20 May 2013 22:29:04 +0000 (15:29 -0700)]
Clean up register constraints.

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0068b/CIHBJEHG.html
 says that "Rd cannot be the same as Rm."
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0068b/CIHBJEHG.html
 says that "RdLo, RdHi, and Rm must all be different registers."
This means that some of the early clobbers I removed really should
 have been there (to prevent aliasing Rd, RdLo, or RdHi with Rm).
It also means that we should reverse some of the operands in the
 FFT's complex multiplies.
This should only affect the ARMv4 optimizations.

Thanks to Nils Wallménius for the report.

While we're here, audit the commutative pair flags again, since I
 screwed up at least one of them, and eliminate some dead code.

6 years agoFix bustage in a16cef62.
Timothy B. Terriberry [Mon, 20 May 2013 03:52:55 +0000 (20:52 -0700)]
Fix bustage in a16cef62.

6 years agoMake autogen.sh cut and paste proof
Ron [Mon, 20 May 2013 03:10:42 +0000 (12:40 +0930)]
Make autogen.sh cut and paste proof

6 years agoAdd support for autoconf macros in m4/
Ron [Mon, 20 May 2013 03:01:48 +0000 (12:31 +0930)]
Add support for autoconf macros in m4/

Needed by commit 972a34ec2c79d241318af24389b8ee042d10556a.

Use autoreconf in autogen.sh instead of the handwritten version,
it's simpler, and also updates things that we weren't handling.

Drop the hand-written INSTALL file.  Its information content was
~zero, and autotools wants to overwrite it with its own version,
so don't fight that, just .gitignore it.

6 years agoReplace silk_CLZ functions with EC_ILOG().
Timothy B. Terriberry [Mon, 20 May 2013 01:25:45 +0000 (18:25 -0700)]
Replace silk_CLZ functions with EC_ILOG().

In most cases these will use __builtin_clz().
In a follow-up, we should audit usage of silk_CLZ32() and convert
 the places where its argument must be non-zero to use EC_ILOG()
 directly to avoid the test for zero (which is necessary on x86).

6 years agoConvert quotes in license headers to ASCII.
Timothy B. Terriberry [Mon, 20 May 2013 01:00:39 +0000 (18:00 -0700)]
Convert quotes in license headers to ASCII.

Since the last patch originally had them mangled (presumably by
 mailer, http server, or something else), let's just get rid of
 them.

6 years agoAdd ARMv4/ARMv5E macros.
Timothy B. Terriberry [Mon, 20 May 2013 00:11:17 +0000 (17:11 -0700)]
Add ARMv4/ARMv5E macros.

Original patch by Aurélien Zanelli <aurelien.zanelli@parrot.com>:
 http://lists.xiph.org/pipermail/opus/2013-May/002078.html

Revised version:
- Add autconf detection (ported from libtheora).
- Rename ARM5E to ARMv5E (an ARM5 is not the same thing as ARMv5!).
- Use actual macros so they can still be selectively overridden.
- Split out ARMv4 parts and add a few more ARMv4 macros.
- Label blocks to make them easy to find in generated assembly.
- Fix MULT16_32_Q15() so we can pass make check.
  The MDCT test passes in values larger than 2**30 for b.
  The new version should be just as fast (or faster, since it's
   easier to merge the shift with following instructions), and
   there's no appreciable impact on accuracy (FFT/MDCT SNR actually
   goes up in most cases).
- Fix register constraints.
  We were using early-clobber flags in a bunch of places that
   didn't need them, and commutative-pair flags in a bunch of
   places that weren't actually commutative.
  This was Jean-Marc's fault (the original code came from Speex).
- Simplify silk_CLZ16().
- Port over iFFT C_MULC asm by Andree Buschmann
   <AndreeBuschmann@t-online.de> from Rockbox.
- Speed up the C_MULC asm by using LDRD, allowing more flexible
   addressing, re-ordering instructions to avoid some stalls,
   allowing more flexible register allocation, and getting things
   out of the inline asm block so the compiler can schedule them
   better.
- Add C_MUL and C_MUL4 asm for the FFT to the encoder based, on the
   new C_MULC.

In total, this patch gives a 22.3% speed-up on test_opus_encoder on
 a 600 MHz Cortex A8 using gcc 4.2.1,
When restricted to ARMv4 optimizations, it gives a 9.6% speed-up
 on the same processor/compiler.
On the conformance test vectors:
 Average mono quality is 97.0583 %
 Average stereo quality is 97.775 %

6 years agocelt_maxabs16() now returns an opus_val32 to avoid problems with -32768
Jean-Marc Valin [Sun, 19 May 2013 03:33:48 +0000 (23:33 -0400)]
celt_maxabs16() now returns an opus_val32 to avoid problems with -32768

6 years agoChange few remaining instances of short to opus_int16
Jean-Marc Valin [Sat, 18 May 2013 06:50:40 +0000 (02:50 -0400)]
Change few remaining instances of short to opus_int16

6 years agoUse m4_esyscmd instead of m4_esyscmd_s
Ron [Sat, 18 May 2013 06:41:18 +0000 (16:11 +0930)]
Use m4_esyscmd instead of m4_esyscmd_s

We shouldn't ever have any trailing newlines that need trimming here,
and the _s version wasn't added to m4sugar.m4 until autoconf 2.63b,
so this will let it work with 2.13 again.

6 years agoFixes fixed-point PLC issue reported in trac ticket #1954
Jean-Marc Valin [Sat, 18 May 2013 06:14:24 +0000 (02:14 -0400)]
Fixes fixed-point PLC issue reported in trac ticket #1954

A fixed shift factor was insufficient to properly estimate the decay
factor, resulting in extreme attenuation of the PLC excitation.

6 years agoMaking sure redundant frames never use outdated analysis info
Jean-Marc Valin [Sat, 18 May 2013 03:22:09 +0000 (23:22 -0400)]
Making sure redundant frames never use outdated analysis info

6 years agoMerge branch 'surround'
Jean-Marc Valin [Fri, 17 May 2013 18:31:36 +0000 (14:31 -0400)]
Merge branch 'surround'

6 years agoConservative use of bandwidth detection in CELT
Jean-Marc Valin [Fri, 17 May 2013 18:15:31 +0000 (14:15 -0400)]
Conservative use of bandwidth detection in CELT

Takes into account the bitrate.

6 years agoAutomatic bandwidth decisions get more conservative as rate increases.
Jean-Marc Valin [Fri, 17 May 2013 06:03:33 +0000 (02:03 -0400)]
bandwidth decisions get more conservative as rate increases.

This should prevent errors in the bandwidth detection from affecting quality
when we have enough bits to be close to transparent.

6 years agoSaturates the last RC to 0.99 when Schur blows up
Jean-Marc Valin [Fri, 17 May 2013 03:09:34 +0000 (23:09 -0400)]
Saturates the last RC to 0.99 when Schur blows up

This is a follow-up on ac76b15. When Schur blows up, we set the last RC to
+/- 0.99 instead of eliminating it.

6 years agoSlight simplification of the bandwidth detection code
Jean-Marc Valin [Tue, 14 May 2013 02:35:09 +0000 (22:35 -0400)]
Slight simplification of the bandwidth detection code

New code is especially easier to justify

6 years agoDon't repeatedly install the doc dir for every file
Ron [Sun, 12 May 2013 05:02:52 +0000 (14:32 +0930)]
Don't repeatedly install the doc dir for every file

6 years agoRemove opus_compare.o in Makefile.unix clean too
Ron [Sun, 12 May 2013 04:39:28 +0000 (14:09 +0930)]
Remove opus_compare.o in Makefile.unix clean too

It breaks the autoconf builds amusingly when that is left behind.

6 years agoMore gitignorance
Ron [Fri, 10 May 2013 23:35:50 +0000 (09:05 +0930)]
More gitignorance

6 years agoDon't fail hard if package_version does not exist
Ron [Fri, 10 May 2013 22:03:03 +0000 (07:33 +0930)]
Don't fail hard if package_version does not exist

There's currently at least one way that people can legitimately get a
tarball that doesn't include it, via the gitweb snapshots, so create
it rather than considering that an error to be manually fixed.

6 years agoChange Visual Studio files to use PACKAGE_VERSION.
Ralph Giles [Fri, 10 May 2013 17:55:52 +0000 (10:55 -0700)]
Change Visual Studio files to use PACKAGE_VERSION.

This replaces the OPUS_VERSION removed by ron's auto-updater.

6 years agoMore Makefile.unix tweaks
Ron [Fri, 10 May 2013 16:43:47 +0000 (02:13 +0930)]
More Makefile.unix tweaks

Drop some unneeded CINCLUDES.
Drop the VPATH stuff altogether.  It's entirely unused here, and some of
the paths in it don't even exist and apparently never have in this tree.
Drop the 'default' rule, without it there, 'all' already is the default.
Drop $(TARGET) from all, it already includes 'lib' which is $(TARGET).
Declare phony targets PHONY.

6 years agoFully automate version updating
Ron [Fri, 10 May 2013 16:35:24 +0000 (02:05 +0930)]
Fully automate version updating

This one meets or exceeds the following requirements:

 - Version is checked/updated for every build action when in the git repo.
   Does not require the user to re- ./configure to get the correct version.

 - Version is not updated automatically when using exported tarball source.
   Avoids accidentally getting a wrong version from some other git repo in
   a parent directory of the source, and allows setting the correct version
   for distro package exports.

 - Automatic updating can be manually suppressed.
   For developers doing lots of change/rebuild cycles they don't plan to
   release, when they don't want a full rebuild triggered for every commit,
   and again for every change made immediately after a commit.
   The version will still always be updated if they do a `make dist`.

 - Does not require any manual updating of versions in the mainline git
   repo for each release aside from normal tagging.  The version is
   recorded in one file only, that is automatically generated and will
   never need to be committed.

 - Does not require gnu-make features for the autoconf builds.

It does not currently:

 - Keep a checksum of every source file in tarball releases to mangle the
   version if people modify the tarball source.  Responsible people can
   manually update the version easily though in such cases.

The version.mk file is now only used by the VC project files.  Once they
are updated to use the package_version file too, then it can be deleted
from the repository.

6 years agoBump version to match 1.0.x branch
Jean-Marc Valin [Thu, 9 May 2013 20:52:26 +0000 (16:52 -0400)]
Bump version to match 1.0.x branch

6 years agoFixes an assertion failure in SILK
Jean-Marc Valin [Thu, 9 May 2013 20:17:13 +0000 (16:17 -0400)]
Fixes an assertion failure in SILK

We stop the schur recursion before any reflection coefficient
goes outside of ]-1,1[ and we force reporting a residual energy
of at least 1.
Assertion was:
Fatal (internal) error in ../silk/fixed/noise_shape_analysis_FIX.c, line 290: assertion failed: nrg >= 0
triggered by:
opus_demo voip 16000 1 12500 -bandwidth WB -complexity 10 pl04f087.stp-crash out.pcm

6 years agoFix bustage from c152d602.
Timothy B. Terriberry [Wed, 8 May 2013 21:08:42 +0000 (14:08 -0700)]
Fix bustage from c152d602.

silk_setup_resamples() was using x_bufFIX for two purposes, and I
 only allocated enough space for one of them.
This patch also switches to slightly more descriptive variable
 names than nSamples_temp and computes the resampler input/ouput
 sizes in a way that a little more obviously doesn't have issues
 with fractional samples (and replaces a divide with a variable
 divisor by one with a constant divisor).

6 years agoUse dynamic stack allocation in the SILK encoder.
Timothy B. Terriberry [Wed, 8 May 2013 17:32:37 +0000 (10:32 -0700)]
Use dynamic stack allocation in the SILK encoder.

This makes all remaining large stack allocations use the vararray
 macros.
This continues the work of 6f2d9f50 to allow compiling with
 NONTHREADSAFE_PSEUDOSTACK to move the memory for large buffers
 off the stack for devices where it is very limited.

It also does this for some additional large buffers used by the
 PLC in the decoder.

6 years agoFix several memory errors in the SILK resampler.
Timothy B. Terriberry [Wed, 8 May 2013 17:25:52 +0000 (10:25 -0700)]
Fix several memory errors in the SILK resampler.

1) The memcpy's were using sizeof(opus_int32), but the type of the
    local buffer was opus_int16.
2) Because the size was wrong, this potentially allowed the source
    and destination regions of the memcpy overlap.
   I _believe_ that nSamplesIn is at least fs_in_khZ, which is at
    least 8.
   Since RESAMPLER_ORDER_FIR_12 is only 8, I don't think that's a
    problem once you fix the type size.
3) The size of the buffer used RESAMPLER_MAX_BATCH_SIZE_IN, but the
    data stored in it was actually _twice_ the input batch size
    (nSamplesIn<<1).

Because this never blew up in testing, I suspect that in practice
 the batch sizes are reasonable enough that none of these things
 was ever a problem, but proving that seems non-obvious.

This patch just converts the whole thing to use CELT's vararrays.
This fixes the buffer size problems (since we allocate a buffer
 with the actual size we use) and gets these large buffers off the
 stack on devices using the pseudo-stack.
It also fixes the memcpy problems by changing the sizeof to
 opus_int16.
It turns out sFIR, which saved state between calls, was being used
 elsewhere as opus_int32, so this converts it to a union to make
 this sharing explicit.

6 years agoRemove trailing whitespace.
Timothy B. Terriberry [Sat, 6 Apr 2013 04:48:35 +0000 (21:48 -0700)]
Remove trailing whitespace.

6 years agoFix some warnings.
Timothy B. Terriberry [Thu, 4 Apr 2013 02:38:35 +0000 (19:38 -0700)]
Fix some warnings.

You can't use /* within a comment.

6 years agoUpdate implementation status for Firefox 20 stable release.
Ralph Giles [Tue, 30 Apr 2013 20:37:12 +0000 (13:37 -0700)]
Update implementation status for Firefox 20 stable release.

Release date based on directory timestamps in
https://ftp.mozilla.org/pub/mozilla.org/firefox/releases/20.0/

6 years agoRevisit surround rate allocation surround
Jean-Marc Valin [Mon, 6 May 2013 20:03:39 +0000 (16:03 -0400)]
Revisit surround rate allocation

Stereo now gets twice the "marginal allocation" compared to mono, but has
a 20 kb/s offset. This should be more realistic across a wide range of
bitrates.

6 years agoAdds spreading to the surround masking computation
Jean-Marc Valin [Mon, 6 May 2013 20:02:31 +0000 (16:02 -0400)]
Adds spreading to the surround masking computation

This avoids a single low-energy band from changing the masking results.

6 years agoImplements basic surround masking
Jean-Marc Valin [Sun, 5 May 2013 03:54:20 +0000 (23:54 -0400)]
Implements basic surround masking

The idea is that the rate of each stream is adjusted based on its
contribution to the total energy of a stereo downmix.

6 years agoAdds support for all Vorbis mappings
Jean-Marc Valin [Mon, 29 Apr 2013 22:32:27 +0000 (18:32 -0400)]
Adds support for all Vorbis mappings

6 years agoMore forced decisions in CELT LFE encoding
Jean-Marc Valin [Sat, 27 Apr 2013 06:29:52 +0000 (02:29 -0400)]
More forced decisions in CELT LFE encoding

6 years agoSurround: Better LFE handling
Jean-Marc Valin [Fri, 26 Apr 2013 20:32:10 +0000 (16:32 -0400)]
Surround: Better LFE handling

Forces CELT-only mode for LFE (despite the rate) and "locks" most of the
CELT analysis:
- No transient or TF
- Band boost on first band
- Only first two bands get PVQ bits
- Forced energy decay after the first two bands

6 years agoInitial surround code with new API
Jean-Marc Valin [Fri, 26 Apr 2013 01:34:04 +0000 (21:34 -0400)]
Initial surround code with new API

Conflicts:
src/opus_multistream_encoder.c

6 years agoFixes missing initialization in OpusMSEncoder
Jean-Marc Valin [Sun, 5 May 2013 06:22:06 +0000 (02:22 -0400)]
Fixes missing initialization in OpusMSEncoder

Problem found using valgrind.

6 years agoFixes FEC issues introduced in 7fcd66c
Jean-Marc Valin [Tue, 23 Apr 2013 06:41:28 +0000 (02:41 -0400)]
Fixes FEC issues introduced in 7fcd66c

This left FEC disabled on the decoder side for all cases except concatenated
packets. Also fixes a FEC bug in opus_demo (wrong output buffer size
calculation).

6 years agoVBR bitrate calibration for variable duration.
Jean-Marc Valin [Sat, 20 Apr 2013 02:44:03 +0000 (22:44 -0400)]
VBR bitrate calibration for variable duration.

Also fixes uninitialized value in previous commit.

6 years agoVariable framesize improvements
Jean-Marc Valin [Fri, 19 Apr 2013 07:14:28 +0000 (03:14 -0400)]
Variable framesize improvements

- Properly apply the transient boost by counting all the bits in the cost
- Disable the post-filter for non-20-ms frames that follow a transient (applies
  only to variable framesize)

6 years agoConverts the analysis to ALLOC()
Jean-Marc Valin [Mon, 15 Apr 2013 19:49:40 +0000 (15:49 -0400)]
Converts the analysis to ALLOC()

6 years agoFixes a minor bug found by valgrind in the bandwidth detector
Jean-Marc Valin [Mon, 15 Apr 2013 06:45:02 +0000 (02:45 -0400)]
Fixes a minor bug found by valgrind in the bandwidth detector

The energy calculation from the packed FFTs ended up reading out-of-bound
memory for frequency zero. The bug was exposed by c5e04e4.

6 years agoRandom complexity in the encoder tests.
Gregory Maxwell [Sat, 6 Apr 2013 02:16:58 +0000 (19:16 -0700)]
Random complexity in the encoder tests.

6 years agoFix some 16-bit int issues in the multistream API.
Timothy B. Terriberry [Mon, 18 Mar 2013 21:42:44 +0000 (14:42 -0700)]
Fix some 16-bit int issues in the multistream API.

With 120 ms frames and 6 or more channels, the total number of
 samples in the buffer could overflow.

6 years agoMinor soft clipping doc fix
Jean-Marc Valin [Mon, 18 Mar 2013 21:05:43 +0000 (17:05 -0400)]
Minor soft clipping doc fix

6 years agoRemove -Wdeclaration-after-statement.
Ralph Giles [Wed, 13 Mar 2013 05:57:00 +0000 (22:57 -0700)]
Remove -Wdeclaration-after-statement.

This causes warnings with the ALLOC() macro.

6 years agoMakes bandwidth detection less aggressive.
Jean-Marc Valin [Tue, 12 Mar 2013 15:24:53 +0000 (11:24 -0400)]
Makes bandwidth detection less aggressive.

The original code was causing parts of a sine sweep to be completely dropped
due to the 300 Hz margin and the hysteresis. Also, fixes scaling for the
analysis downmix when the input is 16-bit PCM.

6 years agoFixes a minor glitch on SILK bandwidth changes
Jean-Marc Valin [Mon, 11 Mar 2013 20:25:44 +0000 (16:25 -0400)]
Fixes a minor glitch on SILK bandwidth changes

We weren't doing the prefilling for SILK->SILK transitions.

6 years agoAdd -Wdeclaration-after-statement.
Ralph Giles [Mon, 11 Mar 2013 17:59:13 +0000 (10:59 -0700)]
Add -Wdeclaration-after-statement.

We keep accidentally adding these which break the -pedantic build,
so complain about it in the normal build.

Also de-duplicate the warning list.

6 years agoHigh-band attenuation tuning for hybrid mode
Koen Vos [Mon, 11 Mar 2013 17:30:47 +0000 (13:30 -0400)]
High-band attenuation tuning for hybrid mode

Signed-off-by: Jean-Marc Valin <jmvalin@jmvalin.ca>
6 years agoFixes pseudo-stack
Jean-Marc Valin [Mon, 11 Mar 2013 17:41:11 +0000 (13:41 -0400)]
Fixes pseudo-stack

6 years agoFixes OPUS_SET_EXPERT_FRAME_DURATION_REQUEST for multi-stream
Taihei Momma [Mon, 11 Mar 2013 17:07:34 +0000 (13:07 -0400)]
Fixes OPUS_SET_EXPERT_FRAME_DURATION_REQUEST for multi-stream

Signed-off-by: Jean-Marc Valin <jmvalin@jmvalin.ca>
6 years agoFixes C90 issues for obsolete compilers
Robert Meakins [Mon, 11 Mar 2013 16:59:15 +0000 (12:59 -0400)]
Fixes C90 issues for obsolete compilers

Signed-off-by: Jean-Marc Valin <jmvalin@jmvalin.ca>
6 years agoAdds stereo width computation
Jean-Marc Valin [Mon, 11 Mar 2013 15:35:10 +0000 (11:35 -0400)]
Adds stereo width computation

Using this to change the encoder based on mono/stereo rather than looking
at the number of input channels.

6 years agoMerge branch 'exp_analysis'
Jean-Marc Valin [Fri, 8 Mar 2013 17:29:53 +0000 (12:29 -0500)]
Merge branch 'exp_analysis'

Conflicts:
celt/celt_encoder.c

6 years agoMaking CELT stereo<->mono transitions gradual
Jean-Marc Valin [Fri, 8 Mar 2013 16:35:15 +0000 (11:35 -0500)]
Making CELT stereo<->mono transitions gradual

This not only avoids sudden changes in audio quality, but also increases
quality when we don't have enough bits to code a wide stereo image.

6 years agoDocumentation fixes
Jean-Marc Valin [Thu, 7 Mar 2013 23:13:19 +0000 (18:13 -0500)]
Documentation fixes

Improved version of:
https://github.com/berkus/mettanode/commit/f44b28ab56ce8afa4b9d8c7460b184197519281c

6 years agotest_opus_decode: force integer constants unsigned
James Zern [Wed, 27 Feb 2013 21:16:03 +0000 (13:16 -0800)]
test_opus_decode: force integer constants unsigned

Quiets:
warning: this decimal constant is unsigned only in ISO C90

when building with e.g., gcc -m32 -std=gnu90

6 years agoOops, fixed API name from previous commit
Jean-Marc Valin [Fri, 1 Mar 2013 21:07:02 +0000 (16:07 -0500)]
Oops, fixed API name from previous commit

6 years agoApplies soft-clipping to the int decoder API.
Jean-Marc Valin [Fri, 1 Mar 2013 20:18:23 +0000 (15:18 -0500)]
Applies soft-clipping to the int decoder API.

opus_decode() and opus_multistream_decode() now apply soft clipping
before converting to 16-bit int. This should produce better a higher
quality result than hard clipping like we were doing before. The _float()
API isn't affected, but the clipping function is exported so users can
manually apply the soft clipping.

6 years agoMakes the speech/music probability estimation mode conservative exp_analysis
Jean-Marc Valin [Thu, 28 Feb 2013 20:30:51 +0000 (15:30 -0500)]
Makes the speech/music probability estimation mode conservative

This is done using an adaptive beta and an estimate of the speech
and music detection confidence

6 years agoAdds silence probability to speech/music detector
Jean-Marc Valin [Fri, 22 Feb 2013 21:44:56 +0000 (16:44 -0500)]
Adds silence probability to speech/music detector

Avoids biasing the decision when it's all silence/noise.

6 years agooops s/IMAX/IMIN/
Jean-Marc Valin [Thu, 21 Feb 2013 03:31:49 +0000 (22:31 -0500)]
oops s/IMAX/IMIN/

6 years agoAdds support for delayed decision
Jean-Marc Valin [Wed, 20 Feb 2013 09:08:04 +0000 (04:08 -0500)]
Adds support for delayed decision

Variable duration option renamed to OPUS_SET_EXPERT_FRAME_DURATION,
with new API.
Also moves up the analysis to avoid having to do int->float conversion
on large buffers.

6 years agoFixes a bug introduced in 851f803
Jean-Marc Valin [Tue, 19 Feb 2013 08:42:18 +0000 (03:42 -0500)]
Fixes a bug introduced in 851f803

6 years agoFixes two bandwidth decision issues
Jean-Marc Valin [Tue, 19 Feb 2013 05:42:15 +0000 (00:42 -0500)]
Fixes two bandwidth decision issues

1) In cases where the SILK desired bandwidth went down, then quickly up, we
count get stuck in a mode with the LP variation going the wrong way.
2) Bandwidth detection can no longer force SILK to go below wideband to
avoid switches that require redundancy.

6 years agoMoves mono downmixing and upsampling to the compute_mdcts()
Jean-Marc Valin [Mon, 18 Feb 2013 06:43:43 +0000 (01:43 -0500)]
Moves mono downmixing and upsampling to the compute_mdcts()

6 years agoAdds code to revise the transient decision using the band energy
Jean-Marc Valin [Mon, 18 Feb 2013 02:21:30 +0000 (21:21 -0500)]
Adds code to revise the transient decision using the band energy

Detects a transient when the average band energy jumps by more than 6 dB
between two consecutive frames. This fixes some undetected transients on
Gainless' Muse_Breaks_Rmx sample.

6 years agoMaking multistream variable duration work for both the float and int API
Jean-Marc Valin [Thu, 20 Dec 2012 05:23:01 +0000 (00:23 -0500)]
Making multistream variable duration work for both the float and int API

6 years agoNo need for extra_buffer anymore
Jean-Marc Valin [Mon, 17 Dec 2012 23:02:56 +0000 (18:02 -0500)]
No need for extra_buffer anymore

6 years agoBetter handling of the multistream bitrate
Jean-Marc Valin [Mon, 17 Dec 2012 22:54:01 +0000 (17:54 -0500)]
Better handling of the multistream bitrate

Now supports OPUS_AUTO and OPUS_BITRATE_MAX

6 years agoMultistream support for variable frame duration
Jean-Marc Valin [Mon, 17 Dec 2012 21:23:42 +0000 (16:23 -0500)]
Multistream support for variable frame duration

Also fixes a bug with stereo streams where the initial memory was only
using the left channel.

6 years agoMakes variable framesize less aggressive at lower rates
Jean-Marc Valin [Tue, 27 Nov 2012 04:20:01 +0000 (23:20 -0500)]
Makes variable framesize less aggressive at lower rates

6 years agoRe-enable analysis for 40- and 60-ms frames
Jean-Marc Valin [Mon, 26 Nov 2012 08:08:15 +0000 (03:08 -0500)]
Re-enable analysis for 40- and 60-ms frames

6 years agoFirst attempt at varying the frame size depending on the audio (float only)
Jean-Marc Valin [Thu, 22 Nov 2012 18:11:43 +0000 (13:11 -0500)]
First attempt at varying the frame size depending on the audio (float only)

The search is based on minimizing the bitrate increase due to transients
by considering we can reduce the "transient boost" by reducing the frame
size, at the cost of increasing the normal overhead.

6 years agoMakes opus_demo rubust to the encoder using variable frame duration
Jean-Marc Valin [Tue, 20 Nov 2012 04:21:43 +0000 (23:21 -0500)]
Makes opus_demo rubust to the encoder using variable frame duration

Also, the encode+decode mode now produces an output of the same size
as the original.

6 years agoRunning transient_analysis() even for 2.5 ms frames
Jean-Marc Valin [Tue, 20 Nov 2012 04:17:06 +0000 (23:17 -0500)]
Running transient_analysis() even for 2.5 ms frames

This means 2.5 ms frames can now use a higher bitrate for transients.

6 years agoMakes analysis usable for all frame sizes
Jean-Marc Valin [Wed, 14 Nov 2012 07:39:27 +0000 (02:39 -0500)]
Makes analysis usable for all frame sizes

6 years agoMoves analysis to the beginning of opus_encode()
Jean-Marc Valin [Tue, 13 Nov 2012 07:24:07 +0000 (02:24 -0500)]
Moves analysis to the beginning of opus_encode()

6 years agoFixes a SILK fixed-point encoder issue reported by Cliff Parris <cliff@espico.com>
Jean-Marc Valin [Thu, 7 Feb 2013 20:31:30 +0000 (15:31 -0500)]
Fixes a SILK fixed-point encoder issue reported by Cliff Parris <cliff@espico.com>

6 years agoFixes a minor CELT->SILK switching glitch in the decoder
Jean-Marc Valin [Thu, 7 Feb 2013 04:48:09 +0000 (23:48 -0500)]
Fixes a minor CELT->SILK switching glitch in the decoder

By not reinitializing the stereo state during a switch, the old stereo
memory would create a false impulse (i.e. single sample) in the decoded audio.
This change affects the normative part of the decoder. Fortunately,
the modified decoder is still compliant with the specification because
it still easily passes the testvectors. For example, for the float decoder
at 48 kHz, the opus_compare (arbitrary) "quality score" changes from
from 99.9333% to 99.925%.

6 years agoAdds a ramp up in the SILK prefill
Jean-Marc Valin [Wed, 6 Feb 2013 23:10:51 +0000 (18:10 -0500)]
Adds a ramp up in the SILK prefill

This improves quality of CELT->SILK switches by not having the SILK encoder
attempt to encode a discontinuity. Overall, it's a small PQ improvement,
confirmed by some listening.

6 years agoFixes a hybrid stereo encoder issue
Jean-Marc Valin [Tue, 5 Feb 2013 06:32:52 +0000 (01:32 -0500)]
Fixes a hybrid stereo encoder issue

This was causing periodic glitches in the right channel in hybrid mode.

6 years agoSplit mapping families into sections and add dowmix matrices.
Ralph Giles [Thu, 17 Jan 2013 00:30:55 +0000 (16:30 -0800)]
Split mapping families into sections and add dowmix matrices.

The channel mapping family nested lists were hard to read.
Promoting each family description to a subsection makes it
more clear where one is in the document.

Also add suggested downmix matricies. These are what we're
currently using in opus-tools, opusfile, and Firefox.
Ascii-art matrices in 69 columns is hard.

6 years agoImprove Content Type figure placement.
Ralph Giles [Wed, 16 Jan 2013 22:14:32 +0000 (14:14 -0800)]
Improve Content Type figure placement.

With xml2rfc 2.3.9, I was getting the 'audio/ogg; codecs=opus'
figure hoisted out of the the containing paragraph, which was
very confusing.

I've tried to improve this by moving the surrounding paragraph
into the figure using the <preamble> and <postamble> tags, as
in the example in draft-mrose-writting-rfcs.

Unfortunately this still isn't perfect. Since the surrounding
paragraph is part of the figure we can't set align="center" on
the figure itself, and the processor seems to ignore it on the
artwork element. I've compensated by adding some leading
whitespace.

6 years agoMinor clarifications to the channel mapping section.
Ralph Giles [Sat, 12 Jan 2013 01:11:07 +0000 (17:11 -0800)]
Minor clarifications to the channel mapping section.

Mostly just being more verbose.

6 years agoUse 'front center' in the channel mapping table.
Ralph Giles [Sat, 12 Jan 2013 01:01:38 +0000 (17:01 -0800)]
Use 'front center' in the channel mapping table.

This clarifies the meaning in surround configurations and better
distinguishes it from 'rear center'.

6 years agoFix a typo.
Ralph Giles [Fri, 11 Jan 2013 23:51:15 +0000 (15:51 -0800)]
Fix a typo.

6 years agoAdd HTTPS to make gmaxwell happy.
Timothy B. Terriberry [Fri, 11 Jan 2013 03:29:17 +0000 (19:29 -0800)]
Add HTTPS to make gmaxwell happy.

6 years agoFlesh out the Implementation Status section a bit.
Timothy B. Terriberry [Fri, 11 Jan 2013 03:23:58 +0000 (19:23 -0800)]
Flesh out the Implementation Status section a bit.

Add sections on VLC, foobar200, and Rockbox.
Be more complete about listing which features of the format are
 actually supported by each implementation.
Still need to do more testing for Chrome, FFmpeg, and libav.

6 years agoClarify how grouped streams are not "Ogg Opus files".
Ralph Giles [Fri, 11 Jan 2013 01:00:18 +0000 (17:00 -0800)]
Clarify how grouped streams are not "Ogg Opus files".

We mean to make .opus only for degenerate--not concurrently
multiplexed or grouped--but optionally sequentially multiplexed
or chained physical Ogg streams.

However, we don't mean to say you can't use this draft with
such streams.

Also, replace the reference to RFC3534 with RFC5334, which
obsoletes the previous reference by defining video/ogg and
audio/ogg.

6 years agoAdd an 'Implementation Status' section to the Ogg Opus draft.
Ralph Giles [Fri, 11 Jan 2013 00:38:31 +0000 (16:38 -0800)]
Add an 'Implementation Status' section to the Ogg Opus draft.

This is based on the experiment described in
http://tools.ietf.org/html/draft-sheffer-running-code-01

I've listed several major implementations. Their formatting
could probably be better. More obviously, this really demonstrates
the need for a good test suite to evaluate converage and compliance
with all these different implementations.

6 years agoTrim an irrelevant clause.
Ralph Giles [Thu, 10 Jan 2013 22:15:41 +0000 (14:15 -0800)]
Trim an irrelevant clause.

This is true, but not important to understanding the limitation.