GSoC2008Ideas
From DiracWiki
[edit] Google Summer of Code 2008
Dirac and Schrödinger have been accepted as a mentoring organization for Google Summer of Code 2008.
[edit] Project Ideas
- JIT compiler for liboil. (See http://gstreamer.freedesktop.org/wiki/LiboilJIT)
- Integrate Dirac picture decoding into PNG.
- The video compression algorithms in Dirac can be used to compress still images. Lossy compression efficiency of still images is slightly better than JPEG2000, and significantly better than JPEG. Lossless compression efficientcy is significantly better than PNG, and decompression is faster. This project would involve proposing a "PNG 2" to the community that uses Dirac algorithms for image compression and developing a working demonstration, while retaining all the current benefits of PNG.
- Decoder written in Java
- Cortado is a Java applet that includes an implementation of the Theora codec written in Java. We would like to see Cortado improved to support Dirac as well. This project would involve translating Schrödinger code from C into Java. Bonus points for creating infrastructure that makes it easy to maintain two separate codebases in different languages.
- Implementation of an automated test system
- Creating a great video encoder involves lots of little tweaks to solve individual problems that often impact overall performance in detrimental ways. The Schrödinger project needs an automated system to provide a global view on performance. Some of the tools are already in place, but not connected into a complete system.
- Create a video rating website that allows us to get information from real viewers about relative video quality
- Related to the above project idea, we would like to see a web site created that allows volunteers to compare two video clips, presumably encoded with different encoder parameters, and rate which one is better. Think of it as www.kittenwar.com for video clips. This goal is probably outside the reach of a single GSoC project, but we'd like to see proposals that get us in the right direction, perhaps a web site that only compares still images, or a standalone app (pygst+pygtk, perhaps) that does everything internally.
- Improving Schro encoding algorithms: RDO tweaks, Open GOPs, CBR control dynamics
- Since Schrödinger is a relatively new project, there are lots of potential encoder improvements that are accessable projects for students. Researchers involved with Dirac have a long list of ideas for encoder improvements to draw from. The design of Schrödinger allows a student to pick an interesting idea, implement it, and easily compare encoder performance with and without. A successful project in this area would likely work on several small projects, in the hope that at least one provides a performance gain. This would be a hard project, and we'll need to know from your application that you're up to the task.
- Tune Schrödinger for very-low-bandwith applications (i.e., web video)
- Schro is currently tuned for SD, HD720, and HD1080 at appropriate bitrates for visually lossless applications. The Dirac algorithms are applicable to lower sizes and bitrates, but the appropriate amount of work to make Schro work well in these situations has not been done. This work is also unlikely to reach the top of the TO-DO lists of existing developers very soon. This project would mainly involve 1) identifying problematic encoding parameters and algorithms, 2) identifying existing (but underutilised) algorithms and developing additional algorithms appropriate for very low bandwidth. (This project idea is simply a narrowly focused version of the previous idea. You could also replace "very-low-bandwidth" with several other applications.)
- Tune Schrödinger for screencasting
- Similar to above. Screencasting has very different requirements for encoding than video from a camera. The colorspace is RGB instead of YCbCr, many frames are merely duplicates of the previous frame, and details like text are highly important.
- GPU acceleration for encoder and decoder (OpenGL)
- Schrödinger currently has a mostly operational CUDA backend for decoding, which allows many decode operations to be performed on the video card. This project would involve writing OpenGL Shading Language code to implement the Dirac signal processing in the GPU.
- Implement Dirac support everywhere using Schrodinger (Quicktime, DirectShow, VLC, mplayer, Thoggen etc.)
- Since Schrodinger ships with a set of GStreamer plugins we already have a family of applications using it. But for Dirac to quickly catch on we need support as widely as possible. An interested student could take Schrodinger and use it to provide patches for most major media systems and applications out there.
For more information on any of these ideas talk to David Schleef (ds) or Thomas Davies (tj_davies) on #dirac on irc.freenode.net
[edit] Qualifying Criteria
When we look at applications, we will be looking at two main criteria: first, we want to know that you know what you're getting into. We want to see a list of the steps involved in the proposed project -- the more steps you describe, the better. Be honest about steps you don't understand. We'll provide feedback during the review process. Secondly, we want to know that you have the ability to accomplish the task. Thus, as part of the application, we'd like to see source code that you wrote that does one of the following:
- Write a program that parses a Dirac stream and removes the 3 high-frequency subbands from each of the three components and writes the stripped stream to a new file. This shouldn't be too much more complicated than tools/dump_packets.c.
- (If you've taken a QA course recently, and want to practice) Take one of the minor source files from schroedinger, such as schrobuffer.c, schroqueue.c, schropack.c, etc, and write a bunch of test cases for the API.
- Point us to a significant contribution you've made to any open source project.
- If you want to do the OpenGL project, write a program that uploads a signed 16-bit texture, performs a simple operation on it (say, a Haar transform), and downloads the texture.
- Provide a patch that improves Schrödinger in a useful or non-trivial way.
