1. 07 Jul, 2017 1 commit
    • Timothy B. Terriberry's avatar
      Improve source/stream terminology consistency · c59d42b6
      Timothy B. Terriberry authored
      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.
  2. 19 May, 2017 2 commits
    • Timothy B. Terriberry's avatar
      Avoid operations linear in the number of links. · f83675eb
      Timothy B. Terriberry authored
      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.
    • Timothy B. Terriberry's avatar
      Minor comment updates. · 21ebba38
      Timothy B. Terriberry authored
      No code changes.
  3. 15 Dec, 2015 1 commit
    • Timothy B. Terriberry's avatar
      Buffer continued packet data to reduce seeking. · 661459b4
      Timothy B. Terriberry authored
      In commit 41c29626 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.
  4. 03 Sep, 2013 2 commits
    • Timothy B. Terriberry's avatar
      Add an API to disable dithering. · 8396a1f8
      Timothy B. Terriberry authored
      This is to correspond to the feature in opus-tools's opusdec.
      opusdec itself probably won't be able to use it, because it still
       wants to do dithering after resampling, but the motivation for the
       feature is the same.
    • Timothy B. Terriberry's avatar
      Add an application decoding callback API. · 1b114a82
      Timothy B. Terriberry authored
      This is needed to allow advanced usage, like that of opusdec in
       opus-tools, which can simulate packet loss or save the range coder
       state for decoder verification.
      It could also be used in a pinch to use libopusfile for access to
       the raw Ogg packets, though this is somewhat of a hack.
  5. 23 Aug, 2013 1 commit
    • Timothy B. Terriberry's avatar
      Add API to report information from server headers. · 97917914
      Timothy B. Terriberry authored
      This allows the application to report details about the server for
       HTTP[S] streams.
      For all HTTP[S], this includes the server software, content-type,
       and whether or not it's using HTTPS.
      For live streams, it also includes the station name, description,
       genre, homepage, nominal bitrate, and whether or not it's publicly
  6. 15 Jul, 2013 2 commits
    • Timothy B. Terriberry's avatar
      Add a gain control API. · 7aea3cae
      Timothy B. Terriberry authored
      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.
    • Timothy B. Terriberry's avatar
      Avoid using a long-long literal for OP_INT64_MAX. · 6587f1de
      Timothy B. Terriberry authored
      The LL suffix isn't C89, so it may not work everywhere.
  7. 06 Apr, 2013 1 commit
    • Timothy B. Terriberry's avatar
      Small cleanups of the soft clipping code. · 7b499048
      Timothy B. Terriberry authored
      - 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
  8. 25 Mar, 2013 3 commits
    • Timothy B. Terriberry's avatar
      Use clipping prevention on 16-bit decode paths. · bf06c4f2
      Timothy B. Terriberry authored
      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.
    • Timothy B. Terriberry's avatar
      Reset dither state when API path changes. · f8222c99
      Timothy B. Terriberry authored
      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.
    • Timothy B. Terriberry's avatar
      Minor comment fix. · 94b0c98a
      Timothy B. Terriberry authored
  9. 24 Oct, 2012 1 commit
    • Timothy B. Terriberry's avatar
      Replace return code checks with OP_ALWAYS_TRUE(). · 4b70af03
      Timothy B. Terriberry authored
      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).
  10. 23 Oct, 2012 1 commit
  11. 09 Oct, 2012 2 commits
  12. 24 Sep, 2012 1 commit
  13. 18 Sep, 2012 1 commit
  14. 17 Sep, 2012 1 commit
    • Ralph Giles's avatar
      Move opusfile.h up a level. · 3f18c55f
      Ralph Giles authored
      This matches the convention used by opus itself, where
      headers are included without a prefix, and the build
      must do -I/path/to/opus to find the appropriate versions.
  15. 16 Sep, 2012 1 commit