1 #pragma once 2 3 #include "Types.h" 4 #include "Stream.h" 5 6 class CCsoImageStream : public Framework::CStream 7 { 8 public: 9 CCsoImageStream(Framework::CStream* baseStream); 10 virtual ~CCsoImageStream(); 11 12 virtual void Seek(int64 pos, Framework::STREAM_SEEK_DIRECTION whence) override; 13 virtual uint64 Tell() override; 14 virtual bool IsEOF() override; 15 virtual uint64 Read(void* dest, uint64 bytes) override; 16 virtual uint64 Write(const void* src, uint64 bytes) override; 17 18 private: 19 void ReadFileHeader(); 20 void InitializeBuffers(); 21 uint64 GetTotalSize() const; 22 uint32 ReadFromNextFrame(uint8* dest, uint64 maxBytes); 23 uint64 ReadBaseAt(uint64 pos, uint8* dest, uint64 bytes); 24 void DecompressFrame(uint32 frame, uint64 readBufferSize); 25 26 Framework::CStream* m_baseStream; 27 uint32 m_frameSize; 28 uint8 m_frameShift; 29 uint8 m_indexShift; 30 uint8* m_readBuffer; 31 uint8* m_zlibBuffer; 32 uint32 m_zlibBufferFrame; 33 uint32* m_index; 34 uint64 m_totalSize; 35 uint64 m_position; 36 }; 37