On QuickTime Codecs

The amount of interesting codecs is dangerously low so I’ll probably stop writing about them at all (and that rises a question whether this blog should be kept alive at all).

So, scraping bottom of the barrel I come to QuickTime codecs.

There are two codecs from the standard QuickTime package that are yet to be implemented in opensource: QDesign Music and Apple Pixlet. The former is (obviously) an audio codec with simple tones+noise coding, I hope to document it soon. The latter is an intermediate codec based on wavelets, so it should not be that hard to RE. The main problem is that I don’t know where to find a decoder (and I’m too lazy to search for one actively). It’s said that the only version of QuickTime being able to decode it was on Mac OS X Panther (yes, not just when it was called Mac OS X but also when it was purely PowerPC only). I estimate this codec would be rather simple—on par with SMPTE VC-5 (and probably even without codebooks but rather with generic variable-length codes like in Pear Intermediate Codec and AmateurRes). And PowerPC assembly is not that bad after you get hold of rlwinm instruction, I’ve REd most of AIC from PowerPC binary after all.

And there are some third-party extensions even Compn doesn’t know about like NewTek SpeedHQ or Digital Anarchy Microcosm codec. The former is an ordinary DCT-based intermediate codec any koda can RE, the latter is somewhat funny lossless codec (funny because it uses range coder just to decode bytes and use them in 8- or 16-bit RLE) that is better left to Derek to RE. SheerVideo has been documented long time ago, ZyGo video was just another DiVX, VP3 and Indeo 4 have other decoders etc etc.

Life is boring.

Update: so there is a more modern Pixlet decoder. I’ve looked at it. There’s per-plane wavelet compression, parametrised Rice codes, everything rather trivial. The only interesting things are coding of the zeroeth subband (it’s splitted into first coefficient, top row, left column and all other coefficients coded with top+left prediction) and the fact they have subband header with magic 0xDEADBEEF. Nice touch!

Life is still boring though.

5 Responses to “On QuickTime Codecs”

  1. If you are looking for interesting compression algorithms yet to be reverse engineered, especially proprietary codecs in the Apple ecosystem, they released a juicy new lossless codec last year called lzfse– Lempel-Ziv, finite state entropy. Have at it.

    Also, Rad Game Tools is up to their old compression tricks with their Oodle compression library. Again, not multimedia-specific, but still game-related. I get the impression from their literature that it’s more useful for development pipelines, so I’m not sure if it will be found “in the wild”. They made a few ripples lately when they announced a new “Kraken” variant of Oodle, that’s supposed to be super-awesome.

    And if you still want a multimedia-related challenge which will help (admittedly, a small handful of) people, I can put you in touch with some ambitious game translators who want to subtitle the videos on old computer games.

  2. Oh, and you like reverse engineering multimedia codecs for which the only decoder in the wild is compiled into PowerPC machine code? Have I got the challenge for you! There is a codec/file format that was used on some GameCube games 1.5 decades ago. I know at least one person who begged me to reverse engineer it for him. I get the impression that it was a hierarchical adaptive multi-stage vector quantizer (HAMSVQ), according to the file extension and some literature I found. This would put it in a similar category to SVQ1.

  3. Kostya says:

    Well, Apple LZFSE is really just Zstd redid by Apple engineers just because that’s what Micro$oft^WApple does.

    As for RAD stuff—there’s little interest in their Bink2 let alone anything else. That compression library might be good but hardly anybody outside gaming industry will get to evaluate it. At least the authors blog about the ideas they tried so you can find some information if you need it.

    The problem with game formats is that they tend to be in a very tight mess that’s hard to untangle to get to the code. I still want to RE Discworld III BMV and Actimagine VX but the code is too specific.

    As for game subtitling—it’s rather ambitious but shouldn’t it be easier to translate soundtrack instead? It worked better for the most games I played (including Phantasmagoria in Russian) and people were used to “voiced by professional programmers” as it was meant by King’s Quest V (who doesn’t love the voice work of Richard Aronson there after all).

  4. One more RE challenge that might interest you: Help me and Diego solve this Italian literature problem:

    http://multimedia.cx/eggs/reverse-engineering-italian-literature/

    When I left off, I had pretty much isolated the piece of 16-bit x86 code that either does compression, encryption, or both.

  5. Kostya says:

    Sounds interesting indeed, I’d like to try.