FFmpeg Summer Of Code 2008

From MultimediaWiki
Revision as of 03:10, 26 March 2008 by Merbanan (talk | contribs) (Sipr Decoder)
Jump to navigation Jump to search

Google is sponsoring their fourth annual Summer of Code for the summer of 2008. This entails paying students for working on open source projects. FFmpeg has been a participant in the 2006 and 2007 seasons. Visit the main FFmpeg Summer Of Code page for information on past seasons.

FFmpeg has been selected to participate in GSoC 2008. This page discusses possible project ideas and status for the Google Summer of Code 2008 season as it pertains to FFmpeg.

The administrator for the FFmpeg Summer of Code is Mike Melanson, a.k.a. Multimedia Mike. His email address is mike -=at=- multimedia.cx.

If you are a student who wishes to be involved with a FFmpeg GSoC project, one of the first and best steps you can take is to subscribe to the FFmpeg development mailing list, sooner rather than later, and indicate your interest. In the past, we have weighted our selection decisions by how involved a prospective student is. And remember to read the part of this page dealing with qualification tasks since you absolutely must complete a qualification task to be eligible for a FFmpeg SoC project. No qualification task, no project. No exceptions.

Contents

Current Status

Official timeline: http://code.google.com/soc/2008/faqs.html#0.1_timeline

  • Next Big Date: March 24, 2008: Students may submit applications through Google until March 31, 2008
  • March 17, 2008: Google is scheduled to announce selected projects; FFmpeg is selected
  • March 3, 2008: Submitted FFmpeg project application
  • February 20, 2008: Created page

Application Process

The student application process for 2008 will be as rigorous, if not more so, than in 2007.

From the formal timeline:

  • March 24, 2008: Student application period opens.
  • March 31, 2008: Student application deadline.
  • April 11, 2008: Final decisions are made.

All students who wish to be eligible for a GSoC FFmpeg project must successfully complete a qualification task. A student may submit an application before completing their task and they will have until April 11, 2008 to finish a qualification task. It is ill-advised to wait until the last minute, though. You must complete the task, which involves getting code approved for submission to source control, which takes many iterations over many days for most people. Further, we like people who show initiative earlier than later.

1st Tier Project Proposals

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

G.729 Encoder

Mentor: Benjamin Larsson

G.723.1 Decoder

Mentor: Benjamin Larsson

G.723.1 Encoder

Mentor: Benjamin Larsson

DTS Encoder

  • Specification: http://wiki.multimedia.cx/index.php?title=Mirror
  • Sample files: http://samples.mplayerhq.hu/A-codecs/DTS/
  • Qualification: Do the dts encoder bug fix
  • Prerequisite: Filterbanks (Sigsys)
  • Clearly defined task
  • There will be an existing encoder to extend, it will only produce 2 channel 44.1kHz streams.
  • Primary goal: Encoder that can produce multi sample rate and multi channel files. Simple rate control. Wav and raw muxing support. Wav dts auto detection when decoding.
  • Secondary goal: Techniques from specification implemented, optimal codebook usage, vector quantization, simple psycho acustics.
  • Third goal: Advanced psycho acoustics.

Mentor: Benjamin Larsson

Nellymoser Encoder

Mentor: Benjamin Larsson

AAC-LC Encoder

  • Sample files: http://samples.mplayerhq.hu/A-codecs/AAC/
  • Qualification: TBD
  • Prerequisite: Filterbanks (Sigsys)
  • Clearly defined task
  • Primary goal: Dumb bitstream compatible encoder with flexible framework for a serious psychoacoustic implementation

Mentor: Benjamin Larsson Co-Mentor: Anderas Öman

VP3/Theora Encoder

  • Clearly defined task
  • Primary goal: Encode video sequences such that they can be decoded by a VP3 decoder first, and then a standard Theora decoder.

Mentor: Mike Melanson

MXF muxer

  • Specifications: SMPTE 377M
  • Clearly defined task

Mentor: Baptiste Coudurier

MVC decoder

  • Create an independent FFmpeg decoder for the Nokia MVC codec
  • Very clearly defined task
  • Mentor: Michael Niedermayer

Apple Lossless Encoder

Also see ALAC and issue #82.

Mentor: Justin Ruggles

Snow Job

