1b51fbe43SDavid McPaul #ifndef ___APEReader_H_ 2b51fbe43SDavid McPaul #define ___APEReader_H_ 3b51fbe43SDavid McPaul //------------------------------------------------------------------------------ 4b51fbe43SDavid McPaul // BeOS 5b51fbe43SDavid McPaul // MAC 6b51fbe43SDavid McPaul #include "MACLib.h" 7b51fbe43SDavid McPaul #include "MonkeysAudioMIMEType.h" 8b51fbe43SDavid McPaul #include "PositionBridgeIO.h" 9b51fbe43SDavid McPaul // Proj 10b51fbe43SDavid McPaul #include "ReaderPlugin.h" // Haiku private header 11b51fbe43SDavid McPaul //------------------------------------------------------------------------------ 12b51fbe43SDavid McPaul const int32 BLOCK_COUNT = 1024*4; // number of blocks, get from MACLib at once 13b51fbe43SDavid McPaul const int32 BUFFER_SIZE = 1024*4; // size of audio data passing to Media Kit 14b51fbe43SDavid McPaul const int32 MEDIA_FILE_FORMAT_VERSION = 100; // media_file_format::version 15b51fbe43SDavid McPaul //============================================================================== 16b51fbe43SDavid McPaul class TAPEReader : public Reader 17b51fbe43SDavid McPaul { 18b51fbe43SDavid McPaul public: 19b51fbe43SDavid McPaul TAPEReader(); 20b51fbe43SDavid McPaul virtual ~TAPEReader(); 21b51fbe43SDavid McPaul 22b51fbe43SDavid McPaul virtual const char* Copyright(); 23b51fbe43SDavid McPaul 24b51fbe43SDavid McPaul virtual status_t Sniff(int32* oStreamCount); 25b51fbe43SDavid McPaul 26b51fbe43SDavid McPaul virtual void GetFileFormatInfo(media_file_format* oMFF); 27b51fbe43SDavid McPaul 28b51fbe43SDavid McPaul virtual status_t AllocateCookie(int32 oStreamNumber, void** oCookie); 29b51fbe43SDavid McPaul virtual status_t FreeCookie(void* oCookie); 30b51fbe43SDavid McPaul 31b51fbe43SDavid McPaul virtual status_t GetStreamInfo(void* oCookie, int64* oFrameCount, bigtime_t* oDuration, media_format* oFormat, 32b51fbe43SDavid McPaul const void** oInfoBuffer, size_t* oInfoSize); 33b51fbe43SDavid McPaul 34*c1ee6946SDavid McPaul virtual status_t Seek(void *cookie, uint32 flags, 35*c1ee6946SDavid McPaul int64 *frame, bigtime_t *time); 36*c1ee6946SDavid McPaul 37*c1ee6946SDavid McPaul virtual status_t FindKeyFrame(void* cookie, uint32 flags, 38*c1ee6946SDavid McPaul int64* frame, bigtime_t* time); 39b51fbe43SDavid McPaul 40b51fbe43SDavid McPaul virtual status_t GetNextChunk(void* oCookie, const void** oChunkBuffer, size_t* oChunkSize, media_header* oMediaHeader); 41b51fbe43SDavid McPaul 42b51fbe43SDavid McPaul private: 43b51fbe43SDavid McPaul typedef Reader SUPER; 44b51fbe43SDavid McPaul 45b51fbe43SDavid McPaul bigtime_t CurrentTime() const; 46b51fbe43SDavid McPaul status_t LoadAPECheck() const; 47b51fbe43SDavid McPaul status_t ReadBlocks(); 48b51fbe43SDavid McPaul void Unset(); 49b51fbe43SDavid McPaul 50b51fbe43SDavid McPaul char* mDecodedData; // data after decoding 51b51fbe43SDavid McPaul int64 mDataSize; 52b51fbe43SDavid McPaul int64 mPlayPos; 53b51fbe43SDavid McPaul int64 mReadPos; 54b51fbe43SDavid McPaul int64 mReadPosTotal; 55b51fbe43SDavid McPaul status_t mLoadAPECheck; 56b51fbe43SDavid McPaul BPositionIO* mSrcPIO; 57b51fbe43SDavid McPaul IAPEDecompress* mDecomp; 58b51fbe43SDavid McPaul TPositionBridgeIO mPositionBridgeIO; 59b51fbe43SDavid McPaul }; 60b51fbe43SDavid McPaul //============================================================================== 61b51fbe43SDavid McPaul class TAPEReaderPlugin : public ReaderPlugin 62b51fbe43SDavid McPaul { 63b51fbe43SDavid McPaul public: 64b51fbe43SDavid McPaul TAPEReaderPlugin(); 65b51fbe43SDavid McPaul virtual ~TAPEReaderPlugin(); 66b51fbe43SDavid McPaul 67b51fbe43SDavid McPaul virtual Reader* NewReader(); 68b51fbe43SDavid McPaul }; 69b51fbe43SDavid McPaul //============================================================================== 70b51fbe43SDavid McPaul MediaPlugin* instantiate_plugin(); 71b51fbe43SDavid McPaul //============================================================================== 72b51fbe43SDavid McPaul #endif // ___APEReader_H_ 73