18 months agoDisable building latex documentation on ci.
Thomas Daede [Wed, 2 Aug 2017 00:27:04 +0000 (17:27 -0700)]
Disable building latex documentation on ci.

The documentation currently fails to build on Jenkins due to
hyperref and doxygen not playing nicely with each other on
Debian Stretch.

18 months agoPrint a useful error when pkg-config is missing
Timothy B. Terriberry [Tue, 1 Aug 2017 23:49:32 +0000 (16:49 -0700)]
Print a useful error when pkg-config is missing

Without this check, the PKG_CHECK_MODULES() macro remains
unexpanded, which gives a syntax error when the shell reaches that
point in the configure script, even for checks which are disabled
(e.g., the OpenSSL check when using --disable-http).

Instead, explicitly check for pkg-config and give the user useful
advice on how to solve the problem if it's not found.

Thanks to eXpl0it3r for reporting a problem for which installing
pkg-config turned out to be the solution.

19 months agoImprove source/stream terminology consistency
Timothy B. Terriberry [Fri, 7 Jul 2017 21:36:18 +0000 (14:36 -0700)]
Improve source/stream terminology consistency

We inherited the term "source" from vorbisfile's "datasource", but
 were using it interchangeably with stream.
At least one user did not even realize the that the _source
 parameter passed to op_open_callbacks() was the same as the
 _stream parameter taken by those callbacks, which is reasonable
 because we never said so.
Consistently use "stream" instead of "source" in both the
 documentation and the code.

19 months agoMinor documentation cross-reference.
Timothy B. Terriberry [Fri, 7 Jul 2017 21:14:25 +0000 (14:14 -0700)]
Minor documentation cross-reference.

Let people reading about the output_gain field know how to change
 the way it gets applied.

20 months agohttp: Fix assertion broken for IPv6 addresses.
Timothy B. Terriberry [Sat, 17 Jun 2017 19:16:59 +0000 (12:16 -0700)]
http: Fix assertion broken for IPv6 addresses.

These two asserts used to be in separate branches, but the code was
 consolidated into a single branch by e63503349f3f.
However, the asserts were not updated at the same time.
With an IPv6 address, the sockaddr_in assert would always fail.

20 months agoPropogate openssl CFLAGS to the opusurl build.
Ralph Giles [Wed, 7 Jun 2017 18:25:58 +0000 (11:25 -0700)]
Propogate openssl CFLAGS to the opusurl build.

We added DEPS_CFLAGS to the general build, but opusurl
has an additional dependency on openssl. If the headers
were outside the normal search path, configure could
succeed but then the build would fail on http.c.

We need to add URL_DEPS_CFLAGS to that specific target.

20 months agomingw: Drop fedora from dist version.
Ralph Giles [Wed, 7 Jun 2017 16:47:29 +0000 (09:47 -0700)]
mingw: Drop fedora from dist version.

I think it's less confusing for most users to omit this. I added
it so I could distinguish the docker-hosted cross package from
others, but it's a distraction for people trying to use the
resulting binaries.

20 months agomingw: Query git for dist version.
Ralph Giles [Wed, 7 Jun 2017 14:55:25 +0000 (07:55 -0700)]
mingw: Query git for dist version.

We build from a git repo, so we can call `git describe` to
generate a version number. When building from a tag, this
should give us a clean release-versioned filename.

20 months agomingw: Bump docker base image to fedora:25.
Ralph Giles [Tue, 6 Jun 2017 21:11:30 +0000 (14:11 -0700)]
mingw: Bump docker base image to fedora:25.

fedora:24 will be end-of-life soon.

20 months agoUpdate mingw dependencies.
Ralph Giles [Fri, 26 May 2017 19:19:21 +0000 (12:19 -0700)]
Update mingw dependencies.

opus 1.1.5
openssl 1.0.2l

There's a newer branch (openssl 1.1.x) availabe now, but the
build script needs changes to make it work. Stay on 1.0.2 for now.

20 months agoFix two compiler warnings.
Timothy B. Terriberry [Wed, 24 May 2017 20:08:44 +0000 (13:08 -0700)]
Fix two compiler warnings.

Thanks to Mark Harris for the report.

20 months agoFix uninitialized free in tag parsing.
Timothy B. Terriberry [Tue, 23 May 2017 22:48:40 +0000 (15:48 -0700)]
Fix uninitialized free in tag parsing.

The tags have two possible representations of the binary suffix
An implicit one: if comment_lengths and user_comments are NULL,
 then the length of the binary suffix data is 0 and the pointer to
 that data is also implicitly taken to be NULL.
