FFmpeg / Libav Summer Of Code In Space 2011
For us to consider your application for SOCIS 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/Libav mailinglists.
- 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 and Libav mailing list to inform that you are working on it (to avoid duplicated work). The qualification task is considered completed when your patch is accepted to the main Git tree.
Before posting to the FFmpeg/Libav mailing lists, 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 Git. You have to learn these basics on your own before you start, we will not teach them to you during the application process.
1st Tier Project Proposals
1st tier project proposals are project ideas that are reasonably well defined AND have a mentor volunteered.
Libavfilter video work
Libavfilter is the FFmpeg filtering library that started as a 2007 SoC project. It replaced 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 a combination of the following tasks:
- Get the remaining bits of the SoC tree committed (this includes: the rotate, and fps filters)
- Port all the missing filters from MPlayer (do not forget asking the authors if it is ok to release them under the LGPL)
- Framework: implement dynamic-reconfiguration of the filterchain, for supporting dynamic size/format changes
- Port filters from other frameworks (mjpeg-tools, effectv, frei0r, virtualdub, vlc, etc...)
- Write wrappers for more image processing libraries and filtering frameworks (libgimp, libgraphicsmagic, weed), extend the libopencv wrapper for supporting more filters (this may need implemented float image support in libswscale)
- Write more filters (possibly starting from already posted filters which for a reason or another were never committed, e.g. concatenate, fish, 2xsai, eval, posterize, elbg/posterize etc.)
- Implement a compose filter (suggestion for a better name?), for creating a mosaic of the input video streams
- Write a movie sink (e.g. it could be useful for implementing a display functionality, e.g. when the video is dumped to an output device)
- Write a frequency domain filter using the FFT implementation in libavcodec
- Write a Matlab/Octave/SAGE scripting wrapper (assuming it can be done)
- More ideas?
Mentor: Stefano Sabatini (possibly with a backup mentor)
Assembly Testing Framework
FFmpeg/Libav use an extensive amount of assembly to optimize video and audio decoding. For scientific applications and high-assurance systems (e.g. a spacecraft), accuracy and speed are vital. Assembly is difficult to code, and lends itself to mistakes. As FFmpeg/Libav has no framework for testing assembly functions, development of assembly is often hindered by each developer having to create his or her own tests. In addition, functions are not tested for speed. While FATE covers some functions, there are many that simply aren't tested. The samples in FATE do not cover all features in every decoder that has assembly functions (e.g. several 10-bit H.264 predict functions are not used in any FATE sample). FATE also does not test functions in isolation, which impedes assembly development. In addition, FATE might not cover all assembly versions of a function if multiple different levels of optimizations exist (e.g. MMX, MMX2, SSE, SSE2, SSSE3, SSE4, AVX, etc).
- Qualification task: describe how you will implement the system (probably based on x264's checkasm). It should test accuracy, speed, and be extensible.
- Actual task: implement the system. At least all H.264 assembly functions should be covered and the framework should be easily extensible.
- The framework should work across all supported architectures and operating systems.
- The framework should measure exactly how fast an individual function is (e.g. using START/STOP_TIMER).
- The framework should be able to test functions in isolation.
- x264's checkasm can be used as a reference.
Mentor: Daniel Kang (Jumpyshoes on #firstname.lastname@example.org; IRC is generally the best way to contact me).
Add Support for GeoTIFF metadata
FFmpeg/Libav supports decoding of TIFF images, but currently skips GeoTIFF tags which contain geographic location data, which is commonly used for satellite and aerial imagery. This would be a rather small project to export this metadata in textual form and parse the metadata for encoding.
- Qualification task: Add support in the TIFF decoder for the DOUBLE data format, which is used by many GeoTIFF tags.
- Implement simple parsing of GeoTIFF tags, just printing basic info to the console.
- Print the output in a more human-readable format.
- Add support for decoder export of metadata.
- Export each GeoTIFF tag as a metadata entry.
- Document the metadata format for each tag.
- Add support for encoder import of metadata.
- Import/validate GeoTIFF tags from metadata and write to TIFF output.
- reference: http://trac.osgeo.org/geotiff/
Mentor: Justin Ruggles
Libav Usage Example, Tutorial and test suite
- Prepare a serie of example program of increasing complexity
- Simple remuxer
- Simple decoding loop
- Simple encoding loop
- Simple transcoding loop
- Simple producer + consumer scenario with the network protocols
- Optionally it would lead to prepare a leaner equivalent to ffmpeg and ffplay
- Examine when there are inconsistencies with the current API (e.g. unexpected timestamp mangling, packet splitting) and fix the issues.
- Integrate the example programs as components of FATE.
- Document all the previous steps to reduce the learning curve of future contributors.
Mentor: Luca Barbato
2nd Tier Project Proposals
These proposals lack of a mentor.
Finish GSoC 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/Libav since the probability that the projects get finished should be higher. If some of them are deemed too easy, they could be combined.
For the current status of all GSoC projects up to date, see FFmpeg Summer Of Code.
Forward Error Correction
Add FEC to libavutil.
- RTP FEC, standardised as SMPTE 2022M (Possibly the same as Pro-MPEG FEC) - (not 100% sure if this is for all types of RTP or just some)
- MPEG-TS 16 bytes extra - (not sure where this is standardised - in DVB perhaps?)