Yesterday we made the second release of rav1e.
The second official release of rav1e was focused mainly on speed. Later I'll write down what we used and what, in my opinion, are the best practices when you have to optimize a codebase like this one.
Since we focused mainly on speed, there aren't many user-facing changes.
--benchmark: Since I started to use gnu time to get some coarse information, I decided to add a getrusage() report directly in the cli. Currently it is unix-like only, if you like Windows a pull request to add the same feature is really welcome!
advanced --load-config: The options depend on building with
--features=serialize, they let you dump and restore the full encoder configuration, it is quite useful if you want to tweak settings.
tracing: Enables hawktracer probes.
serialize: Enables serde support, it is optional mainly because it would nearly double the build time. Suggestions on something smaller are welcome.
Speed was the focus on this release and we tried our best not to increase the resident set, nor the overall memory usage.
The memory fragmentation that was quite significant in 0.1.0
Had been addressed fairly well in 0.2.0 and probably we'll return to it in 0.4.0:
We are still not using as much cpu and memory as possible and there are still large inefficiencies to address in the future, some of it will be solved by the rayon developers, some are on us:
In the future the lookahead computation we have in
send_frame will happen in a separate thread and it will not stall the rest of the encoding process this much.
The focus for
0.2.0 was speed and we got between 40% and 70% faster in about 40 days.
The focus for
0.3.0 will be quality, striving to keep the encoding speed as fast as it is if not faster, we'll see how it will go next year.
Thanks for reading!