135 lines
2.2 KiB
C++
135 lines
2.2 KiB
C++
#ifndef _AVIFILE_INDEXCHUNK_HPP_
|
|
#define _AVIFILE_INDEXCHUNK_HPP_
|
|
#ifndef _COMMON_WINDOWS_HPP_
|
|
#include <common/windows.hpp>
|
|
#endif
|
|
|
|
typedef WORD QUADWORD[4];
|
|
|
|
class Index
|
|
{
|
|
public:
|
|
typedef enum IndexType{Type1=2,Type2=3};
|
|
typedef enum IndexItem{IndexOffset,IndexSize,IndexOffset2};
|
|
Index();
|
|
virtual ~Index();
|
|
DWORD getItem(IndexItem index)const;
|
|
void setItem(IndexItem index,DWORD value);
|
|
IndexType getType(void)const;
|
|
void setType(IndexType type);
|
|
private:
|
|
Array<DWORD> mIndex;
|
|
};
|
|
|
|
Index::Index()
|
|
{
|
|
}
|
|
|
|
inline
|
|
Index::~Index()
|
|
{
|
|
}
|
|
|
|
inline
|
|
DWORD Index::getItem(IndexItem index)
|
|
{
|
|
return mIndex[index];
|
|
}
|
|
|
|
inline
|
|
void Index::setItem(IndexItem index,DWORD value)
|
|
{
|
|
mIndex[index]=value;
|
|
}
|
|
|
|
inline
|
|
Index::IndexType Index::getType(void)const
|
|
{
|
|
return (IndexType)mIndex.size();
|
|
}
|
|
|
|
inline
|
|
void Index::setType(IndexType type)
|
|
{
|
|
mIndex.size((int)type);
|
|
}
|
|
|
|
|
|
// *********************************************************************************************
|
|
|
|
class IndexChunk
|
|
{
|
|
public:
|
|
IndexChunk();
|
|
virtual ~IndexChunk();
|
|
DWORD longsPerEntry(void)const;
|
|
DWORD indexSubType(void)const;
|
|
DWORD entriesInUse(void)const;
|
|
DWORD chunkID(void)const;
|
|
QUADWORD baseOffset(void)const;
|
|
bool operator<<(PureViewOfFile &pureView);
|
|
private:
|
|
WORD mLongsPerEntry;
|
|
BYTE mIndexSubType;
|
|
DWORD mEntriesInUse;
|
|
DWORD mChunkID;
|
|
QUADWORD mBaseOffset;
|
|
DWORD mReserved;
|
|
Array<Index> mIndex;
|
|
};
|
|
|
|
inline
|
|
IndexChunk<T>::IndexChunk()
|
|
: mLongsPerEntry(0), mIndexSubType(0), mEntriesInUse(0), mChunkID(0), mBaseOffset(0), mReserved(0)
|
|
{
|
|
}
|
|
|
|
inline
|
|
IndexChunk<T>::~IndexChunk()
|
|
{
|
|
}
|
|
|
|
inline
|
|
DWORD IndexChunk<T>::longsPerEntry(void)const
|
|
{
|
|
return mLongsPerEntry;
|
|
}
|
|
|
|
inline
|
|
DWORD IndexChunk<T>::indexSubType(void)const
|
|
{
|
|
return mIndexSubType;
|
|
}
|
|
|
|
inline
|
|
DWORD IndexChunk<T>::entriesInUse(void)const
|
|
{
|
|
return mEntriesInUse;
|
|
}
|
|
|
|
inline
|
|
DWORD IndexChunk<T>::chunkID(void)const
|
|
{
|
|
return mChunkID;
|
|
}
|
|
|
|
inline
|
|
QUADWORD IndexChunk<T>::baseOffset(void)const
|
|
{
|
|
return mBaseOffset;
|
|
}
|
|
|
|
inline
|
|
bool IndexChunk<T>::operator<<(PureViewOfFile &pureView)
|
|
{
|
|
pureView.read(mLongsPerEntry);
|
|
pureView.read(mIndexSubType);
|
|
pureView.read(mEntriesInUse);
|
|
pureView.read(mChunkID);
|
|
pureView.read((char*)&mBaseOffset,sizeof(mBaseOffset));
|
|
pureView.read(mReserved);
|
|
mIndex.size();
|
|
|
|
}
|
|
#endif
|