42 lines
871 B
C++
42 lines
871 B
C++
#ifndef __MDFN_CDAFREADER_H
|
|
#define __MDFN_CDAFREADER_H
|
|
|
|
#include "Stream.h"
|
|
|
|
class CDAFReader
|
|
{
|
|
public:
|
|
CDAFReader();
|
|
virtual ~CDAFReader();
|
|
|
|
virtual uint64 FrameCount(void) = 0;
|
|
INLINE uint64 Read(uint64 frame_offset, int16 *buffer, uint64 frames)
|
|
{
|
|
uint64 ret;
|
|
|
|
if(LastReadPos != frame_offset)
|
|
{
|
|
//puts("SEEK");
|
|
if(!Seek_(frame_offset))
|
|
return(0);
|
|
LastReadPos = frame_offset;
|
|
}
|
|
|
|
ret = Read_(buffer, frames);
|
|
LastReadPos += ret;
|
|
return(ret);
|
|
}
|
|
|
|
private:
|
|
virtual uint64 Read_(int16 *buffer, uint64 frames) = 0;
|
|
virtual bool Seek_(uint64 frame_offset) = 0;
|
|
|
|
uint64 LastReadPos;
|
|
};
|
|
|
|
// AR_Open(), and CDAFReader, will NOT take "ownership" of the Stream object(IE it won't ever delete it). Though it does assume it has exclusive access
|
|
// to it for as long as the CDAFReader object exists.
|
|
CDAFReader *CDAFR_Open(Stream *fp);
|
|
|
|
#endif
|