And an explicit one: if comment_lengths and user_comments are
 non-NULL, then comment_lengths[comments] and
 user_comments[comments] contains the length and pointer to the
 binary suffix data (where "comments" is the number of user

The implicit one allows us to initialize a tags struct without
 doing any allocations, which ensures it always succeeds.
op_tags_ensure_capacity() may upgrade the implicit representation
 to the explicit representation.
However, when doing so, it stores the implicit (0, NULL) values
 in their new explicit locations at the end of the array assuming
 the requested capacity will become the new size.
If the caller of op_tags_ensure_capacity() then fails before
 enlarging the array to that size, then comment_lengths and
 user_comments will be non-NULL, but the explicit locations for the
 binary suffix data for the _old_ size may not have been

In particular, in opus_tags_parse_impl(), if there was exactly one
 comment, and any of the three checks at the start of the main loop
 failed, then the explicit locations for the binary suffix data
 would remain uninitialized, and the call to opus_tags_clear() in
 the caller would attempt to free them.
For counts larger than 1, the extra line marked "Needed by
 opus_tags_clear()" will update the explicit location as the array
 grows, but with a count of 1 this line never gets a chance to run.

This patch fixes the problem by making op_tags_ensure_capacity()
 promote the implicit representation to explicit at _both_ the old
 and new array sizes.
We could have fixed up opus_tags_parse_impl() to do this instead,
 as suggested in the original bug reports, but doing it this way
 ensures that the tags are always in a valid state when
 op_tags_ensure_capacity() returns.

Thanks to the Google AutoFuzz Team for the report.

Fixes #2324
Fixes #2325

21 months agoMinor documentation fix.
Timothy B. Terriberry [Sat, 13 May 2017 05:23:30 +0000 (22:23 -0700)]
Minor documentation fix.

Clarify that the value returned by op_current_link() is strictly
 less than the value returned by op_link_count() for seekable

21 months agoHarmonize op_raw_total() and op_raw_seek()
Timothy B. Terriberry [Sat, 13 May 2017 04:58:46 +0000 (21:58 -0700)]
Harmonize op_raw_total() and op_raw_seek()

op_raw_seek() will fail if you try to seek to a byte position
 beyond the end of the file.
However, the "end" is defined in terms of _of->end, which is
 specifically the end of the last Ogg page found in the underlying
 source (excluding any trailing non-Ogg data).
op_raw_total(_of,-1) returns the total size of the stream by using
 _of->end, but it was also subtracting the offset of the first Opus
 page in the first link.
Since there might have been other Ogg streams concurrently
 multiplexed with the first Opus stream whose BOS pages appear
 first, or there might simply be non-Ogg junk at the start, that
 left the caller with no way to determine the valid range of byte
 offsets that could be passed to op_raw_seek().

Instead, make op_raw_total() pretend the first link starts at
 offset 0, and explicitly document that it's what defines the range
 of valid values to op_raw_seek().
This is how our own seeking_example.c was using it, anyway.

21 months agoImprove handling of holes (corrupt pages).
Timothy B. Terriberry [Sat, 13 May 2017 00:49:53 +0000 (17:49 -0700)]
Improve handling of holes (corrupt pages).

Previously, when we encountered a hole (a gap in the page sequence
 numbers), we would save off all of the packets from the first page
 after the hole, but not timestamp them.
That meant when they were actually decoded, op_pcm_tell() would
 report a timestamp of 0 until reaching the last packet on that

Instead, handle holes just like a raw seek.
We reset the granule position tracking, and attempt to timestamp
 packets backwards from the end of the page.
If the first page after the hole is an EOS page, we just throw it
 away (rather than risk playing invalid samples due to incorrect
We also throw away the first 80 ms of audio after a hole, to allow
 the decoder state to reconverge.

This patch also updates the example to report the hole and
 continue decoding, rather than immediately stopping when a hole is
 encountered, in order to test the above features.

21 months agoAvoid operations linear in the number of links.
Timothy B. Terriberry [Fri, 12 May 2017 23:02:38 +0000 (16:02 -0700)]
Avoid operations linear in the number of links.

Just in case some bozo makes a chained stream with 272,389 links
 with 16 samples in each (coded at 16 Mbps, including overheads).
This avoids quadratic behavior for simple straight-through
 playback: we no longer do a linear search on each chain boundary
 or each call to op_pcm_tell().
N seeks with M chains still requires O(N*log(M)) work.

21 months agoMinor comment updates.
Timothy B. Terriberry [Fri, 12 May 2017 20:17:10 +0000 (13:17 -0700)]
Minor comment updates.

No code changes.

21 months agoUse OpenSSL's hostname validation if available.
Timothy B. Terriberry [Sat, 31 Dec 2016 14:33:40 +0000 (06:33 -0800)]
Use OpenSSL's hostname validation if available.

As of version 1.0.2, OpenSSL can finally do automatic hostname
 validation for us.
Their implementation is likely to have received much better review
 than ours, and there are other good reasons to prefer it, so use it
 when we can.

21 months agoFix two minor errors in hostname validation.
Timothy B. Terriberry [Sat, 31 Dec 2016 14:25:31 +0000 (06:25 -0800)]
Fix two minor errors in hostname validation.

RFC 6125 says that if the host is an IP address, a subjectAltName of
 type iPAddress must (no 2119 caps) be present and must be used.
We would still fall back to checking the Common Name if no
 subjectAltName was present.

https://marc.info/?l=openssl-dev&m=139617145216047&w=2 interprets
 RFC 6125 to say that if the host is a DNS name, but the certificate
 only contains a subjectAltName of type iPAddress, then we should
 still fall back to checking the Common Name.
We would only check the Common Name if there was no subjectAltName
 of any type.

Restructure the hostname validation to check IP addresses up-front
 and fall back to checking the Common Name in the proper cases.

23 months agoFix minor typo in return type of op_serialno()
sezero [Tue, 7 Mar 2017 08:11:10 +0000 (11:11 +0300)]
Fix minor typo in return type of op_serialno()

If, e.g. using a differently configured config_types.h with a long
vs. int conflict in the int32 typedef, this would have resulted in
a build failure.

Signed-off-by: Timothy B. Terriberry <tterribe@xiph.org>
2 years agoUse ASN1_STRING_get0_data for openssl-1.1.0
eroen [Mon, 2 Jan 2017 18:50:07 +0000 (19:50 +0100)]
Use ASN1_STRING_get0_data for openssl-1.1.0

This fixes a build failure from undefined references to ASN1_STRING_data in

ASN1_STRING_data is deprecated in openssl-1.1.0. The new ASN1_STRING_get0_data
is identical, except the returned string may not be modified, which we don't
do anyway.

Also include missing asn1.h header to silence compiler warnings.

X-Gentoo-Bug: 592456
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=592456

2 years agomingw: Don't use deltarpm reconstruction.
Ralph Giles [Tue, 8 Nov 2016 06:29:52 +0000 (22:29 -0800)]
mingw: Don't use deltarpm reconstruction.

The fedora docker images ship without the necessary metadata
to reconstruct rpm packages from installed data, so attempting
to download delta rpm packages when updating the system just
wastes time and bandwidth.

2 years agoFix typo in assertion.
Ralph Giles [Fri, 4 Nov 2016 23:51:49 +0000 (16:51 -0700)]
Fix typo in assertion.

Commit d0c82543d55f1f5938460022777301b8de023bc9 broke builds
with --enable-assertions with error: 'tag_len' undeclared.

Fixing the simple typo in the symbol reference resolves the issue.

2 years agomingw: README.txt -> README.md.
Ralph Giles [Fri, 4 Nov 2016 22:09:38 +0000 (15:09 -0700)]
mingw: README.txt -> README.md.

The file in the parent directory was renamed; change the
reference in the Makefile as well.

2 years agomingw: Base docker container on Fedora 24.
Ralph Giles [Fri, 4 Nov 2016 21:50:40 +0000 (14:50 -0700)]
mingw: Base docker container on Fedora 24.

2 years agomingw: update to openssl 1.0.2j.
Ralph Giles [Fri, 4 Nov 2016 21:31:13 +0000 (14:31 -0700)]
mingw: update to openssl 1.0.2j.

Latest stable release.

2 years agomingw: update to opus 1.1.3.
Ralph Giles [Fri, 4 Nov 2016 21:28:31 +0000 (14:28 -0700)]
mingw: update to opus 1.1.3.

Build against latest stable upstream release.

2 years agomingw: Correct README typo.
Ralph Giles [Fri, 4 Nov 2016 21:24:33 +0000 (14:24 -0700)]
mingw: Correct README typo.

2 years agoMake dot optional in generating documentation.
Ralph Giles [Fri, 4 Nov 2016 21:22:19 +0000 (14:22 -0700)]
Make dot optional in generating documentation.

Different distributions of doxygen have different default
values of HAVE_DOT setting, so we need to pick a specific
setting to avoid 'missing dot' warnings on some platforms.

Doxygen uses it to generate inclusion graphs for our various
header files, which is somewhat useful, but not essential.
We therefore enable dot if it's present (usually through
the parent graphviz package) but disable it if it's not
available, silencing the warning, but not giving uniform

2 years agoAdd jenkins build status icon.
Ralph Giles [Wed, 28 Sep 2016 15:45:14 +0000 (08:45 -0700)]
Add jenkins build status icon.

2 years agoUse the appveyor badge for the xiph github repo.
Ralph Giles [Wed, 21 Sep 2016 19:22:14 +0000 (12:22 -0700)]
Use the appveyor badge for the xiph github repo.

2 years agoUpdate release checklist for README.md.
Timothy B. Terriberry [Wed, 21 Sep 2016 17:12:37 +0000 (10:12 -0700)]
Update release checklist for README.md.

2 years agoAdd badges
Chocobo1 [Sun, 31 Jul 2016 02:16:22 +0000 (10:16 +0800)]
Add badges

2 years agoModernize README
Chocobo1 [Sun, 31 Jul 2016 02:10:56 +0000 (10:10 +0800)]
Modernize README

Adopt markdown format

2 years agoFix MSVC warnings.
Timothy B. Terriberry [Fri, 16 Sep 2016 22:41:27 +0000 (15:41 -0700)]
Fix MSVC warnings.

Some of these pointed to real potential overflows (given arbitrary
 inputs by the calling application).
I was sad about stripping const qualifiers from the struct addrinfo
 pointers, but MSVC seems to erroneously think that an array of
 pointers to constant data is itself a pointer to constant data (or
 maybe that it is not compatible with a const void *?), and
 converting the memmove()s to for loops triggered an erroneous
 warning about out-of-bounds array accesses in gcc (but on only one
 of the two identical loops).

2 years agoappveyor: Don't compile OpenSSL for the Release-NoHTTP configuration.
Ricardo Constantino (:RiCON) [Thu, 28 Jul 2016 22:10:38 +0000 (23:10 +0100)]
appveyor: Don't compile OpenSSL for the Release-NoHTTP configuration.

The dependency isn't needed in this case, and it speeds up
the test considerably.

Signed-off-by: Ralph Giles <giles@thaumas.net>
2 years agoVS2015: Add Release configuration without OpenSSL dependency.
Ricardo Constantino (:RiCON) [Thu, 28 Jul 2016 20:17:24 +0000 (21:17 +0100)]
VS2015: Add Release configuration without OpenSSL dependency.

Using a custom config.h isn't enough, since additional libs have to
be available whether OP_ENABLE_HTTP is defined or not.

Don't bother compiling OpenSSL in Appveyor in this one.

Signed-off-by: Ralph Giles <giles@thaumas.net>
2 years agoVS2015: Depend on OpenSSL.
Ricardo Constantino (:RiCON) [Thu, 28 Jul 2016 01:03:02 +0000 (02:03 +0100)]
VS2015: Depend on OpenSSL.

Signed-off-by: Ralph Giles <giles@thaumas.net>
2 years agoappveyor: Compile static openssl from git to use with opusfile.
Ricardo Constantino (:RiCON) [Thu, 28 Jul 2016 00:58:38 +0000 (01:58 +0100)]
appveyor: Compile static openssl from git to use with opusfile.

Stable branch used because master is on 1.1.x which doesn't work.

Signed-off-by: Ralph Giles <giles@thaumas.net>
2 years agoAdd appveyor.yml to test VS2015 builds.
Ricardo Constantino (:RiCON) [Wed, 27 Jul 2016 14:18:52 +0000 (15:18 +0100)]
Add appveyor.yml to test VS2015 builds.

Signed-off-by: Ralph Giles <giles@thaumas.net>
2 years agoRemove VS2010 projects.
Ricardo Constantino (:RiCON) [Tue, 26 Jul 2016 20:48:19 +0000 (21:48 +0100)]
Remove VS2010 projects.

Signed-off-by: Ralph Giles <giles@thaumas.net>
2 years agoAdd VS2015 projects.
Ricardo Constantino (:RiCON) [Tue, 26 Jul 2016 22:04:10 +0000 (23:04 +0100)]
Add VS2015 projects.

Signed-off-by: Ralph Giles <giles@thaumas.net>
2 years agowin32: Add gitignore.
Ricardo Constantino (:RiCON) [Tue, 26 Jul 2016 20:09:32 +0000 (21:09 +0100)]
win32: Add gitignore.

Signed-off-by: Ralph Giles <giles@thaumas.net>
2 years agoAdd a travis build file.
Ralph Giles [Thu, 7 Jul 2016 22:28:01 +0000 (15:28 -0700)]
Add a travis build file.

It seems we have to run this on ubuntu trusty images to satisfy
the libopus-dev dependency, which currently requires sudo
(I think as proxy to trigger a non-docker image?) and is
therefore slower than vanilla container builds.

2 years agoUpdate dependencies for the mingw build.
Ralph Giles [Wed, 6 Jul 2016 21:41:04 +0000 (14:41 -0700)]
Update dependencies for the mingw build.

2 years agoAdd release checksums for opusfile 0.8.
Ralph Giles [Wed, 6 Jul 2016 17:43:01 +0000 (10:43 -0700)]
Add release checksums for opusfile 0.8.

2 years agoFix typo in release checklist. v0.8
Ralph Giles [Wed, 6 Jul 2016 17:29:12 +0000 (10:29 -0700)]
Fix typo in release checklist.

2 years agoBump soname for v0.8.
Ralph Giles [Wed, 6 Jul 2016 17:21:04 +0000 (10:21 -0700)]
Bump soname for v0.8.

No public API changes.

2 years agoAdd support for OpenSSL 1.1.x.
Timothy B. Terriberry [Wed, 6 Jul 2016 16:36:16 +0000 (09:36 -0700)]
Add support for OpenSSL 1.1.x.

The API and ABI is not backwards-compatible.
This is based on the prerelease version 1.1.0-pre5.
It should continue to work with older versions of OpenSSL.

Thanks to Ron Lee and the Debian project for reporting the build
 errors and testing the patch.

2 years agoAdd comment explaining fix in 72f4f8a6c2c3.
Timothy B. Terriberry [Mon, 4 Jul 2016 02:12:49 +0000 (19:12 -0700)]
Add comment explaining fix in 72f4f8a6c2c3.

2 years agoFix free with uninitialized data in opus_tags_parse().
Timothy B. Terriberry [Mon, 4 Jul 2016 02:03:18 +0000 (19:03 -0700)]
Fix free with uninitialized data in opus_tags_parse().

If the parsing fails before all comments are filled in, we will
 attempt to free any binary metadata at the position one past the
 last comment, which will be uninitialized.
Introduced in commit 0221ca95fc58.

2 years agoAdd missing NULL check to opus_tags_parse().
Timothy B. Terriberry [Mon, 4 Jul 2016 01:50:09 +0000 (18:50 -0700)]
Add missing NULL check to opus_tags_parse().

According to the API, you can pass in a NULL OpusTags object to
 simply check if the comment packet is valid, without storing the
 parsed results.
However, the additions to store binary metadata in commit
 0221ca95fc58 did not check for this.

Fixes Coverity CID 149873.

2 years agoFix NULL check in opus_tags_add_comment().
Timothy B. Terriberry [Mon, 4 Jul 2016 01:43:26 +0000 (18:43 -0700)]
Fix NULL check in opus_tags_add_comment().

In 0221ca95fc58 the allocation result went from being stored
 directly in "_tags->user_comments[ncomments]" to being stored in
 the temporary "comment".
However, the NULL check for allocation failure was not updated to
This meant this function would almost always fail, unless you had
 added binary metadata first.

Fixes Coverity CID 149874.

2 years agoFix skipping logic for multiplexed non-Opus pages.
Timothy B. Terriberry [Mon, 4 Jul 2016 01:21:58 +0000 (18:21 -0700)]
Fix skipping logic for multiplexed non-Opus pages.

This bug appears to have been present since the original code
This was a "clever" rearrangement of the control flow from the
 _fetch_and_process_packet() in vorbisfile to use a do ... while(0)
 instead of a "while(1)".
However, this also makes "continue" equivalent to "break": it does
 not actually go back to the top of the loop, because the loop
 condition is false.

This bug was harmless, because ogg_stream_pagein() then refuses to
 ingest a page with the wrong serialno, but we can simplify things
 by fixing it.
The "not strictly necessary" loop is now completely unnecessary.
The extra checks that existed in vorbisfile have all been moved to
 later in the main loop, so we can just continue that one directly,
 with no wasted work, instead of embedding a smaller loop inside.

Fixes Coverity CID 149875.

2 years agoNote small inaccuracy in bitrate tracking.
Timothy B. Terriberry [Mon, 4 Jul 2016 01:10:16 +0000 (18:10 -0700)]
Note small inaccuracy in bitrate tracking.

In the non-seekable case, we'll undercount some bytes at the start
 of a new link.
Still thinking about the best way to address this, but leaving a
 comment so I don't forget.

2 years agoShould a BOS page with no packets be an error?
Timothy B. Terriberry [Mon, 4 Jul 2016 00:46:26 +0000 (17:46 -0700)]
Should a BOS page with no packets be an error?

Going with "no" for now, but leave a reminder in the source code
 that this is a debatable question.

2 years agoMinor comment typo fix.
Timothy B. Terriberry [Sun, 26 Jun 2016 22:04:07 +0000 (15:04 -0700)]
Minor comment typo fix.

2 years agoMinor comment typo fixes.
Timothy B. Terriberry [Sun, 19 Jun 2016 15:37:09 +0000 (08:37 -0700)]
Minor comment typo fixes.

2 years agoRemove readp argument to op_fetch_and_process_page().
Timothy B. Terriberry [Thu, 16 Jun 2016 03:50:26 +0000 (20:50 -0700)]
Remove readp argument to op_fetch_and_process_page().

This was set to 1 by all callers, so we can simplify logic by just
 removing it.
This appears to have already been true in the libvorbisfile code
 from which this was adapted.

2 years agoMinor documentation updates.
Timothy B. Terriberry [Thu, 16 Jun 2016 03:34:35 +0000 (20:34 -0700)]
Minor documentation updates.

Just improving the clarity in some places.

2 years agoIgnore documentation output directories.
Ralph Giles [Wed, 1 Jun 2016 00:46:48 +0000 (17:46 -0700)]
Ignore documentation output directories.

2 years agoMention attaching tarballs to github.
Ralph Giles [Wed, 1 Jun 2016 00:44:34 +0000 (17:44 -0700)]
Mention attaching tarballs to github.

Github offers the `git archive` output of each tag as a
"release tarball", bypassing the `make dist` process and
confusing people who find those download artifacts. Better
to at least offer the official releases alongside those.

3 years agoAdd release checksums for opusfile 0.7.
Ralph Giles [Wed, 6 Jan 2016 01:47:55 +0000 (17:47 -0800)]
Add release checksums for opusfile 0.7.

3 years agoMerge the generic bits of the release notes into the readme. v0.7
Ralph Giles [Tue, 5 Jan 2016 00:17:24 +0000 (16:17 -0800)]
Merge the generic bits of the release notes into the readme.

Also switch to markdown-style headings to the benefit of github.

3 years agomingw: Bump docker base to Fedora 23.
Ralph Giles [Tue, 5 Jan 2016 00:07:17 +0000 (16:07 -0800)]
mingw: Bump docker base to Fedora 23.

This build works as well. I'm not sure what's wrong with my
local environment.

3 years agomingw: Building on Fedora 22 works as well.
Ralph Giles [Fri, 1 Jan 2016 02:07:21 +0000 (18:07 -0800)]
mingw: Building on Fedora 22 works as well.

3 years agomingw: Add a package target.
Ralph Giles [Fri, 1 Jan 2016 01:45:46 +0000 (17:45 -0800)]
mingw: Add a package target.

This does the basics to build the win32 binary release zipfile
for testing. Doesn't sign or version it properly.

3 years agomingw: Build just deps by default, not that static opusfile.
Ralph Giles [Fri, 1 Jan 2016 01:44:22 +0000 (17:44 -0800)]
mingw: Build just deps by default, not that static opusfile.

3 years agomingw: Bump docker build to Fedora 21.
Ralph Giles [Fri, 1 Jan 2016 01:26:39 +0000 (17:26 -0800)]
mingw: Bump docker build to Fedora 21.

The version of mingw in Fedora 21 works as well.
This is the first version to depend on libwinpthread.

Also add an autogen.sh invocation which caused the previous
build to fail after the 'make check' barrier was removed.

3 years agomingw: remove 'make check' steps.
Ralph Giles [Fri, 1 Jan 2016 00:10:30 +0000 (16:10 -0800)]
mingw: remove 'make check' steps.

This requires wine to run the windows executables, which is a
pretty heavy dependency. Better to do without for now.

3 years agomingw: Add a Dockerfile describing cross build.
Ralph Giles [Fri, 1 Jan 2016 00:07:56 +0000 (16:07 -0800)]
mingw: Add a Dockerfile describing cross build.

For some reason, when I cross-compile opusfile on Fedora 23,
I get example binaries with exit immediately without error.

Building them on Fedora 20 (in a docker container) produced
working binaries. Until we figure out what the bug is, include
this for convenience.

The build doesn't actually work because of the 'make check'
steps in the Makefile, which require wine.

3 years agoFix typo.
Ralph Giles [Fri, 1 Jan 2016 00:07:36 +0000 (16:07 -0800)]
Fix typo.

3 years agoAdd release checksums for win32 binary builds.
Ralph Giles [Thu, 31 Dec 2015 21:14:31 +0000 (13:14 -0800)]
Add release checksums for win32 binary builds.

Verified against archive.mozilla.org and the original builds
on my machine.

3 years agoAdd release checksums.
Ralph Giles [Thu, 31 Dec 2015 21:08:46 +0000 (13:08 -0800)]
Add release checksums.

Keep a copy of the release tarball SHA-256 checksums in the
repository for reference. Having a copy with the code in
distributed version control adds a verification path.

This should match the opusfile checksums in
https://archive.mozilla.org/pub/opus/SHA256SUMS.txt and

3 years agomingw: Add fetch and realclean targets for downloading dependencies.
Ralph Giles [Thu, 31 Dec 2015 10:04:18 +0000 (02:04 -0800)]
mingw: Add fetch and realclean targets for downloading dependencies.

For those who would like network access to be a separate step.

3 years agomingw: Fix clean target.
Ralph Giles [Thu, 31 Dec 2015 09:58:51 +0000 (01:58 -0800)]
mingw: Fix clean target.

3 years agomingw: Use $(CURDIR) instead of ${PWD}.
Ralph Giles [Thu, 31 Dec 2015 09:57:11 +0000 (01:57 -0800)]
mingw: Use $(CURDIR) instead of ${PWD}.

This doesn't work in a normal shell, but enables 'make -C mingw'
which is convenient.

Thanks to ron for the suggestion.

3 years agoFix typo.
Ralph Giles [Thu, 31 Dec 2015 09:34:54 +0000 (01:34 -0800)]
Fix typo.

3 years agoUpdate release instructions.
Ralph Giles [Thu, 31 Dec 2015 09:16:10 +0000 (01:16 -0800)]
Update release instructions.

These may not be final since the mingw build wasn't successful
but includes updates from following the process today.

3 years agoBump soname for v0.7.
Ralph Giles [Thu, 31 Dec 2015 00:16:47 +0000 (16:16 -0800)]
Bump soname for v0.7.

We have added new public interfaces, but are still backward
compatible with clients built against older releases.

3 years agoUpdate release instructions for mingw makefile.
Ralph Giles [Wed, 30 Dec 2015 23:58:56 +0000 (15:58 -0800)]
Update release instructions for mingw makefile.

Have successfully automated the build, but packaging
is still manual.

3 years agoUpdate release instructions for new archive locations.
Ralph Giles [Wed, 30 Dec 2015 23:58:12 +0000 (15:58 -0800)]
Update release instructions for new archive locations.

ftp.mozilla.org is now s3-backed archive.mozilla.org.
Old urls should redirect.

3 years agoAdd a makefile for cross-compiling on mingw.
Ralph Giles [Wed, 30 Dec 2015 22:25:55 +0000 (14:25 -0800)]
Add a makefile for cross-compiling on mingw.

This builds win32 versions of the library and examples
on linux using the mingw-gcc cross toolchain and wine.

It also automates downloading and building the
required dependencies. Update the _URL and _SHA
variables to build against newer upstream releases.

Thanks to Ron and Mark Harris for help with the makefile.

3 years agoFix potential memory leaks with OpusServerInfo.
Timothy B. Terriberry [Wed, 30 Dec 2015 13:23:32 +0000 (05:23 -0800)]
Fix potential memory leaks with OpusServerInfo.

In op_[v]open_url() and op_[v]test_url(), if we successfully
 connected to the URL but fail to parse it as an Opus stream, then
 we would return to the calling application without clearing any
 OpusServerInfo we might have filled in when connecting.
This contradicts the general contract for user output buffers in
 our APIs, which is that they do not need to be initialized prior
 to a call and that their contents are untouched if a function
 fails (so that an application need do no additional clean-up on
It would have been possible for an application to avoid these leaks
 by always calling opus_server_info_init() before a call to
 op_[v]open_url() or op_[v]test_url() and always calling
 opus_server_info_clear() afterwards (even on failure), but our
 examples don't do this and no other API of ours requires it.

Fix the potential leaks by wrapping the implementation of
 op_url_stream_vcreate() so we can a) tell if the information was
 requested and b) store it in a separate, local buffer and delay
 copying it to the application until we know we've succeeded.

