multimediacommscontroller/tsrc/mmfstub/inc/mmfaudiooutput.h
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommscontroller/tsrc/mmfstub/inc/mmfaudiooutput.h	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,224 @@
+/*
+* Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+
+
+#ifndef __MMF_AUDIOOUTPUT_H__
+#define __MMF_AUDIOOUTPUT_H__
+
+// Standard EPOC32 includes required by this header file
+#include <e32base.h>
+#include <e32std.h>
+
+#include <mmf/plugin/mmfaudioiointerfaceuids.hrh>
+
+#include <mmf/common/mmfpaniccodes.h>
+
+//DevSound
+#include <mmf/server/sounddevice.h>
+#include <mmf/common/mmfhelper.h>
+/** 
+@publishedAll
+@deprecated
+*/
+const TUint KAudioOutputDefaultFrameSize = 0x1000;
+
+
+void Panic(TInt aPanicCode);
+
+/**
+@publishedAll
+@released
+
+Interface class to allow dynamic linkage to CMMFAudioOutput.
+*/
+class MMMFAudioOutput : public MDataSink
+	{
+public:
+	//factory function
+	/**
+	Gets a new audio output object.
+
+	@param  aImplementationUid
+	        The implementation UID.
+	@param  aInitData
+	        The initialisation data.
+
+	@return The audio output object.
+	*/
+	inline static MMMFAudioOutput* NewAudioOutputL(TUid aImplementationUid, const TDesC8& aInitData);
+	//interface
+
+	/**
+	Returns the sound device.
+
+	Accessor function exposing public CMMFDevsound methods.
+
+	@return	A reference to a CMMFDevSound objector.
+	*/
+	virtual CMMFDevSound& SoundDevice() = 0;
+
+	/**
+	Returns the number of bytes played.
+
+	@return	The number of bytes played. If 16-bit divide this number returned by 2 to get word
+	        length.
+	*/
+	virtual TInt BytesPlayed() = 0;
+
+	/**
+	@deprecated
+
+	Gets audio from hardware device abstracted MMFDevsound (not used).
+
+	@param	aBuffer
+			The data to read in from a Hardware Device
+	@param	aSupplier
+			The MDataSink consuming the data contained in aBuffer.
+	*/
+	virtual void HWEmptyBufferL(CMMFBuffer* aBuffer, MDataSource* aSupplier)=0;//called by a EmptyBufferL if using HW codec
+protected:
+	//constructor
+	/**
+	Protected constructor.
+	*/
+	MMMFAudioOutput() : MDataSink(KUidMmfAudioOutput) {}
+	};
+
+inline MMMFAudioOutput* MMMFAudioOutput::NewAudioOutputL( TUid aImplementationUid,  const TDesC8& aInitData )
+	{
+	//make sure the cast will be ok by checking the uid is what we expect
+	__ASSERT_ALWAYS(aImplementationUid==KUidMmfAudioOutput, Panic(EMMFAudioOutputPanicBadUID));
+	MMMFAudioOutput* retPtr = STATIC_CAST(MMMFAudioOutput*, MDataSink::NewSinkL(aImplementationUid, aInitData));
+	return retPtr;
+	}
+
+/**
+@publishedAll
+@released
+
+The interface into DevSound.
+
+Abstract data sink class providing an interface into hardware sound output.
+
+Uses CMMFDevSound to access such output.
+*/
+class CMMFAudioOutput : public CBase, public MMMFAudioOutput, public MDevSoundObserver
+
+	{
+public:
+	static MDataSink* NewSinkL() ;
+	virtual CMMFAudioOutput::~CMMFAudioOutput();
+	void ConstructL();
+
+	//MDataSink mixin implementations
+	virtual TFourCC SinkDataTypeCode(TMediaId aMediaId); //used by data path MDataSource/Sink for codec matching
+	virtual void EmptyBufferL(CMMFBuffer* aBuffer, MDataSource* aSupplier, TMediaId aMediaId);//called by a MDataSource to empty a buffer
+	virtual void BufferFilledL(CMMFBuffer* aBuffer); //called by MDataSource to pass back full buffer to the sink
+	virtual TBool CanCreateSinkBuffer();
+	virtual CMMFBuffer* CreateSinkBufferL(TMediaId aMediaId, TBool &aReference);
+	virtual TInt SinkThreadLogon(MAsyncEventHandler& aEventHandler);
+	virtual void SinkThreadLogoff();
+	virtual void SinkPrimeL();
+	virtual void SinkPauseL();
+	virtual void SinkPlayL();
+	virtual void SinkStopL();
+	virtual void SetSinkPrioritySettings(const TMMFPrioritySettings& aPrioritySettings);
+	virtual void NegotiateL(MDataSource& aSource);
+	// MMMFAudioOutput mixin implementations
+	TInt BytesPlayed();
+	void HWEmptyBufferL(CMMFBuffer* aBuffer, MDataSource* aSupplier);//called by a EmptyBufferL if using HW codec
+	CMMFDevSound& SoundDevice();
+	virtual TInt SetSinkDataTypeCode(TFourCC aSinkFourCC, TMediaId aMediaId);
+
+	//The following DataType() methods should not be used.
+	//They are provided to maintain BC/SC with 7.0s
+	virtual void SetDataTypeL(TFourCC aAudioType);
+	virtual TFourCC DataType() const;
+
+protected:
+	virtual void ConstructSinkL( const TDesC8& aInitData ) ;
+
+private:
+	inline CMMFAudioOutput() {}
+
+	void ConfigDevSoundL();
+	void LoadL();
+	TInt State();
+
+	//MDevSoundObserver mixin implementations	
+	virtual void InitializeComplete(TInt aError);
+	virtual void ToneFinished(TInt aError); 
+	virtual void BufferToBeFilled(CMMFBuffer* aBuffer);
+	virtual void PlayError(TInt aError); 
+	virtual void BufferToBeEmptied(CMMFBuffer* aBuffer); 
+	virtual void RecordError(TInt aError); 
+	virtual void ConvertError(TInt aError);
+	virtual void DeviceMessage(TUid aMessageType, const TDesC8& aMsg);
+	virtual void SendEventToClient(const TMMFEvent& /*aEvent*/);
+private:
+	MAsyncEventHandler* iEventHandler;
+	CMMFDevSound* iMMFDevSound;	//this is now private to stop stuff "grabbing it"
+	CMMFBuffer* iAudioBuffer;
+	TInt iInitializeState;	
+	enum TState
+		{
+		EIdle=0,
+		EDevSoundReady,
+		EPaused
+		};
+
+	enum TError
+		{
+		ECantCreateBuffer,
+		EEmptyBuffer,
+		EDevSoundNotLoaded,
+		ERecordNotSupported,
+		EDevSoundError,
+		EUnknown
+		};
+
+	MDataSource* iSupplier;
+	TState iState;
+
+	TBool iFirstBufferSent;
+	TBool iDevSoundLoaded;
+
+	TError iError;
+	TInt iMMFDevsoundError;
+	TMMFPrioritySettings iPrioritySettings;
+
+	TUint iSourceSampleRate; 
+	TUint iSourceChannels;
+	TFourCC iSourceFourCC;
+	TFourCC iDataTypeCode;
+	CMMFDataBuffer* iDevSoundBuffer;
+
+	TMMFCapabilities iDevSoundConfig;
+
+ 	TBool iNeedsSWConversion;
+	TUint iSWConvertSampleRate;
+	TUint iSWConvertChannels;
+ 	CMMFChannelAndSampleRateConverterFactory* iChannelAndSampleRateConverterFactory;
+ 	CMMFChannelAndSampleRateConverter* iChannelAndSampleRateConverter;
+ 	CMMFDataBuffer* iConvertBuffer;
+ 	CMMFBuffer* iBufferToEmpty;
+ 	CActiveSchedulerWait* iActiveSchedulerWait;
+	};
+
+#endif