xref: /haiku/src/apps/mediaplayer/media_node_framework/audio/AudioAdapter.h (revision 8dd3060da4f50b8de2830fd93216b186efec7c4f)
10fc56ed5SStephan Aßmus /*
2*8dd3060dSAxel Dörfler  * Copyright 2000-2006 Ingo Weinhold <ingo_weinhold@gmx.de>
30fc56ed5SStephan Aßmus  * All rights reserved. Distributed under the terms of the MIT licensce.
40fc56ed5SStephan Aßmus  */
5*8dd3060dSAxel Dörfler #ifndef AUDIO_ADAPTER_H
6*8dd3060dSAxel Dörfler #define AUDIO_ADAPTER_H
7*8dd3060dSAxel Dörfler 
80fc56ed5SStephan Aßmus 
90fc56ed5SStephan Aßmus /*! This AudioReader slaves an AudioConverter and an AudioResampler
100fc56ed5SStephan Aßmus 	to convert the source data to a given format.
110fc56ed5SStephan Aßmus 	At this time the number of channels cannot be changed and the output
120fc56ed5SStephan Aßmus 	format byte order is set to the one of the host.
130fc56ed5SStephan Aßmus 	If input and output format are the same, the overhead is quit small.
140fc56ed5SStephan Aßmus */
150fc56ed5SStephan Aßmus 
160fc56ed5SStephan Aßmus 
170fc56ed5SStephan Aßmus #include "AudioReader.h"
180fc56ed5SStephan Aßmus 
19*8dd3060dSAxel Dörfler 
200fc56ed5SStephan Aßmus class AudioChannelConverter;
210fc56ed5SStephan Aßmus class AudioFormatConverter;
220fc56ed5SStephan Aßmus class AudioResampler;
230fc56ed5SStephan Aßmus 
24*8dd3060dSAxel Dörfler 
250fc56ed5SStephan Aßmus class AudioAdapter : public AudioReader {
260fc56ed5SStephan Aßmus public:
270fc56ed5SStephan Aßmus 								AudioAdapter(AudioReader* source,
280fc56ed5SStephan Aßmus 									const media_format& format);
290fc56ed5SStephan Aßmus 	virtual						~AudioAdapter();
300fc56ed5SStephan Aßmus 
31*8dd3060dSAxel Dörfler 	virtual bigtime_t			InitialLatency() const;
320fc56ed5SStephan Aßmus 	virtual	status_t			Read(void* buffer, int64 pos, int64 frames);
330fc56ed5SStephan Aßmus 
340fc56ed5SStephan Aßmus 	virtual	status_t			InitCheck() const;
350fc56ed5SStephan Aßmus 
360fc56ed5SStephan Aßmus 			AudioReader*		Source() const;
370fc56ed5SStephan Aßmus 
380fc56ed5SStephan Aßmus protected:
390fc56ed5SStephan Aßmus 			void				_ConvertChannels(void* buffer,
400fc56ed5SStephan Aßmus 									int64 frames) const;
410fc56ed5SStephan Aßmus 
420fc56ed5SStephan Aßmus 			AudioReader*		fSource;
430fc56ed5SStephan Aßmus 			AudioReader*		fFinalConverter;
440fc56ed5SStephan Aßmus 			AudioFormatConverter* fFormatConverter;
450fc56ed5SStephan Aßmus 			AudioChannelConverter* fChannelConverter;
460fc56ed5SStephan Aßmus 			AudioResampler*		fResampler;
470fc56ed5SStephan Aßmus };
480fc56ed5SStephan Aßmus 
490fc56ed5SStephan Aßmus #endif	// AUDIO_ADAPTER_H
50