5 years agoMinor comment updates.
Timothy B. Terriberry [Tue, 6 Aug 2013 20:56:30 +0000 (13:56 -0700)]
Minor comment updates.

We've been able to differentiate between a read error and EOF since

5 years agoAdd MSVC project files for library and examples.
Gian-Carlo Pascutto [Tue, 6 Aug 2013 19:39:21 +0000 (12:39 -0700)]
Add MSVC project files for library and examples.

This is a big squashed commit of Garf's add_msvc_projects branch.
It currently does not include HTTP[S] support, as no one has sat
 down and worked out the best way to link against OpenSSL.

Signed-off-by: Timothy B. Terriberry <tterribe@xiph.org>
5 years agoRelax MSVCRT requirements.
Timothy B. Terriberry [Sat, 13 Jul 2013 20:41:23 +0000 (13:41 -0700)]
Relax MSVCRT requirements.

Previously we used _fseeki64() and _ftelli64() for 64-bit file
 access on Windows, but this requires MSVCRT80 (which requires MSVC
 2005 and is not shipped on XP by default).
Reimplement these functions using the C89 fgetpos() and fsetpos(),
 relying on the MSVCRT/minw32-specific definition of fpos_t.

5 years agoAdd UTF-8 filename support to Windows.
Timothy B. Terriberry [Tue, 6 Aug 2013 18:56:30 +0000 (11:56 -0700)]
Add UTF-8 filename support to Windows.

As requested here:

5 years agoAdd a gain control API.
Timothy B. Terriberry [Mon, 15 Jul 2013 00:13:55 +0000 (17:13 -0700)]
Add a gain control API.

A new op_set_gain_offset() allows the application to provide its own
 offset to the current decoder gain setting, as well as specify what
 offsets should be applied.
The header gain alone is still the default, but the application may
 also request that the track gain be applied, or that neither be

In addition, an op_get_track_gain() function can parse the track
 gain out of a set of comment tags.
This is mainly provided as a convenience for applications that need
 this information, so they don't have to write their own parser.

5 years agoAPI documentation updates.
Timothy B. Terriberry [Sat, 13 Jul 2013 20:47:19 +0000 (13:47 -0700)]
API documentation updates.

- Provide an Overview section which describes some of the general
   design decisions of the libopusfile API.
- Explicitly state that we always decode at 48 kHz.
- Make it clearer that we always apply the header gain.
- Document the automatic soft-clipping support.
- Document that stream open failure does not close the source.
- Other minor fixes.

Thanks to tangobravo and siriusbtx for asking the questions which
 prompted this update.

5 years agoPlug possible memory leak on stream open failure.
Timothy B. Terriberry [Sat, 13 Jul 2013 20:41:23 +0000 (13:41 -0700)]
Plug possible memory leak on stream open failure.

Not all the failure paths cleaned up after themselves properly.
Thanks to tangobravo for complaining about similar issues in
 libvorbisfile, which prompted me to audit this code.

5 years agoAvoid using a long-long literal for OP_INT64_MAX.
Timothy B. Terriberry [Sat, 13 Jul 2013 20:40:08 +0000 (13:40 -0700)]
Avoid using a long-long literal for OP_INT64_MAX.

The LL suffix isn't C89, so it may not work everywhere.

5 years agoTypo fix.
Timothy B. Terriberry [Sat, 13 Jul 2013 20:38:36 +0000 (13:38 -0700)]
Typo fix.

5 years agoAlways try to update the version when autogen.sh is run
Ron [Tue, 2 Jul 2013 06:05:30 +0000 (15:35 +0930)]
Always try to update the version when autogen.sh is run

This avoids at least one case where ./autogen.sh && ./configure && make
will re-run configure because the makefile rules updated something that
it depends upon. Pulling a new version from git will change the version
so we should update that at the first step rather than iterating after
the last one.

5 years agoSwitch to using config.h for configuration options
Ron [Fri, 28 Jun 2013 20:58:43 +0000 (06:28 +0930)]
Switch to using config.h for configuration options

The main motivation for this is it ensures the files will actually be
rebuilt if the configuration options are changed.

5 years agoMore autoconf housekeeping
Ron [Fri, 28 Jun 2013 20:21:40 +0000 (05:51 +0930)]
More autoconf housekeeping

Don't let AC_SEARCH_LIBS([lrintf]) add -lm to LIBS, otherwise we'll
unconditionally link everything with it.

Correctly handle the third possibility of AC_SEARCH_LIBS, that no
library at all was found.

