FFmpeg Summer Of Code 2010

From MultimediaWiki
Jump to: navigation, search

Qualification tasks

For us to consider your application for SoC we require a completed qualification task. Many Summer-of-Code projects (in the list below) have specific qualification tasks. These tasks are meant to make you familiar with the code that you will be working with, are at approximately the same difficulty level as the actual Summer-of-Code project itself (just a lot smaller), and often already provide you with a jumpstart into your Summer-of-Code project. We suggest the following order of events:

  • First, select a Summer-of-Code project (either from the list below, but in some cases you may also come up with your own)
  • Second, discuss this project with the person that will mentor it. If a mentor is listed, talk to him on IRC, via email or so. If no mentor is listed, find one by emailing the FFmpeg-soc mailinglist.
  • With your mentor, discuss the most appropriate qualification task for your Summer-of-Code project.

If no specific qualification task is listed for your project of interest, you can discuss with your mentor to choose a task from the Small Tasks list or the Interesting Patches list instead. If your prospective mentor agrees, please send an email to the FFmpeg-soc mailing list to inform that you are working on it (to avoid duplicated work). You can discuss progress on your qualification task and initial review of your finished qualification task on the FFmpeg-soc mailinglist (sometimes the patch will have to go through final review on the main FFmpeg development mailinglist before it can be applied also). The qualification task is considered completed when your patch is accepted to our main SVN tree.