3 years agoAdd API to access and preserve binary metadata.
Timothy B. Terriberry [Wed, 30 Dec 2015 02:10:07 +0000 (18:10 -0800)]
Add API to access and preserve binary metadata.

This adds support for accessing any binary metadata at the end of
 the comment header, as first specified in
It also allows the data to be set and preserves the data when
 doing deep copies.

3 years agoAdd support for R128_ALBUM_GAIN tag.
Timothy B. Terriberry [Tue, 29 Dec 2015 22:36:25 +0000 (14:36 -0800)]
Add support for R128_ALBUM_GAIN tag.

This includes convenience routines specifying the album gain should
 be applied and for parsing the tag.

3 years agoBuffer continued packet data to reduce seeking.
Timothy B. Terriberry [Tue, 15 Dec 2015 21:56:34 +0000 (13:56 -0800)]
Buffer continued packet data to reduce seeking.

In commit 41c29626afbd I claimed that it was not worth the
 machinery to buffer an extra page to avoid a seek when we have
 continued packet data.
That was a little unsatisfying, considering how much effort we make
 to avoid unnecessary seeking elsewhere, but in the general case,
 we might have to buffer an arbitrary number of pages, since a
 packet can span several.
However, we already have the mechanism to do this buffering: the
There are a number of potentially nasty corner-cases, but libogg's
 page sequence number tracking prevents us from accidentally gluing
 extraneous packet data onto some other unsuspecting packet, so I
 believe the chance of introducing new bugs here is manageable.

