Dark Video is a complete movie encoder and decoder solution, targeted at anyone interested in adding hyper speed movie playback into their game. Built from the ground up to focus on extreme speed and quality, Dark Video opens the gateway for ultra high quality movies but with a very low impact to your game. Designed for ease of use and ease of integration, Dark Video makes adding movie functionality to your game a cinch.

- Speed. Dark Video is seriously fast. Both the encoder and decoder feature whole portions of code written in hand optimized MMX, SSE and SSE2 assembler.
- Video quality. Dark Video is designed from the ground up so that quality is of paramount importance. Using Deep Cove Software's proprietary video compression on high or highest, your encoded movies are pretty much indistinguishable from the original source material, looking fantastic.
- Audio quality. Dark Video leverages the amazing Ogg Vorbis audio compression to offer sound quality almost indistinguishable from the origrinal source material and thus, sounding phenomenal.
- Stand-alone Encoder. Dark Video not only comprises the decoder but also, an Encoder program, dedicated to getting your movies into the Dark Video format as quickly as possible. Built on top of DirectShow, Dark Video Encoder, with critical parts also hand optimized in assembler, can quickly transcode your AVI (for non-standard formats like x264, the correct filters must be installed; we recommend uncompressed AVIs for maximum encoding speed) into a Dark Video DVF movie, for use in your game. With a responsive preview, you'll be able to see how the transcode is progressing.
- Stand-alone DLL. All of Dark Video's substantial capability is packed into a single, tiny 300kb DLL. You don't need anything else! You don't need to worry about any required runtimes, libraries or CODECs. With Dark Video, you just ship with its DLL and that's that!
- Dark Video comes with full documentation and samples so you'll quickly be able to get up and running, whether you use DarkBASIC Professional or Dark GDK.
- Unencumbered. As Dark Video is a technology owned by Deep Cove Software, you don't have to worry about license, patent or royalty issues. Just encode and ship!
- Multi-core. Dark Video runs on multiple cores to ensure fastest encoding and decoding.

DarkBASIC Professional or Dark GDK is required to use this product. It runs on Windows 2000, XP, Vista and Windows 7 (x86 and x64 variants)
The trial version of Dark video is a time limited version. It contains all of the functionality, demos and documentation.
Download the trial version of Dark Video
The following code demonstrates how easy it is to utilise Dark Video in Dark GDK.
// Dark Video - Deep Cove Software, Ltd. - www.deepcovesoftware.com
// Dark GDK - The Game Creators - www.thegamecreators.com
// this sample is based on the Dark Video DarkBASIC Professional sample,
// which in turn is based on The Game Creators' 3DVideo sample.
// whenever using Dark GDK you must ensure you include the header file
#include "DarkGDK.h"
// include the header file for Dark Video
#include "DarkVideo.h"
// the main entry point for the application is this function
void DarkGDK ( void )
{
// initialize Dark Video
DarkVideoInitialize();
// when starting a Dark GDK program it is useful to set global
// application properties, we begin by turning the sync rate on,
// this means we control when the screen is updated, we also set
// the maximum rate to 30 which means the maximum frame rate will
// be set at 30 frames per second
dbSyncOn ( );
dbSyncRate ( 30 );
// set the window title
dbSetWindowTitle( "Dark Video Dark GDK Sample" );
// set default screen
dbColorBackdrop( dbRGB( 0, 32, 32 ) );
// open our Dark Video movie (*.dvf) and get the dimensions (we should
// check the return value of DarkVideoOpen here but for simplicity...)
int movieId = DarkVideoOpen( "sample.dvf" );
int movieWidth = DarkVideoGetWidth( movieId );
int movieHeight = DarkVideoGetHeight( movieId );
// set the movie volume (between 0-255), no effect of course if there's
// no audio in the movie.
DarkVideoSetVolume( movieId, 255 );
// arbitrary ids we'll use
int memBlockId = 32;
int imageId = 32;
// create a blank 32-bit image of the same dimensions as the Dark Video
// movie. Dark Video will decode each frame to this image.
// the size is the width by the height by 4 bytes per pixel as it's
// 32-bit color. we also add 12 bytes for 3 dwords at the start of
// the memblock that contain the width, height and bit depth as we're
// going to create an image from this memblock.
dbMakeMemblock( memBlockId, movieWidth * movieHeight * 4 + 12 );
dbWriteMemblockDword( memBlockId, 0, movieWidth );
dbWriteMemblockDword( memBlockId, 4, movieHeight );
dbWriteMemblockDword( memBlockId, 8, 32 );
dbMakeImageFromMemblock( imageId, memBlockId );
dbDeleteMemblock( memBlockId );
// create 3D projection
for ( int p = 1; p <= 3; p++ )
{
dbMakeObjectBox( p, 320, 240, 10 );
dbScaleObject( p, p * 250, p * 250, p * 250 );
if ( p > 1 )
dbGhostObjectOn( p, 2 );
dbTextureObject( p, imageId );
}
dbSetObjectLight( 1, 0 );
// setup camera
dbPositionCamera( 0, 0, -700 );
dbRotateCamera( 0, 0, 0 );
bool begin = true;
float a = 0.0f;
// now we come to our main loop, we call LoopGDK so some internal
// work can be carried out by the GDK
while ( LoopGDK ( ) )
{
// begin movie playback
if ( begin )
{
begin = false;
bool loop = true;
// note the last parameter? This *HAS* to be set to dbGetImagePointer
// or Dark Video is unable to decode the movie to a Dark GDK image.
DarkVideoPlay( movieId, imageId, loop, dbGetImagePointer );
}
// move projection around
for ( int p = 1; p <= 3; p++ )
{
a = dbWrapValue( a + 1.0f );
dbPositionObject( p, dbCOS( a ) * 20, dbSIN( a ) * 10, p * 75 );
dbYRotateObject( p, dbCOS( a ) * 20 );
dbZRotateObject( p, ( p - 1 ) * 10 );
}
// here we make a call to update the contents of the screen
dbSync ( );
}
// stop and shutdown Dark Video movie
DarkVideoStop( movieId );
DarkVideoClose( movieId );
// shutdown Dark Video
DarkVideoShutdown();
// and now everything is ready to return back to Windows
return;
}














