xref: /haiku/src/add-ons/media/plugins/ape_reader/APEReader.h (revision c1ee694618d533f533ead9a268714585f0af7c75)
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