This, to be honest, is a pain in the arse. So far i've got XBMC working pretty much perfectly decoding and rendering it's output to an X11 surface (the same method as used in the mplayer patches, and MythTV), however this surface now needs to be transferred to an OpenGL texture ready for it to be rendered by XBMC. I've got this working, but the current implementation i've used copies the Pixmap to the CPU, creates a GL texture out of it, and then dispatches it back to the GPU ready for displaying. Not a problem at SD, but with the 'killa' sample - the infamous scene from Planet Earth - which is a short piece of high bandwidth h264 @ 1920x1080 things here are a little more problematic.
My AMD 5000+ using FFmpeg software decoding manages this scene with around 210 dropped frames (admittedly not the best method of determining performance), using the VDPAU->CPU->OpenGL method i've got this down to around 90 dropped frames, but still using a massive chunk of CPU time... which is the part i'd like to reduce the most.
Currently i'm experimenting with performing this process totally on the GPU. According to sources on nvnews.net (primarilly Stephen Warren from NVIDIA), the best method to use would be an OpenGL extension - glXBindTexImageEXT. This is proving to be somewhat tricky, primarily down to the lack of decent documentation and prior usage. I'll keep bashing away!
No comments:
Post a Comment