Play-/Source/discimages/CsoImageStream.h

38 lines
1,009 B
C
Raw Permalink Normal View History

2015-04-11 12:16:11 -07:00
#pragma once
2023-01-06 13:47:25 -05:00
#include <memory>
2015-04-11 12:16:11 -07:00
#include "Types.h"
#include "Stream.h"
class CCsoImageStream : public Framework::CStream
{
public:
CCsoImageStream(std::unique_ptr<Framework::CStream> baseStream);
2018-04-30 21:01:23 +01:00
virtual ~CCsoImageStream();
2015-04-11 12:16:11 -07:00
2018-04-30 21:01:23 +01:00
virtual void Seek(int64 pos, Framework::STREAM_SEEK_DIRECTION whence) override;
virtual uint64 Tell() override;
virtual bool IsEOF() override;
virtual uint64 Read(void* dest, uint64 bytes) override;
virtual uint64 Write(const void* src, uint64 bytes) override;
2015-04-11 12:16:11 -07:00
private:
2018-04-30 21:01:23 +01:00
void ReadFileHeader();
void InitializeBuffers();
uint64 GetTotalSize() const;
uint32 ReadFromNextFrame(uint8* dest, uint64 maxBytes);
uint64 ReadBaseAt(uint64 pos, uint8* dest, uint64 bytes);
void DecompressFrame(uint32 frame, uint64 readBufferSize);
2015-04-11 12:16:11 -07:00
std::unique_ptr<Framework::CStream> m_baseStream;
2018-04-30 21:01:23 +01:00
uint32 m_frameSize;
uint8 m_frameShift;
uint8 m_indexShift;
uint8* m_readBuffer;
uint8* m_zlibBuffer;
uint32 m_zlibBufferFrame;
uint32* m_index;
uint64 m_totalSize;
uint64 m_position;
2015-04-11 12:16:11 -07:00
};