GSoC/GCI Archive
Google Code-in 2010 VideoLAN

x264: Port any video filter to libavfilter

completed by: Nagato Yuki

mentors: Jason Garrett-Glaser

x264, a project under the Videolan organizational umbrella, is one of the most popular video compression libraries, used worldwide for applications such as web video, television broadcast, and Blu-ray creation. It outclasses practically all commercial implementations both speed and compression-wise.

ffmpeg, a project which we make great use of, recently got a filtering system that allows users to process video before encoding -- resizing, cropping, and so forth. We'd like to add fancier filters by porting them from other projects. These could include denoising, sharpening, blurring, and so forth.  Some other projects to look at include ffmpeg's libavfilter, mplayer's libmpcodecs, Avisynth, Gstreamer, and so forth.  "Filters" that act as interfaces to these other libraries might also be useful!

You can pick any filter you want and port it -- just make sure to ask first to make sure that it would make sense in the context of libavfilter.

Do note all filters must reach the code quality standards offfmpeg , so in some cases you may need to do more than just copy-pasting during a port: reformatting code, etc.

Some examples of useful filters and the projects they're from:

HQDN3D: simple high-speed spatiotemporal denoising filter (mplayer, Avisynth)

Yadif: high-quality deinterlacing filter (mplayer, Avisynth)

Gradfun: simple high-speed debanding filter (mplayer, Avisynth)

SPP: high-quality deblocking filter (mplayer, FFDshow)

fft3dfilter: high-quality spatiotemporal denoising filter (Avisynth)

IMPORTANT: if you want to work on an x264 task, it is required that you come to #x264dev on irc://irc.freenode.net.  We will help answer your questions, guide you through whatever issues you have, and do code reviews.  In order to successfully complete an x264 task, the result must be of sufficiently high quality to be committed to the official x264 repository.   To ensure this, we will review your code and give you comments on how to improve it.  A task is only completed when these steps are done.

In short: do not take an x264 task, work on it without telling anyone, and then dump the code on us.  You'll waste your time, our time, and won't get credit for the task.