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

4 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
 session.

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>

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

4 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.

4 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.

4 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
 i686-w64-mingw32.
The resulting binary still doesn't run in wine for me, but that may
 be a personal problem.

4 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)
 _fseeki64/_ftelli64.
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.

4 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
 disabled.
Also fixes the include paths broken by 3e7f0ddc.

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

The former is too generic.

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

4 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.

4 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.
http://www.hydrogenaudio.org/forums/index.php?s=&showtopic=97856&view=findpost&p=814582

4 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.

4 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.

4 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.

4 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.

4 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.

4 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).

4 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
 verification.

4 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>
4 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>
4 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>
4 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>
4 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.

4 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.

4 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.

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

4 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.

4 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.

4 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.

4 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.

4 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
 needed).

4 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
 OP_SSL_SKIP_CERTIFICATE_CHECK(0)).
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.

4 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.

4 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.

4 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.

4 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.

4 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.

4 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).

4 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.

4 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
repository.

4 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.

4 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.

4 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.

4 years agoOne small addendum to 7c52622f.
Timothy B. Terriberry [Tue, 23 Oct 2012 03:42:15 +0000 (20:42 -0700)]
One small addendum to 7c52622f.

This case can basically only get hit if there's another stream
 multiplexed in with ours, but this avoids re-scanning the same
 data multiple times when it happens.

4 years agoBisect from the current file position when seeking.
Timothy B. Terriberry [Tue, 23 Oct 2012 03:05:08 +0000 (20:05 -0700)]
Bisect from the current file position when seeking.

In most cases, this is a minor speed-up at best, but in some it can
 be a big win.
Also, when forcing a true bisection instead of a secant-step,
 don't add the negative bias to the result.
This can significantly improve the worst-case.

4 years agoSome http improvements.
Timothy B. Terriberry [Tue, 23 Oct 2012 02:37:41 +0000 (19:37 -0700)]
Some http improvements.

- Attempt to re-use connections when we've already received enough
   data to do so immediately.
- Make sure when seeking near the end, if the current chunk size is
   such that the _next_ chunk will be half the normal size or less,
   we just ask for the rest of the resource.

With these two changes, a normal open of a single-chain Opus-only
 file requires exactly two HTTP requests.

- Also use the response buffer as a dummy buffer when skipping
   data.
  This will avoid helgrind errors for multiple writes from
   different threads without locking (should someone be reading
   multiple streams from different threads).
  It's also better for SMP cache contention.

4 years agoBe more scrupulous about reading extra data.
Timothy B. Terriberry [Tue, 23 Oct 2012 02:18:07 +0000 (19:18 -0700)]
Be more scrupulous about reading extra data.

This can be quite expensive with the http backend, especially if it
 causes us to pass a chunk threshold and issue a new request.
It also lets us error out more quickly if the underlying stream
 data changes.

4 years agoBias the offsets in op_predict_link_start().
Timothy B. Terriberry [Mon, 22 Oct 2012 01:14:29 +0000 (18:14 -0700)]
Bias the offsets in op_predict_link_start().

We apply a positive bias when the previous bisection point was
 inside the current link, causing us to scan forward a bit instead
 of seeking to a new location.
This knocks up to 18% off the number of seeks required to open very
 large files with lots of links.

4 years agoFix a few minor nits.
Timothy B. Terriberry [Mon, 22 Oct 2012 01:09:59 +0000 (18:09 -0700)]
Fix a few minor nits.

- The DIGIT character sets shouldn't need to list "0" twice.
- Avoid a lookup for the port number in getaddrinfo().
- Resolve the OPUS_SET_GAIN TODO (by refusing to implement a fallback).
- A few more minor things.

4 years agoRe-do abstract stream reader API.
Timothy B. Terriberry [Sat, 20 Oct 2012 21:12:46 +0000 (14:12 -0700)]
Re-do abstract stream reader API.

This changes op_read_func to
a) Take a single byte count to read instead of an "item" count
    (which the http backend couldn't properly support anyway).
b) Use integers for buffer sizes to avoid having to worry about
    sign differences and whether size_t is larger or smaller than
    opus_int64, etc.
c) Return an explicit error code (instead of using errno like
    fread).
   We had already eliminated the use of errno, but we did it by
    treating read errors and EOF identically in all cases.
   This was preventing us from reporting SSL truncation attacks
    from the https backend.
   The https backend now properly reports such errors.