This task involves finishing work on the Snow video codec to bring it to 1.0 quality.

  • Document the whole Snow algorithm (this is a qualification task only!)
  • Fix all Snow related bugs on roundup
  • faster halfpel interpolation (issue183)
  • Try a different transform like an lapped biorthogonal transform instead of the wavelet (this could be better or worse only trying can tell ...)
  • anything in doc/TODO about Snow and snow.txt/TODO
  • anything else which might improve Snow quality per bitrate

(The idea here is that the goal would be, do as much as the time allows, though we should decide on some minimum as all above is clearly not doable within the time)

Mentor: Michael Niedermayer

x264 Improvements

This task has been moved to the VideoLan project, and can be found here.

CELL Jobs

There are multiple tasks related to CELL/SPE, the same code would probably end up being portable across other multicore/heterogeneous system but that will be a separate task.

Mentor: Unsolo

Audio decoding on SPE

This task consists in preparing an infrastructure to manage audio decoding and porting the current audio codecs to SPE (one or more depending on how hard it will be). Further information will appear soon

Mentor: Benjamin Larsson

swscale on SPE

Move the colorspace conversion and scaling routines to SPE, the interface will remain the one from swscale or the new one from the other swscale related SoC.

Mentor: Luca Barbato

LGPL reimplementation of GPL sws_scale parts

Write a LGPL licensed colorspace conversion and image scaling library (working from sws_scale library already present)

    • Document the current code
    • Refactor the code
      • Make the functions take less parameters (move some in proper data structures)
      • Make the optimized implementations build like dsputils (separate dir per arch)
    • Reimplement the GPL code
    • Benchmark
    • Provide sane documentation and example usage
    • Switch scaler implementation.
  • Secondary goal: removal of lavc scaler

Mentor: Luca Barbato

MPEG-4 ALS audio encoder

Mentor: Justin Ruggles

MLP/TrueHD encoder

  • Implement a MLP (Dolby Digital TrueHD/ Meridian Lossless packing) encoder based on the RE'd decoder.
  • Info: MLP

Latest version of the MLP patch: http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/2008-January/040234.html And the comments: http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/2008-January/040251.html

Mentor: Justin Ruggles, co-mentor: Ian Caulfield

2nd Tier Project Proposals

All that separates these proposals from their 1st tier brethren is a mentor. If you are particularly passionate about one of these tasks, perhaps you should attach your name to it. (Email me if you want to discuss it or need access to the Wiki. --Multimedia Mike 21:58, 1 March 2008 (EST))

Port FFmpeg to Visual Studio

Create a full working port including inline assembly.

Optimize FFT routines

Port djbfft and rework the fft framework in FFmpeg. This task can include a fixedpoint port and SIMD optimizations.

GSM Decoder

Also see GSM.

AMR-WB Decoder

Also see AMR.

AMR-NB Encoder

Also see AMR.

Speex Decoder

Also see Speex.

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 Ratecontrol

  • Primary goal: Per Macroblock ratecontrol.
  • Secondary goals: very regular one pass CBR ratecontrol (streaming), better Scene cut detection/B frames decision.

Better handling of audio in libavcodec

Sipr Decoder

Also see RealAudio sipr.

Freeform Proposal

If you think you have a good idea for a FFmpeg Summer of Code project, propose it on the FFmpeg development mailing list. We will discuss it from there.

Qualification Tasks

Many students apply for the Google Summer of Code and wish to work on a sexy multimedia project such as FFmpeg. All students will claim to be hard workers but we need a method of determining which students have a higher probability for success. Thus, we developed the qualification system during the 2007 season and will be enforcing the same system this year. A student must successfully complete a qualification task in order to be considered for an FFmpeg SoC project. In doing so, a student demonstrates that they:

  • are willing to commit some time during the Summer of Code application review period in order to prove themselves
  • can code C satisfactorily and with the same general style expected of the FFmpeg codebase
  • can wrap their head around the code base
  • can accept feedback and revise the code until it is suitable for inclusion in the main code base
  • can interact with the FFmpeg development mailing list

Note that the last point involves following the netiquette expected on the FFmpeg development mailing list. If you have doubts what that may be your chances of getting it wrong are north of 99%. Hint: It is clearly stated on the mailing list page of the FFmpeg homepage.

Frequent Objection #1: But I don't have time to do a qualification task! Then how do we know you will have time to work on your task during the summer? The qualification tasks are selected to be fairly trivial by FFmpeg standards and should not be too difficult for a prospective FFmpeg contributor. If they are too difficult, maybe FFmpeg is not the project for you. Also, be encouraged by the fact that the app review period comes after the application submission deadline; i.e., you can work on a qualification task after you submit an application for FFmpeg. But you will not be considered for an SoC project slot unless you have satisfactorily completed a qualification task.

