Caimans Video Codec for GBA
"We bring unmatched audio/video quality to your GBA"
 
Home Demos Technology Licensing
 

The Caimans video codec takes video quality for GBA to a new level thanks to multipass variable bitrate encoding, adaptive resolution changing and other advanced features you could expect to find only in high end video encoders for more powerful systems.
This page covers only Caimans codec Version 2.2, a new page with tech specs of Caimans codec pro should be out soon.

Multipass variable bitrate
Thanks to this advanced encoding techinque the user can choose the average bitrate or the final size of the encoded material and the Caimans codec will encode the footage exactly to match the requested average bitrate or to fit the requested size while giving more bitrate to the most complex scenes and saving it for static parts. This is a feature normally available only on high end mpeg encoders. The Caimans encoder does even better: you can also manually adjust the encoding parameters to give more bitrate to some particular sequences you care of, the Caimans encoder still averages to a bitrate that allows the whole encoded material to fit exactly in the requested space. Download this special version of the Aerosmith demo to see how the bitrate changes with the complexity of the video.

Dynamic resolution changing for very low bitrate encoding
For critical compression tasks, where the most compression is required at bitrates as low as 12-15Kbytes/sec, the Caimans encoder can dinamically decrease video resolution in the most complex parts of the footage to keep an acceptable quality even at high frame rates, and increase it in the most static parts; this is the same concept of the variable bitrate encoding but applied to the resolution instead of the bitrate. It is a "last resort" feature you can choose to activate when size really matters.

Dithering at play-time
Even if Gameboy advance only supports 32768 colors, the Caimans codec internally works in 24bit mode (16M colors). Starting from version 2.1 this addictional color information is used to perform a dithering at playtime, simulating the presence of more than 32768 colors. Expecially when working with computer generated images this feature greatly enhances the visual perception of the video. As an example let's take a look at the following picture:

The (A) frame shows the internal true color encoding of a Caimans video frame, (B) is the frame as it would be displayed by the gameboy without the use of dithering and finally (C) is the same frame displayed with the dithering function activated. As you can see expecially when looking at the floor, the (C) picture really looks like the true color source.
And here is a comparison between the Caimans codec and another GBA video codec not using dithering at play-time.

Original Frame scaled to 240x160 Other codec:15 bit Caimans codec:24 to 15 bit dithering

High frame rates
The Caimans codec can decode video up to 30 frames per second using only 70-80% of Gameboy Advance CPU.
High frame rates also means respect of the original frame rate, infact not all the video footage comes at 30 FPS, for example the Watchout movie, the Ornaments clip and most movie trailers are 24 FPS material, as you can see from the picture below (or you can download Watchout here, Ornaments here, and many movie trailers here, and check by yourself) so the caimans encoder performs a frame by frame compression, keeping exactly the original number of frames at the original frame rate. That's why you should not trust people saying "
The decoding frame rate is kept constant to 30 FPS" or "x frames encoded at 30 FPS" even when dealing with 24 FPS material, because  either they are cheating you, or they mean "Fakes Per Second" ;-)

 

Audio encoding
The Caimans codec 2.0 introduces a proprietary compressed audio system and can decode at frequencies ranging from 8 to 32 Khz at the highest quality you have ever heard on your GBA while using only 2 to 10 Kbytes/sec.

Low ram usage
Caimans codec can run either from iwram, ewram or rom and uses only 100 Kbytes of ram, including the space needed for the screen.