Author Archives: Multimedia Mike

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 http://builds.multimedia.cx/, 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.

The Almighty EULA

One of my favorite blogs, Coding Horror, recently had an intelligent discussion of end-user license agreements (EULAs). When I say “intelligent”, I of course mean that it doesn’t credit them as being the ultimate evil in the world that will enslave us all.


EULA Hotel
It’s a real hotel in San Francisco! Thanks to King Molan for the picture.

Seriously, I think EULAs are very important. Many EULAs contain clauses that forbid binary reverse engineering. Whenever I install a piece of closed, proprietary software, I skim the EULA specifically to locate the section that discusses RE and the forbidding thereof. My reasoning is that if the clause is missing, then the software’s creators may just have the source available for download somewhere which would make any RE task superfluous.

Remember, don’t RE if you don’t have to.

BBC iPlayer

This article in IMDb’s Studio Briefing was the first exposure I have had to the British Broadcasting Corporation’s initiative called iPlayer: BBC Chief Says New Software Moves TV Into a New Age. This is the official page (iPlayer is formerly known as IMP), and here’s Wikipedia’s treatment.

BBC’s player client allows users to download recent BBC shows and view them locally for a limited period of time. Any multimedia hacker who hears ‘BBC’ likely thinks of the Dirac video codec. There is no sign of the codec in any of the literature. Indeed, the container, codec, transport, and DRM capabilities all appear to be based on Windows Media technologies. Further, the client distributes content via a P2P protocol. I suppose this is a natural outgrowth of such a community-owned entity as the BBC.

The official iPlayer homepage links to a message board for the program beta. The board is closed now but the latest activity was from… February… May… even July? Oh wait, these messages are from 2006. The BBC is not known to be the most efficient or competitive enterprise in the broadcast market. So it is not a big surprise to see how gradually this project has progressed.

Presumably, subjects under the BBC’s jurisdiction will express the most interest in this media client. I wonder if foreigners will be able to use it as well? There was much consternation on the message board regarding the limitations of the service, e.g., not being able to sync the downloaded content to such portable devices as the Apple iPod and Sony PSP.

Does the BBC publish any content that would even make any hacking endeavors worthwhile? (Not in my viewing experience…)

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.