27 const unsigned long bazoom=0x00000010L;
31 inline __stdcall AVIFile(
const tchar *file_name);
32 inline __stdcall ~AVIFile(
void);
34 inline bool __fastcall Initialise(
const HWND parent,
const UINT uiflags,
const unsigned int fps,
BitMapInfoWrapper &bminfo,
const std::string ©right,
const std::string &creation_date=TStringToString(SystemTimeAsStr()));
36 inline bool __fastcall WriteFrame(
const unsigned int duration,
const HBITMAP &frame,
const unsigned short colour_depth);
37 inline bool __fastcall WriteFrame(
const unsigned int duration,
BitMapInfoWrapper &frame);
39 static inline BitMapInfoWrapper __fastcall MakeDIB(
const HBITMAP hbitmap,
const unsigned short colour_depth);
43 PAVISTREAM ps,psCompressed,psText;
44 unsigned int frame_number;
48 inline __stdcall AVIFile(
const AVIFile &)
noexcept(
true);
49 inline AVIFile &
__fastcall operator=(
const AVIFile &)
noexcept(
true);
53 AVIFile::AVIFile(
const tchar *file_name)
54 : pfile(),ps(),psCompressed(),psText(),frame_number(),initialised(
false) {
56 const HRESULT hr = AVIFileOpen(&pfile,
60 assert(hr==AVIERR_OK);
64 AVIFile::~AVIFile(
void) {
69 AVIStreamClose(psCompressed);
72 AVIStreamClose(psText);
80 inline bool __fastcall
81 AVIFile::Initialise(
const HWND parent,
const UINT uiflags,
const unsigned int fps,
BitMapInfoWrapper &bminfo,
const std::string ©right,
const std::string &creation_date) {
83 memset(&strhdr, 0,
sizeof(strhdr));
84 strhdr.fccType = streamtypeVIDEO;
85 strhdr.fccHandler = 0;
88 strhdr.dwSuggestedBufferSize = bminfo.Header()->biSizeImage;
90 if (AVIFileCreateStream(pfile,
92 &strhdr)!=AVIERR_OK) {
95 AVICOMPRESSOPTIONS opts;
96 AVICOMPRESSOPTIONS *aopts[1] = {&opts};
97 memset(&opts, 0,
sizeof(opts));
98 if (!AVISaveOptions(parent, uiflags, 1, &ps,
reinterpret_cast<LPAVICOMPRESSOPTIONS *>(&aopts))) {
101 if (AVIMakeCompressedStream(&psCompressed, ps, &opts, NULL) != AVIERR_OK) {
104 if (AVIStreamSetFormat(psCompressed, 0,
106 bminfo.Header()->biSize
107 +bminfo.Header()->biClrUsed *
sizeof(RGBQUAD)) != AVIERR_OK) {
110 if (AVIFileWriteData(pfile,mmioFOURCC(
'I',
'C',
'O',
'P'),
const_cast<
char *>(copyright.c_str()),copyright.length()) != AVIERR_OK) {
113 if (AVIFileWriteData(pfile,mmioFOURCC(
'I',
'C',
'R',
'D'),
const_cast<
char *>(creation_date.c_str()),creation_date.length()) != AVIERR_OK) {
121 inline bool __fastcall
122 AVIFile::WriteFrame(
const unsigned int duration,
const HBITMAP &frame,
const unsigned short colour_depth) {
125 const bool ret=WriteFrame(duration,bm);
131 inline bool __fastcall
134 if (AVIStreamWrite(psCompressed,
135 frame_number * duration,
137 reinterpret_cast<BYTE *>(frame.Info()->bmiColors)
138 +frame.Header()->biClrUsed *
sizeof(RGBQUAD),
139 frame.Header()->biSizeImage,
142 NULL) != AVIERR_OK) {