Archive for the ‘FFmpeg’ Category

Dirac updates

Sunday, December 23rd, 2007

BBC research has been updating the Dirac specification again. My work wasn’t updated after August, so I had to go over the changes in the specification. After some frustration and hard work, it’s updated again. The only thing left is adding the new interpolation filter. This should result in a performance gain, because this filter is simpler and can be done using shifts, instead of multiplications :-)

Now I will focus on some cleanups and optimizations. Now I have some time for this because of Christmas holidays (2 weeks). I have several in mind and I will post the performance gain to my blog after the optimizations are committed.

Reading a bit…

Sunday, November 18th, 2007

Last week I started working on my graduation project. It’s a full-time job and at the moment my top priority. During the weekend I try not to spend too much time using the computer. For example, next weekend I will go to a concert of Sonata Arctica :-). Last weekend I have been keeping up with the emails on grub-devel so GRUB 2 will remain to be maintained.

Besides that, I am reading Operating Systems Design and Implementation by Andrew Tanenbaum. Although I know quite a lot on this subject already, I am reading it to refresh my memory on this subject and to prepare myself to read more papers on microkernel design. I have the silly idea to waste my precious time on writing my own microkernel some day. More importantly, I like reading and I do not want to spent too much time working on the computer. I am considering buying the book Modern Operating Systems, also by Andrew Tanenbaum. Can someone tell me if this is a good book and if it doesn’t have too much overlap with the book I am currently reading?

So I do not have much time at the moment. Still, I intend to finish the ATA driver and networking support for GRUB 2 somewhere in 2007. Also, I want to get the Dirac code for FFmpeg in shape so it can be committed soon. I am not sure if doing all this in 2007 is realistic though…

Motion Vector packing

Monday, September 10th, 2007

To implement motion vector packing, I just generate semi-random motion vectors and write these to the bitstream. In that case the rest of the encoding process has to adapt to these (incorrect) vectors. Most importantly: this will result in a bigger residue, thus in a bigger file. But this way this part of the encoder can be tested.

The motion vector packing now works! I have also implemented calculating the residue and fixed many bugs in the other parts of the encoding process. Now the encoder writes intra+inter frames with the semi-random motion vectors for a single reference frame.

So what needs to be done now is searching for (optimal) motion vectors. Perhaps I can use the algorithm from the Snow codec for this, otherwise I will have to implement this myself. I also need support for two reference frames. Actually the support is there, it just has to be enabled properly :-). In order to produce smaller files I need to add quantization.

Despite what’s missing, I think I can say I quite succeeded with writing the Dirac codec during Summer of Code (about 2 months, with a break of one week because of exams). When Summer of Code started, one of the Schrodinger developers called me Biggest Optimist in the Universe and Beyond 2007. Although the encoder is not in a state that it can efficiently code all videos yet, the biggest part has been implemented already. But more importantly, my decoder can play back videos at a decent speed. So I got the “Biggest Optimist in the Universe and Beyond 2007 Award”, now I am waiting for the certificate, medal or whatever comes with the title ;-).

Mike and Michael from the FFmpeg project both wrote a blog entry to wrap up how they look at the last Summer of Code, my work on the Dirac codec is part of this. Summer of Code is finished now so I will start using the FFmpeg category for my future work on Dirac. Don’t worry, I will keep working on Dirac!