On 06/06/2012 03:21 PM, Anurag Mendhekar wrote:
I'm considering writing an H.264 encoder/decoder in Racket. Has anyone tried such a thing before? Codecs require a lot of bit-whacking and the h264 standard is particularly convoluted. Efficiencies are obtained in C in many different and usually complex ways. Codec experts usually recommend starting at C/++ and go to assembly to extract further performance.
The best way to get good performance currently is to write in Typed Racket and let its optimizer convert checked code to unchecked code. For example, it'll replace `fxand' with `unsafe-fxand'. Use the Performance Report tool to find out exactly how the optimizer transforms your code and get suggestions for speed improvements.
You won't be able to operate on bytes directly, so you'll have to use fixnums. You'll only be able to operate on 3 bytes at a time on 32-bit platforms, or 7 bytes at a time on 64-bit platforms. (Racket avoids allocating space for fixnums by encoding them in a pointer with a type tag, which uses up a few bits.) If the algorithm allows operating on more bytes at a time, try shoving them all into an integer, which can be any bit width, and use integer bitwise ops like `bitwise-and'.
Neil ⊥ ____________________ Racket Users list: http://lists.racket-lang.org/users