--- /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