167 lines
6.9 KiB
C++
167 lines
6.9 KiB
C++
#include <avifile/strmhdr.hpp>
|
|
#include <avifile/junkhdr.hpp>
|
|
#include <avifile/mischdr.hpp>
|
|
|
|
AVIStreamHeader &AVIStreamHeader::operator=(const AVIStreamHeader &someAVIStreamHeader)
|
|
{
|
|
fccType(someAVIStreamHeader.fccType());
|
|
fccHandler(someAVIStreamHeader.fccHandler());
|
|
flags(someAVIStreamHeader.flags());
|
|
priority(someAVIStreamHeader.priority());
|
|
language(someAVIStreamHeader.language());
|
|
initialFrames(someAVIStreamHeader.initialFrames());
|
|
scale(someAVIStreamHeader.scale());
|
|
rate(someAVIStreamHeader.rate());
|
|
start(someAVIStreamHeader.start());
|
|
length(someAVIStreamHeader.length());
|
|
suggestedBufferSize(someAVIStreamHeader.suggestedBufferSize());
|
|
quality(someAVIStreamHeader.quality());
|
|
sampleSize(someAVIStreamHeader.sampleSize());
|
|
frame(someAVIStreamHeader.frame());
|
|
(AVIFormatHeader&)*this=(AVIFormatHeader&)someAVIStreamHeader;
|
|
mAVIVedtHeader=someAVIStreamHeader.mAVIVedtHeader;
|
|
return *this;
|
|
}
|
|
|
|
WORD AVIStreamHeader::operator==(const AVIStreamHeader &someAVIStreamHeader)const
|
|
{
|
|
return (fccType()==someAVIStreamHeader.fccType()&&
|
|
fccHandler()==someAVIStreamHeader.fccHandler()&&
|
|
flags()==someAVIStreamHeader.flags()&&
|
|
priority()==someAVIStreamHeader.priority()&&
|
|
language()==someAVIStreamHeader.language()&&
|
|
initialFrames()==someAVIStreamHeader.initialFrames()&&
|
|
scale()==someAVIStreamHeader.scale()&&
|
|
rate()==someAVIStreamHeader.rate()&&
|
|
start()==someAVIStreamHeader.start()&&
|
|
length()==someAVIStreamHeader.length()&&
|
|
suggestedBufferSize()==someAVIStreamHeader.suggestedBufferSize()&&
|
|
quality()==someAVIStreamHeader.quality()&&
|
|
sampleSize()==someAVIStreamHeader.sampleSize()&&
|
|
frame()==someAVIStreamHeader.frame()&&
|
|
(AVIFormatHeader&)*this==(AVIFormatHeader&)someAVIStreamHeader&&
|
|
mAVIVedtHeader==someAVIStreamHeader.mAVIVedtHeader);
|
|
}
|
|
|
|
bool AVIStreamHeader::read(File &inFile)
|
|
{
|
|
AVIJunkHeader aviJunkHeader;
|
|
AVIMiscHeader aviMiscHeader;
|
|
String streamLiteral("strh");
|
|
String streamHeader;
|
|
Rect frameRect;
|
|
WORD rectLeft;
|
|
WORD rectTop;
|
|
WORD rectRight;
|
|
WORD rectBottom;
|
|
int headerLength;
|
|
|
|
streamHeader.reserve(streamLiteral.length()+1);
|
|
inFile.read(streamHeader,streamLiteral.length());
|
|
if(!(streamLiteral==streamHeader))
|
|
{
|
|
inFile-=streamLiteral.length();
|
|
return FALSE;
|
|
}
|
|
inFile.read(headerLength);
|
|
int startPos(inFile.tell());
|
|
inFile.read(AVIVFWStreamHeader::fccType);
|
|
inFile.read(AVIVFWStreamHeader::fccHandler);
|
|
inFile.read(AVIVFWStreamHeader::dwFlags);
|
|
inFile.read(AVIVFWStreamHeader::wPriority);
|
|
inFile.read(AVIVFWStreamHeader::wLanguage);
|
|
inFile.read(AVIVFWStreamHeader::dwInitialFrames);
|
|
inFile.read(AVIVFWStreamHeader::dwScale);
|
|
inFile.read(AVIVFWStreamHeader::dwRate);
|
|
inFile.read(AVIVFWStreamHeader::dwStart);
|
|
inFile.read(AVIVFWStreamHeader::dwLength);
|
|
inFile.read(AVIVFWStreamHeader::dwSuggestedBufferSize);
|
|
inFile.read(AVIVFWStreamHeader::dwQuality);
|
|
inFile.read(AVIVFWStreamHeader::dwSampleSize);
|
|
inFile.read(rectLeft);
|
|
inFile.read(rectTop);
|
|
inFile.read(rectRight);
|
|
inFile.read(rectBottom);
|
|
int endPos(inFile.tell());
|
|
inFile+=headerLength-(endPos-startPos);
|
|
frameRect.left(rectLeft);
|
|
frameRect.top(rectTop);
|
|
frameRect.right(rectRight);
|
|
frameRect.bottom(rectBottom);
|
|
frame(frameRect);
|
|
(AVIFormatHeader&)*this=StreamType(fccType());
|
|
((AVIFormatHeader&)*this).read(inFile);
|
|
mAVIVedtHeader.read(inFile);
|
|
mAVIAdditionalHeader.read(inFile);
|
|
mAVIIndexHeader.read(inFile);
|
|
while(aviMiscHeader.read(inFile));
|
|
aviJunkHeader.read(inFile);
|
|
return true;
|
|
}
|
|
|
|
bool AVIStreamHeader::write(File &outFile)
|
|
{
|
|
WORD rectLeft;
|
|
WORD rectTop;
|
|
WORD rectRight;
|
|
WORD rectBottom;
|
|
int sizeHeader;
|
|
|
|
outFile.write("strh");
|
|
sizeHeader=sizeof(AVIVFWStreamHeader::fccType)+
|
|
sizeof(AVIVFWStreamHeader::fccHandler)+
|
|
sizeof(AVIVFWStreamHeader::dwFlags)+
|
|
sizeof(AVIVFWStreamHeader::wPriority)+
|
|
sizeof(AVIVFWStreamHeader::wLanguage)+
|
|
sizeof(AVIVFWStreamHeader::dwInitialFrames)+
|
|
sizeof(AVIVFWStreamHeader::dwScale)+
|
|
sizeof(AVIVFWStreamHeader::dwRate)+
|
|
sizeof(AVIVFWStreamHeader::dwStart)+
|
|
sizeof(AVIVFWStreamHeader::dwLength)+
|
|
sizeof(AVIVFWStreamHeader::dwSuggestedBufferSize)+
|
|
sizeof(AVIVFWStreamHeader::dwQuality)+
|
|
sizeof(AVIVFWStreamHeader::dwSampleSize)+
|
|
sizeof(rectLeft)+
|
|
sizeof(rectTop)+
|
|
sizeof(rectRight)+
|
|
sizeof(rectBottom);
|
|
outFile.write(sizeHeader);
|
|
outFile.write(AVIVFWStreamHeader::fccType);
|
|
outFile.write(AVIVFWStreamHeader::fccHandler);
|
|
outFile.write(AVIVFWStreamHeader::dwFlags);
|
|
outFile.write(AVIVFWStreamHeader::wPriority);
|
|
outFile.write(AVIVFWStreamHeader::wLanguage);
|
|
outFile.write(AVIVFWStreamHeader::dwInitialFrames);
|
|
outFile.write(AVIVFWStreamHeader::dwScale);
|
|
outFile.write(AVIVFWStreamHeader::dwRate);
|
|
outFile.write(AVIVFWStreamHeader::dwStart);
|
|
outFile.write(AVIVFWStreamHeader::dwLength);
|
|
outFile.write(AVIVFWStreamHeader::dwSuggestedBufferSize);
|
|
outFile.write(AVIVFWStreamHeader::dwQuality);
|
|
outFile.write(AVIVFWStreamHeader::dwSampleSize);
|
|
outFile.write(rectLeft=frame().left());
|
|
outFile.write(rectTop=frame().top());
|
|
outFile.write(rectRight=frame().right());
|
|
outFile.write(rectBottom=frame().bottom());
|
|
return true;
|
|
}
|
|
|
|
String AVIStreamHeader::toString(void)const
|
|
{
|
|
String str;
|
|
str+=String("[AVIStreamHeader::toString]AVIVFWStreamHeader::fccType=")+FOURCC(AVIVFWStreamHeader::fccType).toString()+String("\n");
|
|
str+=String("[AVIStreamHeader::toString]AVIVFWStreamHeader::fccHandler=")+FOURCC(AVIVFWStreamHeader::fccHandler).toString()+String("\n");
|
|
str+=String("[AVIStreamHeader::toString]AVIVFWStreamHeader::dwFlags=")+String().fromInt(AVIVFWStreamHeader::dwFlags)+String("\n");
|
|
str+=String("[AVIStreamHeader::toString]AVIVFWStreamHeader::wPriority=")+String().fromInt(AVIVFWStreamHeader::wPriority)+String("\n");
|
|
str+=String("[AVIStreamHeader::toString]AVIVFWStreamHeader::wLanguage=")+String().fromInt(AVIVFWStreamHeader::wLanguage)+String("\n");
|
|
str+=String("[AVIStreamHeader::toString]AVIVFWStreamHeader::dwInitialFrames=")+String().fromInt(AVIVFWStreamHeader::dwInitialFrames)+String("\n");
|
|
str+=String("[AVIStreamHeader::toString]AVIVFWStreamHeader::dwScale=")+String().fromInt(AVIVFWStreamHeader::dwScale)+String("\n");
|
|
str+=String("[AVIStreamHeader::toString]AVIVFWStreamHeader::dwRate=")+String().fromInt(AVIVFWStreamHeader::dwRate)+String("\n");
|
|
str+=String("[AVIStreamHeader::toString]AVIVFWStreamHeader::dwStart=")+String().fromInt(AVIVFWStreamHeader::dwStart)+String("\n");
|
|
str+=String("[AVIStreamHeader::toString]AVIVFWStreamHeader::dwLength=")+String().fromInt(AVIVFWStreamHeader::dwLength)+String("\n");
|
|
str+=String("[AVIStreamHeader::toString]AVIVFWStreamHeader::dwSuggestedBufferSize=")+String().fromInt(AVIVFWStreamHeader::dwSuggestedBufferSize)+String("\n");
|
|
str+=String("[AVIStreamHeader::toString]AVIVFWStreamHeader::dwQuality=")+String().fromInt(AVIVFWStreamHeader::dwQuality)+String("\n");
|
|
str+=String("[AVIStreamHeader::toString]AVIVFWStreamHeader::dwSampleSize=")+String().fromInt(AVIVFWStreamHeader::dwSampleSize)+String("\n");
|
|
return str;
|
|
}
|