This commit also fixes a bug introduced in 9b57b0c2, where we
 accidentally started passing absolute offsets to the _boundary
 parameter of op_get_next_page() instead of relative offsets.
We now use absolute offsets in all places, as it is the simpler
 choice.
This matters now, because the error reported when encountering EOF
 before hitting the _boundary is no longer suppressed (but instead
 reported as OP_EBADLINK).

Finally, it removes the op_page_seek() function.
Except for the time needed to decode forward after seeking, this
 function was identical in performance to op_pcm_seek(), and Opus
 requires decoding 80 ms of data after seek anyway, so the relative
 benefit is much smaller than with Vorbis.
A survey of open-source code using libvorbisfile showed that the
 only usages of ov_page_seek() in the wild were calling it to seek
 to the start of the stream, for which op_pcm_seek() already has a
 special case that makes it just as fast.

The documentation was also updated to describe all of these chanes.

This is an incompatible API change.

4 years agoMake the URL API more extensible.
Timothy B. Terriberry [Sat, 20 Oct 2012 16:54:16 +0000 (09:54 -0700)]
Make the URL API more extensible.

Right now we have no way to add any more parameters beyond a set of
 basic binary flags.
This unifies op_url_stream_create() and
 op_url_stream_create_with_proxy() into a single function that
 takes a variable-length list of arguments, which can be extended
 in the future to include more options of any type.

This is an incompatible API change.

4 years agoFix op_http_parse_connection().
Timothy B. Terriberry [Sat, 20 Oct 2012 16:14:21 +0000 (09:14 -0700)]
Fix op_http_parse_connection().

We were computing the return value correctly, but then not
 returning it.

4 years agoSome http robustness improvements.
Timothy B. Terriberry [Sat, 20 Oct 2012 14:10:29 +0000 (07:10 -0700)]
Some http robustness improvements.

- Increase the maximum response header buffer size up to ~32 kB.
  This also moves it into a heap-allocated buffer instead of the
   stack, as 32 kB is really too much for the stack.
- Treat LF as CR LF when parsing headers.
  This is necessary when parsing the load-balancer response in
   front of <http://lazaradio.hu:8100/bermuda.opus>.
  The response returned by that server is invalid in lots of ways,
   but with these two changes we can read it.
- In addition, we now peek ahead at a large chunk of data when
   reading the response instead of reading 2 to 4 bytes at a time.
  This allows a typical response to be read with two syscalls
   (one peek, one read) instead of several hundred.
- Stop trying to read more data when the connection is closed.

4 years agoDocumentation revisions and a leak fix.
Timothy B. Terriberry [Sat, 20 Oct 2012 13:24:27 +0000 (06:24 -0700)]
Documentation revisions and a leak fix.

Thanks to Jean-Marc Valin for providing documentation feedback.
This also changes op_tags() to allow the tags to be queried on a
 partially-open file (because they've already been read and are
 available), and fixes a leak when a partially open file is freed
 instead of being fully opened.

5 years agoFix some socket connection bugs.
Timothy B. Terriberry [Sun, 14 Oct 2012 18:31:08 +0000 (11:31 -0700)]
Fix some socket connection bugs.

The big one was that if the connect() call failed, it would loop
 forever (thanks to some code re-factoring, the loop was no longer
 advancing to the next address as originally designed).

5 years agoRemove an assert.
Timothy B. Terriberry [Sat, 13 Oct 2012 00:57:46 +0000 (17:57 -0700)]
Remove an assert.

On the first request made by a connection, the value it was testing
 might be uninitialized, so we can't guarantee it'll pass.

5 years agoMajor updates to the http backend.
Timothy B. Terriberry [Fri, 12 Oct 2012 22:29:52 +0000 (15:29 -0700)]
Major updates to the http backend.

* Now supports HTTP/1.1 persistent connections with pipelining.
  This speeds up chain enumeration on large files by almost a
   factor of 2 over http, and by roughly a factor of 4 over https.
  The difference between http and https is now much smaller.
* Add timeouts to all the socket I/O.
* Estimate the number of available bytes to read and use it when
   making connection re-use decisions.
* Add support for https with proxies using HTTP/1.1 CONNECT
   tunnels.
* Fix TLS session re-use (it requires clean shutdown).
* Various other code re-organization and minor improvements.

5 years agoFix a couple of MSVC warnings.
Timothy B. Terriberry [Tue, 9 Oct 2012 01:36:46 +0000 (18:36 -0700)]
Fix a couple of MSVC warnings.

