Category Archives: Multimedia Goals And TODO

Revenge Of The Autobuilds

Takis has been a busy FFmpeg hacker: He recently established an experimental server to automatically build the current source-controlled copy of FFmpeg and perform some rudimentary tests with the output. This is some great initiative on his part.

(Oh, and look what else Takis has been up to while no one is looking: a graph of FFmpeg code change over time.)

I have wanted to build an automated building and testing infrastructure for FFmpeg for a long time now. I got my first concept up and running late last November. I just realized that I never blogged about it although I did announce it on the ffmpeg-devel mailing list. The concept lives at, though be advised that the script that updates it went offline in late December.

Predictably, people seemed to think the autobuild system was a good idea but that my implementation needed a lot of work. And they were right. The reason that I never blogged about it is likely that I figured I was about to deploy a better concept very soon.

It is now July and I have had months to brainstorm ideas for an improved autobuild and test infrastructure. Unfortunately, as can often happen with revision 2 of an unproven idea, I fear my concept has devolved into an exercise in architecture astronomy.

Architecture Astronomy

Read Joel Spolsky’s excellent essay, “Don’t Let Architecture Astronauts Scare You”. It’s about people who heavily theorize in the abstract but rarely accomplish anything useful. Personally, I consider it a clear indicator of architecture astronomy when a program’s fundamental paradigm revolves around the idea that, “Everything is an object (or module)!” It is my opinion that declaring everything in your architecture to be an object is the abstraction endgame (to be more specific, everything is a swappable, user-configurable module, even the central engine of the program that is supposed to coordinate everything between other modules).

I’ll explain the evolution of my autobuild idea: It started simply enough with a script that iterated through a bunch of compiler versions and ran the configure/make commands to build each. It logged stdout and stderr separately and logged general information about success/failure, SVN version, etc. into a rudimentary database table that could be simply queried with a PHP script.

I soon realized that this is wholly inadequate to the overall goals I wished to accomplish in this endeavor (building and testing on many platforms). Security is a major issue, which I blogged about before, and which I solved in the first iteration using the most paranoid policies of chroot’ing the configure/make steps and prohibiting network access during the process. Another problem is the eventuality of infinite loop bugs. Any build or test step could conceivably encounter such a condition.

This realization led me to redesign the autobuild/test system as a series of individual executable steps, all stored in a database, of which the primary script has no hardcoded knowledge. And this is where the “Everything is a module” philosophy comes into play. Unfortunately, the further I plot this out on paper, the harder it becomes because the execution module concept is too generic; it’s hard to do certain specific things. I realize I need to back off a bit on the abstraction.

SNOW Bounty

People have often batted around the idea of offering bounties for FFmpeg work — a preset sum of money for a discrete set of goals. Lars Täuber is making a public offer for someone to complete a specific set of goals in order to bring FFmpeg’s SNOW codec up to 1.0 viability.

Wanted: SNOW
Thanks to Glass Giant’s Wanted Poster Generator

We have never done anything quite like this so this should be a learning experience for all of us. For starters, the person aiming for the 1200 Euros ought to be qualified for the task. Ideally, the individual should — at a minimum — perform a qualification task, similar to what we enforced with the Google Summer of Code this year.

Maybe we will eventually have a proper non-profit organization established in order to administer such bounty programs as well as escrow donations. In the beginning, though, if you are interested, check in on the ffmpeg-devel list and we’ll talk.

Streaming Trailer Set-Top Box

So the Apple TV hit the street last week. I wasn’t aware of it until a friend just IM’d me informing me that he kept up his long-standing tradition of early adoption, putting one of these shiny new units next to his Nintendo Wii and Sony PlayStation 3.

Apple TV

Here’s the killer feature he relayed to me:

You’d like apple tv. There’s a built-in movie trailer streaming function.

To think: If Apple had released this unit 7 years ago, I might never have started down the path of multimedia hacking.

Master Spreadsheet

Steven Zakulec (MultimediaWiki user Dashcloud) has performed an amazing service and tested every single sample in the MPlayer repository against FFmpeg. Can you even imagine? He has provided a spreadsheet (~87 KB, OpenOffice Calc format) that details which samples work or not given a particular SVN revision of the FFmpeg repository. I think this information needs to get into a searchable & maintainable online database soon so it does not go stale.