FFmpeg Summer Of Code 2006

From MultimediaWiki
Revision as of 08:22, 29 April 2006 by Lu zero (talk | contribs) (SNOW)
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

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

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

Dirac

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

Mentor: Luca Barbato

NUT

There are already many spread and well specified container formats like Matroska or Ogg that are open and free for usage, each of them have some shortcomings due design decision that make them non optimal for a number of applications. NUT is designed to be simple to implement and parse, easy to seek to precise position without unnecessary reads even on partial files, error resistant and with the lowest possible overhead. This Summer of Code project consists in updating the current ancient ffmpeg implementation to be in line with the current specification, benchmark it against other implementations of NUT and other container formats. Another part of the project will be helping the team improving the documentation available, this will be mostly a side effect of the implementation task.

Knowledge required:

  • Good C knowledge
  • Technical writing skills

Mentor: Luca Barbato

SNOW

SNOW is a lossy and lossless video codec featuring wavelet transform and overlapping block based motion compensation. It shares with Dirac the choice of wavelets but it is quite simpler and with less optional features. At the present the ffmpeg implementation is partially optimized for x86, amd64 and ppc and usable on high end systems. For this project here are two kind of tasks:

  • Improve the optimizations and refine the implementation in order to have ffmpeg playing SNOW in more constrained environments, most of the work will be related to avoid cache trashing and vectorize the code.
  • Write a formal specification of the codec and document the implementation.

For this project you must know:

  • How to profile an application using oprofile, valgrind and the internal timers available in ffmpeg
  • SIMD theory and how to vectorize in practice certain algorithms
  • DocBook, rst, or doxygen for the documentation steps
  • Basic knowledge of the math beside the transformations in use.
  • Altivec, MMX/SSE, VIS or any other vector extension assembly/C intrinsics for your favourite arch.
    • Altivec would be preferred written as intrinsics
    • SSE/MMX/3dNow! code as inline assembly.

Mentor: Luca Barbato

AC3

Implement a LGPL (E)AC3 decoder

Mentor: Benjamin Larsson

Profiling and Optimization

Profile and optimize memory usage

Vorbis

Implement a Vorbis encoder

AMR

Implement a LGPL AMR decoder (encoder)

MP3

Implement a simple MP3 encoder

Pyschoacoustics

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