This reduces the number of seeks in Simon Jackson's continued-page
 test case by over 23%.

This also means we can handle pages without useful timestamps
 (including those multiplexed from another stream) between the last
 timestamped page at or before our target and the first timestamped
 page after our target without any additional seeks.
Previously we would scan all of this data, see that the
 'page_offset' of the most recent page we read was way beyond
 'best' (the end of the last timestamped page before our target),
 and then seek back and scan it all again.
This should greatly reduce the number of seeks we need in
 multiplexed streams, even if there are no continued packets.

3 years agoFix timestamp check for seek-free seek.
Timothy B. Terriberry [Tue, 15 Dec 2015 02:38:26 +0000 (18:38 -0800)]
Fix timestamp check for seek-free seek.

We avoid seeking when the seek target lies within the packets
 buffered from the current page.
However, the calculation of the page start time was _adding_ the
 first packet's duration to its end time, instead of subtracting

3 years agoFix set-but-not-used variable warning.
Timothy B. Terriberry [Mon, 7 Dec 2015 01:02:39 +0000 (17:02 -0800)]
Fix set-but-not-used variable warning.

When assertions are disabled, nothing else uses header_len.

3 years agoHandle continued packets in bisection search.
Timothy B. Terriberry [Sun, 6 Dec 2015 23:29:21 +0000 (15:29 -0800)]
Handle continued packets in bisection search.