Link libopusfile with $lrintf_lib, it uses it and will otherwise fail
with linkers that use --no-add-needed / --no-copy-dt-needed-entries.

Don't bother to test for doxygen if using it is --disable'd.

5 years agoUse m4_esyscmd instead of m4_esyscmd_s
Ron [Sat, 18 May 2013 06:52:02 +0000 (16:22 +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.

5 years agoAdd internal.c to unix Makefile's libopusurl.
Timothy B. Terriberry [Wed, 15 May 2013 04:26:01 +0000 (21:26 -0700)]
Add internal.c to unix Makefile's libopusurl.

This shouldn't really be necessary when static linking, but would
 be if someone wanted chang the Makefile to build shared libraries.

5 years agoTypo fix
Ron [Mon, 13 May 2013 11:51:05 +0000 (21:21 +0930)]
Typo fix

5 years agoDrop the x's from shell tests
Ron [Mon, 13 May 2013 11:09:00 +0000 (20:39 +0930)]
Drop the x's from shell tests

Partly just to give us an extra commit to test the versioning,
but they really aren't needed in any of those cases, and now
we're consistent about not using them everywhere.

5 years agoFully automate version updating
Ron [Mon, 13 May 2013 11:02:13 +0000 (20:32 +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.

5 years agoMore gitignorance
Ron [Mon, 13 May 2013 10:58:09 +0000 (20:28 +0930)]
More gitignorance

5 years agoDon't repeatedly install the doc dir for every file
Ron [Mon, 13 May 2013 08:11:51 +0000 (17:41 +0930)]
Don't repeatedly install the doc dir for every file

5 years agoRevert "Allow the examples to build with --disable-http"
Ron [Mon, 13 May 2013 08:05:41 +0000 (17:35 +0930)]
Revert "Allow the examples to build with --disable-http"

This reverts commit 4e06a90ef61ad34d9812fb4578a4c640f868ad00.
We don't need this if we always build libopusurl.

5 years agoAlways build libopusurl
Ron [Mon, 13 May 2013 08:02:05 +0000 (17:32 +0930)]
Always build libopusurl

If --disable-http is used it will just only have file URL support.

5 years agoAllow the examples to build with --disable-http
Ron [Mon, 13 May 2013 03:43:26 +0000 (13:13 +0930)]
Allow the examples to build with --disable-http

5 years agoAutoconf and pkg-config support for libopusurl
Ron [Mon, 13 May 2013 03:42:23 +0000 (13:12 +0930)]
Autoconf and pkg-config support for libopusurl

5 years agoMove last few URL functions into http.c
Timothy B. Terriberry [Mon, 13 May 2013 01:53:27 +0000 (18:53 -0700)]
Move last few URL functions into http.c

This makes it easier to split http.c and friends into their own
This allows distributions to ship a libopusfile with generic Opus
 parsing support, and a libopusurl with http/https support.
Keeping the latter in a separate library means that GPL
 applications don't have to link against the GPL-incompatible
 openssl, and distributions don't have to disable http support to
 allow GPL applications to use libopusfile.

5 years agoFix 255 packet assertion.
Timothy B. Terriberry [Wed, 8 May 2013 03:20:44 +0000 (20:20 -0700)]
Fix 255 packet assertion.

If we actually have 255 packets on a page, this assertion always
 triggers, because ogg_stream_packetout doesn't fail until we ask
 for the _next_ packet.

5 years agoFix seeking near the start of saved live streams.
Timothy B. Terriberry [Tue, 7 May 2013 03:07:48 +0000 (20:07 -0700)]
Fix seeking near the start of saved live streams.

If a stream starts with a non-zero granpos, we would subtract 80 ms
 from the target time, and then report failure when the best page
 we could find (the first page in the link) had a granpos larger
 than that.
This worked for normal streams because the subtraction would fail
 (granpos can't wrap past -1) and we checked for that.

5 years agoAdd <sys/types.h> for off_t.
Timothy B. Terriberry [Wed, 1 May 2013 13:25:26 +0000 (06:25 -0700)]
Add <sys/types.h> for off_t.

This shouldn't be necessary, but apparently on OS X 10.4 fseeko()
 takes fpos_t instead of off_t, and thus doesn't guarantee that
 off_t is defined.

5 years agoAdd docs to the website when releasing.
Timothy B. Terriberry [Tue, 30 Apr 2013 16:04:19 +0000 (09:04 -0700)]
Add docs to the website when releasing.

5 years agoAdd casts to remove clang warnings.
Matthew Chung [Fri, 8 Mar 2013 18:49:41 +0000 (10:49 -0800)]
Add casts to remove clang warnings.

Signed-off-by: Timothy B. Terriberry <tterribe@xiph.org>
5 years agoFix pkg-config file to avoid overlinking
Ulrich Klauer [Mon, 29 Apr 2013 22:17:15 +0000 (00:17 +0200)]
Fix pkg-config file to avoid overlinking

Libraries that are used internally by opusfile but are not part of
 its API should be listed in pkg-config "private" clauses.
Otherwise executables that are linked dynamically against opusfile
 will have unneeded direct dependencies (overlinking).

Signed-off-by: Timothy B. Terriberry <tterribe@xiph.org>
5 years agoUpdate opusfile.pc description line.
Ulrich Klauer [Mon, 29 Apr 2013 22:11:03 +0000 (00:11 +0200)]
Update opusfile.pc description line.

The library does not actually do any playback, as it does no sound

Signed-off-by: Timothy B. Terriberry <tterribe@xiph.org>
5 years agoAdd some files to .gitignore
Ulrich Klauer [Sun, 10 Mar 2013 03:44:50 +0000 (04:44 +0100)]
Add some files to .gitignore

Signed-off-by: Timothy B. Terriberry <tterribe@xiph.org>
5 years agoHandle AC_SEARCH_LIBS special result value.
Ulrich Klauer [Sun, 10 Mar 2013 03:02:49 +0000 (04:02 +0100)]
Handle AC_SEARCH_LIBS special result value.

AC_SEARCH_LIBS will give a result of "none required" if the relevant
 function is available without any special libraries.
This is the case for lrintf on MinGW.
Make sure this special value isn't put verbatim into the pkg-config
 files, as it would cause the linker to search for files named
 "none" and "required", and fail.

Signed-off-by: Timothy B. Terriberry <tterribe@xiph.org>
5 years agoFix Base64 encoding for HTTP's basic auth.
Timothy B. Terriberry [Sun, 28 Apr 2013 06:33:11 +0000 (23:33 -0700)]
Fix Base64 encoding for HTTP's basic auth.

I thought I had tested this before, but it was sufficiently broken
 that clearly I had not.

5 years agoSmall public header clean-up.
Timothy B. Terriberry [Sat, 6 Apr 2013 04:09:21 +0000 (21:09 -0700)]
Small public header clean-up.

stdarg.h should've been inside the include guard.

5 years agoSmall cleanups of the soft clipping code.
Timothy B. Terriberry [Sat, 6 Apr 2013 04:06:28 +0000 (21:06 -0700)]
Small cleanups of the soft clipping code.

- Made OP_SOFT_CLIP defined only when using floating point (libopus
   handles clipping when using the fixed-point API).
- Struct rearrangement for theoretically better packing on some
- Reset the state tracking channel count when re-initializing a
   decoder (and not the dither mute, because that gets reset for

5 years agoUse clipping prevention on 16-bit decode paths.
Timothy B. Terriberry [Mon, 25 Mar 2013 19:16:47 +0000 (12:16 -0700)]
Use clipping prevention on 16-bit decode paths.

When we decode using libopus's fixed-point APIs, libopus internally
 applies soft clipping prevention.
When we decode using libopus's floating-point APIs, this behavior
 is disabled.
If we're ultimately planning to output the data to the user in
 fixed-point, we need to apply the clipping prevention ourselves.

5 years agoReset dither state when API path changes.
Timothy B. Terriberry [Mon, 25 Mar 2013 19:06:55 +0000 (12:06 -0700)]
Reset dither state when API path changes.

The caller can switch between the fixed/float APIs and the
 stereo/multichannel APIs on every call.
Detect this and reset the dither state to avoid potentially
 injecting noise from a very out-of-date state when switching from
 fixed to float back to fixed, or from the wrong channels when
 switching between stereo and multichannel.
Normal applications won't do this stuff, but we should be
 well-behaved if they do.

5 years agoMinor comment fix.
Timothy B. Terriberry [Mon, 25 Mar 2013 19:00:05 +0000 (12:00 -0700)]
Minor comment fix.

5 years agoFix a buffer overflow in op_read_stereo().
Timothy B. Terriberry [Mon, 25 Mar 2013 18:57:38 +0000 (11:57 -0700)]
Fix a buffer overflow in op_read_stereo().

For multichannel files, this potentially caused writes beyond the
 end of the output buffer provided by the user.

5 years agoAdd an exe extension variable and use it in the mingw build.
Ralph Giles [Fri, 1 Mar 2013 22:17:41 +0000 (14:17 -0800)]
Add an exe extension variable and use it in the mingw build.

5 years agoAdd conditional source and libraries for mingw build.
Ralph Giles [Fri, 1 Mar 2013 21:50:21 +0000 (13:50 -0800)]
Add conditional source and libraries for mingw build.

5 years agoDon't remove unused test directories.
Ralph Giles [Fri, 1 Mar 2013 21:37:36 +0000 (13:37 -0800)]
Don't remove unused test directories.

Reduces cruft on 'make clean'. I've rearranged some of the
non-functional self-test targets, but not really fixed them.

5 years agoBetter suppression of unused parameter warnings.
Timothy B. Terriberry [Fri, 1 Mar 2013 19:07:44 +0000 (11:07 -0800)]
Better suppression of unused parameter warnings.

The old ones gave a different warning on Apple's clang 4.2.

5 years agoCall ranlib on the unix static makefile.
Ralph Giles [Fri, 1 Mar 2013 19:05:45 +0000 (11:05 -0800)]
Call ranlib on the unix static makefile.

This is required by the xmingw build.

5 years agoMore minor win32 cleanups.
Timothy B. Terriberry [Thu, 28 Feb 2013 06:56:19 +0000 (22:56 -0800)]
More minor win32 cleanups.

Just normalizing coding style.

5 years agoAdd nu774 to the authors list.
Ralph Giles [Wed, 27 Feb 2013 00:23:12 +0000 (16:23 -0800)]
Add nu774 to the authors list.

5 years agoSupport the Windows system certificate store.
Timothy B. Terriberry [Sun, 10 Feb 2013 04:09:41 +0000 (20:09 -0800)]
Support the Windows system certificate store.

OpenSSL on Windows does not pull certificates from any well-known
 location (in fact most binaries continue to use the default Unix
 path, which usually doesn't even exist).
We could ship our own set of certificates (e.g., cloned from the
 Mozilla root list), but I don't want to be responsible for
 releasing libopusfile updates when things like DigiNotar
 fiasco [1] happen.
That approach also means that we would need to load, parse, and
 keep a copy of every certificate in the system for every SSL

OpenSSL has had patches sitting in their bugtracker which load
 certificates from the Crypto API's system certificate store.
However, those patches have been sitting around for several years,
 so movement on that front in the near future seems unlikely.
We don't care about using OpenSSL's builtin CAPI engine, though, so
 we can do the same thing with less than 200 lines of code.
This puts the maintenance burden on Windows Update, which will be
 far more timely and effective than getting people to upgrade
 libopusfile, and gets us on-demand loading of just the
 certificates we need.

[1] <https://bugzilla.mozilla.org/show_bug.cgi?id=682927>

5 years agoFix typo in 714d83c8.
Timothy B. Terriberry [Thu, 10 Jan 2013 00:59:22 +0000 (16:59 -0800)]
Fix typo in 714d83c8.

5 years agoFix warnings when compiling with a recent MSVC.
Timothy B. Terriberry [Thu, 10 Jan 2013 00:01:35 +0000 (16:01 -0800)]
Fix warnings when compiling with a recent MSVC.

Apparently Vista includes more things in its Winsock implementation
 and errno.h than earlier versions of Windows.

5 years agoClean up winsock usage.
Timothy B. Terriberry [Tue, 8 Jan 2013 15:39:35 +0000 (07:39 -0800)]
Clean up winsock usage.

This keeps differences which can be cleanly abstracted away clean
 (closesocket, ioctlsocket, getsockopt, setsockopt), and makes
 differences which cannot be cleanly abstracted explicit (SOCKET,
 INVALID_SOCKET, WSAGetLastError/WSASetLastError).
It also gets rid of wsockwrapper.[ch], since it contained just a
 single function.

This can successfully pass the seeking_example tests on
 big.chained.blob over https when built with i686-w64-mingw32 and
 run under wine.
It does not solve the certificate distribution problems with using
 OpenSSL on a real Windows system.

5 years agoUse fseeko64/ftello64 for mingw32.
Timothy B. Terriberry [Tue, 8 Jan 2013 13:04:41 +0000 (05:04 -0800)]
Use fseeko64/ftello64 for mingw32.

It turns out i686-pc-mingw32 does define these functions, and they
 are always available (unlike _fseeki64/_ftelli64).
This means we can build and link without requiring
The resulting binary still doesn't run in wine for me, but that may
 be a personal problem.

5 years agoRequire WindowsXP for mingw32.
Timothy B. Terriberry [Mon, 7 Jan 2013 21:00:44 +0000 (13:00 -0800)]
Require WindowsXP for mingw32.

This allows an i686-pc-mingw32 build to use getaddrinfo/
 freeaddrinfo correctly.
It's not needed for an i686-w64-mingw32 build, but it doesn't hurt
 to leave it in here.
i686-pc-mingw32 still won't work correctly, because it does not
 support fseeko/ftello, nor (unless using MSVCRT 8.0 or later)
We could define __MSVCRT_VERSION__ to 0x800 to get the latter, but
 this would require different MSVCRT versions than libogg and
 libopus are built with by default, which makes a bit of a mess.

5 years agoClean up mingw32 configuruation.
Timothy B. Terriberry [Mon, 7 Jan 2013 19:44:53 +0000 (11:44 -0800)]
Clean up mingw32 configuruation.

Properly check for HTTP support and handle the case where it's
Also fixes the include paths broken by 3e7f0ddc.

5 years agos/OS_WIN32/OP_WIN32/
Timothy B. Terriberry [Wed, 28 Nov 2012 05:38:57 +0000 (21:38 -0800)]

The former is too generic.

5 years agoMerge two OS_WIN32 conditionals.
Ralph Giles [Tue, 27 Nov 2012 17:41:14 +0000 (09:41 -0800)]
Merge two OS_WIN32 conditionals.

5 years agoMove win32 source files up a level.
Ralph Giles [Tue, 27 Nov 2012 17:40:18 +0000 (09:40 -0800)]
Move win32 source files up a level.

5 years agoInitial winsock support patch from nu774.
Ralph Giles [Tue, 27 Nov 2012 17:36:00 +0000 (09:36 -0800)]
Initial winsock support patch from nu774.

Some tweak might be still needed to take care of OPENSSL_AppLink
to get https support working. In win32, user application of openssl
is required to include openssl/applink.c or something, when openssl
is compiled with OPENSSL_USE_APPLINK.

I don't know how it should be taken care of, from the library point of
view (it must be done by user of libopusfile, since openssl always
searches that function in executable module).

Posted to the hydrogenaudio format 2012 November 19.

5 years agoAdd va_end() invocations.
Timothy B. Terriberry [Tue, 12 Feb 2013 15:50:07 +0000 (07:50 -0800)]
Add va_end() invocations.

Fixes Coverity #980717, #980718, #980719.

5 years agoAllow decoding forward instead of seeking.
Timothy B. Terriberry [Sun, 10 Feb 2013 04:40:16 +0000 (20:40 -0800)]
Allow decoding forward instead of seeking.

This lets us seek forward by small amounts (currently less than
 90 ms) by decoding forward instead of actually seeking.
This is often a good idea, since we would have to decode at least
 80 ms of pre-roll anyway.
This optimization also handles the case of seeking to what is
 already the current position cheaply.

This became relatively easy after we dropped op_pcm_seek_page()
 from the public API.
However, because others may look to libopusfile's seeking code as a
 model, we've added an OP_SMALL_FOOTPRINT #define to cordon off
 some of these complex sections of code that are deeply specific to
 libopusfile's design, ancillary to the main seeking algorithm,
 and relatively unimportant to overall seeking performance.

5 years agoFix a typo in op_mem_read().
Timothy B. Terriberry [Sun, 27 Jan 2013 14:30:48 +0000 (06:30 -0800)]
Fix a typo in op_mem_read().

We should copy the minimum of the buffer size and the remaining
 bytes, not the maximum.
Fixes #1927.

5 years agoMake opusfile_example fwrites all-or-nothing.
Timothy B. Terriberry [Thu, 10 Jan 2013 02:56:57 +0000 (18:56 -0800)]
Make opusfile_example fwrites all-or-nothing.

This makes it more likely the WAV file header matches the amount of
 data actually written if we run out of space.
This is easier than making the accounting better.

5 years agoMake opusfile_example output WAV.
Timothy B. Terriberry [Thu, 10 Jan 2013 02:38:55 +0000 (18:38 -0800)]
Make opusfile_example output WAV.

5 years agoFix a comment typo.
Timothy B. Terriberry [Thu, 10 Jan 2013 01:36:14 +0000 (17:36 -0800)]
Fix a comment typo.

5 years agoAdd support for HTTP 308 Permanent Redirects.
Timothy B. Terriberry [Sun, 23 Dec 2012 21:40:42 +0000 (13:40 -0800)]
Add support for HTTP 308 Permanent Redirects.

5 years agoFix a typo.
Timothy B. Terriberry [Sun, 23 Dec 2012 21:40:05 +0000 (13:40 -0800)]
Fix a typo.

Thanks to e98 for the report.

6 years agoFix a comment typo.
Ralph Giles [Tue, 4 Dec 2012 20:40:28 +0000 (12:40 -0800)]
Fix a comment typo.

6 years agoDon't forget to update download links.
Timothy B. Terriberry [Wed, 28 Nov 2012 05:34:37 +0000 (21:34 -0800)]
Don't forget to update download links.

Add the step to the release procedure.

6 years agoSmall clarity improvements to op_get_next_page().
Timothy B. Terriberry [Mon, 19 Nov 2012 23:51:39 +0000 (15:51 -0800)]
Small clarity improvements to op_get_next_page().

The assert might also be helpful for static analysis.

6 years agoDist the doc and unix static Makefiles.
Ralph Giles [Wed, 14 Nov 2012 19:05:32 +0000 (11:05 -0800)]
Dist the doc and unix static Makefiles.

These are useful alternatives to the autoconf build,
since we're maintaining them we should include them
in release packages.

6 years agoRemove 'export' from the NO_DOXYGEN Makefile variable.
Ralph Giles [Tue, 13 Nov 2012 17:13:06 +0000 (09:13 -0800)]
Remove 'export' from the NO_DOXYGEN Makefile variable.

This was needed in the opus Makefile.am to pass the results
to submakefiles. Since we build everything from the top-level
Makefile, we don't need this for opusfile.

6 years agoBump soname version for the v0.2 release. v0.2
Ralph Giles [Tue, 13 Nov 2012 18:25:48 +0000 (10:25 -0800)]
Bump soname version for the v0.2 release.

6 years agoCheck for end_offset < data_offset.
Timothy B. Terriberry [Tue, 13 Nov 2012 00:58:40 +0000 (16:58 -0800)]
Check for end_offset < data_offset.

I don't think it actually breaks anything if we don't (seeking will
 fail, but it will fail cleanly).
However, it _is_ an indication that the file data changed out from
 under us (or of another library bug), so we should fail fast.

6 years agoAdd op_get_last_page() for calculating duration.
Timothy B. Terriberry [Tue, 13 Nov 2012 00:34:43 +0000 (16:34 -0800)]
Add op_get_last_page() for calculating duration.

Using op_get_prev_page_serial() meant if there were valid pages
 from another stream, we would re-scan them all repeatedly until we
 managed to back up, a page at a time, to a chunk with a page from
 the preferred stream with a valid granule position.
Breaking this case into its own function means we can guarantee we
 only scan each page once, and that we can stop as soon as we hit a
 page from a different link (in the unlikely event that the stream
 has no pages with valid timestamps).

6 years agoSome minor comment updates.
Timothy B. Terriberry [Tue, 13 Nov 2012 00:33:52 +0000 (16:33 -0800)]
Some minor comment updates.

Be more specific about which RFC we're quoting in the SSL hostname

6 years agoSupport --disable-maintainer-mode
Ron [Sun, 11 Nov 2012 15:30:10 +0000 (02:00 +1030)]
Support --disable-maintainer-mode

Adding AM_MAINTAINER_MODE([enable]) preserves the current behaviour of
rebuilding the autotools support by default if anything changed to make
it out of date -- which is desirable for people building from git to
avoid "Why is the build broken? Oh I forgot to rerun autogen.sh", which
is an all too frequent FAQ.

But it also allows it to be disabled, which is mostly useful for things
like distro package builds where the files should be preserved in their
original form, and configure shouldn't be run twice on the first build
if the timestamps were not strictly preserved for these files.

Signed-off-by: Ralph Giles <giles@mozilla.com>
6 years agoAdd some extra makefile targets
Ron [Sun, 11 Nov 2012 11:39:29 +0000 (22:09 +1030)]
Add some extra makefile targets

The opusfile and install-opusfile targets let us build and install just
the library (without the docs, even if doxygen is present and enabled).

The docs and install-docs targets let us build and install just the docs
without the library.

The default for make and make install remains to build both if doxgen
is present and enabled.

Signed-off-by: Ralph Giles <giles@mozilla.com>
6 years agoMove the extra EXTRA_DIST out of HAVE_DOXYGEN
Ron [Sun, 11 Nov 2012 11:22:39 +0000 (21:52 +1030)]
Move the extra EXTRA_DIST out of HAVE_DOXYGEN

We'll want that stuff in the release tarballs, even if the person running
make dist doesn't have doxygen installed (or --enabled) themselves.

Signed-off-by: Ralph Giles <giles@mozilla.com>
6 years agoTrim some things out of autogen.sh that aren't doing anything
Ron [Sun, 11 Nov 2012 11:58:18 +0000 (22:28 +1030)]
Trim some things out of autogen.sh that aren't doing anything

Mostly so that people looking at or cloning it later don't get confused
into thinking that they are.

Signed-off-by: Ralph Giles <giles@mozilla.com>
6 years agoAnother spelling fix.
Timothy B. Terriberry [Sun, 11 Nov 2012 11:30:11 +0000 (03:30 -0800)]
Another spelling fix.

Thnks to Ron Lee for the report.

6 years agoSpelling fix.
Timothy B. Terriberry [Sun, 11 Nov 2012 11:18:28 +0000 (03:18 -0800)]
Spelling fix.

Thanks to Ron Lee for the report.

6 years agoUse /bin/echo so -n works on osx.
Ralph Giles [Wed, 7 Nov 2012 23:03:59 +0000 (15:03 -0800)]
Use /bin/echo so -n works on osx.

The 'echo' built into /bin/sh on MacOS X doesn't support -n, which
confuses the AC_INIT macro. Use the separate binary which does.

6 years agoFix a ci script typo.
Ralph Giles [Fri, 2 Nov 2012 02:34:41 +0000 (19:34 -0700)]
Fix a ci script typo.

6 years agoAttempt to fix the autotools linking issue on jenkins.
Ralph Giles [Fri, 2 Nov 2012 01:56:57 +0000 (18:56 -0700)]
Attempt to fix the autotools linking issue on jenkins.

The jenkins autotools build has never worked because we try to
build against uninstalled versions of the opus and ogg libraries,
whose pkg-config files export a static library. This works fine
for executables, but libtool seemingly can't link a dynamic library
against a static library.

We could change the -uninstalled.pc files to reference the libtool
versions of the libraries, but that breaks the unix makefile builds,
which of course don't use libtool.

As a work around, write out our own versions of the pc files and
use those to reference the file we need.

Also sets -x on both continuous integration scripts so it's more
clear what steps are being applied.

6 years agoDocument where to put release packages.
Ralph Giles [Thu, 1 Nov 2012 23:25:52 +0000 (16:25 -0700)]
Document where to put release packages.

6 years agoFix potential memory leaks added in 3bc74807.
Timothy B. Terriberry [Sun, 28 Oct 2012 11:37:40 +0000 (04:37 -0700)]
Fix potential memory leaks added in 3bc74807.

6 years agoA few small updates to the hostname verification.
Timothy B. Terriberry [Sat, 27 Oct 2012 13:52:11 +0000 (06:52 -0700)]
A few small updates to the hostname verification.

Fixes the case where a raw IPv6 address would be rejected as not
 looking like a FQDN.
Also simplifies the wildcard comparison a little.

6 years agoRemove OP_SSL_SKIP_CERTIFICATE_CHECK from opusfile_example.
Timothy B. Terriberry [Sat, 27 Oct 2012 03:13:24 +0000 (20:13 -0700)]
Remove OP_SSL_SKIP_CERTIFICATE_CHECK from opusfile_example.

a7c5b93c flipped the argument to it from true to false, since it
 made certificate checking actually work.
This commit removes the option entirely to avoid encouraging people
 to use it now that that checking does work.

seeking_example still disables checking (since it's not really

6 years agoMake SSL/TLS certificate checking actually work.
Timothy B. Terriberry [Sat, 27 Oct 2012 02:59:48 +0000 (19:59 -0700)]
Make SSL/TLS certificate checking actually work.

We weren't loading the default certificate store, so there were no
 trusted certificates to validate hosts with, and all checks would
 fail (unless explicitly disabled with
This adds that call, and also adds hostname verification (which
 OpenSSL does not do for us, because they are morons).
I've done my best to get the latter right by reading the RFCs, but
 this stuff is complex, it's easy to make mistakes, and I only have
 a limited ability to test it, so caveat emptor.

6 years agoDocument the release process.
Ralph Giles [Fri, 26 Oct 2012 17:48:24 +0000 (10:48 -0700)]
Document the release process.

This is, as far as I can remember, the process I went through
to produce the 0.1 source and win32 binary packages.

I also added a few things I wish I'd done, like stripping
the binaries and including release notes and dependency versions
in the README to help us remember next time.

6 years agoUpdate git-version for the vN.M release tagging scheme. v0.1
Ralph Giles [Wed, 24 Oct 2012 22:04:39 +0000 (15:04 -0700)]
Update git-version for the vN.M release tagging scheme.

We need the sed invocation to strip the 'v' prefix
when naming the dist tarball.

6 years agoFix mingw warnings with -U__STRICT_ANSI__.
Ralph Giles [Wed, 24 Oct 2012 20:10:58 +0000 (13:10 -0700)]
Fix mingw warnings with -U__STRICT_ANSI__.

We use some C99 features (like lrintf) despite passing
-std=c89 -pedantic. This works on normal linux and mac
builds because we define _GNU_SOURCE, which enables
them, but the mingw32 headers ignore this, generating
warnings for lrintf and _putenv, the later hacked in
by libtool.

Avoid these by undefining __STRICT_ANSI__ in mingw builds,
which allows the default extensions and fixes the warnings.

6 years agoPrint a warning when disabling http support for dependencies.
Ralph Giles [Wed, 24 Oct 2012 18:10:31 +0000 (11:10 -0700)]
Print a warning when disabling http support for dependencies.

This should make mingw32-configure --enable-http less confusing.

6 years agoDisable HTTP support if sys/socket.h isn't present.
Ralph Giles [Wed, 24 Oct 2012 18:00:39 +0000 (11:00 -0700)]
Disable HTTP support if sys/socket.h isn't present.

This avoids trying to build in http support when cross-compiling
for windows.

Also cleans up some adjacent formatting.

6 years agoReplace return code checks with OP_ALWAYS_TRUE().
Timothy B. Terriberry [Wed, 24 Oct 2012 16:57:25 +0000 (09:57 -0700)]
Replace return code checks with OP_ALWAYS_TRUE().

Instead of assigning the return code to a local variable and then
 using OP_ASSERT(), define a new OP_ALWAYS_TRUE() macro that still
 evaluates its argument when assertions are disabled.
This avoids -Wunused-but-set-variable warnings from clang and
 useless scan-build reports (if scan-build is run without
 assertions enabled).

6 years agoFix some printf format warnings in the examples.
Timothy B. Terriberry [Tue, 23 Oct 2012 23:55:35 +0000 (16:55 -0700)]
Fix some printf format warnings in the examples.

6 years agoDon't build the API docs if doxygen isn't available.
Ralph Giles [Tue, 23 Oct 2012 23:50:53 +0000 (16:50 -0700)]
Don't build the API docs if doxygen isn't available.

Updates the configure check to match the one in the Opus

6 years agoSet the autoconf version from git.
Ralph Giles [Mon, 1 Oct 2012 18:30:41 +0000 (11:30 -0700)]
Set the autoconf version from git.

AC_INIT requires that the version string passed in be 'static'
so we can't use the output of a shell invocation. However, it
can be computed by an m4 shell invocation. This is what autoconf
itself does to embed its git version number in PACKAGE_VERSION.

Doing this necessitates the 'echo -n' in git-version.sh. Make
is smart enough to strip the trailing newline, but AC_INIT is
not. We must also add -f to autoreconf. Otherwise, autogen.sh
will only update configure when configure.ac changes, even if
the output of git-version.sh has changed.

This is still not ideal, since it runs at autogen.sh time, not
at 'make' time, which is what we want. This seems to be a limitation
of an upcoming automake release, which removes the old style
with PACKAGE and VERSION set by shell variables.

6 years agoDon't discard timestamps from invalid packets.
Timothy B. Terriberry [Tue, 23 Oct 2012 18:21:04 +0000 (11:21 -0700)]
Don't discard timestamps from invalid packets.

Instead put them on the most recent valid packet on the page.
Also bullet-proof the offset checking to the "use the current
 position when seeking" code added in 6d61f3f1.
The previous code relied on the file not changing out from under
 us, which we shouldn't do.

6 years agoFix an assertion failure.
Timothy B. Terriberry [Tue, 23 Oct 2012 17:04:22 +0000 (10:04 -0700)]
Fix an assertion failure.

This is no longer guaranteed after the change in e7661191, so test
 for it explicitly.
Thanks to Greg Maxwell for the test case.