diff -r 000000000000 -r 71ca22bcf22a mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/FileAudioOutput/Inc/FileAudioOutput.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/FileAudioOutput/Inc/FileAudioOutput.h Tue Feb 02 01:08:46 2010 +0200 @@ -0,0 +1,385 @@ +/* +* 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 file defines the file audio output class responsible for +* sending output to the file system. +* +*/ + + +#ifndef FILEAUDIOOUTPUT_H +#define FILEAUDIOOUTPUT_H + +// INCLUDES +#include "AdvancedAudioOutput.h" +#include "FileOutputAO.h" + +// FORWARD DECLARATIONS +class CMMFClip; + +// CLASS DECLARATIONS + +/** +* Class containing audio output function implementation specific to file output +* used for conversion. +* +* @lib FileAudioOutput.lib +* @since 3.0 +*/ +class CFileAudioOutput : public CAdvancedAudioOutput, + public MFAOEventGeneratorObserver + { + public: // New functions + + /** + * Class instantiation function. + * @param aDataSink a data sink where converted data is sent + * @param aPrioritySettings priority settings for devSound and policy + * @param aObserver observer class that will handle all DevSoundAudioOutput + * callbacks + * @return pointer to the instance created + */ + IMPORT_C static CFileAudioOutput* NewL(MDataSink& aDataSink, + const TMMFPrioritySettings& aPrioritySettings, + MAdvancedAudioOutputObserver& aObserver); + + /** + * Destructor function + * @param none + * @return none + */ + IMPORT_C virtual ~CFileAudioOutput(); + + /** + * + * Prepares DevSound Audio Input for playback (sets state to ready) + * @since 2.1 + * @param none + * @return none + */ + IMPORT_C virtual void PrimeL(); + + /** + * Handles request to pause playback. Sends pause command to DevSound. + * @since 2.1 + * @param none + * @return none + */ + IMPORT_C virtual void PauseL(); + + /** + * Handles request to start playback. Configures and initializes DevSound and + * sends first buffer of audio data to DevSound, + * @since 2.1 + * @param aBuffer buffer to be played + * aIndex index of the buffer to be played. + * @return none + */ + IMPORT_C virtual void PlayL(TAny* aBuffer, TInt aIndex); + + /** + * Handles request to stop playback. Sends stop command to DevSound. + * @since 2.1 + * @param none + * @return none + */ + IMPORT_C virtual void StopL(TBool aStopDevsound=ETrue); + + /** + * Handles request to get the maximum volume. The max volume is obtained from DevSound. + * @since 2.1 + * @param none + * @return the maximum gain value + */ + IMPORT_C virtual TInt MaxVolumeL(); + + /** + * Handles request to set the maximum volume. The new value is sent to DevSound. + * @since 2.1 + * @param aVolume new volume value + * @return void + */ + IMPORT_C virtual void SetVolumeL(TInt aVolume); + + /** + * Handles request to get the current volume. The current volume is obtained from DevSound. + * @since 2.1 + * @param void + * @return the current volume value + */ + IMPORT_C virtual TInt VolumeL(); + + /** + * Handles request to set priority. The given priority settings are sent to DevSound. + * @since 2.1 + * @param aPrioritySettings new priority settings + * @return none + */ + IMPORT_C virtual void SetPrioritySettingsL(const TMMFPrioritySettings& aPrioritySettings); + + /** + * Handles request to calculate current playback position in terms to micro seconds + * @since 2.1 + * @param none + * @return Current position in microseconds + */ + IMPORT_C virtual TInt64 CalculateAudioOutputPositionL() const; + + /** + * Handles request to get all configured sampling rates from DevSound. + * This is a request for all sampling rates that DevSound is currently + * configured with. + * @since 2.1 + * @param aRates array to hold the retrieved sampling rates + * @return void + */ + IMPORT_C virtual void ConfigRatesL(RArray& aRates); + + /** + * Handles request to get all configured channels from DevSound. + * This is a request for all channels that DevSound is currently + * configured with. + * @since 2.1 + * @param aChannels array to hold the retrieved channels + * @return void + */ + IMPORT_C virtual void ConfigChannelsL(RArray& aChannels); + + /** + * Handles request to get all configured data types (FourCC) from DevSound. + * This is a request for all data types that DevSound is currently + * configured with. + * @since 2.1 + * @param aDataTypes array to hold the retrieved data types + * @return void + */ + IMPORT_C virtual void ConfigDataTypesL(RArray& aDataTypes); + + /** + * Handles request to get all capablities sampling rates from DevSound. + * This contains all sampling rates DevSound is capable of supporting + * @since 2.1 + * @param aRates array to hold the retrieved sampling rates + * @return void + */ + IMPORT_C virtual void CapabilitiesRatesL(RArray& aRates); + + /** + * Handles request to get all capabilities channels from DevSound. + * This is a request for all channels that DevSound is capable of + * supporting. + * @since 2.1 + * @param aChannels array to hold the retrieved channels + * @return void + */ + IMPORT_C virtual void CapabilitiesChannelsL(RArray& aChannels); + + /** + * Handles request to get all capabilities data types (FourCC) from DevSound. + * This is a request for all data types that DevSound is capable of + * supporting. + * @since 2.1 + * @param aDataTypes array to hold the retrieved channels + * @return void + */ + IMPORT_C virtual void CapabilitiesDataTypesL(RArray& aDataTypes); + + /** + * Handles request to set volume ramp to given duration. + * @since 2.1 + * @param aRampDuration ramp duration in microseconds + * @return void + */ + IMPORT_C virtual void SetVolumeRampL(const TTimeIntervalMicroSeconds& aRampDuration); + + /** + * Handles request to set play balance in DevSound. + * @since 2.1 + * @param aLeftPercentage percentage for left channel + * @param aRightPercentage percentage for right channel + * @return void + */ + IMPORT_C virtual void SetPlayBalanceL(TInt aLeftPercentage, TInt aRightPercentage); + + /** + * Handles request to get play balance from DevSound. + * @since 2.1 + * @param aLeftPercentage percentage retrieved for left channel + * @param aRightPercentage percentage retrieved for right channel + * @return void + */ + IMPORT_C virtual void GetPlayBalanceL(TInt& aLeftPercentage, TInt& aRightPercentage); + + /** + * Handles request to configure DevSound with the given parameters. + * @since 2.1 + * @param aSampleRate recording sampling rate + * @param aNumChannel required number of channels (mono/stereo indication) + * @param aFourCC FourCC of required recording format + * @param aConfigType UID for use in the codec ConfigureL function (this UID + * is used to identify the command to the ConfigureL function + * @param aCodecConfigData specific codec configuration data + * + * @return void + * + */ + IMPORT_C virtual void ConfigureL(TUint aSampleRate, TUint aNumChannel, TFourCC aFourCC, + const RArray& aCodecConfigData); + + /** + * Sets the Decoder instance to be used by the audio output. + * @since 3.0 + * @param aDecoder Decoder instance + * @return void + */ + IMPORT_C virtual void SetDecoder(CAdvancedAudioDecoder* aDecoder); + + IMPORT_C virtual void Resume(TInt aBufferIndex = -1); + + IMPORT_C virtual void IsLoopPlayEnabled(const TBool aLoopPlayEnabled); + + IMPORT_C virtual void UnSetLastBuffer(const TBool aUnSetLastBuffer); + + IMPORT_C TBool IsDSStopped(); + + IMPORT_C virtual void SetDataSourceAdapter(CDataSourceAdapter* aDataSourceAdapter); + + /** + * From MAdvancedAudioConverterObserver + * Called by a CAdvancedAudioDecoder object when the specifed buffer is filled. + * @since 3.0 + * @param @param aFilledBuffer data buffer filled with converted data + * @return void + */ + virtual void BufferFilled(CMMFBuffer* aFilledBuffer); + + /** + * From MAdvancedAudioConverterObserver + * Callback function from CAdvancedAudioDecoder when the specified buffer + * needs to be refilled. + * @since 3.0 + * @param aEmptyBuffer an empty buffer to be refilled + * @return - + */ + virtual void RefillBuffer(CMMFBuffer* aEmptyBuffer); + + /** + * From MAdvancedAudioDecoderObserver + * Callback function from CAdvancedAudioDecoder when the specified buffer + * needs to be refilled. This indicates a shared buffer is to be refilled. + * @since 3.2 + * @param aEmptyBuffer an empty buffer to be refilled + * @param aDoSynchronousRead if the operation should be perform Synchronuously + * @return - + */ + //virtual void RefillBuffer(CMMFBuffer* aEmptyBuffer, TBool aDoSynchronousRead); + + /** + * From MAdvancedAudioDecoderObserver + * Callback function from CAdvancedAudioDecoder to handle specified event + * @since 3.0 + * @param aEvent The event to be handled + * @return - + */ + virtual void SendEvent(const TMMFEvent& aEvent); + + /** + * From MFAOEventGeneratorObserver + * Callback function from CFAOEventGenerator when an IO error occurs. + * @since 3.0 + * @param aError a system-wide error code. + * @return - + */ + virtual void IOError(TInt aError); + + private: + + /** + * C++ default constructor. + */ + CFileAudioOutput(); + + /** + * + * Phase 2 of two-phase constructor + * + * @param aDataSink a data sink where converted data is sent + * @param aPrioritySettings priority settings for devSound and policy + * @param aObserver observer class that will handle all DevSoundAudioInput + * callbacks + * + * @return void + * + */ + void ConstructL(MDataSink& aDataSink, + const TMMFPrioritySettings& aPrioritySettings, + MAdvancedAudioOutputObserver& aObserver); + + /** + * Builds configuration data for DevSound and codec + * @since 3.0 + * @return void + */ + void BuildConfigurationParameters(); + + + /** + * Issues a user panic with the given panic code + * @param aPanicCode panic code + * @return void + */ + void Panic(TInt aPanicCode) const; + + private: + + // FileAudioOutput states + enum TState + { + EIdle=0, + EPlaying, + EPaused, + EPreIdle + }; + + private: + + // FileAudioOutput internal state + TState iState; + + MDataSink* iDataSink; + + CMMFClip* iClip; + + // Buffer used when writting to sink + CMMFDataBuffer* iSinkBuffer; + + // sampling rate from the source audio data + TUint iSourceSampleRate; + + // number of channel from the source audio data + TUint iSourceChannels; + + // FourCC from the source audio data + TFourCC iSourceFourCC; + + // codec configuration data + RArray iCodecConfigData; + + // Write position for file sink + TInt iSinkWritePosition; + + CFAOEventGenerator* iFAOEventGenerator; + + }; + +#endif