Category Archives: FATE Server

FATE on MIPS

I have an interest in testing FFmpeg on a wide diversity of platforms via FATE. Pursuant to another post of non-x86 architectures, I learned that there are MIPS-based Linux laptops in the works.

I learned that one such laptop is the HiVision miniNote. Another is the Skytone Alpha-400. I have also learned that they are pretty much the same and that they go by other names depending on the regions in which they are marketed. However, the Skytone Alpha-400 is something I could order today if I wanted to (Geeks.com sells the MIPS Alpha-400 machines). And it’s also useful to note that the latest incarnation of the series uses Intel XScale CPUs rather than MIPS derivatives.

Unfortunately, the Alpha-400 and related laptops really aren’t made for general hacking. Allegedly, someone in .nl has figured out how to get a root prompt, but it would require knowing Netherlish to decode the instructions.

In the course of the previous discussion, I also learned of the Gdium which features a slightly more powerful MIPS CPU. This might make a better platform for FATE testing. There isn’t much information on their site about the possibility of purchasing one, but there is a blog post about their desire to attract open source developers. Hey! I’m attracted! Perhaps if someone knew someone involved with these products, those people would be interested in performing automated QA for FATE?

Meanwhile, I am tweaking the core FATE script to support cross compiling and remote execution of tests. Think of it as phase 2.

What Platform Would You Like To Test?

What platforms should FATE test? So far, it is testing both x86_32 and x86_64 under Linux and Mac OS X, and PowerPC under Linux. These are the first and foremost platforms I care about, and have access to.

What other platforms would people like to see tested through FATE? Windows? *BSD? Solaris? Linux running on exotic bits of hardware? Game consoles? Well, I have great news: After many months of occasional work on the FATE infrastructure, I am confident that the system is in a shape where other people can run the core FATE script and submit results back to the main server.

I have released the first public version of the script at the core of FATE: fate-script.py. Anyone can run it locally on their own platforms, but it requires a few credentials (assigned by me) in order to submit results to the server.

Feedback is very welcome, as are offers to run FATE continuously on other platforms. Also, I would love to know how to properly version something with git. All I can say is that the currently posted version of fate-script.py is version 67eac48073a24deece52cb28fbb25c14858b6c23.

Actual Regression Test Output

I resisted adding ‘make test’ as an individual FATE test for a long time because it was too big, took too long to run, and because it’s an all or nothing proposition (i.e., if one test fails, the whole test is marked as a failure). Plus, I eventually want to break up each individual test in the ‘make test’ regression suite into individual FATE tests. But a few months ago, I relented — until I make the big test split — and entered test spec #128, which runs ‘make test > /dev/null 2>&1’. The redirection was necessary because ‘make test’ generates way more data than I care to track. It was suggested that I should try to do some shell magic to capture the final n lines of output in case of failure. This is a nice idea. But I couldn’t figure out how to do it due to the fact I can’t stand shell scripting.

I was recently trying to process a huge number of problematic multimedia samples using shell scripting commands. It didn’t work well. I resorted to a custom Python script which worked much better. This little episode reminded me of some other shell workarounds I deployed in FATE such as the {FILESIZE} and {MD5} custom strings. Instead of shell commands to obtain information for certain tests, I map these special commands to cleaner, more portable Python code. And it finally occurred to me to do the same for the full regression suite.

Say hello to the new test spec #128— {MAKETEST}. The FATE script recognizes this command and realizes that it should run ‘make test’, capture the stdout/stderr, clear both if the suite succeeds, or chop both to only include the last 30 lines if anything in the regression suite went bad. This will help developers study why the suite is failing on various systems.

At least until I finally develop a good plan for breaking the master regression suite into several hundred little tests.

Baby Got RV40

Kostya is overjoyed to announce that he has completed enough of his Summer of Code project for inclusion into the FFmpeg codebase — Summer of Code 2007, that is. Kostya has activated his RealVideo 4 (RV40) decoder. Pictured is a sample of “Baby Got Back”, Sir Mix-A-Lot’s timeless paean to the female backside, encoded in RV40 and available in the samples repository:


Sir Mix-A-Lot's 'Baby Got Back', presented by RealVideo 4

Ah, still a classic. Many congratulations to Kostya for persisting in this herculean task well beyond the project due date.

Also, do you dare ask why this is useful in the grand scheme of multimedia hacking? Seriously? Have you not learned by now? While it may be true that absolutely no one likes Real or their formats, there is still a huge legacy of media in the wild encoded in their formats, media that will need to be manipulated for many years to come.

I would be remiss if I did not mention another game-related format that Suxen drol committed a few weeks ago– the Electronic Arts TGQ video codec. This is a motion JPEG variation that was notably used in Crusader: No Remorse.


Crusader: No Remorse

FATE tests have been added: