Apitrace is a tool for recording all the gl commands in a trace file. The trace file can be replay in later time, and they got a nice gui for checking all the gl call every frame, with introspection. They have a glretrace software that replay a trace file. We can use it to get the output of everyframe and push it in a gstreamer pipeline to make a video.
Why not using gtkRecordMyDesktop or other screen capture ? Sometime, the overhead of capturing and encoding video on live take too much CPU. And the application start to slow down. I didn’t see any slowdown using apitrace, and the trace file is very small compared to video output or raw video output.
So first, compile apitrace with stdout support:
$ git clone git://github.com/tito/apitrace.git $ cd apitrace $ git checkout snapshot-stdout $ mkdir build $ cd build $ cmake .. $ make
Take any opengl application, and make a trace file. The trace file will have the name of the binary. In my case, python is an alias to python2.7: the trace file will be python2.7.trace.
$ LD_PRELOAD=./glxtrace.so python ~/code/kivy/examples/demo/pictures/main.py # replay for fun now $ ./glretrace python2.7.trace
To be able to make a video from the trace file, you need to know the size of the window, and the initial framerate. Here, my example is running at 800×600, 60fps:
$ ./glretrace -sr python2.7-trace | \ gst-launch fdsrc ! \ videoparse width=800 height=600 format=rgbx framerate=60 ! \ videoflip method=5 ! videorate ! ffmpegcolorspace ! \ video/x-raw-yuv,width=800,height=600,framerate=\(fraction\)30/1 \ x264enc pass=quant ! avimux ! filesink location=output.avi
The final video will be saved in output.avi. You can check the video output here :