5 years agoDisable excessive warnings about parentheses.
Timothy B. Terriberry [Tue, 9 Oct 2012 01:02:32 +0000 (18:02 -0700)]
Disable excessive warnings about parentheses.

Doing this in the source keeps them disabled when someone doesn't
 use one of our build systems.

5 years agoremove GNUism from install doc command
Gregory Maxwell [Sun, 7 Oct 2012 15:01:34 +0000 (11:01 -0400)]
remove GNUism from install doc command

5 years agoFix a 10L bug in the memory stream reader.
Timothy B. Terriberry [Tue, 2 Oct 2012 14:58:06 +0000 (07:58 -0700)]
Fix a 10L bug in the memory stream reader.

It's helpful if we don't always read from the start of the array.
Thanks to Matti Virolainen for the report.

5 years agoFix git-version.sh invocation.
Ralph Giles [Mon, 1 Oct 2012 18:25:57 +0000 (11:25 -0700)]
Fix git-version.sh invocation.

Making it exectutable doesn't put it in the path, so we have to
call it ./git-version.sh from inside the doc directory.

Jenkins didn't catch this because the $(shell ...) return code
doesn't seem to be propagated to make itself. It prints a warning
but doesn't abort. I don't know if there's a way to fix that.

5 years agoMake git-version.sh executable.
Ralph Giles [Mon, 1 Oct 2012 18:01:38 +0000 (11:01 -0700)]
Make git-version.sh executable.

Lets us call it directly without /bin/sh which saves space.

5 years agoKeep the continuous integration build scripts in the repo.
Ralph Giles [Mon, 1 Oct 2012 17:04:16 +0000 (10:04 -0700)]
Keep the continuous integration build scripts in the repo.

We use scripts like these with jenkins to do automatic build
and test runs on every commit. Keeping the build instructions
in the source repository itself makes it easier to track changes,
and easier to make atomic updates when something is moved in
the build system which breaks the jenkins runs.

5 years agoAdjectival hyphen.
Ralph Giles [Mon, 1 Oct 2012 16:29:08 +0000 (09:29 -0700)]
Adjectival hyphen.

5 years agoRemove 'lib' from the package name.
Ralph Giles [Mon, 1 Oct 2012 16:24:24 +0000 (09:24 -0700)]
Remove 'lib' from the package name.

This matches what the opus package does, and is consistent with
what the pkg-config files were already doing.

5 years agoRemove FILE_VERSION_FILTER from the doxygen config.
Ralph Giles [Mon, 1 Oct 2012 16:17:07 +0000 (09:17 -0700)]
Remove FILE_VERSION_FILTER from the doxygen config.

This is redundant now that we have PROJECT_NUMBER
substitution implemented. The file version is for
displaying per-file versioning from CVS, etc.

5 years agoSubstitute the package name as well.
Ralph Giles [Mon, 1 Oct 2012 16:15:58 +0000 (09:15 -0700)]
Substitute the package name as well.

5 years agoUse input redirect instead of explicit cat.
Ralph Giles [Mon, 1 Oct 2012 16:09:36 +0000 (09:09 -0700)]
Use input redirect instead of explicit cat.

Saves an indent stop. Thanks to Tim for the suggestion.

5 years agoMake the configure summary more legible.
Ralph Giles [Mon, 1 Oct 2012 16:01:28 +0000 (09:01 -0700)]
Make the configure summary more legible.

This almost, but doesn't quite, copy the layout the opus
configure script uses.

5 years agoMultiple small fixes.
Timothy B. Terriberry [Mon, 1 Oct 2012 15:41:36 +0000 (08:41 -0700)]
Multiple small fixes.

* Tags were being freed even if not initialized if
   op_fetch_headers() failed on the first link.
  The logic for handling completely empty links would leak, also.
* Ignore fragment identifiers in http URLs instead of rejecting
   them.
* Get the current link in seeking_example's verify_seek when
   op_read_native() fails to return it for us.

5 years agoFix scan_build static analysis reports.
Timothy B. Terriberry [Mon, 1 Oct 2012 15:04:40 +0000 (08:04 -0700)]
Fix scan_build static analysis reports.

Most of these were dead code left around from rewriting things and
 things llvm doesn't have enough global information to prove by
 itself.
The one real error was the missing NULL check in
 opus_tags_parse_impl().

5 years agoMove installed include files under the opus dir.
Timothy B. Terriberry [Mon, 1 Oct 2012 07:14:12 +0000 (00:14 -0700)]
Move installed include files under the opus dir.