If the packet where we wanted to start decoding was continued from
 a previous page, and _other_ packets ended on that previous page,
 we wouldn't feed the previous page to the ogg_stream_state.
That meant we wouldn't get the packet we wanted, and would fail with
 OP_EBADLINK (because the starting PCM offset of the first packet we
 did decode would already be after the one we wanted).

Instead, check for continued packet data and feed in an extra page
 to prime the stream state.

Thanks to Simon Jackson for the report and the excellent test case.

3 years agoBetter overflow check for serialno allocation.
Timothy B. Terriberry [Sun, 6 Dec 2015 23:22:10 +0000 (15:22 -0800)]
Better overflow check for serialno allocation.

3 years agoRemove spurious ACLOCAL_FLAGS variable from autogen.sh.
Ralph Giles [Sat, 26 Sep 2015 01:08:26 +0000 (18:08 -0700)]
Remove spurious ACLOCAL_FLAGS variable from autogen.sh.

autoreconf looks for ACLOCAL_*FLAGS in Makefile.am and will
pass that on when it invokes aclocal. Furthermore, setting
a local like this doesn't make it available to subcommands,
so the line has no effect.

3 years agoRegularize wording for --disable-examples.
Ralph Giles [Wed, 27 May 2015 17:34:46 +0000 (10:34 -0700)]
Regularize wording for --disable-examples.

