| author | hgs |
| Fri, 25 Jun 2010 17:36:03 -0500 | |
| changeset 28 | ebf79c79991a |
| parent 12 | 5a06f39ad45b |
| permissions | -rw-r--r-- |
/* * 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; TInt iSharedBufferMaxSizeForNonSeekableSrc; // 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