Process: If you are interested in applying for FFmpeg's Summer of Code and, by extension, interested in working on a qualification task, the first step is to subscribe to the FFmpeg development mailing list and indicate your interest and which project you plan to work on.


The FFmpeg qualifications also qualify for Videolan http://wiki.videolan.org/SoC_2008 and XBMC http://xbmc.org/wiki/?title=Google_Summer_of_Code_2008 SoC projects. But you need to contact them also if you intend to apply to them.


Finish up a previous incomplete SoC project

Several SoC projects from previous years have not yet made it into FFmpeg. Taking any of them and finishing them up to the point that they can be included should make for a good qualification task. Check out the FFmpeg Summer Of Code overview page and look for the unfinished projects, like AMR-NB, QCELP, Dirac, TS muxer, JPEG 2000.

  • Bartlomiej Wolowiec is working on finishing the EAC3 decoder [1].

Generic Colorspace system

This task involves adding support more than 8 bits per component (Y on 10 bits, U on 10 bits, V on 10 bits for example) and generic simple conversion to other colorspaces.

Does this have to do with revising FFmpeg's infrastructure? If so, then it doesn't feel like a qualification task. If it's something simpler, then the vague description does not convey that simplicity. Please expound. --Multimedia Mike 12:56, 25 February 2008 (EST)

I don't think so, extending PixFmt to extended structure with finegrained description like depth, range values, colorspace, sample period, and write generic simple conversion from all formats to all others, like suggested by Michael on the mailing list. Conversion routine can be a good qualification task for video encoders/decoders. What do you think ? --Baptiste Coudurier 00:30, 29 February 2008 (EST)

Cleanup of MLP decoder

This task involves adding a decoder to FFmpeg to play MLP audio data. The hard work has already been done; now a volunteer needs to take the existing decoder patch and make it satisfactory for inclusion into the codebase. MLP samples referenced from the MLP Wiki page.

Latest version of the MLP patch: http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/2008-January/040234.html

And the comments: http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/2008-January/040251.html

Claimed by Andy Gocke

Make the SoC dts encoder multichannel capable

Here is a skeleton for a dts encoder http://svn.mplayerhq.hu/soc/dcaenc/, currently it can only encode stereo streams. The task is to extend it to support 5.1 channels also.

This patch needs to be applied before starting to work on the encoder: http://article.gmane.org/gmane.comp.video.ffmpeg.soc/2213

It will be applied in the near future.

Specs and info can be found here: http://wiki.multimedia.cx/index.php?title=DTS

Nellymoser forward transform

FFmpeg has a Nellymoser decoder, for an encoder we need to have working forwrd mdct transform. The one used is not a pure mdct, some blocks are moved around and subtracted. Figure out how to do the forward transform. To verify that the transform is correct just do the reverse transform. Keep in mind that the mdct needs a previous block to do the alias cancelation. This is part of a working Nellymoser encoder, a task that one who would like to do the Nellymoser encoder should do.

Support PB frame mode for H.263i

Details are in the issue tracker: http://roundup.mplayerhq.hu/roundup/ffmpeg/issue27

H.263 spec describing PB frames and improved PB frames: http://www.itu.int/rec/T-REC-H.263-200501-I/en

Patch cleanup for MPEG 1 & 2 optimizations

Details are in the issue tracker: http://roundup.mplayerhq.hu/roundup/ffmpeg/issue100

Implement a Vivo demuxer for FFmpeg

Implement an FFmpeg demuxer for the Vivo file format. The best reference for understanding the format would be MPlayer's existing .viv demuxer.

This task corresponds to issue 99: http://roundup.mplayerhq.hu/roundup/ffmpeg/issue99

I am ready to help out with understanding MPlayer's demuxer, esp. MPlayer API stuff if necessary. --Reimar 15:46, 1 March 2008 (EST)

Claimed by Marcondes Ricarte

Optimal Huffman tables for (M)JPEG

This task is outlined at http://guru.multimedia.cx/small-tasks-for-ffmpeg/ and is tracked in the issue tracker: http://roundup.mplayerhq.hu/roundup/ffmpeg/issue267

Claimed by Deep Pal

RL2 Playback System

