TheoraVideoPlugin Benchmark        

Here you can find various benchmarks of the plugin tested on a variety of hardware, using diferent versions of the plugin and underlaying libraries

Columns

  • All time values are averages, expressed in milliseconds
  • decoding time - Time it takes for theora to decode a frame
  • YUV -> RGB time - converting theora's YUV pixel buffer to RGB
  • Tex Blit time - transfering an RGB buffer from RAM to a texture
  • Time per frame - last three colums combined, how much time it takes to get prepare one video frame for rendering
  • FPS - estimated frames per second the plugin could render if pre-caching.

Revision 11

Tester: Kresimir Spes (kspes)

Software: ogg,vorbis,theora SVN r15152, ptypes 1.8.3, TheoraVideoPlugin SVN r11, Ogre 1.4.9, WindowsXP SP2

Ogre setup: 1024x768@32 Direct3D, no vsync

2GHz single-core laptop, 1GB RAM, ATI mobility radeon X600 (64MB RAM)

* using theora compiled with SSE2 extensions Video Size decoding time YUV -> RGB time Tex Blit time Time per frame Dropped frames Theora FPS FPS
1280x528 6.3 30.3 39.9 76.5 76% 13.1 161
1024x512 1.2 25.2 16.5 42.9 45% 23.3 238
720x464 0.17 16.8 1.9 18.9 12% 52.9 258
640x352 0.18 0.4 2.6 3.0 3% 330 292
-

Conclusion

From this figure, an older laptop could run high resolution video quite fine. The biggest problem in the current version of the plugin (svn revision 11) is that it doesn't precache frames. you can see that theora takes an average of 6.3 milliseconds to generate YUV frames for a HD video which is great. 6.3 ms is ofcourse an average, meaning that it usually takes under 1 ms to render simple frames and 10-20 ms to render complex ones.
Precaching would reduce frame dropping considerably.

The next big bottleneck is YUV->RGB conversion, it takes 4-6 times as much as average decoding time. This conversion can be transferred to the display card, thus reducing the average time it takes to render a frame by half.
Currently, it takes 76.5 ms to transfer an HD video frame from theora to a texture, removing YUV->RGB conversion would reduce 30.3 ms from each frame, summing up to 46.2 ms per HD frame which would give 21.4 rendered frames per second. Not bad for an old laptop :-)