Reverse Engineering the GoPro Cineform Codec
medium.com
medium.com
> An interesting feature where coefficients were pre-aligned to mod-8 widths to presumably allow for SIMD optimisations
I have seen protocols implemented in such a way that when described on paper, they look convoluted, especially how they specify alginment "this will have this much padding, this one will be aligned on this boundary. Little endian encoding for integer values...".
However I quickly realized they basically picked a particular memory layout in a C struct generated on x86-64 architecture, by a particular compler (gcc 4), and particular OS (Linux). I imagine at some point someone implemented it like that, then they went back and wrote into a standard. It would have been nice to at least mention that in the docs footnote ("Encode these as C structs on this combination of arch/compiler/os and cast binary blobs to the struct to serialize/deserialize data in this format)
With C++ on x86, there's a fair amount of effort to try to be compatible, even though the ABI changes pretty quickly.
Elsewise, things can vary quite a lot.
That footnote could cause multiple problems. Someone might just use that C struct and expect the layout to match, which would introduce portability problems (such as if using a different target OS, as Windows and Linux have different struct layout rules). Or, conversely, someone might see that line in a proposed standard and reject it as non-portable, whereas a precise description of memory layout would not come across as such. (In particular, the memory layout of structs by GCC on x86-64 Linux matches the memory layout of structs by any compatible compiler targeting several different 64-bit architectures on several POSIXy platforms.)
Yap that makes sense, I din't think of it that way first but that probably explains it.
This is why open source is often so much better than open standards (though the latter the was used to help create the former, in this case).
Huge kudos to the author for doing this work, as well as explaining the process.
The best way to implement video standards until now has (as pretty much everywhere else) been a good tight specification coupled with a several conforming decoders without any monopolizing the market. It keeps the vendors honest.
Personally, I prefer both: a standard to give documentation, motivation, and clarification, and an Open Source reference implementation (written for maximum clarity rather than optimization).
ffmpeg -activation_bytes 1CEB00DA -i test.aax -vn -c:a copy output.mp4
Taken from the docs. (http://ffmpeg.org/ffmpeg-all.html#Audible-AAX)edit: I have not tried it yet, but this script seems to extract the key from audible
https://github.com/inAudible-NG/audible-activator/blob/maste...
[1]: http://moyix.blogspot.com/2014/07/breaking-spotify-drm-with-... [2]:
My goal is to write an 'ncdu' application to show what files/albums are using the most space.