This task is to implement an FFmpeg playback subsystem for RL2 files. This will entail writing a new file demuxer and video decoder (the audio is already uncompressed), both of which are trivial by FFmpeg standards. The RL2 page contains the specs necessary to complete this task and points to downloadable samples.

Sascha Sommer completed this task.

YOP Playback System

This task is to implement an FFmpeg playback subsystem for Psygnosis YOP files. This will entail writing a new file demuxer and video decoder, both of which are trivial by FFmpeg standards. The Psygnosis YOP page contains the specs necessary to complete this task and points to downloadable samples.

Claimed by Indrani Kundu Saha

BFI Playback System

This task is to implement an FFmpeg playback subsystem for BFI files. This will entail writing a new file demuxer and video decoder (the audio is already uncompressed), both of which are trivial by FFmpeg standards. The BFI page contains the specs necessary to complete this task and points to downloadable samples.

Claimed by Sisir Koppaka

M95 Playback System

This task is to implement an FFmpeg playback subsystem for M95 files. This will entail writing a new file demuxer and video decoder (the audio is already uncompressed), both of which are trivial by FFmpeg standards. The M95 page contains the specs necessary to complete this task and points to downloadable samples.

Claimed by Kevin DuBois

PAF Playback System

This task is to implement an FFmpeg playback subsystem for Packed Animation Files. This will entail writing a new file demuxer and video decoder (the audio is already uncompressed), both of which are trivial by FFmpeg standards. The PAF page contains the specs necessary to complete this task and points to downloadable samples.

SSE2 iDCT Optimization

Incorporate an invert discrete cosine transform for SSE2-capable CPUs. The hardest work is already done-- dig up Intel's AP-945 application programming note which will spell out precisely how to do this. Mostly, this involves adapting the ASM code for gcc AT&T syntax.

Claimed by Alexander Strange

Apple RPZA encoder

A patch was once sent to the ffmpeg-devel mailing list to include and encoder for the Apple RPZA video codec. That code can be found on the "Interesting Patches" page. This qualification task involves applying that patch so that it can compile with current FFmpeg SVN code and then cleaning it up per the standards of the project. Engage the mailing list to learn more about what to do.

IFF demuxer

Implement demuxing of 8svx audio. This involves implementing an IFF file demuxer and a 8svx audio demuxer.

Jai Menon sent a patch to -devel implementing it.

QuickTime Edit List Support

Implement edit list support in FFmpeg's QuickTime demuxer (libavformat/mov.c). This involves parsing the 'elst' atom in a QuickTime file. For a demonstration of how this is a problem, download the file menace00.mov from http://samples.mplayerhq.hu/mov/editlist/ and play it with ffplay or transcode it with ffmpeg. Notice that the audio and video are ever so slightly out of sync. Proper edit list support will solve that. Other samples in that directory also presumably exhibit edit list-related bugs. The Xine demuxer has support for this, it might be useful for hints.

Claimed by Sathvik L.

ARMovie/RPL Demuxer + 1 ESCAPE Decoder

This task involves writing a demuxer for the ARMovie/RPL format (or adapting an existing patch). Further, it involves writing a decoder for one of 3 the ESCAPE video codec variations that is known to be encapsulated inside of an RPL file for various gaming applications. All 3 codecs have descriptions and samples available.

Eli Friedman submitted a patch for the demuxer in -devel

Complete QuickTime RLE Encoder

FFmpeg already has a decoder for the Apple QuickTime RLE video format. It needs work, though. Pursuant to this patch and this email thread, revise the patch so that it is suitable for inclusion into the main codebase. This involves adding support for 1-bit and 2-bit variants, and refactoring the whole decoder to be cleaner. Ask on the list for specific advice.

Interesting Patches

There is a growing backlog of "Interesting Patches" for FFmpeg tracked on this Wiki. Each one requires a volunteer to task the initiative to clean up the patch to the satisfaction of the project leaders so that it can finally be included.

Some bug on the bugtracker

From this page you can find the bugtracker: http://ffmpeg.mplayerhq.hu/bugreports.html Some issues can qualify as a qualification task.

Legacy Tasks

Many tasks were suggested during the 2007 season. Any task that is not marked as completed is probably fair game, but ask on the list, just to be sure: http://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_Of_Code_2007#Qualification_tasks

Freeform Tasks

If you have an idea for a simple task, come and discuss it on the development mailing list and the devs might approve it.