Difference between revisions of "FFmpeg Summer Of Code 2006"

From MultimediaWiki
Jump to navigation Jump to search
(FFmpeg Refactoring: another part of the task)
(grammar fix)
Line 18: Line 18:
  
 
== FFmpeg Refactoring And Test Suite ==
 
== FFmpeg Refactoring And Test Suite ==
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. This task also entails creating an test suite that can automatically enable each module, one at a time, and validate that FFmpeg still builds and works.
+
Multimedia programs tend to be highly modular in design and FFmpeg is no exception. However, it does 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. This task also entails creating an test suite that can automatically enable each module, one at a time, and validate that FFmpeg still builds and works.
  
 
''Mentor: Mike Melanson''
 
''Mentor: Mike Melanson''

Revision as of 15:15, 1 May 2006

Google is sponsoring its second Summer of Code. FFmpeg has been selected as one of the approved mentoring organizations. If you have any questions, feel free to contact the FFmpeg mentoring administrator, Mike Melanson, at (mike -at- multimedia.cx). This page contains a few project ideas (which, by no means, limits any prospective proposals).

Applying

If you are interested in participating in the Google Summer of Code you will need to register at the official SoC site linked above and file an official application. Traditionally, top applications are fairly detailed. The author of Nmap, who mentored 10 students in the 2005 SoC, has this form as a outline of what he expects. The Drupal project has also prepared guidelines:

Further, there is a Google Group that includes much discussion of what it takes to be accepted into this program. Good luck!

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 And Test Suite

Multimedia programs tend to be highly modular in design and FFmpeg is no exception. However, it does 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. This task also entails creating an test suite that can automatically enable each module, one at a time, and validate that FFmpeg still builds and works.

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

Dirac is an experimental codec developed by BBC as an open standard, it employs a wide range of advanced compression tecniques and shares with SNOW some features. Implementing this codec based on the upcoming new specification from Dirac site will follow a roadmap/milestone approac similar to the one that will be used on the VC-1 project.

Requirements:

  • Good C knowledge
  • Basic knowledge of compression tecniques in multimedia

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.

Requirements:

  • 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.

This project could be split in two macrotasks:

  • 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.

A complete roadmap will be decided together with the candidates.

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.