This repository has been archived because it has been moved to CommonCpp
Library for reading and writing AVI 2.0 files (which supports files larger than 4GB)
Sample usage:
#include <AVI20/Write/Writer.h>
#include <AVI20/Write/StreamW.h>
#include <AVI20/Write/MediaStreamWriter.h>
#include <AVI20/WaveFormatEx.h>
#include <fstream>
#include <vector>
using namespace AVI20;
using namespace AVI20::Write;
const int WIDTH = 320;
const int HEIGHT = 240;
const int BPP = 32; // bits per pixel
const int FPS = 30; // frames per second
const int FRAME_SIZE = WIDTH * HEIGHT * 4;
const double PI = acos(0.)*2;
void drawTunnelEffect( int frameIndex, uint8_t* pixelBuffer )
{
double time = (double) frameIndex/FPS;
for ( int y = 0; y < HEIGHT; y++ )
for ( int x = 0; x < WIDTH; x++ )
{
double u = double(2*x-WIDTH ) / HEIGHT;
double v = double(2*y-HEIGHT) / HEIGHT;
double len = sqrt( u*u + v*v );
double angle = atan2( v, u ) + .1 * time;
uint8_t color = len < .2 ? 0 : uint8_t( lround( angle/PI * 256 ) ^ lround( (1/len + time) * 256 ) );
*pixelBuffer++ = color;
*pixelBuffer++ = color;
*pixelBuffer++ = color;
*pixelBuffer++ = 0xFF;
}
}
int main()
{
std::fstream fileStream( "out.avi", std::ios::in | std::ios::out | std::ios::trunc | std::ios::binary );
Stream stream( &fileStream );
Writer writer( stream );
MediaStreamWriter videoStreamWriter = writer.AddMediaStream( WIDTH, HEIGHT, BPP, 0/*uncompressed codec*/, FRAME_SIZE, 30 );
//MediaStreamWriter audioStreamWriter = writer.AddMediaStream( WaveFormatEx::PCM( 44100 /*sample rate*/, 16 /*bit depth*/, 1 /*# channels*/ ) );
writer.Start();
// write the video
{
std::vector<uint8_t> pixelBuffer( FRAME_SIZE );
for ( int frameIndex = 0; frameIndex < 5*30; frameIndex++ )
{
drawTunnelEffect( frameIndex, pixelBuffer.data() );
videoStreamWriter.WriteFrame( pixelBuffer.data(), FRAME_SIZE, true/*keyframe*/ );
}
}
//// write the audio
//{
// std::vector<int16_t> audioBuffer( 44100*5 );
// for ( int i = 0; i < (int) audioBuffer.size(); i++ )
// audioBuffer[i] = sin( i*200./*frequency*//44100*PI*2 ) * 1000. /*volume*/;
// audioStreamWriter.WriteFrame( audioBuffer.data(), audioBuffer.size()*sizeof(int16_t), true /*keyframe*/ );
//}
writer.Finalize();
return 0;
}