1. 14 Nov, 2012 1 commit
  2. 13 Nov, 2012 5 commits
    • Ralph Giles's avatar
      Remove 'export' from the NO_DOXYGEN Makefile variable. · d0a4b9bb
      Ralph Giles authored
      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.
      d0a4b9bb
    • Ralph Giles's avatar
      Bump soname version for the v0.2 release. · 036328d4
      Ralph Giles authored
      036328d4
    • Timothy B. Terriberry's avatar
      Check for end_offset < data_offset. · 15193c53
      Timothy B. Terriberry authored
      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.
      15193c53
    • Timothy B. Terriberry's avatar
      Add op_get_last_page() for calculating duration. · 4dcf9b0d
      Timothy B. Terriberry authored
      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).
      4dcf9b0d
    • Timothy B. Terriberry's avatar
      Some minor comment updates. · 99c3c5e9
      Timothy B. Terriberry authored
      Be more specific about which RFC we're quoting in the SSL hostname
       verification.
      99c3c5e9
  3. 12 Nov, 2012 4 commits
    • Ron's avatar
      Support --disable-maintainer-mode · ac0af36f
      Ron authored
      
      
      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: default avatarRalph Giles <giles@mozilla.com>
      ac0af36f
    • Ron's avatar
      Add some extra makefile targets · 009e8253
      Ron authored
      
      
      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: default avatarRalph Giles <giles@mozilla.com>
      009e8253
    • Ron's avatar
      Move the extra EXTRA_DIST out of HAVE_DOXYGEN · 9502cd84
      Ron authored
      
      
      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: default avatarRalph Giles <giles@mozilla.com>
      9502cd84
    • Ron's avatar
      Trim some things out of autogen.sh that aren't doing anything · a6e62879
      Ron authored
      
      
      Mostly so that people looking at or cloning it later don't get confused
      into thinking that they are.
      Signed-off-by: default avatarRalph Giles <giles@mozilla.com>
      a6e62879
  4. 11 Nov, 2012 2 commits
  5. 07 Nov, 2012 1 commit
    • Ralph Giles's avatar
      Use /bin/echo so -n works on osx. · 0ad11587
      Ralph Giles authored
      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.
      0ad11587
  6. 02 Nov, 2012 2 commits
    • Ralph Giles's avatar
      Fix a ci script typo. · 2effe9d3
      Ralph Giles authored
      2effe9d3
    • Ralph Giles's avatar
      Attempt to fix the autotools linking issue on jenkins. · 2b4bc458
      Ralph Giles authored
      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.
      2b4bc458
  7. 01 Nov, 2012 1 commit
  8. 28 Oct, 2012 1 commit
  9. 27 Oct, 2012 3 commits
    • Timothy B. Terriberry's avatar
      A few small updates to the hostname verification. · 3bc74807
      Timothy B. Terriberry authored
      Fixes the case where a raw IPv6 address would be rejected as not
       looking like a FQDN.
      Also simplifies the wildcard comparison a little.
      3bc74807
    • Timothy B. Terriberry's avatar
      Remove OP_SSL_SKIP_CERTIFICATE_CHECK from opusfile_example. · 3f54b9dd
      Timothy B. Terriberry authored
      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).
      3f54b9dd
    • Timothy B. Terriberry's avatar
      Make SSL/TLS certificate checking actually work. · a7c5b93c
      Timothy B. Terriberry authored
      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.
      a7c5b93c
  10. 26 Oct, 2012 1 commit
    • Ralph Giles's avatar
      Document the release process. · 4f538abc
      Ralph Giles authored
      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.
      4f538abc
  11. 24 Oct, 2012 5 commits
  12. 23 Oct, 2012 9 commits
    • Timothy B. Terriberry's avatar
      f75d06a9
    • Ralph Giles's avatar
      Don't build the API docs if doxygen isn't available. · bc1985a1
      Ralph Giles authored
      Updates the configure check to match the one in the Opus
      repository.
      bc1985a1
    • Ralph Giles's avatar
      Set the autoconf version from git. · cfd4e2c3
      Ralph Giles authored
      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.
      cfd4e2c3
    • Timothy B. Terriberry's avatar
      Don't discard timestamps from invalid packets. · 853393be
      Timothy B. Terriberry authored
      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.
      853393be
    • Timothy B. Terriberry's avatar
      Fix an assertion failure. · 9bb7bc21
      Timothy B. Terriberry authored
      This is no longer guaranteed after the change in e7661191, so test
       for it explicitly.
      Thanks to Greg Maxwell for the test case.
      9bb7bc21
    • Timothy B. Terriberry's avatar
      One small addendum to 7c52622f. · c372a2eb
      Timothy B. Terriberry authored
      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.
      c372a2eb
    • Timothy B. Terriberry's avatar
      Bisect from the current file position when seeking. · 6d61f3f1
      Timothy B. Terriberry authored
      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.
      6d61f3f1
    • Timothy B. Terriberry's avatar
      Some http improvements. · 7b2cc5f1
      Timothy B. Terriberry authored
      - 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.
      7b2cc5f1
    • Timothy B. Terriberry's avatar
      Be more scrupulous about reading extra data. · 7c52622f
      Timothy B. Terriberry authored
      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.
      7c52622f
  13. 22 Oct, 2012 2 commits
    • Timothy B. Terriberry's avatar
      Bias the offsets in op_predict_link_start(). · 498fc0bd
      Timothy B. Terriberry authored
      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.
      498fc0bd
    • Timothy B. Terriberry's avatar
      Fix a few minor nits. · 21f72850
      Timothy B. Terriberry authored
      - 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.
      21f72850
  14. 20 Oct, 2012 3 commits
    • Timothy B. Terriberry's avatar
      Re-do abstract stream reader API. · e2d7b266
      Timothy B. Terriberry authored
      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.
      e2d7b266
    • Timothy B. Terriberry's avatar
      Make the URL API more extensible. · 800be8c0
      Timothy B. Terriberry authored
      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.
      800be8c0
    • Timothy B. Terriberry's avatar
      Fix op_http_parse_connection(). · 756c4c0b
      Timothy B. Terriberry authored
      We were computing the return value correctly, but then not
       returning it.
      756c4c0b