--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/epoc32/include/mmf/server/mmfaudioinput.h Tue Mar 16 16:12:26 2010 +0000
@@ -0,0 +1,271 @@
+// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
+// which accompanies this distribution, and is available
+// at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#ifndef __MMF_AUDIOINPUT_H__
+#define __MMF_AUDIOINPUT_H__
+
+// Standard EPOC32 includes required by this header file
+#include <e32base.h>
+#include <e32std.h>
+
+// Public Media Server includes
+#include <mmfaudioiointerfaceuids.hrh>
+#include <mmf/common/mmfpaniccodes.h>
+
+//DevSound
+#include <mmf/server/sounddevice.h>
+
+/**
+@publishedAll
+@deprecated
+*/
+const TUint KAudioInputDefaultFrameSize = 0x1000; //4K
+//#define KAudioInputCanResample //uncomment this to allow Audio Input to sample rate convert
+
+
+void Panic(TInt aPanicCode);
+
+
+/**
+@publishedAll
+@released
+
+Interface class to allow dynamic linkage to CMMFAudioInput.
+*/
+class MMMFAudioInput : public MDataSource
+ {
+public:
+
+ //factory function
+ inline static MMMFAudioInput* NewAudioInputL(TUid aImplementationUid, const TDesC8& aInitData);
+
+ //interface
+ /**
+ Returns the sound device.
+
+ @return A reference to a CMMFDevSound objector. Accessor function exposing public CMMFDevsound methods.
+ */
+ 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 aConsumer
+ The MDataSink consuming the data contained in aBuffer.
+ */
+ virtual void HWFillBufferL(CMMFBuffer* aBuffer, MDataSink* aConsumer) = 0;
+protected:
+ //constructor
+ /**
+ Protected constructor.
+ */
+ inline MMMFAudioInput() : MDataSource(KUidMmfAudioInput) {};
+ };
+
+/**
+Allocates and constructs an audio input object.
+
+Calls MDataSource::NewSourceL().
+
+@param aImplementationUid
+ The Implementation UID.
+@param aInitData
+ The initialisation data.
+
+@return A new audio input object.
+*/
+inline MMMFAudioInput* MMMFAudioInput::NewAudioInputL( TUid aImplementationUid, const TDesC8& aInitData )
+ {
+ //make sure the cast will be ok by checking the uid is what we expect
+ __ASSERT_ALWAYS(aImplementationUid==KUidMmfAudioInput, Panic(EMMFAudioInputPanicBadUID));
+ MMMFAudioInput* retPtr = STATIC_CAST(MMMFAudioInput*, MDataSource::NewSourceL(aImplementationUid, aInitData));
+ return retPtr;
+ }
+
+/**
+@publishedAll
+@released
+
+Concrete data source to provide microphone support.
+
+Intended to be used by controller plugin developers for source plugins. Uses CMMFDevSound to access
+hardware.
+*/
+class CMMFAudioInput : public CBase, public MMMFAudioInput, public MDevSoundObserver
+
+ {
+public:
+
+ static MDataSource* NewSourceL();
+ virtual ~CMMFAudioInput();
+ void ConstructL();
+
+ //MDataSource mixin implementations
+ virtual TFourCC SourceDataTypeCode(TMediaId aMediaId);
+ virtual void FillBufferL(CMMFBuffer* aBuffer, MDataSink* aConsumer,TMediaId aMediaId);//called by a MDataSink to request buffer fill
+ virtual void BufferEmptiedL(CMMFBuffer* aBuffer); //called by MDataSink to pass back emptied buffer to the source
+ virtual TBool CanCreateSourceBuffer();
+ virtual CMMFBuffer* CreateSourceBufferL(TMediaId aMediaId);
+
+ inline virtual CMMFBuffer* CreateSourceBufferL(TMediaId aMediaId, CMMFBuffer& aSinkBuffer);
+
+ virtual CMMFBuffer* CreateSourceBufferL(TMediaId aMediaId, TBool &aReference);
+
+ inline virtual CMMFBuffer* CreateSourceBufferL(TMediaId aMediaId, CMMFBuffer& aSinkBuffer, TBool &aReference);
+ virtual TInt SourceThreadLogon(MAsyncEventHandler& aEventHandler);
+ virtual void SourceThreadLogoff();
+ virtual void SourcePrimeL();
+ virtual void SourceStopL();
+ virtual void SourcePlayL();
+ virtual void SourcePauseL();
+ virtual void SetSourcePrioritySettings(const TMMFPrioritySettings& aPrioritySettings);
+
+ virtual void NegotiateSourceL(MDataSink& aSink);
+
+ // MMMFAudioInput mixin implementations
+ TInt BytesPlayed();
+ void HWFillBufferL(CMMFBuffer* aBuffer, MDataSink* aConsumer); //called by a FillBufferL if using HW codec
+ CMMFDevSound& SoundDevice();
+ virtual TInt SetSourceDataTypeCode(TFourCC aSourceFourCC, TMediaId aMediaId);
+
+ void LoadL();
+
+ //The following DataType() methods and iBufferStatus should not be used.
+ //They are provided to maintain BC/SC with 7.0s
+ virtual void SetDataTypeL(TFourCC aAudioType);
+ virtual TFourCC DataType() const;
+ /**
+ Buffer completion status.
+ */
+ TRequestStatus iBufferStatus;
+
+protected:
+ virtual void ConstructSourceL( const TDesC8& aInitData ) ;
+
+private:
+ inline CMMFAudioInput() {}
+
+ MAsyncEventHandler* iEventHandler;
+ CMMFDevSound* iMMFDevSound; //this is now private to stop stuff "grabbing it"
+
+ //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*/);
+
+ void ConfigDevSoundL();
+
+private:
+
+ enum TCodec
+ {
+ EUseARMCodec=0,
+ EUseHWCodec
+ };
+
+ enum TState
+ {
+ EIdle=0,
+ EPaused,
+ EDevSoundReady,
+ EBufferEmpty
+ };
+
+ enum TError
+ {
+ ECantCreateBuffer,
+ EEmptyBuffer,
+ EDevSoundNotLoaded,
+ EUnknown
+ };
+
+
+ MDataSink* iConsumer;
+ TState iState;
+
+ TBool iFirstBufferRequested;
+ TBool iFirstBufferRead;
+
+ TBool iDevSoundLoaded;
+ TBool iStopped;
+
+ TError iError;
+ TInt iMMFDevsoundError;
+ TMMFPrioritySettings iPrioritySettings;
+
+ TUint iSinkSampleRate;
+ TUint iSinkChannels;
+ TFourCC iSinkFourCC;
+ TFourCC iDataTypeCode;
+ CMMFBuffer* iDevSoundBuf;
+
+ TBool iPausePending;
+ TInt iInitializeState;
+ CActiveSchedulerWait* iActiveSchedulerWait;
+ };
+
+/**
+Intended for synchronous usage (returns buffer specific to a Media Type).
+
+@param aMediaId
+ The Media ID.
+@param aSinkBuffer
+ Not Used.
+
+@return A pointer to the CMMFBuffer source buffer.
+*/
+inline CMMFBuffer* CMMFAudioInput::CreateSourceBufferL(TMediaId aMediaId, CMMFBuffer& /*aSinkBuffer*/)
+{
+ return CreateSourceBufferL(aMediaId);
+}
+
+/**
+Creates a source buffer.
+
+Intended for asynchronous usage (returns buffer specific to a Media Type).
+
+@param aMediaId
+ The Media ID.
+@param aSinkBuffer
+ Not used.
+@param aReference
+ A boolean indicating if MDataSource owns the buffer. If EFalse the the caller owns the
+ buffer.
+
+@return The source buffer.
+*/
+inline CMMFBuffer* CMMFAudioInput::CreateSourceBufferL(TMediaId aMediaId, CMMFBuffer& /*aSinkBuffer*/, TBool &aReference)
+{
+ return CreateSourceBufferL(aMediaId, aReference);
+}
+
+#endif