#include #include #include #include bool AVIMovieHeader::read(File &inFile) { String audioDataChunkID("wb"); String compressedDIBChunkID("dc"); String uncompressedDIBChunkID("db"); String ivChunkID("iv"); String ixChunkID("ix"); String movieHeaderLiteral("xxxx"); String movieHeader; String movieStream; DWORD byteCount; remove(); while(TRUE) { movieHeader.reserve(movieHeaderLiteral.length()+1); inFile.read(movieHeader,movieHeaderLiteral.length()); movieHeader=movieHeader.extractAlpha(); movieStream=movieHeader.extractDigits(); if(audioDataChunkID==movieHeader) { MovieData movieData; inFile.read(byteCount); if(byteCount%2)byteCount++; movieData.dataType(MovieData::Audio); movieData.streamNumber(movieStream.toInt()); movieData.size(byteCount); inFile.read((char*)((BYTE HUGE*)&movieData[0]),movieData.size()); insert(&movieData); } else if(compressedDIBChunkID==movieHeader) { MovieData movieData; inFile.read(byteCount); if(byteCount%2)byteCount++; movieData.dataType(MovieData::DIBCompressed); movieData.streamNumber(movieStream.toInt()); movieData.size(byteCount); inFile.read((char*)((BYTE HUGE*)&movieData[0]),movieData.size()); insert(&movieData); } else if(uncompressedDIBChunkID==movieHeader) { MovieData movieData; inFile.read(byteCount); if(byteCount%2)byteCount++; movieData.dataType(MovieData::DIBUnCompressed); movieData.streamNumber(movieStream.toInt()); movieData.size(byteCount); inFile.read((char*)((BYTE HUGE*)&movieData[0]),movieData.size()); insert(&movieData); } else if(ivChunkID==movieHeader) { MovieData movieData; inFile.read(byteCount); if(byteCount%2)byteCount++; movieData.dataType(MovieData::IV); movieData.streamNumber(movieStream.toInt()); movieData.size(byteCount); inFile.read((char*)((BYTE HUGE*)&movieData[0]),movieData.size()); insert(&movieData); } else if(ixChunkID==movieHeader) { DWORD sizeHeader; inFile.read(sizeHeader); inFile+=sizeHeader; } else { AVIJunkHeader aviJunkHeader; AVIListChunk aviListChunk; inFile-=movieHeaderLiteral.length(); if(aviJunkHeader.read(inFile))continue; else if(aviListChunk.read(inFile)&&AVIListChunk::Record==aviListChunk.chunkType())continue; else break; } } AVISubChunk aviSubChunk; aviSubChunk.read(inFile); if(AVISubChunk::Index==aviSubChunk.chunkType()) { IndexChunk indexChunk; inFile+=4; for(short itemIndex=0;itemIndex