3 years agoAdd configure option to stop examples being built, --disable-examples.
Simon Jackson [Wed, 27 May 2015 15:19:02 +0000 (16:19 +0100)]
Add configure option to stop examples being built, --disable-examples.

- Added new configure option --disable-examples which can be used to
  stop the example programs being built. This can be useful in some
  situations, such as when cross compiling static libraries.

- Examples are still built by default, --disable-examples must be passed
  explicitly to stop them being built.

Signed-off-by: Ralph Giles <giles@thaumas.net>
3 years agoBroaden the test for AI_NUMERICSERV.
Timothy B. Terriberry [Fri, 27 Feb 2015 18:59:51 +0000 (10:59 -0800)]
Broaden the test for AI_NUMERICSERV.

OS X 10.5.8 does not define AI_NUMIERCSERV either, so instead of
 trying to enumerate the platforms that don't, just test for the
 value itself.
Patch by Dave Evans at MacPorts.

Fixes #2172

4 years agoUpdate gitignore.
Ralph Giles [Fri, 4 Jul 2014 18:24:37 +0000 (11:24 -0700)]
Update gitignore.

Add some newer generated files.

4 years agoBump soname for v0.6. v0.6
Ralph Giles [Wed, 11 Jun 2014 17:06:31 +0000 (10:06 -0700)]
Bump soname for v0.6.

