1. 19 May, 2017 1 commit
    • Timothy B. Terriberry's avatar
      Improve handling of holes (corrupt pages). · fd65b94f
      Timothy B. Terriberry authored
      Previously, when we encountered a hole (a gap in the page sequence
       numbers), we would save off all of the packets from the first page
       after the hole, but not timestamp them.
      That meant when they were actually decoded, op_pcm_tell() would
       report a timestamp of 0 until reaching the last packet on that
       page.
      
      Instead, handle holes just like a raw seek.
      We reset the granule position tracking, and attempt to timestamp
       packets backwards from the end of the page.
      If the first page after the hole is an EOS page, we just throw it
       away (rather than risk playing invalid samples due to incorrect
       end-trimming).
      We also throw away the first 80 ms of audio after a hole, to allow
       the decoder state to reconverge.
      
      This patch also updates the example to report the hole and
       continue decoding, rather than immediately stopping when a hole is
       encountered, in order to test the above features.
      fd65b94f
  2. 30 Dec, 2015 1 commit
  3. 08 Jan, 2014 1 commit
  4. 24 Aug, 2013 1 commit
    • Timothy B. Terriberry's avatar
      Expose tag comparison functions. · 046b089d
      Timothy B. Terriberry authored
      It seems somewhat silly to have to write your own strcasecmp to
       satisfy the usage pattern found in opusfile_example: scanning the
       whole tags list and handling certain tags specially (as opposed to
       searching for specific tags, as opus_tags_query() does).
      Given that we were already using an equivalent function internally
       to implement opus_tags_query, just expose it directly.
      046b089d
  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
       listed.
      97917914
  6. 12 Aug, 2013 1 commit
  7. 10 Aug, 2013 1 commit
  8. 06 Aug, 2013 1 commit
  9. 28 Jun, 2013 1 commit
  10. 13 May, 2013 2 commits
  11. 10 Jan, 2013 2 commits
  12. 27 Oct, 2012 2 commits
    • 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
  13. 23 Oct, 2012 1 commit
  14. 20 Oct, 2012 2 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
  15. 01 Oct, 2012 3 commits
    • Timothy B. Terriberry's avatar
      Multiple small fixes. · 6c56a973
      Timothy B. Terriberry authored
      * 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.
      6c56a973
    • Timothy B. Terriberry's avatar
      Add status output to opusfile_example. · 8e6d4a76
      Timothy B. Terriberry authored
      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.
      8e6d4a76
    • Timothy B. Terriberry's avatar
      Make seeking_example continue after failures. · 643aed3d
      Timothy B. Terriberry authored
      This makes it more useful for testing invalid files, where the goal
       is merely not to crash, assert, or trip valgrind warnings.
      643aed3d
  16. 29 Sep, 2012 2 commits
  17. 24 Sep, 2012 1 commit
  18. 23 Sep, 2012 1 commit
  19. 22 Sep, 2012 2 commits
  20. 21 Sep, 2012 1 commit
  21. 19 Sep, 2012 1 commit
    • Timothy B. Terriberry's avatar
      A couple of seeking_example improvements. · efbca3a1
      Timothy B. Terriberry authored
      1) Check for allocation failure and fall back to merely scanning a
       file for consistent timestamps instead of loading it to RAM.
      2) Report holes, but do not quit scanning/loading unless they cause
       a discontinuity in the timestamps.
      efbca3a1
  22. 17 Sep, 2012 2 commits
  23. 16 Sep, 2012 1 commit