GSoC '16: FFmpeg

Why I chose FFmpeg?

I had previously done small fixes for projects in Qt/C++, but my languages of choice were Python and C. I tried to find some interesting work in sympy but gave up after doing a single fix as the projects I liked required math background that I lacked.

After giving up on python projects, I looked at FFmpeg’s Ideas page, and found most of the projects quite intriguing. They were low-level and challenging enough to keep me hooked, and didn’t require a skillset that I couldn’t polish in a month before project applications started.

I have been using FFmpeg since more than three years for transcoding media content, so this was a great oppurtunity to finally work on a project that I loved from the user pov.

The project - TrueHD encoder

Spending some time with the codebase, and going through all the suggested projects, finally I zeroed in on the TrueHD encoder project. TrueHD is a lossless audio codec, just like FLAC. It is primarily used on BluRay discs to compress audio. Rostislav (atomnuker) is my mentor for this project, he has worked on ffmpeg extensively in the past year, making the aac codec (the succesor of mp3) implementation quite robust.

Ramiro Polla had written a nearly functional MLP (Meridian Lossless Packing) encoder during his GSoC. As MLP is the basis of TrueHD, my qualification task to get selected was to update and integrate the mlp encoder into the current ffmpeg codebase.

After getting the MLP encoder to work properly, my task is to do the required changes to make encoding to TrueHD possible.

Current status

The qualification task is finished, except I yet have to write the bitstream verifier for MLP. While working on the mlp encoder I got familiar with the codebase, and realized the immense reverse engineering effort put into writing it and this spiked an interest in me for the field.

I’ve completed the intro to x86 assembly lessons, and practiced reverse engineering some typical crackme style binaries.

Now I’ve started the work on the mlp bitstream verifier, with help from both ramiro and atomnuker.

Upcoming work

After writing the bitstream verifier, I need to get reviewed the mlp encoder + verifier on the mailing list and get it merged. Simultaneously I’ll need to document all differenced between TrueHD and MLP and finally implement them.