x264: Write any assembly function (x86, ARM, or PPC)
completed by: George Stephanos
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.
x264 has boatloads of C functions with assembly versions that haven't been written yet. Assembly functions are really great for Google Code-In because they can be written without any knowledge of the overall program. Most functions are only a few lines long in C, making an assembly implementation relatively easy. In many cases, some (but not all) versions of a function are already written in assembly, providing good examples for future versions. In terms of architectures, we support x86 (MMX/SSE), PowerPC (Altivec), and ARM (NEON).
If you pick this task, it's highly recommended that you have at least some experience in assembly coding already. Writing a single function is not too difficult if you already have some experience, but if you've never done it before, it will take significantly more time. Of course, if you're interested in learning, we'd be happy to teach you--Jason has taught many many students before. It usually takes a couple hours to learn the basics.
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.