tahoma2d/toonz/sources/image/avi/tiio_avi.h

116 lines
2.7 KiB
C
Raw Normal View History

2016-05-17 03:04:11 +12:00
#pragma once
2016-03-19 06:57:51 +13:00
#ifndef TIIO_AVI_H
#define TIIO_AVI_H
2016-04-15 17:11:23 +12:00
#ifdef _WIN32
2016-03-19 06:57:51 +13:00
#include <windows.h>
#include <vfw.h>
#endif
#include "tlevel_io.h"
#include "tthreadmessage.h"
class TAviCodecCompressor;
class VDVideoDecompressor;
//===========================================================
//
// TLevelWriterAvi
//
//===========================================================
2016-06-15 18:43:10 +12:00
class TLevelWriterAvi : public TLevelWriter {
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
TLevelWriterAvi(const TFilePath &path, TPropertyGroup *winfo);
~TLevelWriterAvi();
2016-06-19 20:06:29 +12:00
TImageWriterP getFrameWriter(TFrameId fid) override;
2016-03-19 06:57:51 +13:00
2016-06-19 20:06:29 +12:00
void saveSoundTrack(TSoundTrack *st) override;
2016-06-15 18:43:10 +12:00
void save(const TImageP &image, int frameIndex);
static TLevelWriter *create(const TFilePath &f, TPropertyGroup *winfo) {
return new TLevelWriterAvi(f, winfo);
}
2016-03-19 06:57:51 +13:00
private:
2016-06-15 18:43:10 +12:00
TThread::Mutex m_mutex;
2016-04-15 17:11:23 +12:00
#ifdef _WIN32
2016-06-15 18:43:10 +12:00
PAVIFILE m_aviFile;
PAVISTREAM m_videoStream;
PAVISTREAM m_audioStream;
TSoundTrack *m_st;
HIC m_hic;
BITMAPINFO *m_bitmapinfo;
BITMAPINFO *m_outputFmt;
AVISTREAMINFO m_audioStreamInfo;
void *m_buffer;
bool m_initDone;
int IOError;
int m_bpp;
long m_maxDataSize;
std::list<int> m_delayedFrames;
int m_firstframe;
2016-03-19 06:57:51 +13:00
#endif
2016-06-15 18:43:10 +12:00
void doSaveSoundTrack();
void searchForCodec();
2016-04-15 17:11:23 +12:00
#ifdef _WIN32
2016-06-15 18:43:10 +12:00
int compressFrame(BITMAPINFOHEADER *outHeader, void **bufferOut,
int frameIndex, DWORD flagsIn, DWORD &flagsOut);
2016-03-19 06:57:51 +13:00
#endif
2016-06-15 18:43:10 +12:00
void createBitmap(int lx, int ly);
2016-03-19 06:57:51 +13:00
};
//===========================================================
//
// TLevelWriterAvi
//
//===========================================================
2016-06-15 18:43:10 +12:00
class TLevelReaderAvi : public TLevelReader {
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
TLevelReaderAvi(const TFilePath &path);
~TLevelReaderAvi();
2016-06-19 20:06:29 +12:00
TImageReaderP getFrameReader(TFrameId fid) override;
2016-06-15 18:43:10 +12:00
static TLevelReader *create(const TFilePath &f) {
return new TLevelReaderAvi(f);
}
2016-06-19 20:06:29 +12:00
TLevelP loadInfo() override;
2016-06-15 18:43:10 +12:00
TImageP load(int frameIndex);
TDimension getSize();
TThread::Mutex m_mutex;
void *m_decompressedBuffer;
2016-03-19 06:57:51 +13:00
2016-04-15 17:11:23 +12:00
#ifdef _WIN32
2016-03-19 06:57:51 +13:00
private:
2016-06-15 18:43:10 +12:00
PAVISTREAM m_videoStream;
BITMAPINFO *m_srcBitmapInfo, *m_dstBitmapInfo;
HIC m_hic;
int IOError, m_prevFrame;
int readFrameFromStream(void *bufferOut, DWORD &bufferSize,
int frameIndex) const;
DWORD decompressFrame(void *srcBuffer, int srcSize, void *dstBuffer,
int currentFrame, int desiredFrame);
HIC findCandidateDecompressor();
2016-03-19 06:57:51 +13:00
#endif
};
//===========================================================
//
// Tiio::AviWriterProperties
//
//===========================================================
2016-06-15 18:43:10 +12:00
namespace Tiio {
class AviWriterProperties : public TPropertyGroup {
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
AviWriterProperties();
TEnumProperty m_codec;
static TEnumProperty m_defaultCodec;
2016-03-19 06:57:51 +13:00
};
}
2016-06-15 18:43:10 +12:00
#endif // TIIO_AVI_H