mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/AdvancedAudioController/Inc/AdvancedAudioController.h
changeset 0 71ca22bcf22a
child 7 709f89d8c047
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/AdvancedAudioController/Inc/AdvancedAudioController.h	Tue Feb 02 01:08:46 2010 +0200
@@ -0,0 +1,555 @@
+/*
+* Copyright (c) 2006 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:  This class is the top base class in the Advanced Audio Controller
+*				 inheritance hierarchy.
+*
+*/
+
+
+
+#ifndef CADVANCEDAUDIOCONTROLLER_H
+#define CADVANCEDAUDIOCONTROLLER_H
+
+// INCLUDES
+#include <e32base.h>
+#include <e32std.h>
+#include <implementationproxy.h>
+#include <mmfcontroller.h>
+#include <mmfstandardcustomcommands.h>
+#include "MCustomInterfaceCustomCommandImplementor.h"
+
+class CCustomInterfaceBuilder;
+class CMMFDevSound;
+// CLASS DECLARATION
+
+/**
+*  This is the base class CAdvancedAudioController.
+*
+*  @lib AdvancedAudioController.lib
+*  @since 3.0
+*/
+class CAdvancedAudioController : public CMMFController,
+                                 public MAsyncEventHandler,
+                                 public MMMFAudioControllerCustomCommandImplementor,
+                                 public MDataSource,
+                                 public MDataSink,
+                                 public MCustomInterfaceCustomCommandImplementor
+    {
+    protected:  // Constructors and destructor
+
+		/**
+		* Destructor
+		*/
+		IMPORT_C virtual ~CAdvancedAudioController();
+
+        /**
+        * C++ default constructor.
+        */
+        IMPORT_C CAdvancedAudioController();
+        
+        virtual void ConstructL();
+
+	protected: // New functions
+
+        /**
+        * Creates a buffer of specified size. Buffer is pushed onto the cleanupstack.
+        * @since 3.0
+        * @param aSize size of the buffer
+        * @return pointer to the new buffer
+        */
+		IMPORT_C CMMFDataBuffer* CreateSourceBufferOfSizeLC( TUint aSize );
+
+        /**
+        * Resets all buffers in iSharedBuffers.
+        * @since 3.0
+        * @param aNumOfBuffer number of buffers to be contained in iSharedBuffers
+        * @param aBufferSize size of the buffers
+        * @return void
+        */
+		IMPORT_C void ResetSharedBuffersL( TInt aNumOfBuffer, TInt aBufferSize );
+
+        /**
+        * Raises a system panic.
+        * @since 3.0
+        * @param aPanicCode panic code
+        * @return void
+        */
+		IMPORT_C void Panic( TInt aPanicCode );
+
+    protected: // Functions from base classes (CMMFController)
+
+		/**
+        * From CMMFController
+		* Handles creation of the data source.
+		* @param aSource data source
+		* @return void
+		*/
+		IMPORT_C virtual void AddDataSourceL( MDataSource& aSource );
+
+		/**
+        * From CMMFController
+		* Handles creation of the data output.
+		* @param aSink data output
+		* @return void
+		*/
+		IMPORT_C virtual void AddDataSinkL( MDataSink& aSink );
+
+		/**
+        * From CMMFController
+		* Deletes the data source.
+		* @param aDataSource the address of this source must be same as
+		*                    the existing datasource
+		* @return void
+		*/
+		IMPORT_C virtual void RemoveDataSourceL( MDataSource& aDataSource );
+
+		/**
+        * From CMMFController
+		* Deletes the data output.
+		* @param aDataSink the address of this output must be same as
+		*                  the existing output
+		* @return void
+		*/
+		IMPORT_C virtual void RemoveDataSinkL( MDataSink& aDataSink );
+
+		/**
+        * From CMMFController
+		* Resets the controller object and removes datasource/sink.
+		* @param none
+		* @return void
+		*/
+		IMPORT_C virtual void ResetL();
+
+		/**
+        * From CMMFController
+		* Prepares the resources for play. Source and sink must have been added before
+		* calling PrimeL().
+		* @param none
+		* @return void
+		*/
+		IMPORT_C virtual void PrimeL();
+
+		/**
+        * From CMMFController
+		* Initiates play. Leaves if PrimeL() has not been called.
+		* @param none
+		* @return void
+		*/
+		IMPORT_C virtual void PlayL();
+
+		/**
+        * From CMMFController
+		* Pauses the play. Leave with if PlayL() has not been called.
+		* @param none
+		* @return void
+		*/
+		IMPORT_C virtual void PauseL();
+
+		/**
+        * From CMMFController
+		* Stops the play. Leaves if controller state is already stopped.
+		* @param none
+		* @return void
+		*/
+		IMPORT_C virtual void StopL();
+
+		/**
+        * From CMMFController
+		* Returns the current position in microseconds.
+		* @param none
+		* @return current position in microseconds
+		*/
+		IMPORT_C virtual TTimeIntervalMicroSeconds PositionL() const;
+
+		/**
+        * From CMMFController
+		* Sets the play position.
+		* @param aPosition position in microseconds
+		* @return void
+		*/
+		IMPORT_C virtual void SetPositionL( const TTimeIntervalMicroSeconds& aPosition );
+
+		/**
+        * From CMMFController
+		* Returns the duration of source (or the sink if the source is not defined)
+		* If neither source nor sink are defined, it returns 0.
+		* @param none
+		* @return duration in microseconds
+		*/
+		IMPORT_C virtual TTimeIntervalMicroSeconds DurationL() const;
+
+		/**
+        * From CMMFController
+		* Sets the source priority settings if a priority mechanism is required
+		* to arbitrate between multiple clients trying to access the same resource.
+		* Sets the priority for the source and the sink (provided they are defined).
+		* @param aPrioritySettings priority settings
+		* @return void
+		*/
+		IMPORT_C virtual void SetPrioritySettings( const TMMFPrioritySettings& aPrioritySettings );
+
+		/**
+        * From CMMFController
+		* Retrieve the number of meta data entries in the clip.
+		* @param aNumberOfEntries on return, the number of meta data entries
+		* @return void
+		*/
+		IMPORT_C virtual void GetNumberOfMetaDataEntriesL( TInt& aNumberOfEntries );
+
+		/**
+        * From CMMFController
+		* Gets the specified meta data entry.
+		* @param aIndex the zero based meta data entry index to retrieve
+		* @return pointer to the meta data entry
+		*/
+		IMPORT_C virtual CMMFMetaDataEntry* GetMetaDataEntryL( TInt aIndex );
+
+    protected: // Functions from base classes (MMMFAudioControllerCustomCommandImplementor)
+
+		/**
+		* From MMMFAudioControllerCustomCommandImplementor
+		* Sets the sample rate of the data source in samples/second.
+		* @param aSampleRate sample rate, in samples/second.
+		* @return void
+		*/
+		IMPORT_C virtual void MacSetSourceSampleRateL( TUint aSampleRate );
+
+		/**
+		* From MMMFAudioControllerCustomCommandImplementor
+		* Sets the bit rate of the data source in bits/second.
+		* @param aBitRate bit rate, in bits/second.
+		* @return void
+		*/
+		IMPORT_C virtual void MacSetSourceBitRateL( TUint aBitRate );
+
+		/**
+		* From MMMFAudioControllerCustomCommandImplementor
+		* Sets the number of channels in the data source.
+		* For example, one channel for mono, two channels for stereo, etc.
+		* @param aNumChannels number of channels
+		* @return void
+		*/
+		IMPORT_C virtual void MacSetSourceNumChannelsL( TUint aNumChannels );
+
+		/**
+		* From MMMFAudioControllerCustomCommandImplementor
+		* Sets the format of the data source.
+		* The UID corresponds to the UID of the CMMFFormat-derived ECOM plugin to be used.
+		* @param aFormatUid format plugin to be used.
+		* @return void
+		*/
+		IMPORT_C virtual void MacSetSourceFormatL( TUid aFormatUid );
+
+		/**
+		* From MMMFAudioControllerCustomCommandImplementor
+		* Sets the fourCC multimedia data type code of the source.
+		* @param aDataType fourCC code.
+		* @return void
+		*/
+		IMPORT_C virtual void MacSetSourceDataTypeL( TFourCC aDataType );
+
+		/**
+		* From MMMFAudioControllerCustomCommandImplementor
+		* Sets the sample rate of the data sink in samples/second.
+		* @param aSampleRate The sample rate, in samples/second.
+		* @return void
+		*/
+		IMPORT_C virtual void MacSetSinkSampleRateL( TUint aSampleRate );
+
+		/**
+		* From MMMFAudioControllerCustomCommandImplementor
+		* Sets the bit rate of the data sink in bits/second.
+		* @param aRate bit rate, in bits/second.
+		* @return void
+		*/
+		IMPORT_C virtual void MacSetSinkBitRateL( TUint aRate );
+
+		/**
+		* From MMMFAudioControllerCustomCommandImplementor
+		* Sets the number of channels in the data sink.
+		* For example, one channel for mono, two channels for stereo, etc.
+		* @param aNumChannels number of channels
+		* @return void
+		*/
+		IMPORT_C virtual void MacSetSinkNumChannelsL( TUint aNumChannels );
+
+		/**
+		* From MMMFAudioControllerCustomCommandImplementor
+		* Sets the format of the data sink.
+		* The UID corresponds to the UID of the CMMFFormat-derived ECOM plugin to be used.
+		* @param aFormatUid format plugin to be used
+		* @return void
+		*/
+		IMPORT_C virtual void MacSetSinkFormatL( TUid aFormatUid );
+
+		/**
+		* From MMMFAudioControllerCustomCommandImplementor
+		* Sets the fourCC multimedia data type code of the sink.
+		* @param aDataType fourCC code
+		* @return void
+		*/
+		IMPORT_C virtual void MacSetSinkDataTypeL( TFourCC aDataType );
+
+		/**
+		* From MMMFAudioControllerCustomCommandImplementor
+		* Sets the codec to be used. Useful when recording data.
+		* @param aSourceDataType source data type
+		* @param aSinkDataType sink data type
+		* @return void
+		*/
+		IMPORT_C virtual void MacSetCodecL( TFourCC aSourceDataType, TFourCC aSinkDataType );
+
+		/**
+		* From MMMFAudioControllerCustomCommandImplementor
+		* Gets the sample rate of the data source in samples/second.
+		* @param aRate sample rate, in samples/second
+		* @return void
+		*/
+		IMPORT_C virtual void MacGetSourceSampleRateL( TUint& aRate );
+
+		/**
+		* From MMMFAudioControllerCustomCommandImplementor
+		* Gets the bit rate of the data source in bits/second.
+		* @param aRate sample rate, in samples/second.
+		* @return void
+		*/
+		IMPORT_C virtual void MacGetSourceBitRateL( TUint& aRate );
+
+		/**
+		* From MMMFAudioControllerCustomCommandImplementor
+		* Gets the number of channels in the data source.
+		* @param aNumChannels number of channels
+		* @return void
+		*/
+		IMPORT_C virtual void MacGetSourceNumChannelsL( TUint& aNumChannels );
+
+		/**
+		* From MMMFAudioControllerCustomCommandImplementor
+		* Gets the format of the data source.
+		* The UID corresponds to the UID of the CMMFFormat-derived ECOM plugin being used.
+		* @param aFormat format plugin being used
+		* @return void
+		*/
+		IMPORT_C virtual void MacGetSourceFormatL( TUid& aFormat );
+
+		/**
+		* From MMMFAudioControllerCustomCommandImplementor
+		* Gets the fourCC code of the source.
+		* @param aDataType fourCC code
+		* @return void
+		*/
+		IMPORT_C virtual void MacGetSourceDataTypeL( TFourCC& aDataType );
+
+		/**
+		* From MMMFAudioControllerCustomCommandImplementor
+		* Gets the sample rate of the data sink in samples/second.
+		* @param aRate sample rate, in samples/second
+		* @return void
+		*/
+		IMPORT_C virtual void MacGetSinkSampleRateL( TUint& aRate );
+
+		/**
+		* From MMMFAudioControllerCustomCommandImplementor
+		* Gets the bit rate of the data sink in bits/second.
+		* @param aRate bit rate, in bits/second.
+		* @return void
+		*/
+		IMPORT_C virtual void MacGetSinkBitRateL( TUint& aRate );
+
+		/**
+		* From MMMFAudioControllerCustomCommandImplementor
+		* Gets the number of channels in the data sink.
+		* @param aNumChannels number of channels.
+		* @return void
+		*/
+		IMPORT_C virtual void MacGetSinkNumChannelsL( TUint& aNumChannels );
+
+		/**
+		* From MMMFAudioControllerCustomCommandImplementor
+		* Gets the format of the data sink.
+		* The UID corresponds to the uid of the CMMFFormat-derived ECOM plugin being used.
+		*
+		* @param aFormat format plugin being used.
+		* @return void
+		*/
+		IMPORT_C virtual void MacGetSinkFormatL( TUid& aFormat );
+
+		/**
+		* From MMMFAudioControllerCustomCommandImplementor
+		* Gets the fourCC code of the sink.
+		* @param aDataType fourCC code
+		* @return void
+		*/
+		IMPORT_C virtual void MacGetSinkDataTypeL( TFourCC& aDataType );
+
+		/**
+		* From MMMFAudioControllerCustomCommandImplementor
+		* Gets the list of sample rates supported by the data source.
+		* @param aSupportedRates supported rates
+		*        Warning: Existing objects in this array will be removed by this method.
+		* @return void
+		*/
+		IMPORT_C virtual void MacGetSupportedSourceSampleRatesL( RArray<TUint>& aSupportedRates );
+
+		/**
+		* From MMMFAudioControllerCustomCommandImplementor
+		* Gets the list of bit rates supported by the data source.
+		* @param aSupportedRates supported rates
+		*        Warning: Existing objects in this array will be removed by this method.
+		* @return void
+		*/
+		IMPORT_C virtual void MacGetSupportedSourceBitRatesL( RArray<TUint>& aSupportedRates );
+
+		/**
+		* From MMMFAudioControllerCustomCommandImplementor
+		* Gets the list of channels supported by the data source (ie mono, stereo etc).
+		* @param aSupportedChannels supported channels
+		*        Warning: Existing objects in this array will be removed by this method.
+		* @return void
+		*/
+		IMPORT_C virtual void MacGetSupportedSourceNumChannelsL( RArray<TUint>& aSupportedChannels );
+
+		/**
+		* From MMMFAudioControllerCustomCommandImplementor
+		* Gets the list of fourCC codes supported by the data source.
+		* @param aSupportedDataTypes supported data types
+		*        Warning: Existing objects in this array will be removed by this method.
+		* @return void
+		*/
+		IMPORT_C virtual void MacGetSupportedSourceDataTypesL( RArray<TFourCC>& aSupportedDataTypes );
+
+		/**
+		* From MMMFAudioControllerCustomCommandImplementor
+		* Gets the list of sample rates supported by the data sink.
+		* @param aSupportedRates supported rates
+		*        Warning: Existing objects in this array will be removed by this method.
+		* @return void
+		*/
+		IMPORT_C virtual void MacGetSupportedSinkSampleRatesL( RArray<TUint>& aSupportedRates );
+
+		/**
+		* From MMMFAudioControllerCustomCommandImplementor
+		* Gets the list of bit rates supported by the data sink.
+		* @param aSupportedRates supported rates
+		*        Warning: Existing objects in this array will be removed by this method.
+		* @return void
+		*/
+		IMPORT_C virtual void MacGetSupportedSinkBitRatesL( RArray<TUint>& aSupportedRates );
+
+		/**
+		* From MMMFAudioControllerCustomCommandImplementor
+		* Gets the list of channels supported by the data sink (ie mono, stereo etc).
+		* @param aSupportedChannels supported channels
+		*        Warning: Existing objects in this array will be removed by this method.
+		* @return void
+		*/
+		IMPORT_C virtual void MacGetSupportedSinkNumChannelsL( RArray<TUint>& aSupportedChannels );
+
+		/**
+		* From MMMFAudioControllerCustomCommandImplementor
+		* Gets the list of fourCC codes supported by the data sink.
+		* @param aSupportedDataTypes supported data types
+		*        Warning: Existing objects in this array will be removed by this method.
+		* @return void
+		*/
+		IMPORT_C virtual void MacGetSupportedSinkDataTypesL( RArray<TFourCC>& aSupportedDataTypes );
+
+    protected: // Functions from base classes (MAsyncEventHandler)
+
+		/**
+		* From MAsyncEventHandler
+		* Sends an event to the client.
+		* @param aEvent event to send
+		* @return error code. KErrNone if successful.
+		*/
+		IMPORT_C virtual TInt SendEventToClient( const TMMFEvent& aEvent );
+
+    protected: // Functions from base classes (MDataSource & MDataSink)
+
+		// From MDataSource
+		// The following functions are declared as pure virtual in MDataSource, therefore
+		// declared here.  However, they are not implemented.
+		IMPORT_C virtual TFourCC SourceDataTypeCode( TMediaId aMediaId );
+		IMPORT_C virtual void FillBufferL( CMMFBuffer* aBuffer, MDataSink* aConsumer, TMediaId aMediaId );
+		IMPORT_C virtual void BufferEmptiedL( CMMFBuffer* aBuffer );
+		IMPORT_C virtual TBool CanCreateSourceBuffer();
+		IMPORT_C virtual CMMFBuffer* CreateSourceBufferL( TMediaId aMediaId, TBool& aReference );
+		IMPORT_C virtual void ConstructSourceL( const TDesC8& aInitData );
+
+		// From MDataSink
+		// The following functions are declared as pure virtual in MDataSink, therefore
+		// declared here.  However, they are not implemented.
+		IMPORT_C virtual TFourCC SinkDataTypeCode( TMediaId aMediaId );
+		IMPORT_C virtual void EmptyBufferL( CMMFBuffer* aBuffer, MDataSource* aSupplier, TMediaId aMediaId );
+		IMPORT_C virtual void BufferFilledL ( CMMFBuffer* aBuffer );
+		IMPORT_C virtual TBool CanCreateSinkBuffer();
+		IMPORT_C virtual CMMFBuffer* CreateSinkBufferL( TMediaId aMediaId, TBool& aReference );
+		IMPORT_C virtual void ConstructSinkL( const TDesC8& aInitData );
+
+	protected: // Data
+
+		/**
+		* From MCustomInterfaceCustomCommandImplementor
+		* Creates a Custom Interface Builder
+		*/
+		IMPORT_C virtual const TMMFMessageDestination& GetCustomInterfaceBuilderL();
+
+	protected: // Data
+		// AdvancedAudioController panic codes
+		enum TAdvancedAudioControllerPanics
+		{
+		EBadArgument,
+		EBadState,
+		EBadInvariant,
+		EBadReset,
+		EPostConditionViolation
+		};
+
+		// Pointer to the data source
+		MDataSource* iDataSource;
+		// Pointer to the data sink
+		MDataSink* iDataSink;
+
+		// Priority settings
+		TMMFPrioritySettings iPrioritySettings;
+		// Sample rate
+		TInt iSampleRate;
+		// Bit rate
+		TInt iBitRate;
+		// Number of channels
+		TInt iChannels;
+		// Duration of the clip
+		TInt64 iDuration;
+		// Data type
+		TFourCC iDataType;
+		// Time position in microseconds
+		TInt64 iTimePositionInMicroSecs;
+
+		// Max number of shared buffer
+		TInt iSharedBufferMaxNum;
+		// Max buffer size
+		TInt iSharedBufferMaxSize;
+		// Array of shared buffers
+		RPointerArray<CMMFDataBuffer> iSharedBuffers;
+		// Current index within iSharedBuffers
+		TInt iSharedBufferIndex;
+		CMMFDevSound* iMMFDevSound;
+		
+		// Pointer to the custom interface builder
+		CCustomInterfaceBuilder* iCustomInterfaceBuilder;
+    };
+
+#endif		// CADVANCEDAUDIOCONTROLLER_H
+
+// End of File