Before posting to the FFmpeg-soc mailinglist, make sure you read and understand our netiquette guidelines, especially avoid top-posting and thread-hijacking (note that if you don't understand one of those terms, make sure to have understood them before writing your first post). Before you send us your patch, read our development guidelines and make sure your patch fulfills all the requirements stated there. You should also familiar with the programs diff, patch and Subversion. You have to learn these basics on your own before you start, we will not teach them to you during the application process.

A completed FFmpeg qualifications task is also accepted as a qualification task for the VLC organization (does NOT include x264).

1st Tier Project Proposals

1st tier project proposals are project ideas that are reasonably well defined AND have a mentor volunteered.

Implement a Windows Screen Video 2 decoder

NEW Seeking API

  • primary goal: implement a new seeking API in libavformat
    • implement av_seek_file in libavformat
    • implement compatible new seek_file for all AVInputFormat porting existing seek function if possible.
    • implement av_build_index function which will build an AVIndex for the file
    • implement av_export_index function which will save AVIndex in a file which can be loaded later.

Mentor: Baptiste Coudurier

Improve RTSP/RTP layer

  • Primary goal: improve the receiver compatibility
    • Add support for more widespread formats ([list will follow check gst live555 and feng])
      • X-Qt/quicktime depacketizer (see X-QT patch)
      • SVQ3 [1] and QDM2 [2] depacketizers
      • ...more...
    • support Quicktime http tunnel mode
    • support RTCP/Bye as end-of-file (see small task)
  • Secondary goal: improve application integration
    • Provide an API to expose the rtcp layer (and the equivalent in RDT dialect)
    • Try to support subtitle streams (either as rtcp-xr or application/text stream)
    • Make VideoLanClient, MPlayer or Xine use FFmpeg RTSP

Mentor: Luca Barbato, Ronald S. Bultje

Josh Allmann finished the Theora depacketizer as a qualification task, progress and roadmap of the actual project is available here

MMS protocol implementation

  • See patches from Ryan Martell [3]
  • Implementation suggestions:
    • Should probably be a URLProtocol (similar to RTMP)
    • Initial version should only stream (no seeking), TCP-only, and should reuse the tcp:// stack
    • Subsequent patchsets could add UDP (mmsu://) and HTTP (mssh://) by reusing their respective stacks
    • Subsequent patches could add seeking
  • Maybe the task can be extended to add support for MMS output to FFserver, but ONLY once decoding MMS is done
  • An patch for simple streaming (no seeking) over TCP only could serve as a good qualification task

Mentor: Ronald S. Bultje

Zhentan Feng is working on the MMS-over-TCP qualification task

AACS implementation

  • this task probably is to get libbluray integrated with vlc/mplayer/ffmpeg and working with as many discs as possible.
  • Add the ability to encode and decode using Advanced Access Content System to FFmpeg.
  • Specifications: http://www.aacsla.com/specifications/
  • existing implementation e.g. DumpHD: http://forum.doom9.org/showthread.php?t=123111
  • Most parts (BD-J, MKB, title key generation) probably do not belong into FFmpeg, this should be discussed with us before submitting an application
    • possible solution: only implement "lowest" level (decode given the correct title key) but implement CSS en- and decryption as secondary goal

Mentor: Reimar Döffinger

Libavfilter video work

Libavfilter is the FFmpeg filtering library that started as a 2007 SoC project. It should replace the now removed vhook subsystem. Most of it is already part of the FFmpeg main source tree, but there a few bits remaining. This project would consist in the following tasks

  • Get the remaining bits of the SoC tree committed, including the ffmpeg.c and ffplay.c patch
  • Get libavfilter enabled in the main SVN tree
  • Write a watermark filter (this is one of the most commonly requested FFmpeg feature)
  • Write a expand/pad filter (see [4] and [5]
  • Port all MPlayer filters at libmbcodec/vf_* (do not forget asking the authors if it is ok to release them under the LGPL)

see also this ffmpeg-devel message: [6]

Mentor: To be determined, Vitor Sessak if no one else shows up

Libavfilter audio work

At the moment, FFmpeg filtering library has no support at all for handling audio. This task would consist of

  • Expanding the libavfilter framework to work with audio
  • Writing a resampling/format conversion filter (starting with just a wrapping code at libavcodec/resample.c)
    • Can it be made clear that ideally we'd want N-channel resampling? Rob
      • I'm listing here the tasks in the order I'd want see them done chronologically. I think first of all he should write a filter that is just a wrapper (and nothing more) of the code in resample.c. Making it more general is my point #4. I'm trying to focus in getting the general infrastructure in SVN, even if without a lot of fancy filters. Vitor 17:52, 22 March 2009 (EDT)
  • Implement negotiation of sample format and number of channels analogously to the libavfilter colorspace negotiation
    • Does this imply a channel mixing filter? This would be the second most desirable basic audio filter in my opinion. Rob
      • Yes, but it to begin with, he could just write a wrapper around libavcodec/resample.c (see my next point) Vitor 17:52, 22 March 2009 (EDT)
  • Make the resampling filter works for several combinations of sample format and channels
  • Write a visualization filter as proof-of-concept of a filter that works with both video and audio

Mentor: To be determined, Vitor Sessak if no one else shows up

AMR-WB decoder

  • Write or improve AMR-WB spec
  • Implement a decoder

Mentor: Robert Swain

VC-1 Interlaced Support

  • Add support for interlaced streams as used in Bluray recordings to the VC-1 decoder.
  • This includes fixing some reference streams

Mentor: Kostya Shishkov

Sumit Sarkar is working on VC-1 interlaced header parsing as a qualification task.

WMA lossless

RALF Realaudio Lossless

  • RE and implement a decoder for this format
  • Reuse as much libavcodec code as possible

BSAC AAC Decoder

  • Separate AAC Huffman decoding and dequantiztion from the rest of AAC decoder.
  • Write a BSAC AAC decoder.
  • Reuse as much of the existing AAC decoder and libavcodec as possible.

Mentor: Alex Converse

Rewrite the audio format conversion code

  • right now, we're using audioresample to resample audio (samplerate / channels) and audioconvert to resample audio format (int, float, 16-bit, 32-bit). We'd like a new, swscale-style implementation that combines these two in a single codebase
  • design should allow for SIMD optimization of popular conversions (float-int16, int16-float)
  • fix bugs in current design (clipping, overflows when going from float to int, questionable rounding)

Mentor: to be decided

DTS Encoder

  • Specification: http://wiki.multimedia.cx/index.php?title=Mirror
  • Sample files: http://samples.mplayerhq.hu/A-codecs/DTS/
  • Qualification: Extend the encoder in the SoC tree (port the float transform from the decoder, fix the LFE channel generation).
  • Primary goal: Encoder that can produce multi sample rate, multi channel files and multi bit-rate. Wav and raw muxing support. SVN merge.
  • Secondary goal: Techniques from specification implemented, optimal codebook usage, vector quantization, simple psycho acoustics.
  • Third goal: Advanced psycho acoustics.

Mentor: Benjamin Larsson

Floating-point MPEG audio decoder

  • ffmpeg currently has a fixed-point mp1/2/3 decoder, but a floating-point one should be faster on many systems.
  • Goal: a decoder with speed comparable to other widely-used codecs.

Mentor: Michael Niedermayer

h264 decoder optimizations

  • Quite simply, make our decoder faster
  • Qualification task: make our decoder 1% faster

Mentor: Michael Niedermayer

Add support for Bayer RGB colour format

Since it is not even clear if this should be implemented in libswscale or libavcodec, this should be discussed on ffmpeg-devel or ffmpeg-soc before submitting. There was a related discussion on mplayer-devel once and at least two related FFmpeg issues:

Mentor: Michael Niedermayer

2nd Tier Project Proposals

All that separates these proposals from their 1st tier brethren is a mentor.

Finish SoC projects from previous years

Some projects are lingering in the dark unfinished. They should be picked up and made ready for inclusion. These projects are potentially less involved than starting from scratch, but also more useful for FFmpeg since the probability that the projects get finished should be higher. If some of them are deemed too easy, they could be combined.

Unfinished projects from previous years are:




For the current status of all SoC projects up to date, see FFmpeg Summer Of Code.


  • Port MPlayer's libvo to ffplay
  • Note that this does not just mean to produce a working hack so that ffplay can use xv, but a clean and acceptable wrapper for (most of) libvo.
  • An alternative might be to only port the OpenGL part of libvo into a new glplay. This should be discussed on ffmpeg-devel before submission.

GSM Decoder

Also see GSM.

Speex Decoder

Also see Speex.

AMR-NB Encoder

Also see AMR.

VP6 Encoder

WMV3 Encoder

  • Clearly defined task
  • Primary goal: Encode video sequences such that they can be decoded by a Windows Media player.

This could either be done by improving this patch or by writing the encoder from scratch.

Improve subtitle support

  • Add text-to-bitmap conversion functions
  • One with hard-coded bitmaps for characters
  • One that utilizes freetype
  • Function used will be chosen upon compilation

Adjust existing subtitle support to new ABI

Improve Ratecontrol

  • Primary goal 1: Fast heuristic VBV compliant per macroblock ratecontrol which has a better PSNR/bitrate and better subjective quality/bitrate than the current code.
  • Primary goal 2: VBV compliant, rate distortion optimal per macroblock ratecontrol using the viterbi algorithm.
  • Secondary goal 1: Fast heuristic scene change detection which detects scene changes more accurately, has better PSNR/bitrate and subjective quality/bitrate than the current heuristic.
  • Secondary goal 2: Rate distortion optimal (for the current picture) scene change detection.
  • Secondary goal 3: B frames decision which is faster and or has a higher PSNR/bitrate and subjective quality/bitrate than the current code.

WTV (de)muxer

  • Implement a demuxer (and possibly a muxer) for the WTV file format.

SILK decoder and/or encoder

DTS-HD Master Audio decoder

  • You should know exactly what you do if you submit an application.


Dolby E

MPEG-4 ALS encoder


DirectShow capture

  • Implement an indev for DirectShow capture on Windows (and support A/V synchronisation).
  • Qualification: Get GDI and waveform capture integrated into FFmpeg SVN with A/V synchronisation. Both patches are almost finished.