Also use Libs.private for libm.

5 years agoAdd pkg-config files.
Timothy B. Terriberry [Mon, 1 Oct 2012 06:57:04 +0000 (23:57 -0700)]
Add pkg-config files.

5 years agoAdd status output to opusfile_example.
Timothy B. Terriberry [Mon, 1 Oct 2012 06:30:37 +0000 (23:30 -0700)]
Add status output to opusfile_example.

This displays the current raw position, PCM position, and
 instantaneous bitrate once per second of output.
This is useful when testing against long-running streams.

5 years agoMake seeking_example continue after failures.
Timothy B. Terriberry [Mon, 1 Oct 2012 06:24:58 +0000 (23:24 -0700)]
Make seeking_example continue after failures.

This makes it more useful for testing invalid files, where the goal
 is merely not to crash, assert, or trip valgrind warnings.

5 years agoDocumentation updates.
Timothy B. Terriberry [Mon, 1 Oct 2012 06:23:05 +0000 (23:23 -0700)]
Documentation updates.

* Add Opus logo.
* Use @VERSION@ consistently.
* Fix some warnings/formatting exposed by a newer Doxygen versions.

5 years agoFix an uninitialized warning from cf594de6.
Timothy B. Terriberry [Mon, 1 Oct 2012 05:53:48 +0000 (22:53 -0700)]
Fix an uninitialized warning from cf594de6.

The warning was correct, as far as it goes, but the use was
 actually harmless.

5 years agoFix file: <host> comparison.
Timothy B. Terriberry [Mon, 1 Oct 2012 04:59:30 +0000 (21:59 -0700)]
Fix file: <host> comparison.

The previous comparison would have succeeded on things like
 "localhost123" instead of just "localhost".

5 years agoClean up page seeking a bit.
Timothy B. Terriberry [Mon, 1 Oct 2012 04:49:51 +0000 (21:49 -0700)]
Clean up page seeking a bit.

* Guarantee pcm_start and pcm_end stay in range (not just move in
   the right direction).
* When we fail to find a page in the interval, back up by increasing
   chunk sizes just like op_get_prev_page_serial().
* Eliminate the special case for the last page in the interval.
* Force a straight bisection if we're backing up, but not decreasing
   the interval size rapidly enough, to limit the worst-case.
  This is guaranteed not to affect the first two iterations, so it
   has minimal impact on seeking in the normal case.

5 years agoFix the doc makefile.
Ralph Giles [Sun, 30 Sep 2012 17:18:12 +0000 (10:18 -0700)]
Fix the doc makefile.

The autoconf build replaced the static Doxyfile with a Doxyfile.in
template. In the autoconf build, the config.status script applies
substitutions to generate the actual Doxyfile. This made the generic
doc/Makefile non-functional.

Apply similar substitutions directly with the makefile so we can
still build documentation outside the context of the autoconf build.

Also add a 'distclean' target to remove the generated Doxyfile.

5 years agoFix handling of holes.
Timothy B. Terriberry [Sat, 29 Sep 2012 19:43:06 +0000 (12:43 -0700)]
Fix handling of holes.

We have to call op_collect_audio_packets() again to drain any
 buffered packets from the page.

5 years agobuild: implement autotools build system for libopusfile. (v4)
Diego Elio Pettenò [Sat, 29 Sep 2012 14:31:26 +0000 (07:31 -0700)]
build: implement autotools build system for libopusfile. (v4)

Includes
- A make debug target that disables optimizations and enables
   assertions,
- Proper ./configure switches for the optional features,
- A configuration summary,
- libtool versioning information,
- Visibility and warning flags,
- API documentation, and
- Support for out-of-tree builds.

Signed-off-by: Diego Elio Pettenò <flameeyes@flameeyes.eu>
5 years agoClean-up for alternate configurations.
Timothy B. Terriberry [Sat, 29 Sep 2012 14:17:33 +0000 (07:17 -0700)]
Clean-up for alternate configurations.

* s/op_read_stereo_float/op_read_float_stereo/ for the fixed-point
   API.
* Fix compiler warnings exposed when optimizations are enabled.
* Fix opusfile_example to work with --enable-fixed-point
   --disable-float
* Fix seeking_example to not re-define OP_FIXED_POINT if it's
   already been defined.

5 years agoMake seeking_example show maximums.
Gregory Maxwell [Sat, 29 Sep 2012 02:15:33 +0000 (22:15 -0400)]
Make seeking_example show maximums.

