Difference between revisions of "Best Practices"

From Theora Playback Library
Jump to: navigation, search
(Created page with "Before reading this page, make sure you've integrated libtheoraplayer in your app. More details on the Tutorial page. == Init == To initialise the library, create an ins...")
 
Line 1: Line 1:
 
Before reading this page, make sure you've integrated libtheoraplayer in your app. More details on the [[Tutorial]] page.
 
Before reading this page, make sure you've integrated libtheoraplayer in your app. More details on the [[Tutorial]] page.
  
== Init ==
+
== Number of precached frames ==
  
To initialise the library, create an instance of the [http://libtheoraplayer.sourceforge.net/api/html/class_theora_video_manager.html TheoraVideoManager] class:
+
When creating a TheoraVideoClip object, you can choose how many frames you'd like to "precache". Precaching means decoding frames in advance and storing them until they are ready to be displayed. This mechanism ensures smooth playback but it consumes memory.
 +
Because some frames take more time to decode than others, depending on how much of the picture has changed in between frames, you should always precache at least a few frames.
 +
 
 +
How much frames you should precache depends on many factors the most important of which are:
 +
 
 +
* How much memory your target device / platform has
 +
* How fast is the CPU that decodes the video
 +
* How much rapid movement your video has (quick changes in picture require more decoding time)
 +
 
 +
If you have a CPU or Theora is slow to decode on a given system, you can buff out complex frame decoding by increasing the number of precached frames.
 +
Fast CPU's generally don't require too much precaching because they can decode fast enough, but if you have many concurrent videos playing, then decoding performance can vary.
 +
 
 +
In our experience, you should precache 4-16 frames and make the decision dynamically based on 2 factors: how much RAM your device has and how many CPU cores (or hardware threads) you have available. The more RAM, the more precached frames you can afford, but on multi core CPU's decoding is faster.
 +
 
 +
Keep in mind that each precached frame takes a lot of RAM. For example, a 512x512 RGB video consumes 768kB, which means frame cache of 16 frames takes 12 MB.
 +
a 1080p video with a 16 frame cache would take 95 MB!
 +
 
 +
== Texture swapping ==
 +
 
 +
If you're using libtheoraplayer for a game project and are using a 3D graphics API such as OpenGL or DirectX then there are many performance factors you have to be aware of.

Revision as of 16:19, 25 November 2014

Before reading this page, make sure you've integrated libtheoraplayer in your app. More details on the Tutorial page.

Number of precached frames

When creating a TheoraVideoClip object, you can choose how many frames you'd like to "precache". Precaching means decoding frames in advance and storing them until they are ready to be displayed. This mechanism ensures smooth playback but it consumes memory. Because some frames take more time to decode than others, depending on how much of the picture has changed in between frames, you should always precache at least a few frames.

How much frames you should precache depends on many factors the most important of which are:

  • How much memory your target device / platform has
  • How fast is the CPU that decodes the video
  • How much rapid movement your video has (quick changes in picture require more decoding time)

If you have a CPU or Theora is slow to decode on a given system, you can buff out complex frame decoding by increasing the number of precached frames. Fast CPU's generally don't require too much precaching because they can decode fast enough, but if you have many concurrent videos playing, then decoding performance can vary.

In our experience, you should precache 4-16 frames and make the decision dynamically based on 2 factors: how much RAM your device has and how many CPU cores (or hardware threads) you have available. The more RAM, the more precached frames you can afford, but on multi core CPU's decoding is faster.

Keep in mind that each precached frame takes a lot of RAM. For example, a 512x512 RGB video consumes 768kB, which means frame cache of 16 frames takes 12 MB. a 1080p video with a 16 frame cache would take 95 MB!

Texture swapping

If you're using libtheoraplayer for a game project and are using a 3D graphics API such as OpenGL or DirectX then there are many performance factors you have to be aware of.