FFmpeg Summer Of Code 2006

From MultimediaWiki
Revision as of 14:52, 28 April 2006 by Multimedia Mike (talk | contribs) (AAC: typo)
Jump to navigation Jump to search

Google is sponsoring its second Summer of Code. FFmpeg has been selected as one of the approved mentoring organizations. Here are a few project ideas:


VC-1, a.k.a. Microsoft Windows Media Video 3 or 9, is widely used and should see even wider use due to the introduction of HD-DVD. The format for this codec is open and know but so far unimplemented in FFmpeg. This task entails implementing the VC-1 codec based on the emerging open specification Wiki document and forthcoming roadmap. This is a big task but will have very clearly defined milestones, e.g., the first major goal is to decode I-frames, and to get that point there will be a number of smaller goals, each with its own set of unit tests.

Mentor: Mike Melanson


AAC is quickly becoming the new MP3. FFmpeg wants its own independent implementation. This task entails implementing a new, optimized AAC decoder in a similar manner as outlined in the VC-1 section, based on the emerging open specification Wiki document.

Mentor: Mike Melanson

FFmpeg Refactoring

Multimedia programs tend to be highly modular in design and FFmpeg is no exception. However, it is not make the best use of independent modules. The major task in refactoring FFmpeg modules will be to reorganize code so that each individual codec or muxer/demuxer module can be easily enabled and disabled at compile time.

Mentor: Mike Melanson

Improving libavformat

libavformat is the interface of FFmpeg that is responsible for splitting apart encoded audio and video data from multimedia files (demuxing) and putting it together in new multimedia files (muxing). While libavcodec -- the FFmpeg component that encodes and decodes audio and video data -- enjoys widespread use among an impressive array of multimedia projects libavformat has not seen the same level of adoption. This task would entail investigating how to improve the libavformat API, how it interacts with client applications and input layers, developing proof of concept code for a new API and working to port existing muxers and demuxers to the new API.

Mentor: Mike Melanson


Implement the Dirac codec based on the upcoming new specification from Dirac site

Mentor: Luca Barbato


Update the NUT container format support (the current one implements an ancient specification), check the current one here

Mentor: Luca Barbato


Optimize and document SNOW wavelet codec

Mentor: Luca Barbato


Implement a LGPL (E)AC3 decoder

Mentor: Benjamin Larsson

Profiling and Optimization

Profile and optimize memory usage


Implement a Vorbis encoder


Implement a LGPL AMR decoder (encoder)


Implement a simple MP3 encoder


Implement a good pychoacoustic model. Support the usage of this model from the AC3, MP2 and other audio encoders.