Sometimes I think that the pace of multimedia technology is slowing down. Obviously, I’m not paying close enough attention. I thought I would do a little 2011 year-end review of what happened in the world of open source multimedia, mainly for my own benefit. Let me know in the comments what I missed.
The Split
The biggest deal in open source multimedia was the matter of the project split. Where once stood one project (FFmpeg) there now stands two (also Libav). Where do things stand with the projects now? Still very separate but similar. Both projects obsessively monitor each other’s git commits and prodigiously poach each other’s work, both projects being LGPL and all. Most features that land in one code base end up in the other. Thus, I refer to FFmpeg and Libav collectively as “the projects”.
Some philosophical reasons for the split included project stagnation and development process friction. Curiously, these problems are fond memories now and the spirit of competition has pushed development forward at a blinding pace.
People inside the project have strong opinions about the split; that’s understandable. People outside the project have strong opinions about the split; that’s somewhat less understandable, but whatever. After 5 years of working for Adobe on the Flash Player (a.k.a. the most hated software in all existence if internet nerds are to be believed on the matter), I’m so over internet nerd drama.
For my part, I just try to maintain some appearance of neutrality since I manage some shared resources for the open source multimedia community (like the wiki and samples repo) and am trying to keep them from fracturing as well.
Apple and Open Source
It was big news that Apple magnanimously open sourced their lossless audio codec. That sets a great example and precedent.
New Features
I mined the 'git log'
of the projects in order to pick out some features that were added during 2011.
First off, Apple’s ProRes video codec was reverse engineered and incorporated into the multimedia libraries. And for some weird reason, this is an item that made the rounds in the geek press. I’m not entirely sure why, but it may have something to do with inter-project conflict. Anyway, here is the decoder in action, playing a video of some wild swine, one of the few samples we have:
Other new video codecs included a reverse engineered Indeo 4 decoder. Gotta catch ’em all! That completes our collection of Indeo codecs. But that wasn’t enough– this year, we got a completely revised Indeo 3 decoder (the previous one, while functional, exhibited a lot of code artifacts betraying a direct ASM ->C translation). Oh, and many thanks to Kostya for this gem:
That’s the new Origin Xan decoder (best known for Wing Commander IV cinematics) in action, something I first started reverse engineering back in 2002. Thanks to Kostya for picking up my slack yet again.
Continuing with the codec section, there is a decoder for Adobe Flash Screen Video 2 — big congrats on this! One of my jobs at Adobe was documenting this format to the outside world and I was afraid I could never quite make it clear enough to build a complete re-implementation. But the team came through.
Let’s see, there are decoders for VBLE video, Ut Video, Windows Media Image (WMVP/WMP2), Bink audio version ‘b’, H.264 4:2:2 intra frames, and MxPEG video. There is a DPX image encoder, a Cirrus Logic AccuPak video encoder, and a v410 codec.
How about some more game stuff? The projects saw — at long last — an SMJPEG demuxer. This will finally allow usage and testing of the SMJPEG IMA ADPCM audio decoder I added about a decade ago. Funny story behind that– I was porting all of my decoders from xine which included the SMJPEG ADPCM. I just never quite got around to writing a corresponding demuxer. Thanks to Paul Mahol for taking care of that.
Here’s a DFA playback system for a 1995 DOS CD-ROM title called Chronomaster. No format is too obscure, nor its encoded contents too cheesy:
There’s now a demuxer for a format called XMV that was (is?) prevalent on Xbox titles. Now the projects can handle FMV files from many Xbox games, such as Thrillville.
The projects also gained the ability to play BMV files. I think this surfing wizard comes from Discworld II. It’s non-computer-generated animation at a strange resolution.
More demuxers: xWMA, PlayStation Portable PMP format, and CRI ADX format; muxer for OpenMG audio and LATM muxer/demuxer.
One more thing: an AVX-optimized fast Fourier transform (FFT). If you have a machine that supports AVX, there’s no way you’ll even notice the speed increase of a few measly FFT calls for audio coding/decoding, but that’s hardly the point. The projects always use everything on offer for any CPU.
Please make me aware of features that I missed in the list!
Continuous Testing
As a result of the split, each project has its own FATE server, one for FFmpeg and one for Libav. As of the new year, FFmpeg has just over 1000 tests while Libav had 965. This is one area where I’m obviously ecstatic to see competition. Some ad-hoc measurements on my part indicate that the total code coverage via the FATEs has not appreciably increased. But that’s a total percentage. Both the test count and the code count have been steadily rising.
Google Summer of Code and Google Code-In
Once again, the projects were allowed to participate in the Google Summer of Code as well as Google Code-In. I confess that I didn’t keep up with these too carefully (and Code-In is still in progress as of this writing). I do know that the project split occurred after FFmpeg had already been accepted for GSoC season 2011 and the admins were gracious enough to allow FFmpeg and Libav to allow both projects to participate in the same slot as long as they could both be mature about it.
Happy New Year
Let’s see what we can accomplish in 2012.
We don’t just have H.264 4:2:2 intra, we have H.264 4:2:2 inter as well thanks to Ronald. I think ProRes went round the news merely because it was an Apple codec in the same way that news about ALAC’s open sourcing did even though libavcodec had a decoder for ages.
You neglected to mention OPAtom support and frame-accurate (AFAICT) seeking in mxfdec by yours truly. OPAtom is quite different from OP1a (the only thing mxfdec used to support), to the point one could consider it to be a format of its own.
The features are in FFmpeg but currently stuck in review on Libav-devel, but hopefully not for long.
I also did extensive fuzzing on mxfdec, meaning a lot of bugs (old and new) were squashed.
@Kieran: Thanks, I must have missed the 4:2:2 inter change. The changelog plainly lists “4:2:2 H.264 decoding support”, not mentioning inter or intra.
@Tjoppen: You rock; sorry for overlooking your contributions. I just regret that I don’t understand much about MXF. :-)
Actually we got both Bink b audio and video support in 2011.
As for game codecs, Chronomaster’s plot was written by Roger Zelazny (not a small name in science fiction or so I heard); Indeo 4 is used for animations in Starship Titanic (its plot was written by Douglas Adams, SF writer as well or so I heard); Discworld II features a cheerful song performed by Eric Idle (if you haven’t heard of him either be very ashamed).
And I’m glad I’ve participated in making some of those achievements.
noteworthy, too: ffmpeg is making official releases now.
Maybe I misread the title… Didn’t realize this was meant as a ffmpeg change log. But then I’m not sure why Apple is in there.
I would think WebM has done something or other that’s fairly noteworthy in the course of the year. No interest in the xvp8 project (or even x262 for that matter)? Nothing newsworthy on CELT or Opus? WebP going nowhere? Any interesting updates to video editors?
What does your crystal ball say about 2012?
I know this is not that much, but there is now a support for all the MIDI files supported in libmodplug through a wrapper.
You might also notice that not only formats and codecs improved, but a bunch of extra features are now also available (a lot of audio filters and processing utilities, timecode support, ASS subtitle burning, JSON/XML/CSV/compact outputs in ffprobe, etc.).
@Peter: I’m interested in seeing how HEVC continues shaping up.
@RC and ubitux: Thanks for filling in some of the gaps.
IIRC, xvp8 didn’t even appear from the clouds of vapour yet…
Nice piggies in any case.
2011 saw a lot of old formats dug up and RE’d. special thanks to maksym, kostya and carl for their hard work :)
for 2012 i predict more stupid ideas for web video. after the stupidity that is ‘live’ fragmented mp4 , theres no limit to whats next.
i wish i could predict x264 merging with ffmpeg. that would be fun. then maybe x262 and xvp8.
@compn: only to be trumped by fmpeg merging with ffmpeg