Monthly Archives: January 2009

Special QuickTime Features

I processed some more unknown samples today, the ones that came from last month’s big Picsearch score. I found some interesting QuickTime specimens. One of them was filed under video codec FourCC ‘fire’. The sample only contained one frame of type fire and that frame was very small (238 bytes) and looked to contain a number of small sub-atoms. Since the sample had a .mov extension, I decided to check it out in Apple’s QuickTime Player. It played fine, and you can see the result on the new fire page I made in the MultimediaWiki. Apparently, it’s built into QuickTime. The file also features a single frame of RPZA video data. My guess is that the logo on display is encoded with RPZA while the fire block defines parameters for a fire animation.

Moving right along, I got to another set of QuickTime samples that were filed under ‘gain’ video codec. This appears to be another meta-codec and this is what it looks like in action:


Apple QuickTime Player using the gain/fade feature

I decided to post this pretty screenshot here since I didn’t feel like creating another Wiki page for what I perceive to be not a “real” video codec. The foregoing CumulusQuickTimeSlideshow.mov sample comes from here and actually contains 5 separate trak atoms: 2 define ‘jpeg’ data, 1 is ‘gain’, 1 is ‘dslv’ and the last is ‘text’, which defines ASCII strings containing the filenames on the bottom of the slideshow. I have no idea what the dslv atom is for, but something, somewhere in the file defines whether this so-called alpha gain effect will use a cross fade (as seen with the Cumulus shapes) or if it will use an Iris transitional effect (as seen in the sample na_visit03.mov here).

So much about the QuickTime format remains a mystery.

Bring Me Tests

People often ask me how they can help with this whole FATE effort. There is one very clear item I could use help on: More tests. You can help me fill in the holes in FATE’s test coverage. For those who are interested:

  • Check over the FATE Test Coverage wiki page
  • Find red boxes
  • Think of a method involving the ‘ffmpeg’ command line tool that exercise the feature in that box, something along the lines of “ffmpeg -i sample.file -f framecrc -“, and preferably something that is expected to be bit-exact across platforms
  • Tell me about the test, and where to locate the relevant sample file

My ad-hoc — but not hard and fast — rule about FATE suite samples is that I try to keep them under 2 MB. Exceptions can be made, but I often carve up samples manually, either with dd, or by remuxing, or using both methods.

If you have any concrete test spec ideas, please let me know, either through the comments or through email (on the sidebar). Remember, bit-exact tests are necessary at this point, although I hope to have a workable idea for testing non-bit-exact formats soon.

Adventures In MIPS Tools

I’m trying to compile a program that will run on my new MIPS-based subnotebook. I finally got a cross-compiling toolchain built and building a super-simple C program. But the program failed to run. When I tried to run my sample program, the shell complained about not knowing what to do with a ‘(‘ character. Puzzling.

This is the ‘file’ type of my compiled program:

ELF 32-bit MSB executable, MIPS, MIPS-I version 1 (SYSV), statically linked, not stripped

I finally thought to extract a binary from the MIPS machine and check its file type:

ELF 32-bit LSB executable, MIPS, version 1 (SYSV), dynamically linked (uses shared libs), stripped

Okay, I think I’m getting wise to the discrepancy already. It turns out that I want a target called “mipsel” rather than just plain “mips” as the former specifies little endian (and because a MIPS CPU can be wired to run either endian — that’s how simple and reduced this reduced instruction set is).

So I rebuilt the toolchain using the ‘mipsel’ target (building the toolchain is surprisingly quick when you know how). Now the test program segfaults when I try to run it. That’s unfortunate, though I still perceive it to be a step up from the last position. This is the new type reported by ‘file’:

ELF 32-bit LSB executable, MIPS, MIPS-I version 1 (SYSV), statically linked, not stripped

It’s MIPS-I version 1, vs. simply MIPS version 1, which is what the existing binaries are. I wonder if that’s the problem? I’m also struggling with a linker warning about the start location. That’s more likely to be the issue.

BTW, this is the C code I am testing with:

int main()
{
  return 77;
}

My thinking here is that I should be able to run the program followed by “echo $?” to get the last command’s exit status– 77 in this case.

Got A Cheap MIPS Subnotebook

I bit the proverbial bullet and ordered that cheap MIPS-based subnotebook from Geeks.com. Ordering was a comedy of errors as something went wrong with the order while I was away on vacation and was cancelled upon my return, which is when I noticed that the subnotebook had decreased in price by another $20, a discount that has since ended. But the Alpha-400 arrived today, almost at the same time that I read the Engadget headline EMTEC’s sub-$400 10-inch Gdium netbook gets specced. The Gdium, you might recall, is another, slightly more capable, MIPS-based laptop slated for general availability somewhere between now and the end of time. The headline made me think that the laptop’s release is eminent. But a deeper investigation reveals no firm or even loose commitment regarding shipment.


Belco Alpha-400 in its box

But I have the cheaper MIPS-based laptop in my hands, one that goes by many names. In this region, it is called the Belco Alpha-400. Let’s see what it can do. Continue reading