Phoronix: Improving Video Streaming With GTK+ 3D Surfaces
Within the open-source world, code examples and documentation can be particularly important in ensuring a lower barrier to participation. One developer, Jose Commins, has worked on creating demos, such as how to use OpenGL within GTK+. One of his projects is GtkGLApp, but now he's working on a new one involving real-time video streaming to GTK+ 3D surfaces...
Video is very slow. Something like 2fps but audio is correct, independent of input file bitrate. With high bitrate video (reported as New dynamic pad linked: video/x-raw-rgb, New dynamic pad linked: audio/x-raw-float, Stream with high frequencies VQ coding) it's the same 2fps but this time it seems to skip some frames every second or so and that causes the cube animation to also skip in sync with the video.
Compositing active: flickering on the rotating cube window. It seems to alternate between a part of my desktop and the cube animation. Although with a second video it alternates between solid black (maybe a part of an open terminal since I use black background?) and the cube animation. Also the alternating background image is always visible flickering even with other windows on top of GtkGLApp.
Without compositing everything works fine apart from the problems mentioned in the beggining.
I get the following crash (the first frame of the video appears on the surface of the cube and the right hand window before it dies)
GStreamer version: 0.10.30
Now playing stream.
New dynamic pad linked: video/x-raw-rgb
New dynamic pad linked: audio/x-raw-int
Gdk-ERROR **: The program 'GtkGLApp_x64' received an X Window System error.
This probably reflects a bug in the program.
The error was 'BadDrawable (invalid Pixmap or Window parameter)'.
(Details: serial 36773 error_code 9 request_code 137 minor_code 7)
(Note to programmers: normally, X errors are reported asynchronously;
that is, you will receive the error a while after causing it.
To debug your program, run it with the --sync command line
option to change this behavior. You can then get a meaningful
backtrace from your debugger if you break on the gdk_x_error() function.)
First of all, the source will be made available shortly - it needs to be cleaned up a little for legibility, so I will do that as soon as possible.
So far I have noted that ATI cards have some issues, such as flickering and so on.
On nVidia cards (with the proprietary driver) there seems to be no issues at all apart from sync tearing (I have tested with a GT220, 7800GTX and 8600GTS).
As for Intel drivers, more help on these is appreciated!
The application seems to highlight some issues with 3d system/os drivers - it's one of the few ones that uses multiple rendering surfaces that share a GL context. Most apps are OpenGL-monolithic so these problems haven't generally surfaced because of this, but it seems nVidia have been one step ahead here.