Monthly Archives: October 2005

Duck TrueMotion 2 & Esoteric FLIC

Kostya has plodded through the long-open sourced, yet highly cryptic, code of On2’s VpVision and successfully reverse engineered a description of the Duck TrueMotion 2 video codec (fourcc: TM20). He then re-implemented a fresh version which is available in the FFmpeg CVS repository. Here it is in action, decoding the one known TM20 sample:

Final Fantasy - TM20

The video depicts something related to the unkillable Final Fantasy game series. The most famous application for the TM20 codec has been to encode the FMV in Eidos’ PC port of Final Fantasy VII. This game is known to use a bitstream-incompatible version of the TM20 format. So there is still some work to do on this codec before the Final Fantasy fanboys rejoice over being able to natively decode the FMV for this game.

Also, do you remember the basic Autodesk FLIC format? Did you know there are more variations of the format than you can possibly imagine? As much as I enjoy hacking on esoteric multimedia formats I just could not bring myself to care about these variations. This is mostly because I did not have sample files.

Recently, however, Steven Johnson has seen fit to implement several variations of the format including FLX and DTA extensions. The code is in FFmpeg’s CVS.

Hooking Up The SMPTE VC-1 Decoder In FFmpeg

Update, Jan-16-2008: I should have posted this update a long time ago. Readers should be advised that these instructions are obsoleted by the fact that FFmpeg already includes a native (and much faster) VC-1 decoder.

Some people have asked me for my code to make the SMPTE VC-1 reference decoder work with FFmpeg, slow though it may be. I suppose I could make a patch. But the official version of FFmpeg is whatever happens to be in CVS at the current moment. So any patch I could produce would work for maybe a day. So get ready to do a little editing on your local FFmpeg CVS tree. The steps:

Continue reading

More On That Multimedia Programming Language

I move swiftly from project to project and I know some readers are hoping that I succinctly forget about this multimedia programming language idea. Just a few more thoughts:

Matthieu Castet tipped me off that gcc 4 actually offers vector data type extensions. The concept is to declare and use vector data types in such a way that the compiler will understand how to transform them into SIMD instructions (MMX, SSE2, Altivec, et al). Please forgive my skepticism regarding how well this could possibly work. I do not begrudge the gcc developers for their roles; I know it’s a tough duty and I appreciate that gcc works across so many different CPU architectures. However, one area of gcc that seems to break down with inordinate regularity is optimization along with C/ASM code intermingling.

One item that I did not make clear in my first post about the language is driving motivation. The idea is to take something that resembles an ISO-style spec and compile it directly. Have you ever looked at a formal ISO spec? Probably not an official one, but chances are that if you have been working on multimedia tech for any period of time you have at least seen ISO draft documents floating around on the internet. Generally, they are impenetrable but also highly programmatic. I think it would be useful to compile the specs directly.

Maybe I am thinking of some literate programming variation.