/* VideoCompressor.h Written by Matthew Fisher VideoCompressor takes a sequence of images and compressed them into a video file. */ #ifdef USE_WMF enum VideoCompressorResult { VideoCompressorResultSuccess = 0, VideoCompressorResultFailure = 1, VideoCompressorResultAudioFailed = 2, }; class VideoCompressor { public: VideoCompressor(); ~VideoCompressor(); void FreeMemory(); VideoCompressorResult OpenFile(const String &Filename, UINT Width, UINT Height, UINT BitRate, UINT FrameRate, UINT AudioDeviceIndex, Clock *Timer); void AddFrame(const Bitmap &Bmp, double TimeInSeconds); #ifdef D3D9_IN_NAMESPACE void AddFrame(D3D9Base::LPDIRECT3DSURFACE9 Surface, const Vec2i &Start, double TimeInSeconds); #else void AddFrame(LPDIRECT3DSURFACE9 Surface, const Vec2i &Start, double TimeInSeconds); #endif void AudioSample32Bit2Channel(float *Samples, UINT FrameCount, UINT64 CaptureStartTime); __forceinline bool Capturing() const { return (_Writer != NULL); } private: static void InitMediaType(IMFMediaType *M, const GUID &Format, UINT BitRate, UINT Width, UINT Height, UINT FrameRate); Clock* _Clock; bool _CapturingAudio; AudioCapture _AudioCapture; IMFSinkWriter* _Writer; IMFSample* _Sample; IMFMediaBuffer* _Buffer; UINT _Width; UINT _Height; }; #endif