- Oct 23, 2012
-
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
- Oct 22, 2012
-
-
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.
-
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.
-
- Oct 20, 2012
-
-
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.
-
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.
-
Timothy B. Terriberry authored
We were computing the return value correctly, but then not returning it.
-
Timothy B. Terriberry authored
- 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.
-
Timothy B. Terriberry authored
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.
-
- Oct 14, 2012
-
-
Timothy B. Terriberry authored
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).
-
- Oct 13, 2012
-
-
Timothy B. Terriberry authored
On the first request made by a connection, the value it was testing might be uninitialized, so we can't guarantee it'll pass.
-
- Oct 12, 2012
-
-
Timothy B. Terriberry authored
* 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.
-
- Oct 09, 2012
-
-
Timothy B. Terriberry authored
-
Timothy B. Terriberry authored
Doing this in the source keeps them disabled when someone doesn't use one of our build systems.
-
- Oct 07, 2012
-
-
Gregory Maxwell authored
-
- Oct 02, 2012
-
-
Timothy B. Terriberry authored
It's helpful if we don't always read from the start of the array. Thanks to Matti Virolainen for the report.
-
- Oct 01, 2012
-
-
Ralph Giles authored
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.
-
Ralph Giles authored
Lets us call it directly without /bin/sh which saves space.
-
Ralph Giles authored
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.
-
Ralph Giles authored
-
Ralph Giles authored
This matches what the opus package does, and is consistent with what the pkg-config files were already doing.
-
Ralph Giles authored
This is redundant now that we have PROJECT_NUMBER substitution implemented. The file version is for displaying per-file versioning from CVS, etc.
-
Ralph Giles authored
-
Ralph Giles authored
Saves an indent stop. Thanks to Tim for the suggestion.
-
Ralph Giles authored
This almost, but doesn't quite, copy the layout the opus configure script uses.
-
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.
-
Timothy B. Terriberry authored
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().
-
Timothy B. Terriberry authored
Also use Libs.private for libm.
-
Timothy B. Terriberry authored
-
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.
-
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.
-
Timothy B. Terriberry authored
* Add Opus logo. * Use @VERSION@ consistently. * Fix some warnings/formatting exposed by a newer Doxygen versions.
-
Timothy B. Terriberry authored
The warning was correct, as far as it goes, but the use was actually harmless.
-
Timothy B. Terriberry authored
The previous comparison would have succeeded on things like "localhost123" instead of just "localhost".
-
Timothy B. Terriberry authored
* 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.
-
- Sep 30, 2012
-
-
Ralph Giles authored
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.
-