My name is Robert Rudd and I thought that I'd make an open post discussing my GSoC 2008 project for XBMC.
First of all, here's the wiki entry on it: GSoC - GPU Assisted Video Decoding. It's slightly out of date. I must admit, I wrote it in a slight rush off of a general understanding of video decoding, so it is somewhat incorrect in regards to H.264, (H.264 for example doesn't even use the IDCT). I'll try and update it in the coming days.
Right now I'm currently looking into an implementation using OpenGL and GLSL (OpenGL Shader Language) Shaders. I'm rather optimistic at the potential for this, though there are a few challenges to deal with. The latency between CPU<->GPU transfers will need to be handled. Also, if I want to do only motion compensation, but not intra-prediction, It will cause some problems as there are macroblock types in h.264 that can intra-predict off of P/B macro blocks.
Luckily, there has been some previous work done in this area. Three things worth checking out in respect to this are:
(Sadly, I don't know if everyone will be able to access these papers. I get a subscription through my school)
Real-time high definition H.264 video decode using the Xbox 360 GPU Wrote:http://spiedl.aip.org/getabs/servlet/Get...s&gifs=yes
This paper describes the implementation Microsoft did for the Xbox 360. They made a GPU assisted decoder using HLSL.
Performance evaluation of H.264/AVC decoding and visualization using the GPU Wrote:http://spiedl.aip.org/getabs/servlet/Get...s&gifs=yes
This has a slightly more academic flavor, but it outlines some techniques for Motion Compensation on a generic GPU. the results seem slighlty embellished, but there seem to be some good take aways.
GPU-Accelerated Dirac Video Codec Wrote:http://www.cs.rug.nl/~wladimir/sc-cuda/
Dirac is another advanced codec that has appeared in recent times. It is based on the wavelet transform. The above codec offers GPU acceleration of motion compensation and Forward/Inverse wavelet transforming via CUDA. I believe one of their GSoC projects is to reimplement the decoder using OpenGL/GLSL.
So, that's the story so far. Up to this point i've been trying to give myself a stronger footing in openGL/GLSL, as well as trying to get a good understanding of the FFMPEG codec. I'd appreciate any thoughts people may have on this process, as well as any informative links.