Difference between revisions of "FFmpeg Summer Of Code 2008"

From MultimediaWiki
Jump to navigation Jump to search
(Getting an unfinished project merged can make for a good qualification task.)
(add issue 222 to libswscale project)
 
(127 intermediate revisions by 19 users not shown)
Line 1: Line 1:
This is a page to discuss possible project ideas for the Google Summer of Code 2008 season, just in case Google decides to host it and accept FFmpeg as a project again.
+
Google is sponsoring their fourth annual [http://code.google.com/soc/2008/ 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. [[User:Multimedia Mike|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 [https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel 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.
  
 
== Current Status ==
 
== Current Status ==
* February 20, 2008: Created page
+
Official timeline: http://code.google.com/soc/2008/faqs.html#0.1_timeline
 +
 
 +
* '''Next Big Date:''' Official coding begins on '''Monday, May 26''' (but there is nothing to stop the students from starting early)
  
 
== Application Process ==
 
== Application Process ==
The student application process for 2008 will be as rigorous, if not more so, than in 2007. The exact FFmpeg SoC details and schedules are not yet known, but if FFmpeg is accepted for the 2008 season, qualifications tasks will play a role again.
+
The student application process for 2008 will be as rigorous, if not more so, than in 2007.  
  
== Project Proposals ==
+
[http://code.google.com/opensource/gsoc/2008/faqs.html#0.1_timeline From the formal timeline]:
 +
* March 24, 2008: Student application period opens.
 +
* April 7, 2008: Student application deadline.
 +
* April 21, 2008: Student selections are announced.
  
==== Apple Lossless Encoder ====
+
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 18, 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.
* Samples: http://samples.mplayerhq.hu/A-codecs/lossless/ALAC/
 
* Decoder: http://svn.mplayerhq.hu/ffmpeg/trunk/libavcodec/alac.c?&view=markup
 
Also see [[ALAC]] and issue [https://roundup.mplayerhq.hu/roundup/ffmpeg/issue82 #82].
 
  
==== GSM Decoder ====
+
=== Application advice ===
* Specification + sample implementation: http://kbs.cs.tu-berlin.de/~jutta/toast.html
+
Read these pages for advice on writing a good application. Don't overdo it though. Write a good qualification task instead.
* Samples: http://samples.mplayerhq.hu/A-codecs/GSM/
 
Also see [[GSM]].
 
  
==== AMR-WB Decoder ====
+
http://drupal.org/node/59037
* Specification: http://www.3gpp.org/ftp/Specs/html-info/26-series.htm
+
http://drupal.org/node/59963
* Samples: http://samples.mplayerhq.hu/A-codecs/amr/
 
Also see [[AMR]].
 
  
==== AMR-NB Encoder ====
+
== 1st Tier Project Proposals ==
* Specification: http://www.3gpp.org/ftp/Specs/html-info/26-series.htm
+
1st tier project proposals are project ideas that are reasonably well defined '''AND''' have a mentor volunteered.
* Samples: http://samples.mplayerhq.hu/A-codecs/amr/
 
Also see [[AMR]].
 
  
 
==== G.729 Encoder ====
 
==== G.729 Encoder ====
Line 40: Line 42:
 
* Specification: http://www.itu.int/rec/T-REC-G.723.1/en
 
* Specification: http://www.itu.int/rec/T-REC-G.723.1/en
 
''Mentor: Benjamin Larsson''
 
''Mentor: Benjamin Larsson''
 
==== Speex Decoder ====
 
* Specification:  http://speex.org/docs/
 
* Samples: http://samples.mplayerhq.hu/A-codecs/speex/
 
Also see [[Speex]].
 
  
 
=== DTS Encoder ===
 
=== DTS Encoder ===
 
* Specification: http://wiki.multimedia.cx/index.php?title=Mirror
 
* Specification: http://wiki.multimedia.cx/index.php?title=Mirror
 
* Sample files: http://samples.mplayerhq.hu/A-codecs/DTS/
 
* Sample files: http://samples.mplayerhq.hu/A-codecs/DTS/
* Qualification: Quicktime IMA ADPCM encoder
+
* Qualification: Do the dts encoder bug fix
 
* Prerequisite: Filterbanks (Sigsys)
 
* Prerequisite: Filterbanks (Sigsys)
 
* Clearly defined task
 
* Clearly defined task
* Primary goal: Dumb bitstream compatible encoder
+
* There will be an existing encoder to extend, it will only produce 2 channel 44.1kHz streams.
* Secondary goal: Techniques from specification implemented  
+
* 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''
 
''Mentor: Benjamin Larsson''
  
Line 59: Line 58:
 
* Specification: http://svn.mplayerhq.hu/ffmpeg/trunk/libavcodec/nellymoserdec.c?revision=11708&view=markup
 
* Specification: http://svn.mplayerhq.hu/ffmpeg/trunk/libavcodec/nellymoserdec.c?revision=11708&view=markup
 
* Sample files: http://samples.mplayerhq.hu/A-codecs/Nelly_Moser/
 
* Sample files: http://samples.mplayerhq.hu/A-codecs/Nelly_Moser/
* Qualification: Quicktime IMA ADPCM encoder
+
* Qualification: Any qualification task will do
 
* Prerequisite: Filterbanks (Sigsys)
 
* Prerequisite: Filterbanks (Sigsys)
 
* Clearly defined task
 
* Clearly defined task
 
* Primary goal: Dumb bitstream compatible encoder
 
* Primary goal: Dumb bitstream compatible encoder
* Secondary goal: Simple psycoacousics implemented
+
* Secondary goal: Simple psychoacoustics implemented
 
''Mentor: Benjamin Larsson''
 
''Mentor: Benjamin Larsson''
  
 
=== AAC-LC Encoder ===
 
=== AAC-LC Encoder ===
 
* Sample files: http://samples.mplayerhq.hu/A-codecs/AAC/
 
* Sample files: http://samples.mplayerhq.hu/A-codecs/AAC/
* Qualification: Quicktime IMA ADPCM encoder
+
* Qualification: TBD
 
* Prerequisite: Filterbanks (Sigsys)
 
* Prerequisite: Filterbanks (Sigsys)
 
* Clearly defined task
 
* Clearly defined task
 
* Primary goal: Dumb bitstream compatible encoder with flexible framework for a serious psychoacoustic implementation
 
* Primary goal: Dumb bitstream compatible encoder with flexible framework for a serious psychoacoustic implementation
 
''Mentor: Benjamin Larsson''
 
''Mentor: Benjamin Larsson''
 +
''Co-Mentor: Anderas Öman''
  
 
=== VP3/Theora Encoder ===
 
=== VP3/Theora Encoder ===
Line 78: Line 78:
 
* Primary goal: Encode video sequences such that they can be decoded by a VP3 decoder first, and then a standard Theora decoder.
 
* 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''
 
''Mentor: Mike Melanson''
 
=== WMV3 Encoder ===
 
* Clearly defined task
 
* Primary goal: Encode video sequences such that they can be decoded by a Windows Media player.
 
''Mentor: TBD''
 
 
=== Better handling of audio in libavcodec ===
 
* Info: http://wiki.multimedia.cx/index.php?title=Ffmpeg_audio_api
 
* Loosely defined task
 
 
=== LGPL reimplementation of GPL sws_scale parts ===
 
* Loosely defined task
 
* Primary goal: LGPL licensed sws_scale
 
* Secondary goal: removal of lavc scaler
 
  
 
=== MXF muxer ===
 
=== MXF muxer ===
Line 101: Line 87:
 
* Create an independent FFmpeg decoder for the [[Nokia MVC]] codec
 
* Create an independent FFmpeg decoder for the [[Nokia MVC]] codec
 
* Very clearly defined task
 
* Very clearly defined task
 +
* Goal: complete, fast, simple and clean decoder
 
* ''Mentor: Michael Niedermayer''
 
* ''Mentor: Michael Niedermayer''
  
=== Freeform Proposal ===
+
=== Apple Lossless Encoder ===
If you think you have a good idea for a FFmpeg Summer of Code project, propose it on the [https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel FFmpeg development mailing list]. We will discuss it from there.
+
* Samples: http://samples.mplayerhq.hu/A-codecs/lossless/ALAC/
 +
* Decoder: http://svn.mplayerhq.hu/ffmpeg/trunk/libavcodec/alac.c?&view=markup
 +
* Encoder that works on Linux with Wine: http://www.dbpoweramp.com/dmc.htm
 +
* Primary goal: Encode files which will decode losslessly using the FFmpeg ALAC decoder.
 +
* Secondary goal: Make sure encoded files will decode losslessly with iTunes and play on an iPod.
 +
* Reuse as much code as possible from other FFmpeg encoders, namely FLAC since it is a similar codec.
 +
* Specifically, reuse the LPC code from FLAC and make it more generic so it can be shared with various speech codecs as well.
 +
* As time allows, experiment with different parts of the codec to push the boundaries of FFmpeg's decoder and of the format itself.
 +
Also see [[ALAC]] and issue [https://roundup.mplayerhq.hu/roundup/ffmpeg/issue82 #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 [http://svn.mplayerhq.hu/ffmpeg/trunk/doc/TODO?view=co doc/TODO] about Snow and [http://svn.mplayerhq.hu/ffmpeg/trunk/doc/snow.txt?view=co 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 [http://wiki.videolan.org/SoC_x264 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''
  
== Qualification Tasks ==
+
==== Audio decoding on SPE ====
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:
+
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
  
* were willing to commit some time during the Summer of Code application review period in order to prove themselves
+
''Mentor: Benjamin Larsson''
* can code C satisfactorily and with the same general style expected of the FFmpeg codebase
 
* can wrap their head around the code base
 
* can interact with the FFmpeg development mailing list
 
* can accept feedback and revise the code until it is suitable for inclusion in the main code base
 
  
'''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.
+
==== 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.
  
'''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 [https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel FFmpeg development mailing list] and indicate your interest and which project you plan to work on.
+
''Mentor: Luca Barbato''
  
=== Finish up a previous incomplete SoC project ===
+
=== LGPL reimplementation of GPL sws_scale parts ===
  
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.
+
Primary goals:
 +
* the dither code depends on non constant globals, it should use the dither variables in the context
 +
* We need a bitexact mode, converters that are not identical to the pure C code must be put under if(!flags & SWS_BLAH_BITEXACT) this one is critical for being able to drop the old scaler. As regression tests would not be possible otherwise.
 +
* roundup issues [https://roundup.mplayerhq.hu/roundup/ffmpeg/issue222 issue222] [https://roundup.mplayerhq.hu/roundup/ffmpeg/issue249 issue249] [https://roundup.mplayerhq.hu/roundup/ffmpeg/issue504 issue504]
 +
* Clear separation of architecture specific code (asm) into separate directories.
 +
* Rewriting the GPL yuv table init code (without looking at the code but just the code using the tables and the actually generated tables)
 +
* All obvious simplifications & cleanups
  
=== Generic Colorspace system ===
+
Secondary goals:
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)
+
* Ensure that every conversion is (optionally) supported in a way which does not subsample chroma more than the worse of input and output.
and generic simple conversion to other colorspaces.
+
* Make the rgb->yuv and yuv->yuv code support the different yuv types which are set via sws_setColorspaceDetails()
 +
* Make sure all RGB input formats are (optionally) supported without being converted to a intermediate 8bit per component YUV, that is they should either be scaled in RGB space or scaled in >8bit per component YUV. (later is easier in the current architecture)
 +
* Make architecture specific code bitexact where this is possible without speedloss and easy.
 +
 +
''Mentor: Luca Barbato and Michael Niedermayer''
  
''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.'' --[[User:Multimedia Mike|Multimedia Mike]] 12:56, 25 February 2008 (EST)
+
=== MPEG-4 ALS audio encoder ===
 +
* Reference software, papers, etc.: http://www.nue.tu-berlin.de/forschung/projekte/lossless/mp4als.html
 +
* (not free) ISO specification: http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=43026
 +
** Note: the student would not be required to pay for the specification
 +
* Primary goal: Write a basic encoder, using the specification, that will decode losslessly with the reference decoder.
 +
* Reuse as much code as possible from other FFmpeg encoders.
 +
* Make it faster than the reference software.
 +
* Implement some of the more advanced encoding features.
 +
* Keep a log with speed/size comparisons to other lossless audio encoders.
 +
** example: http://flake-enc.sourceforge.net/benchmarks.html
 +
** example: http://www.synthetic-soul.co.uk/comparison/lossless/
  
=== Cleanup of MLP decoder ===
+
''Mentor: Justin Ruggles''
This task involves adding a decoder to FFmpeg to play [[Meridian Lossless Packing|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 [[Meridian Lossless Packing|MLP]] Wiki page.
 
  
 +
=== 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
 
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''
 +
 +
=== 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.
 +
* Mentor: Michael Niedermayer
 +
 +
== 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. --[[User:Multimedia Mike|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 ====
 +
* Specification + sample implementation: http://kbs.cs.tu-berlin.de/~jutta/toast.html
 +
* Samples: http://samples.mplayerhq.hu/A-codecs/GSM/
 +
Also see [[GSM]].
  
And the comments: http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/2008-January/040251.html
+
==== AMR-WB Decoder ====
 +
* Specification: http://www.3gpp.org/ftp/Specs/html-info/26-series.htm
 +
* Samples: http://samples.mplayerhq.hu/A-codecs/amr/
 +
Also see [[AMR]].
 +
 
 +
==== AMR-NB Encoder ====
 +
* Specification: http://www.3gpp.org/ftp/Specs/html-info/26-series.htm
 +
* Samples: http://samples.mplayerhq.hu/A-codecs/amr/
 +
Also see [[AMR]].
 +
 
 +
==== Speex Decoder ====
 +
* Specification:  http://speex.org/docs/
 +
* Samples: http://samples.mplayerhq.hu/A-codecs/speex/
 +
Also see [[Speex]].
  
=== Support PB frame mode for H.263i ===
+
=== WMV3 Encoder ===
Details are in the issue tracker: http://roundup.mplayerhq.hu/roundup/ffmpeg/issue27
+
* Clearly defined task
 +
* Primary goal: Encode video sequences such that they can be decoded by a Windows Media player.
  
=== Patch cleanup for MPEG 1 & 2 optimizations ===
+
This could either be done by improving [[Interesting Patches#WMV3 encoder by Denis Fortin|this patch]] or by writing the encoder from scratch.
Details are in the issue tracker: http://roundup.mplayerhq.hu/roundup/ffmpeg/issue100
 
  
=== Implement a Vivo demuxer for FFmpeg ===
+
=== Better handling of audio in libavcodec ===
Implement an FFmpeg demuxer for the [[Vivo]] file format. The best reference for understanding the format would be MPlayer's [http://svn.mplayerhq.hu/mplayer/trunk/libmpdemux/demux_viv.c?view=markup existing .viv demuxer].
+
* Info: http://wiki.multimedia.cx/index.php?title=Ffmpeg_audio_api
 +
* Loosely defined task
  
This task corresponds to issue 99: http://roundup.mplayerhq.hu/roundup/ffmpeg/issue99
+
=== Sipr Decoder ===
 +
* Specification: will be provided
 +
* Samples: http://samples.mplayerhq.hu/real/AC-sipr/
 +
Also see [[RealAudio sipr]].
  
=== Optimal Huffman tables for (M)JPEG ===
+
=== Freeform Proposal ===
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
+
If you think you have a good idea for a FFmpeg Summer of Code project, propose it on the [https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel FFmpeg development mailing list]. We will discuss it from there.
  
=== RL2 Playback System ===
+
== Qualification Tasks ==
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. [[RL2|The RL2 page]] contains the specs necessary to complete this task and points to downloadable samples.
+
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
  
=== YOP Playback System ===
+
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.
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. [[Psygnosis YOP|The Psygnosis YOP page]] contains the specs necessary to complete this task and points to downloadable samples.
+
 
 +
'''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.
  
=== BFI Playback System ===
+
'''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 [https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel FFmpeg development mailing list] and indicate your interest and which project you plan to work on.
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. [[BFI|The BFI page]] contains the specs necessary to complete this task and points to downloadable samples.
 
  
=== M95 Playback System ===
+
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.
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. [[M95|The M95 page]] contains the specs necessary to complete this task and points to downloadable samples.
 
  
=== QuickTime IMA ADPCM Encoder ===
+
=== Anything On The Small FFmpeg Tasks page ===
This task entails adding [[IMA ADPCM]] encoding to the [[QuickTime container|QuickTime]] file format. FFmpeg already contains support for both IMA ADPCM encoding and the QuickTime file muxing. This task is to make the two work together. Make sure it supports both mono and stereo modes.
+
There is an entire Wiki page detailing [[Small FFmpeg Tasks]]. Most will qualify you for a GSoC project. Check the page and stake your claim.
  
 
=== Interesting Patches ===
 
=== 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.
 
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 ===
 
=== Legacy Tasks ===
Line 173: Line 260:
 
=== Freeform Tasks ===
 
=== Freeform Tasks ===
 
If you have an idea for a simple task, come and discuss it on the [https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel development mailing list] and the devs might approve it.
 
If you have an idea for a simple task, come and discuss it on the [https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel development mailing list] and the devs might approve it.
 +
 +
[[Category:FFmpeg]]

Latest revision as of 20:12, 9 July 2008

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.

Current Status

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

  • Next Big Date: Official coding begins on Monday, May 26 (but there is nothing to stop the students from starting early)

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.
  • April 7, 2008: Student application deadline.
  • April 21, 2008: Student selections are announced.

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 18, 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.

Application advice

Read these pages for advice on writing a good application. Don't overdo it though. Write a good qualification task instead.

http://drupal.org/node/59037 http://drupal.org/node/59963

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
  • Goal: complete, fast, simple and clean decoder
  • 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

Primary goals:

  • the dither code depends on non constant globals, it should use the dither variables in the context
  • We need a bitexact mode, converters that are not identical to the pure C code must be put under if(!flags & SWS_BLAH_BITEXACT) this one is critical for being able to drop the old scaler. As regression tests would not be possible otherwise.
  • roundup issues issue222 issue249 issue504
  • Clear separation of architecture specific code (asm) into separate directories.
  • Rewriting the GPL yuv table init code (without looking at the code but just the code using the tables and the actually generated tables)
  • All obvious simplifications & cleanups

Secondary goals:

  • Ensure that every conversion is (optionally) supported in a way which does not subsample chroma more than the worse of input and output.
  • Make the rgb->yuv and yuv->yuv code support the different yuv types which are set via sws_setColorspaceDetails()
  • Make sure all RGB input formats are (optionally) supported without being converted to a intermediate 8bit per component YUV, that is they should either be scaled in RGB space or scaled in >8bit per component YUV. (later is easier in the current architecture)
  • Make architecture specific code bitexact where this is possible without speedloss and easy.

Mentor: Luca Barbato and Michael Niedermayer

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

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.
  • Mentor: Michael Niedermayer

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.

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.

Anything On The Small FFmpeg Tasks page

There is an entire Wiki page detailing Small FFmpeg Tasks. Most will qualify you for a GSoC project. Check the page and stake your claim.

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.