Changes between Initial Version and Version 1 of SponsoringPrograms/GSoC/2015


Ignore:
Timestamp:
Feb 10, 2015, 2:59:34 AM (5 years ago)
Author:
michael
Comment:

Copy/Merge? of OPW2014 and GSoC2014

Legend:

Unmodified
Added
Removed
Modified
  • SponsoringPrograms/GSoC/2015

    v1 v1  
     1[[PageOutline(1-3)]]
     2
     3
     4= Introduction =
     5
     6FFmpeg is the universal multimedia toolkit: a complete, cross-platform solution to record, convert, filter and stream audio and video. It is used by a number of media players (including VLC, MPlayer, and Totem through GStreamer), video distribution websites (including !YouTube and Vimeo), Internet browsers (including Google !Chrome/Chromium), and lots
     7of other software projects in the multi-media field and beyond.
     8
     9This is our ideas page for [http://www.google-melange.com/gsoc/homepage/google/gsoc2015 Google Summer of Code 2015]. See the [http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2015/help_page#2._What_is_the_program_timeline GSoC Timeline] for important dates.
     10
     11
     12----
     13
     14= Information for Applicants =
     15
     16== Getting Started ==
     17
     181. '''Get to know FFmpeg.''' If you are an applicant interested in contributing to FFmpeg, it is recommended to start by subscribing to the [http://ffmpeg.org/mailman/listinfo/ffmpeg-devel ffmpeg-devel] mailing-list, visiting our !FreeNode IRC channels (''#ffmpeg-devel'' and ''#ffmpeg'' although you will find most developers on the first one), and exploring both the codebase and the development workflow. Feel free to [#ContactingFFmpeg contact us] if you have any questions.
     19
     202. '''Find a project.''' Listed on this page are mentored and un-mentored projects. Mentored projects are well-defined and mentor(s) have already volunteered. Un-mentored projects are additional ideas you may want to consider, but you will have to contact us to find a mentor. You can also propose your own project, if you can think of one that better fits your interest and skill level. If a project description is unclear or you have any questions, please get in touch with its mentor and/or send an email to the program admins at [opw@ffmpeg.org].
     21
     223. '''Contact us.''' If you decide on a project, get in touch with the community and let us know. If you want to work on a qualification task, let the respective mentor know so we can avoid duplicated efforts.
     23
     244. '''Apply.''' Interns should apply by March 27 at the very latest. The "work" period begins December 9 and ends the same day in March. Take a look at [http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2015/help_page#2._What_is_the_program_timeline GSoC timeline] for additional information.
     25
     26{{{
     27#!div style="border: 1pt dotted; margin: 1em; background-color: #fffff9;"
     28'''Note''': A friendly reminder that while the application to GSoC is important for you and GSoC, FFmpeg mentors will not base their decision solely on the GSoC application. We will judge the applicant based on their abilities in coding, learning the tools, communication skills etc. So please do not worry about your application being perfect for us. Although it is very important to follow GSoC's application rules so they can pay you.
     29}}}
     30
     31== Qualification Tasks ==
     32
     33In order to get accepted you normally have to complete a small qualification task. FFmpeg development can be quite challenging and the qualification task helps us figure out whether you are motivated enough and have the potential to deliver successfully.
     34
     35The qualification tasks are usually shown in the project description. Contact the respective mentor(s) for assistance on getting a related qualification task or if you want to propose your own. You can also browse the [https://trac.ffmpeg.org FFmpeg Bug Tracker] for qualification task ideas. In general qualification tasks should include submitting a patch to the ffmpeg-devel mailing list which passes review and is accepted into the FFmpeg codebase. It will be common for such patches to need multiple iterations of submissions and reviews, so dont wait too long with the first submission!
     36
     37{{{
     38#!div style="border: 1pt dotted; margin: 1em; background-color: #fffff9;"
     39'''Note:''' The running status of this term's qualification tasks is tracked [[2014-12-Qualis|here]].
     40}}}
     41
     42== Contacting FFmpeg ==
     43
     44If you have questions or comments feel free to contact us via our mailing list, IRC channel, or e-mail one of the FFmpeg GSoC admins:
     45
     46* '''Mailing-list:''' [http://ffmpeg.org/mailman/listinfo/ffmpeg-devel ffmpeg-devel]
     47* '''IRC:''' ''#ffmpeg-devel'' on [http://freenode.net/ Freenode]
     48* '''FFmpeg GSoC Admin:''' Michael Niedermayer (''michaelni'' in #ffmpeg-devel on Freenode IRC, michaelni@gmx.at)
     49* '''FFmpeg GSoC Backup Admins:''' Stefano Sabatini (''saste'' in #ffmpeg-devel on Freenode IRC, stefasab AT gmail DOT com. ), Reynaldo Verdejo (''reynaldo'' in #ffmpeg-devel on Freenode IRC, R Verdejo on g mail)
     50
     51
     52You may also contact a mentor directly if you have questions specifically related to one of the projects listed on this page.
     53
     54----
     55
     56= Mentored Projects =
     57
     58This section lists well-defined projects that have one or more available mentors. If you are new to FFmpeg, and have relatively little experience with multimedia, you should favor a mentored project rather than propose your own. Contact the respective mentor(s) to get more information about the project and the requested qualification task.
     59
     60
     61== Animated Portable Network Graphics (APNG) ==
     62
     63[[Image(wiki:SponsoringPrograms/GSoC/2014:animated_PNG_example_bouncing_beach_ball.png, right, nolink)]]
     64
     65
     66'''Description:''' Add support for Animated PNGs. The little bouncing ball animation shown to the right is such an APNG file.
     67
     68'''Specification:''' https://wiki.mozilla.org/APNG_Specification
     69
     70'''Expected results:'''
     71
     72    - APNG demuxer
     73        - implement robust probing:
     74            - PNG images are not misdetected as APNG animations
     75            - APNG animations are not misdetected as PNG images
     76        - splits stream into sensible packets (so they can be easily reused in APNG muxer)
     77        - survives fuzzing (zzuf)
     78        - add FATE coverage, coverage should be at least 70%
     79        - test code under valgrind so no invalid reads/writes happen
     80
     81    - APNG decoder
     82        - use existing PNG decoder code (write decoder in same file)
     83        - implement parsing of all APNG chunks (acTL, fcTL, fdAT)
     84        - error handling
     85        - survives fuzzing (zzuf)
     86        - add test for FATE, coverage should be at least 75%
     87        - CRC checksum validation
     88        - test code under valgrind so no invalid reads/writes happen
     89
     90    - APNG muxer & APNG encoder
     91        - use existing PNG encoder code (write encoder in same file)
     92        - write compliant files, make sure they play correctly in major web browsers that support APNG
     93        - add test for FATE
     94
     95'''Prerequisites:''' C coding skills, basic familiarity with git.
     96
     97'''Qualification Task:''' Implement format autodetection and basic demuxer.
     98
     99'''Mentor:''' Paul B Mahol (''durandal_1707'' in #ffmpeg-devel on Freenode IRC, onemda@gmail.com)
     100
     101'''Backup mentor:''' TBA
     102
     103
     104== FFv1 P frame support ==
     105
     106'''Description:''' FFv1 is one of the most efficient intra-only lossless video codecs. Your work will be to add support for P frames with motion compensation and motion estimation support (the existing motion estimation code in libavcodec can be reused here). Then fine-tune it until the best compression rate is achieved. This will make FFv1 competitive with existing I+P frame lossless codecs like lossless H.264.
     107
     108'''Expected results:''' State of the art P frame support in the FFv1 encoder and decoder implementation.
     109
     110'''Prerequisites:''' C coding skills, basic familiarity with git, solid understanding of video coding especially with motion compensation.
     111
     112'''Qualification Task:''' Implement support for simple P frames without motion compensation in FFv1. That is so that each frame stores the difference to the previous frame.
     113
     114'''Mentor:''' Michael Niedermayer (''michaelni'' in #ffmpeg-devel on Freenode IRC, michaelni@gmx.at)
     115
     116'''Backup mentor:''' Derek Buitenhuis (''Daemon404'' in #ffmpeg-devel on Freenode IRC, derek.buitenhuis ut gmail)
     117
     118== Subtitles ==
     119
     120[[Image(wiki:SponsoringPrograms/GSoC/2014:subtitles_support.jpg, 300, right, nolink)]]
     121
     122'''Description:''' FFmpeg has been working on improving its subtitles support recently, notably by adding the support for various text subtitles and various hardsubbing (burning the subtitles onto the video) facilities. While the theme may sound relatively simple compared to audio/video signal processing, the project carries an historical burden not easy to deal with, and introduces various issues very specific to its sparse form.
     123
     124'''Expected results:'''
     125    - Add support for new subtitles formats. Example: a !VobSub muxer, a demuxer and decoder for EBU-TT, or even Kate subtitles (Xiph).
     126    - Improve text subtitles decoders. Typically, this can be supporting advanced markup features in SAMI or WebVTT.
     127    - Proper integration of subtitles into libavfilter. This is the ultimate goal, as it will notably allow a complete subtitles rendering for applications such as ffplay.
     128
     129'''Prerequisites:''' C coding skills, basic familiarity with git. Some background in fansubbing area (notably ASS experience) would be a bonus but is not strictly required.
     130
     131'''Qualification Task:''' write one subtitles demuxer and decoder (for example support for Spruce subtitles format). This is in order to make sure the subtitles chain is understood.
     132
     133'''Mentor:''' Clement Boesch (''ubitux'' in #ffmpeg-devel on Freenode IRC)
     134
     135'''Backup Mentor:''' TBA, possibly Nicolas George (''Cigaes'' in #ffmpeg-devel on Freenode IRC)
     136
     137
     138== Postproc optimizations ==
     139
     140[[Image(wiki:SponsoringPrograms/GSoC/2014:PostProc.jpg, 240, right, nolink)]]
     141
     142
     143'''Description:''' FFmpeg contains libpostproc, which is used to postprocess 8x8 DCT-MC based video and images (jpeg, mpeg-1/2/4, H.263 among others). Postprocessing removes blocking (and other) artifacts from low bitrate / low quality images and videos. The code though has been written a long time ago and its SIMD optimizations need to be updated to what modern CPUs support (AVX2 and SSE2+).
     144
     145'''Expected results:'''
     146    - Convert all gcc inline asm in libpostproc to YASM.
     147    - Restructure the code so that it works with block sizes compatible with modern SIMD.
     148    - Add Integer SSE2 and AVX2 optimizations for each existing MMX/MMX2/3dnow optimization in libpostproc.
     149
     150'''Prerequisites:''' C coding skills, good x86 assembly coding skills, basic familiarity with git.
     151
     152'''Qualification Task:''' convert 1 or 2 MMX2 functions to SSE2 and AVX2.
     153
     154'''Mentor:''' Michael Niedermayer (''michaelni'' in #ffmpeg-devel on Freenode IRC, michaelni@gmx.at)
     155
     156'''Backup Mentor:''' TBA
     157
     158
     159== MPEG-4 Audio Lossless Coding (ALS) encoder ==
     160
     161[[Image(wiki:SponsoringPrograms/GSoC/2014:showwaves_green.png, 240, right, nolink)]]
     162
     163'''Description:'''
     164A MPEG-4 ALS decoder was implemented several years ago but an encoder is still missing in the official codebase. A rudimentary encoder has already been written and is available on [https://github.com/justinruggles/FFmpeg-alsenc.git github]. For this project, that encoder is first to be updated to fit into the current codebase of FFmpeg and to be tested for conformance using the [http://www.nue.tu-berlin.de/menue/forschung/projekte/beendete_projekte/mpeg-4_audio_lossless_coding_als/parameter/en/#230252 reference codec and specifications]. Second, the encoder is to be brought through the usual reviewing process to hit the codebase at the end of the project.
     165
     166'''Expected results:'''
     167
     168    - Update the existing encoder to fit into the current codebase.
     169    - Ensure conformance of the encoder by verifying using the reference codec and generate a test case for [http://ffmpeg.org/fate.html FATE].
     170    - Ensure the FFmpeg decoder processes all generated files without warnings.
     171    - Enhance the rudimentary feature set of the encoder.
     172
     173'''Prerequisites:''' C coding skills, basic familiarity with git. A certain interest in audio coding and/or knowledge about the FFmpeg codebase could be beneficial.
     174
     175'''Qualification Task:''' Add floating point support to MPEG-4 ALS decoder
     176
     177'''Mentor:''' Paul B Mahol (''durandal_1707'' in #ffmpeg-devel on Freenode IRC, onemda@gmail.com)
     178
     179'''Backup Mentor:''' Thilo Borgmann (thilo DOT borgmann AT mail DOT de), Stefano Sabatini (''saste'' in #ffmpeg-devel on Freenode IRC, stefasab AT gmail DOT com)
     180
     181'''Potential Applicants:''' Juliet Fru
     182
     183== Hardware Acceleration API Software / Tracing Implementation ==
     184
     185[[Image(wiki:SponsoringPrograms/GSoC/2014:hwaccel.jpg, right, nolink)]]
     186
     187'''Description:''' Our support for hardware accelerated decoding basically remains untested. This is in part due to FFmpeg only implementing part of the required steps, and in part since it requires specific operating systems and hardware.
     188
     189The idea would be to start with a simple stub implementation of an API like e.g. VDPAU that provides only the most core functions. These would then serialize out the function calls and data to allow easy comparison and regression testing. Improvements to this approach are adding basic input validation and replay capability to allow testing regression data against real hardware. This would be similar to what [https://github.com/apitrace/apitrace apitrace] does for OpenGL.
     190
     191A further step would be to actually add support for decoding in software, so that full testing including visual inspection is possible without the need for special hardware.
     192
     193'''Prerequisites:''' C coding skills, basic familiarity with git
     194
     195'''Qualification Task:''' Anything related to the hardware acceleration code, though producing first ideas and code pieces for this task would also be reasonable
     196
     197'''Mentor:''' Reimar Doeffinger (''reimar'' in #ffmpeg-devel on Freenode IRC, but since I'm rarely there better email me first: Reimar.Doeffinger [at] gmx.de)
     198
     199'''Backup Mentor:''' TBA
     200
     201
     202== Missing AAC decoder features ==
     203
     204'''Description:''' FFmpeg contains an AAC decoder which is missing some features. The task is to rebase existing implementations to the current FFmpeg code-base, test them and fix the remaining bugs.
     205
     206    - AAC BSAC decoder: This has already been started, but the existing decoder still fails on many samples
     207    - AAC SSR decoder
     208    - AAC 960/120 MDCT window
     209
     210'''Qualification Task:''' See the [https://trac.ffmpeg.org/query?status=!closed&keywords=~aac FFmpeg bug tracker for AAC issues], fixing one of them or rebasing the existing incomplete BSAC decoder for current git head and fixing one or more existing bugs are possible qualification tasks.
     211
     212'''Prerequisites:''' C coding skills, basic familiarity with git, knowledge about transform based audio coding would be useful.
     213
     214'''Mentor:''' Baptiste Coudurier (''bcoudurier'' in #ffmpeg-devel on Freenode IRC),
     215
     216'''Backup Mentor:''' TBA
     217
     218
     219== AAC Encoder Improvements ==
     220
     221[[Image(wiki:SponsoringPrograms/GSoC/2014:showspectrum.jpg, right, nolink)]]
     222
     223'''Description:''' Currently, FFmpeg contains an experimental native AAC encoder (native meaning that it doesn't depend on external libraries), but it is lacking in terms of extension support, since it currently only implements AAC-LC (the low-complexity profile). Extending feature support of FFmpeg's native encoder is needed to make it competitive with other encoders.
     224
     225    - AAC native encoder missing extensions
     226      - Implement [http://www.birds-eye.net/definition/acronym/?id=1163388183 AAC PNS]
     227      - Implement [http://wiki.hydrogenaudio.org/index.php?title=Joint_stereo#Intensity_Stereo intensity stereo]
     228      - Implement AAC LTP (long term prediction)
     229      - Implement [http://en.wikipedia.org/wiki/Spectral_band_replication AAC SBR] (spectral band replication)
     230
     231'''Prerequisites:''' C coding skills, basic familiarity with git, knowledge about transform based audio coding would be useful.
     232
     233'''Mentor:''' Claudio Freire (''klaussfreire'' in g mail)
     234
     235'''Backup Mentor:''' TBA
     236
     237
     238== DTS / DCA Improvements ==
     239
     240'''Description:''' FFmpeg contains a DTS decoder, but its missing several features
     241
     242    - DTS-HD decoder improvements:
     243        - Add support for X96 extension (96khz)
     244        - Add support for pure DTS-HD streams that do not contain a DTS core
     245        - Add support for multiple assets
     246        - Add support for LBR extension
     247
     248'''Prerequisites:''' C coding skills, basic familiarity with git. Good understanding of DTS and related audio coding is a strict requirement.
     249
     250'''Qualification Task:'''  A possible qualification task is to implement ticket [https://trac.ffmpeg.org/ticket/1920 #1920]
     251
     252'''Mentor:''' Benjamin Larsson (''merbanan/merbzt'' in #ffmpeg-devel on Freenode IRC)
     253
     254'''Backup Mentor:''' TBA
     255
     256
     257== MXF Demuxer Improvements ==
     258
     259'''Description:''' The MXF demuxer needs a proper, compact way to map !EssenceContainer ULs to !WrappingKind. See [https://trac.ffmpeg.org/ticket/2776 ticket #2776] in our bug tracker, and [https://trac.ffmpeg.org/ticket/2776 ticket #1916] contains additional relevant information.
     260
     261Essence in MXF is typically stored in one of two ways: as an audio/video interleave or with each stream in one huge chunk (such as 1 GiB audio followed by 10 GiB video). Previous ways of telling these apart have been technically wrong, but worked and we lack samples demonstrating the contrary.
     262
     263'''Expected results:''' The sample in ticket [https://trac.ffmpeg.org/ticket/2776 ticket #2776] should demux correctly. Add a test case in [http://ffmpeg.org/fate.html FATE]. The solution should grow libavformat by no more than 32 KiB.
     264
     265'''Prerequisites:''' C coding skills, basic familiarity with git.
     266
     267'''Qualification Task:''' Investigate if there may be a compact way of representing the UL -> !WrappingKind mapping specified in the [http://www.smpte-ra.org/mdd/RP224v10-publication-20081215.xls official RP224 Excel document]. The tables takes up about half a megabyte verbatim which is unacceptable in a library as large as libavformat.
     268
     269'''Mentor:''' Tomas Haerdin (''thardin'' in #ffmpeg-devel on Freenode IRC, tomas.hardin á codemill.se)
     270
     271'''Backup Mentor:''' TBA
     272
     273
     274== VDPAU filter ==
     275
     276'''Description:''' VDPAU is not only about hardware-accelerated decoding but also allows some postprocessing - most notably deinterlacing. Other features of the API include scaling, noise removal, and a sharpening filter.
     277
     278'''Expected results:''' Implement a filter that allows usage of the postprocessing features as defined by the VDPAU API. This should particularly include the deinterlacer, and ideally all features should be usable to allow comparing the quality and performance of different hardware and hardware vs. software.
     279
     280'''Prerequisites:''' C coding skills, and you will need hardware that allows VDPAU post-processing.
     281
     282'''Qualification Task:''' Show that you are familiar with the FFmpeg filter system, either by porting one or more of the remaining postprocessing filters from the MPlayer compatibility layer (files `vf_*pp*.c` in `libavfilter/libmpcodecs`, see for comparison commits [http://git.videolan.org/?p=ffmpeg.git;a=commitdiff;h=a2c547ff a2c547ff] and [http://git.videolan.org/?p=ffmpeg.git;a=commitdiff;h=852f74bd 852f74bd]) to a native filter, or by implementing a very simple inverse telecine filter under LGPL that allows reversal of the effect of the telecine filter.
     283
     284'''Mentor:''' Carl Eugen Hoyos (''cehoyos'' in #ffmpeg-devel on Freenode IRC, ce AT hoyos.ws)
     285
     286'''Backup Mentor:''' Reimar Doeffinger (''reimar'' in #ffmpeg-devel on Freenode IRC, Reimar.Doeffinger [at] gmx.de)
     287
     288
     289== Basic servers for network protocols ==
     290
     291'''Description:''' libavformat contains clients for various network protocols used in multimedia streaming: HTTP, RTMP, MMS, RTSP. Your work will be to implement the server side for one or several of these protocols.
     292
     293The libavformat framework is not designed to build general-purpose server applications with several clients, and nothing similar to the configuration features of real servers like Apache is expected, but libavformat should be able to stream a single predefined bytestream to/from a single client.
     294
     295Note: server support is already implemented for the receiving side of RTSP.
     296
     297'''Expected results:''' basic servers for network protocols capable of interoperating with third-party clients.
     298
     299'''Prerequisites:''' C coding skills, basic familiarity with git, network programming.
     300
     301'''Qualification Task:''' proof-of-concept server for one of the protocol, capable of interacting with a particular client in controlled circumstances; or anything network-related, e.g. fixing a ticket in our [https://trac.ffmpeg.org/ bug tracker].
     302
     303'''Mentor:''' Nicolas George (''Cigaes'' in #ffmpeg-devel on Freenode IRC)
     304
     305'''Backup mentor:''' Reynaldo Verdejo (''reynaldo'' in #ffmpeg-devel on Freenode IRC, R Verdejo on g mail)
     306
     307
     308== TrueHD encoder ==
     309
     310'''Description:''' FFmpeg currently does not support encoding to TrueHD, one of the lossless audio formats used on Bluray discs. A nearly functional Meridian Lossless Packing (MLP) encoder has already been written and is available on [https://github.com/ramiropolla/soc/tree/master/mlp github]. The MLP codec is the basis for TrueHD. For this project, that encoder is first to be updated to fit into the current codebase of FFmpeg and to be tested for conformance against Surcode's MLP encoder. Second, the encoder is to be updated to implement TrueHD functionality, allowing it to losslessly encode audio to play it on hardware devices capable of TrueHD decoding. Finally, the encoder is to be brought through the usual reviewing process to hit the codebase at the end of the project.
     311
     312'''Expected results:''' a TrueHD encoder that allows to losslessly encode audio to play it on hardware devices capable of TrueHD decoding with a competetive compression rate
     313
     314'''Prerequisites:''' C coding skills, basic familiarity with git
     315
     316'''Qualification Task:''' Update the MLP encoder so that it produces a valid bitstream that can be decoded by FFmpeg without errors to silence. Find out how to validate the generated bitstream besides using FFmpeg.
     317
     318'''Mentor:''' Ramiro Polla (''ramiro'' in #ffmpeg-devel on Freenode IRC, ramiro DOT polla AT gmail DOT com)
     319
     320
     321== Setting up FATE automated testing system on various platforms ==
     322
     323'''Description:''' Set up virtalboxes with various OSs inside them as well as various qemu based non x86 clients, which run our FATE testset and submit results to fate.ffmpeg.org
     324
     325'''Docs:''' https://ffmpeg.org/fate.html
     326
     327'''Expected results:'''
     328
     329    - several virtualbox images with working fate clients inside them for platforms not yet listed on http://fate.ffmpeg.org
     330    - several non x86 qemu images with working fate clients inside them for platforms not yet listed on http://fate.ffmpeg.org
     331
     332'''Prerequisites:''' POSIX and command line knowledge sufficient to install and setup various odd and obscure operating systems, building and using cross compilers
     333
     334'''Qualification Task:''' create one or 2 working images with fate clients inside them for platforms not yet listed on http://fate.ffmpeg.org
     335
     336'''Mentor:''' Ramiro Polla (''ramiro'' in #ffmpeg-devel on Freenode IRC, ramiro DOT polla AT gmail DOT com)
     337
     338'''Backup mentor:''' Michael Niedermayer (''michaelni'' in #ffmpeg-devel on Freenode IRC, michaelni@gmx.at)
     339
     340----
     341
     342== Misc Libavfilter extension ==
     343
     344[[Image(wiki:SponsoringPrograms/GSoC/2014:Lavfi-gsoc-filter-vintage-illustration.jpg, right, nolink)]]
     345
     346'''Description:''' Libavfilter is the FFmpeg filtering library. It currently supports audio and video filtering and generation support. This work may focus on porting, fixing, extending, or writing new audio and video filters from scratch.
     347
     348Candidate filters for porting may be the remaining MPlayer filters currently supported through the mp wrapper, libaf MPlayer filters, and filters from other frameworks (e.g. mjpegtools, transcode, avisynth, virtualdub, etc.). In case of mp ports, the applicant should verify that the new filter produces the same output and is not slower.
     349
     350Some ideas for more filters:
     351    - a frequency filtering domain filter relying on the FFT utils in libavcodec. For example something like this: http://david.li/filtering
     352    - a filter computing image statistics: for each frame the filter should compute and expose as metadata information. For example such a filter could compute the moments (average, deviation, third and fourth moment)
     353    - a generic convolution filter (this may require a syntax for specifying a matrix, this could be the qualification task)
     354    - a filter to extract a palette of an image, or to replace the palette of an image with a custom one. The replacement should be done replacing each color with the most similar color. Preliminary work would consist into defining a format to specify a palette.
     355    - extend the showwaves filter to make it possible to set the color of each line. Ideally it should also be possible to map each channel to a different color.
     356    - a controller filter which allows to send commands to other filters (e.g. to adjust volume, contrast, etc.), e.g. like the sendcmd filter but through an interactive GUI
     357    - a lua scripting filter, which allows to implement filtering custom logic in lua
     358
     359For more ideas check [https://trac.ffmpeg.org/query?status=new&status=open&status=reopened&component=avfilter&col=id&col=summary&col=status&col=type&col=priority&col=component&col=version&order=priority trac libavfilter tickets].
     360
     361See also the dedicated page: [[SponsoringPrograms/OPW/2014-12/MiscLibavfilterExtension]].
     362
     363'''Expected results:''' Write or port audio and video filters and possibly fix/extend libavfilter API and design when required.
     364
     365'''Prerequisites:''' C coding skills, basic familiarity with git. Some background on DSP and image/sound processing techniques would be a bonus but is not strictly required.
     366
     367'''Qualification Task:''' write or port one or more filters
     368
     369'''Mentor:''' Stefano Sabatini (''saste'' in #ffmpeg-devel on Freenode IRC)
     370
     371'''Backup mentor:''' Clement Boesch (''ubitux'' in #ffmpeg-devel on Freenode IRC)
     372
     373
     374= Unmentored Projects =
     375
     376This is a list of projects that applicants are encouraged to consider if a mentored project is unavailable or not within the applicants skill or interests. The applicant will have to find a mentor for the project. An appliant can also [#YourOwnProjectIdea propose their own project].
     377
     378== VC-1 interlaced ==
     379
     380'''Description:''' The FFmpeg VC-1 decoder has improved over the years, but many samples are still not decoded bit-exact and real-world interlaced streams typically show artefacts. This task is difficult.
     381
     382'''Expected results:'''
     383* Implement missing parts of interlacing
     384* Make more reference samples bit-exact
     385
     386'''Prerequisites:''' C coding skills, basic familiarity with git
     387
     388'''Qualification Task:''' Find a bug in the current decoder implementation and fix it.
     389
     390
     391== JPEG 2000 ==
     392
     393'''Description:''' FFmpeg contains an experimental native JPEG 2000 encoder and decoder. Both are missing many features, see also the FFmpeg bug tracker for some unsupported samples. This task is difficult
     394
     395'''Expected results:''' A jpeg 2000 decoder which can decode most lossy samples without artifacts and lossless samples exactly.
     396
     397'''Qualification Task:''' Fix an issue (for example from the bug tracker) to show that you are capable of improving the codec implementation.
     398
     399'''Prerequisites:''' C coding skills, basic familiarity with git, good knowledge of Jpeg-2000
     400
     401
     402== Hardware Accelerated Video Encoding with VA-API ==
     403
     404'''Description:''' FFmpeg already supports hardware accelerated decoding for multiple codecs but still lacks support for hardware accelerated encoding. The aim of the project is to add support for encoding with VA-API specifically, while keeping a generic enough approach in mind so that other hardware accelerators (TI-DSP, CUDA?) could be supported as well. This means that new hwaccel hooks are needed and two operational modes are possible: either (i) driver or hardware pack headers themselves, or (ii) lattitude is left to perform this task at the FFmpeg library level.
     405
     406'''Expected results:''' Allow MPEG-2 and H.264 encoding with VA-API, while supporting variable bitrate (VBR) by default, and allowing alternate methods like constant bitrate (CBR) or constant QP (CQP) where appropriate or requested.
     407
     408   - MPEG-2 encoding:
     409       - Add basic encoding with I/P frames (handle the `-g` option)
     410       - Add support for B frames (handle the `-bf` option)
     411       - Add support for constant bitrate (CBR, i.e. maxrate == bitrate and bufsize set)
     412       - (Optionally) add support for interlaced contents
     413   - H.264 encoding:
     414       - Add basic encoding with I/P frames (handle the `-g` option)
     415       - Add support for B frames (handle the `-bf` option)
     416       - Add support for constant bitrate (CBR, i.e. maxrate == bitrate and bufsize set)
     417       - Add support for constant QP (CQP, i.e. handle the -cqp option)
     418       - Add support for more than one reference frame, while providing/using API to query the hardware capabilities
     419       - Work on HRD conformance. May require to write an independent tool to assess that
     420       - (Optionally) add configurability of the motion estimatation method to use. Define new types for HW accelerated encoding with at least two levels/hints for the accelerator.
     421   - FFmpeg applications:
     422       - Define common hwaccel interface for encoding
     423       - Add initial support for hardware accelerated encoding to the ffmpeg application
     424
     425'''Prerequisites:''' C coding skills, basic familiarity with git, hardware supporting VA-API for encoding.
     426
     427'''Qualification Task''': Anything related to the Hardware Acceleration (hwaccel) API, or to its related users. e.g. port VDPAU acceleration to use hwaccel, add JPEG decoding support with VA-API, etc.
     428
     429'''Mentor:''' TBA
     430
     431'''Backup Mentor:''' TBA, possibly Tushar Gohad
     432
     433
     434== H.264 Multiview Video Coding (MVC) ==
     435
     436[[Image(wiki:SponsoringPrograms/GSoC/2014:h264_mvc.jpg, right, nolink)]]
     437
     438'''Description:''' MVC samples exist and the codec is used on Blu-ray media, but FFmpeg is missing a decoder. Since this project also consists of some changes in the current architecture, it is especially important that this project is discussed on the ffmpeg-devel mailing list.
     439
     440'''Expected results:''' Create MVC decoder and add a test for [http://ffmpeg.org/fate.html FATE].
     441
     442'''Prerequisites:''' C coding skills, familiarity with git/source code control systems.
     443
     444'''Qualification Task:''' Perform work that demonstrates understanding of MVC and that is a subpart of the whole MVC implementation.
     445
     446'''Mentor:''' TBA
     447
     448'''Backup mentor:''' TBA
     449
     450== Browsing content on the server ==
     451
     452'''Description:''' libavformat supports network protocols like FTP, SFTP, HTTP.
     453
     454The libavformat framework is able to read, seek and write to files located on server as they were local files. The libavformat is not able to list files nor directories located on remote servers.
     455Your work will be to implement browsing files on remote servers.
     456
     457Note: the libavformat will be prepared with suitable API and only protocol related code will need to be implemented.
     458
     459'''Expected results:''' Application that uses libavformat will be provided with an API to list files and directories (with their attributes like size, creation date, etc) located on remote servers. Implementation for FTP, HTTP and SFTP is required. Optionally file protocol can be also implemented.
     460
     461'''Prerequisites:''' C coding skills, basic familiarity with git, basic knowledge about FTP and HTTP protocols and libssh library.
     462
     463'''Qualification Task:''' Implement browsing routine for one of mentioned protocols (implementation may cover file/directory names only, work with specific servers and under defined conditions).
     464
     465'''Mentor:''' TBA
     466
     467'''Backup mentor:''' TBA, possibly Lukasz Marek (lukaszmluki in #ffmpeg-devel on Freenode IRC, lukasz.m.luki on g mail)
     468
     469
     470== Your Own Project Idea ==
     471
     472An applicant can propose a project. Ideas can also be found by browsing bugs and feature requests on our bug tracker. The work should last the majority of the GSoC internship duration, the task must be approved by the developers, and a mentor must be assigned.
     473
     474Applicants can discuss an idea in the [https://ffmpeg.org/mailman/listinfo/ffmpeg-devel/ ffmpeg-devel] mailing-list, the #ffmpeg-devel IRC channel, or contact the FFmpeg GSoC admins for more information.