#include #include #include 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; }