No ABI changes. Error behaviour has changed, but that falls
under 'compatible'.

4 years agoLook for ftime() in libcompat.
Thomas Klausner [Sat, 12 Apr 2014 16:10:59 +0000 (18:10 +0200)]
Look for ftime() in libcompat.

Needed at least on NetBSD.

Signed-off-by: Thomas Klausner <wiz@NetBSD.org>
4 years agoDocument that op_bitrate() is for all streams.
Timothy B. Terriberry [Sun, 30 Mar 2014 18:48:57 +0000 (11:48 -0700)]
Document that op_bitrate() is for all streams.

If an Opus stream is currently multiplexed with other streams, we
 would have to scan the whole file to identify the pages that
 belong to just the stream we play back.
That's probably not what the user wants, and if it is, they have a
 way to do that (using op_bitrate_instant()).
Document this so as not to surprise developers.

Thanks to Lithopsian for the report.

4 years agoMinor cleanups.
Timothy B. Terriberry [Wed, 26 Mar 2014 23:44:28 +0000 (16:44 -0700)]
Minor cleanups.

Makes style slightly more consistent.
Also fixes the return code of op_fetch_headers() to make it
 consistently return OP_EBADHEADER if the stream runs out of pages
 after a valid OpusHead packet is found.
Previously, if a valid OpusHead was found, it would return
 OP_ENOTFORMAT if it ran out of pages before finding one without
 its BOS flag set, and OP_EBADHEADER if it ran out of pages after
 finding one without its BOS flag set.