|
Shinya Kitaoka |
810553 |
#pragma once
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifndef TIIO_AVI_H
|
|
Toshihiro Shimizu |
890ddd |
#define TIIO_AVI_H
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
9f5a1b |
#ifdef _WIN32
|
|
Toshihiro Shimizu |
890ddd |
#include <windows.h></windows.h>
|
|
Toshihiro Shimizu |
890ddd |
#include <vfw.h></vfw.h>
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "tlevel_io.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tthreadmessage.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class TAviCodecCompressor;
|
|
Toshihiro Shimizu |
890ddd |
class VDVideoDecompressor;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===========================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// TLevelWriterAvi
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//===========================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class TLevelWriterAvi final : public TLevelWriter {
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
TLevelWriterAvi(const TFilePath &path, TPropertyGroup *winfo);
|
|
Shinya Kitaoka |
120a6e |
~TLevelWriterAvi();
|
|
Shinya Kitaoka |
473e70 |
TImageWriterP getFrameWriter(TFrameId fid) override;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
473e70 |
void saveSoundTrack(TSoundTrack *st) override;
|
|
Shinya Kitaoka |
120a6e |
void save(const TImageP &image, int frameIndex);
|
|
Shinya Kitaoka |
120a6e |
static TLevelWriter *create(const TFilePath &f, TPropertyGroup *winfo) {
|
|
Shinya Kitaoka |
120a6e |
return new TLevelWriterAvi(f, winfo);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Shinya Kitaoka |
120a6e |
TThread::Mutex m_mutex;
|
|
Shinya Kitaoka |
9f5a1b |
#ifdef _WIN32
|
|
Shinya Kitaoka |
120a6e |
PAVIFILE m_aviFile;
|
|
Shinya Kitaoka |
120a6e |
PAVISTREAM m_videoStream;
|
|
Shinya Kitaoka |
120a6e |
PAVISTREAM m_audioStream;
|
|
Shinya Kitaoka |
120a6e |
TSoundTrack *m_st;
|
|
Shinya Kitaoka |
120a6e |
HIC m_hic;
|
|
Shinya Kitaoka |
120a6e |
BITMAPINFO *m_bitmapinfo;
|
|
Shinya Kitaoka |
120a6e |
BITMAPINFO *m_outputFmt;
|
|
Shinya Kitaoka |
120a6e |
AVISTREAMINFO m_audioStreamInfo;
|
|
Shinya Kitaoka |
120a6e |
void *m_buffer;
|
|
Shinya Kitaoka |
120a6e |
bool m_initDone;
|
|
Shinya Kitaoka |
120a6e |
int IOError;
|
|
Shinya Kitaoka |
120a6e |
int m_bpp;
|
|
Shinya Kitaoka |
120a6e |
long m_maxDataSize;
|
|
Shinya Kitaoka |
120a6e |
std::list<int> m_delayedFrames;</int>
|
|
Shinya Kitaoka |
120a6e |
int m_firstframe;
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void doSaveSoundTrack();
|
|
Shinya Kitaoka |
120a6e |
void searchForCodec();
|
|
Shinya Kitaoka |
9f5a1b |
#ifdef _WIN32
|
|
Shinya Kitaoka |
120a6e |
int compressFrame(BITMAPINFOHEADER *outHeader, void **bufferOut,
|
|
Shinya Kitaoka |
120a6e |
int frameIndex, DWORD flagsIn, DWORD &flagsOut);
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Shinya Kitaoka |
120a6e |
void createBitmap(int lx, int ly);
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===========================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// TLevelWriterAvi
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//===========================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class TLevelReaderAvi final : public TLevelReader {
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
TLevelReaderAvi(const TFilePath &path);
|
|
Shinya Kitaoka |
120a6e |
~TLevelReaderAvi();
|
|
Shinya Kitaoka |
473e70 |
TImageReaderP getFrameReader(TFrameId fid) override;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
static TLevelReader *create(const TFilePath &f) {
|
|
Shinya Kitaoka |
120a6e |
return new TLevelReaderAvi(f);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
473e70 |
TLevelP loadInfo() override;
|
|
Shinya Kitaoka |
120a6e |
TImageP load(int frameIndex);
|
|
Shinya Kitaoka |
120a6e |
TDimension getSize();
|
|
Shinya Kitaoka |
120a6e |
TThread::Mutex m_mutex;
|
|
Shinya Kitaoka |
120a6e |
void *m_decompressedBuffer;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
9f5a1b |
#ifdef _WIN32
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Shinya Kitaoka |
120a6e |
PAVISTREAM m_videoStream;
|
|
Shinya Kitaoka |
120a6e |
BITMAPINFO *m_srcBitmapInfo, *m_dstBitmapInfo;
|
|
Shinya Kitaoka |
120a6e |
HIC m_hic;
|
|
Shinya Kitaoka |
120a6e |
int IOError, m_prevFrame;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
int readFrameFromStream(void *bufferOut, DWORD &bufferSize,
|
|
Shinya Kitaoka |
120a6e |
int frameIndex) const;
|
|
Shinya Kitaoka |
120a6e |
DWORD decompressFrame(void *srcBuffer, int srcSize, void *dstBuffer,
|
|
Shinya Kitaoka |
120a6e |
int currentFrame, int desiredFrame);
|
|
Shinya Kitaoka |
120a6e |
HIC findCandidateDecompressor();
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===========================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// Tiio::AviWriterProperties
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//===========================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
namespace Tiio {
|
|
Shinya Kitaoka |
d1f6c4 |
class AviWriterProperties final : public TPropertyGroup {
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
AviWriterProperties();
|
|
Shinya Kitaoka |
120a6e |
TEnumProperty m_codec;
|
|
Shinya Kitaoka |
120a6e |
static TEnumProperty m_defaultCodec;
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
#endif // TIIO_AVI_H
|