5 years agoUse $(AR) for ar to support cross-compiling.
Ralph Giles [Mon, 24 Sep 2012 16:01:46 +0000 (09:01 -0700)]
Use $(AR) for ar to support cross-compiling.

GNU make provides a default definition for this variable.

I've no idea what's special about mingw32-ar vs native ar,
but it seems to be required.

5 years agoA bunch of minor improvements.
Timothy B. Terriberry [Mon, 24 Sep 2012 07:27:42 +0000 (00:27 -0700)]
A bunch of minor improvements.

The most important for the https backend:
- Implement RFC 6066 Server Name Indication.
- Implement SSL session resumption.
  This gives less of a speed improvement than you might think.

5 years agoFix URL flags documentation link.
Timothy B. Terriberry [Mon, 24 Sep 2012 04:03:22 +0000 (21:03 -0700)]
Fix URL flags documentation link.

5 years agoAdd copyright information.
Timothy B. Terriberry [Mon, 24 Sep 2012 02:54:40 +0000 (19:54 -0700)]
Add copyright information.

5 years agoMore minor documentation updates.
Timothy B. Terriberry [Mon, 24 Sep 2012 02:44:26 +0000 (19:44 -0700)]
More minor documentation updates.

5 years agoMore minor documentation updates.
Timothy B. Terriberry [Mon, 24 Sep 2012 02:15:06 +0000 (19:15 -0700)]
More minor documentation updates.

5 years agoDisable linear scan/matching in seeking_example.
Timothy B. Terriberry [Sun, 23 Sep 2012 23:31:23 +0000 (16:31 -0700)]
Disable linear scan/matching in seeking_example.

It's served its purpose, and isn't worth the time it takes now.
Leaving the code around to make it easy to re-enable if necessary.

5 years agoDocumentation clean-up and updates.
Timothy B. Terriberry [Sun, 23 Sep 2012 23:18:40 +0000 (16:18 -0700)]
Documentation clean-up and updates.

Splits the documentation into sections and provides an overview.
Also explicitly document which functions can and cannot be called on
 partially-open streams, and fix-up a few things to behave as
 documented.

5 years agoAbstract position indicator tracking slightly.
Timothy B. Terriberry [Sun, 23 Sep 2012 18:10:06 +0000 (11:10 -0700)]
Abstract position indicator tracking slightly.

There are now a couple of places where we need to know the actual
 stream position indicator, not just the offset of the data we've
 read out of the ogg_sync_state.
Make a function to compute this, document it, and use it.

5 years agoFix end_offset tracking bug from 007ec4e4.
Timothy B. Terriberry [Sun, 23 Sep 2012 18:07:34 +0000 (11:07 -0700)]
Fix end_offset tracking bug from 007ec4e4.

end_offset should be the _start_ of the last Opus page in a link,
 to guarantee we seek before it to have enough information to do
 end-trimming.
After the changes in 007ec4e4, it would be set to the start of the
 next link if we cached the last page granule position.

Also add more comments.

5 years agoMinor 16-bit int fix.
Timothy B. Terriberry [Sun, 23 Sep 2012 15:49:37 +0000 (08:49 -0700)]
Minor 16-bit int fix.

5 years agoMore link enumeration improvements.
Timothy B. Terriberry [Sun, 23 Sep 2012 15:42:58 +0000 (08:42 -0700)]
More link enumeration improvements.

1) Remember the granule position of the last page we've seen from
    the current link and save the first page of the next link as
    long as we're scanning forward.
   This knocks almost 10% off the number of seeks for large links.
   For smaller links the improvement is much larger.
2) Only use pairs of close-by serial numbers to estimate link
    start locations (assuming they're above our start threshold).
   This gives a minor (<2%) improvement, which might be in the
    noise, but as it doesn't appear to hurt and is faster, might as
    well.
3) Eliminate a redundant check in op_pcm_seek_page_impl().

5 years agoFurther reduce seeks per bisection search.
Timothy B. Terriberry [Sun, 23 Sep 2012 08:45:33 +0000 (01:45 -0700)]
Further reduce seeks per bisection search.

If we encounter the first page after the target while scanning
 forward, we no longer seek back and read it again after we exit the
 bisection search, but just hold on to the copy we already have.

5 years agoFix typo in e4f32131.
Timothy B. Terriberry [Sun, 23 Sep 2012 06:19:58 +0000 (23:19 -0700)]
Fix typo in e4f32131.

Teach me to change something right before committing.