audiostubs/devsoundextensions_stubs/mmfdevsoundadaptation_stub/src/MmfDevSoundAdaptationBody.cpp
branchRCL_3
changeset 44 b5894bb67e73
parent 35 37b610eb7fe3
--- a/audiostubs/devsoundextensions_stubs/mmfdevsoundadaptation_stub/src/MmfDevSoundAdaptationBody.cpp	Thu Aug 19 09:36:39 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2019 +0,0 @@
-/*
-* Copyright (c) 2006-2008 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: Audio Stubs -  DevSound adaptation stub body implementation.
-*
-*/
-
-
-// INCLUDE FILES
-#include <e32base.h>
-#include <mdaaudiotoneplayer.h>
-
-#include "G711DecoderIntfc.h"
-#include "G729DecoderIntfc.h"
-#include "IlbcDecoderIntfc.h"
-#include "G711EncoderIntfc.h"
-#include "G729EncoderIntfc.h"
-#include "IlbcEncoderIntfc.h"
-#include "ErrorConcealmentIntfc.h"
-#include "SpeechEncoderConfig.h"
-
-#include "AudioInputMessageTypes.h"
-#include "AudioOutputMessageTypes.h"
-//#include "AudioResourceMessageTypes.h"
-
-#include "AudioInputCI.h"
-#include "AudioOutputCI.h"
-#include "G711DecoderIntfcCI.h"
-#include "G729DecoderIntfcCI.h"
-#include "IlbcDecoderIntfcCI.h"
-#include "G711EncoderIntfcCI.h"
-#include "G729EncoderIntfcCI.h"
-#include "IlbcEncoderIntfcCI.h"
-#include "ErrorConcealmentIntfcCI.h"
-#include "SpeechEncoderConfigCI.h"
-
-//#include <AudioResourceCIStub.h>
-//#include <AudioEqualizerCI.h>
-//#include <EnvironmentalReverbCI.h>
-//#include <StereoWideningCI.h>
-//#include <BassBoostCI.h>
-//#include <SourceDopplerBase.h>
-//#include <ListenerDopplerBase.h>
-//#include <SourceDopplerCI.h>
-//#include <ListenerDopplerCI.h>
-//#include <ListenerLocationCI.h>
-//#include <SourceLocationCI.h>
-//#include <ListenerOrientationCI.h>
-//#include <SourceOrientationCI.h>
-//#include <DistanceAttenuationCI.h>
-//#include <LoudnessCI.h>
-
-//#include <AddedDevSoundControlCI.h>
-//#include <AddedDevSoundControlCIStub.h>
-//#include <RestrictedAudioOutputCI.h>
-
-#include "MmfDevSoundAdaptationBody.h"
-#include "MmfHwDeviceStub.h"
-#include "TonePlayCompleteTimer.h"
-
-
-// CONSTANTS
-#ifdef _DEBUG
-#include "e32debug.h"
-
-#define DEBPRN0(str)                RDebug::Print(str, this)
-#define DEBPRN1(str, val1)          RDebug::Print(str, this, val1)
-#define DEBPRN2(str, val1, val2)    RDebug::Print(str, this, val1, val2)
-#else
-#define DEBPRN0(str)
-#define DEBPRN1(str, val1)
-#define DEBPRN2(str, val1, val2)
-#endif //_DEBUG
-
-
-const TUint KMaxVolume = 10;
-const TUint KToneSamplingRate = 8000;
-const TUint KToneChannels = 2;
-// Time to play one note 1/10th of 1/2 a second
-const TUint KToneNotePlayTime = 50000;
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::CBody
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CMMFDevSoundAdaptation::CBody::CBody()
-    {
-    DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CBody"));
-    iMode= EMMFStateIdle;
-    //Set reasonable default values for DTMF
-    iDTMFGen.SetToneDurations(250000,50000,250000);
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::ConstructL
-// Symbian 2nd phase constructor can leave.
-// assumes that iParent has already been set up properly
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::ConstructL(
-    RServer2& /*aPolicyServerHandle*/)
-    {
-    // Default
-    // set the default capability
-    iDeviceCapabilities.iRate = EMMFSampleRate8000Hz;
-    iDeviceCapabilities.iEncoding = EMMFSoundEncoding16BitPCM;
-    iDeviceCapabilities.iChannels = EMMFMono;
-    iDeviceCapabilities.iBufferSize = KBufferLength;
-
-    DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::ConstructL:EXIT"));
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CMMFDevSoundAdaptation::CBody* CMMFDevSoundAdaptation::CBody::NewL()
-    {
-    CMMFDevSoundAdaptation::CBody* self = new (ELeave) CBody;
-    return self;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBodye::~CBody
-// Destructor
-// -----------------------------------------------------------------------------
-//
-CMMFDevSoundAdaptation::CBody::~CBody()
-    {
-    DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::~CBody:ENTER"));
-    delete iToneBuffer1;
-    delete iToneBuffer2;
-    delete iDevSoundUtil;
-    delete iFixedSequences;
-    delete iCMMFHwDevice;
-    delete iTonePlayCompleteTimer;
-    DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::~CBody:EXIT"));
-    }
-
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::InitializeL
-// Initializes CMMFDevSoundProxy object to play and record PCM16 raw audio data
-// with sampling rate of 8 KHz.
-//
-// On completion of Initialization, calls InitializeComplete() on
-// aDevSoundObserver.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::InitializeL(
-    MDevSoundAdaptationObserver& aDevSoundObserver,
-    TMMFState aMode)
-    {
-    // if no HwDevice id specified, load default null implementation
-    TUid rawUid = {0};
-    InitializeL(aDevSoundObserver, rawUid, aMode);
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::InitializeL
-// Initializes DevSound object for the mode aMode for processing audio data
-// with hardware device aHWDev.
-//
-// On completion of Initialization, the observer will be notified via call back
-// InitializeComplete().
-//
-// Leaves on failure.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::InitializeL(
-    MDevSoundAdaptationObserver& aDevSoundObserver,
-    TUid aHWDev,
-    TMMFState aMode)
-    {
-    DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::InitializeL:ENTER"));
-    TInt initError = KErrNone;
-    iDevSoundObserver = &aDevSoundObserver;
-
-    if (aMode == EMMFStateIdle)
-        {
-        User::Leave(KErrNotSupported);
-        }
-    iMode= aMode;
-
-
-    iDevSoundObserver = &aDevSoundObserver;
-    iHwDeviceID.iUid = aHWDev.iUid;
-    if(iCMMFHwDevice)
-        {
-        delete iCMMFHwDevice;
-        iHwDeviceBuffer = NULL; // buffer is deleted by HwDevice delete
-        }
-
-    iCMMFHwDevice = NULL;
-    iCMMFHwDevice = CMMFHwDeviceStub::NewL();
-
-    iDevInfo.iHwDeviceObserver = this;
-    initError = iCMMFHwDevice->Init(iDevInfo);
-
-    iDevSoundObserver->InitializeComplete(initError);
-
-    if (initError)
-        {
-        User::Leave(initError);
-        }
-    DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::InitializeL:EXIT"));
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::InitializeL
-// Initializes DevSound object for the mode aMode for processing audio data
-// with hardware device supporting FourCC aDesiredFourCC.
-//
-// On completion of Initialization, the observer will be notified via call back
-// InitializeComplete().
-//
-// Leaves on failure.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::InitializeL(
-    MDevSoundAdaptationObserver& aDevSoundObserver,
-    TFourCC /*aDesiredFourCC*/,
-    TMMFState aMode)
-    {
-    TUid implUid = {0};
-    InitializeL(aDevSoundObserver, implUid, aMode);
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::Capabilities
-// Returns the supported Audio settings.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TMMFCapabilities CMMFDevSoundAdaptation::CBody::Capabilities()
-    {
-    return iDeviceCapabilities;
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::Config
-// Returns the current audio settings.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TMMFCapabilities CMMFDevSoundAdaptation::CBody::Config() const
-    {
-    return iDeviceConfig;
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::SetConfigL
-// Configure CMMFDevSoundProxy object for the settings in aConfig.
-// Use this to set sampling rate, Encoding and Mono/Stereo.
-// As part of defect 20796, the iRecordFormat has been set under the iPlayFormat,
-//  before it was not set at all.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::SetConfigL(
-    const TMMFCapabilities& aConfig)
-    {
-    iDeviceConfig = aConfig;
-
-    // Fix to WAV recording problem.
-    // A kludge to init channel number to 'something' in case the device returns 0.
-    if (!iDeviceConfig.iChannels)
-        {
-        iDeviceConfig.iChannels = EMMFMono;
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::MaxVolume
-// Returns an integer representing the maximum volume.
-// This is the maximum value which can be passed to CMMFDevSoundProxy::SetVolume.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TInt CMMFDevSoundAdaptation::CBody::MaxVolume()
-    {
-    return KMaxVolume;
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::Volume
-// Returns an integer representing the current volume.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TInt CMMFDevSoundAdaptation::CBody::Volume()
-    {
-    return iVolume;
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::SetVolume
-// Changes the current playback volume to a specified value.
-// The volume can be changed before or during playback and is effective
-// immediately.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::SetVolume(
-    TInt aVolume)
-    {
-    // Check and make sure that the volume is in valid range
-    if (aVolume < 0)
-        {
-        aVolume = 0;
-        }
-    if (aVolume > MaxVolume())
-        {
-        aVolume = MaxVolume();
-        }
-    iVolume = aVolume;
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::MaxGain
-// Returns an integer representing the maximum gain.
-// This is the maximum value which can be passed to CMMFDevSoundProxy::SetGain.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TInt CMMFDevSoundAdaptation::CBody::MaxGain()
-    {
-    return KMaxVolume;//uses iMaxVolume for iMaxGain
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::Gain
-// Returns an integer representing the current gain.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TInt CMMFDevSoundAdaptation::CBody::Gain()
-    {
-    return iGain;
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::SetGain
-// Changes the current recording gain to a specified value.
-//
-// The gain can be changed before or during recording and is effective
-// immediately.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::SetGain(TInt aGain)
-    {
-    // make sure it falls with the correct range
-    if (aGain > MaxGain())
-        {
-        aGain = MaxGain();
-        }
-    else if (aGain < 0)
-        {
-        aGain = 0;
-        }
-    iGain = aGain;
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::GetPlayBalanceL
-// Returns the speaker balance set for playing.
-// Leaves on failure.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::GetPlayBalanceL(
-    TInt& aLeftPercentage,
-    TInt& aRightPercentage)
-    {
-    aLeftPercentage = iLeftPlayBalance;
-    aRightPercentage = iRightPlayBalance;
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::SetPlayBalanceL
-// Sets the speaker balance for playing.
-// The speaker balance can be changed before or during playback and is
-// effective immediately.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::SetPlayBalanceL(
-    TInt aLeftPercentage,
-    TInt aRightPercentage)
-    {
-    if (aLeftPercentage < 0)
-        {
-        aLeftPercentage = 0;
-        }
-    else if (aLeftPercentage > 100)
-        {
-        aLeftPercentage = 100;
-        }
-    if (aRightPercentage < 0)
-        {
-        aRightPercentage = 0;
-        }
-    else if (aRightPercentage > 100)
-        {
-        aRightPercentage = 100;
-        }
-    iLeftPlayBalance = aLeftPercentage;
-    iRightPlayBalance = aRightPercentage;
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::GetRecordBalanceL
-// Returns the microphone gain balance set for recording.
-// Leaves on failure.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::GetRecordBalanceL(
-    TInt& aLeftPercentage,
-    TInt& aRightPercentage)
-    {
-    aLeftPercentage = iLeftRecordBalance;
-    aRightPercentage = iRightRecordBalance;
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::SetRecordBalanceL
-// Sets the microphone gain balance for recording.
-// The microphone gain balance can be changed before or during recording and
-// is effective immediately.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::SetRecordBalanceL(
-    TInt aLeftPercentage,
-    TInt aRightPercentage)
-    {
-    if (aLeftPercentage < 0)
-        {
-        aLeftPercentage = 0;
-        }
-    else if (aLeftPercentage > 100)
-        {
-        aLeftPercentage = 100;
-        }
-    if (aRightPercentage < 0)
-        {
-        aRightPercentage = 0;
-        }
-    else if (aRightPercentage > 100)
-        {
-        aRightPercentage = 100;
-        }
-    iLeftRecordBalance = aLeftPercentage;
-    iRightRecordBalance = aRightPercentage;
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::PlayInitL
-// Initializes audio device and start play process. This method queries and
-// acquires the audio policy before initializing audio device. If there was an
-// error during policy initialization, PlayError() method will be called on
-// the observer with error code KErrAccessDenied, otherwise BufferToBeFilled()
-// method will be called with a buffer reference. After reading data into the
-// buffer reference passed, the client should call PlayData() to play data.
-//
-// The amount of data that can be played is specified in
-// CMMFBuffer::RequestSize(). Any data that is read into buffer beyond this
-// size will be ignored.
-//
-// Leaves on failure.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::PlayInitL()
-    {
-    DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::PlayInitL"));
-    if (!iDevSoundObserver)
-        {
-        User::Leave(KErrNotReady);
-        }
-
-    StartPlayDataL();
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::RecordInitL
-// Initializes audio device and start record process. This method queries and
-// acquires the audio policy before initializing audio device. If there was an
-// error during policy initialization, RecordError() method will be called on
-// the observer with error code KErrAccessDenied, otherwise BufferToBeEmptied()
-// method will be called with a buffer reference. This buffer contains recorded
-// or encoded data. After processing data in the buffer reference passed, the
-// client should call RecordData() to continue recording process.
-//
-// The amount of data that is available is specified in
-// CMMFBuffer::RequestSize().
-//
-// Leaves on failure.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::RecordInitL()
-    {
-    DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::RecordInitL"));
-    if (!iDevSoundObserver)
-        {
-        User::Leave(KErrNotReady);
-        }
-
-    StartRecordDataL();
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::PlayData
-// Plays data in the buffer at the current volume. The client should fill
-// the buffer with audio data before calling this method. The Observer gets
-// reference to buffer along with callback BufferToBeFilled(). When playing of
-// the audio sample is complete, successfully or otherwise, the method
-// PlayError() on observer is called.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::PlayData()
-    {
-    DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::PlayData"));
-    ASSERT(iDevSoundObserver);
-
-    if (iMode== EMMFStateIdle)
-        {
-        return;
-        }
-
-    TInt error = KErrNone;
-
-    if(iCMMFHwDevice)
-        {
-        if (iPaused)
-            {
-            iPaused = EFalse;
-            //note PlayData does not leave or return an error code so the
-            //Start() fails we cannot report the error back at this point
-            if (iCMMFHwDevice->IsActive())
-                {
-                iCMMFHwDevice->Cancel();
-                }
-            //restart hw device after pause
-            error = iCMMFHwDevice->Start(EDevDecode, EDevOutFlow);
-            }
-       else if(iMode== EMMFStatePlaying)
-            {
-            TInt len = iHwDeviceBuffer->Data().Length();
-            iPlayedBytesCount += len;
-            if (iHwDeviceBuffer->LastBuffer())
-                {
-                iLastBufferReceived = ETrue;
-                }
-
-            // Pass the data buffer to HwDevice
-            if (iMode== EMMFStatePlaying)
-                {
-                error = iCMMFHwDevice->ThisHwBufferFilled(*iHwDeviceBuffer);
-                }
-            }
-        }
-    if (error != KErrNone)
-        {
-        iDevSoundObserver->PlayError(error);
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::RecordData
-// Contine the process of recording. Once the buffer is filled with recorded
-// data, the Observer gets reference to buffer along with callback
-// BufferToBeEmptied(). After processing the buffer (copying over to a
-// different buffer or writing to file) the client should call this
-// method to continue recording process.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::RecordData()
-    {
-    DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::RecordData"));
-    ASSERT(iDevSoundObserver);
-    if(iCMMFHwDevice)
-        {
-        if(iMode == EMMFStateRecording)
-            {
-            // Fix to WAV recording issue.
-            // In case of real DevSound adaptation implementation, the
-            // CMMFSwCodecRecordDataPath sets the last buffer parameter when no
-            // more data is in the buffer to process. In case of the stub, this
-            // never gets set as the s/w codec is not involved - we are simply
-            // copying same fixed 4k block of data over and over again. So, on
-            // pause or stop we need to indicate to the data path that we no
-            // longer need processing of data by manually setting last buffer
-            // parameter and resetting requested data size to 0.
-            if (iPaused)
-                {
-                iHwDeviceBuffer->SetLastBuffer(ETrue);
-                iHwDeviceBuffer->Data().SetLength(0);
-                }
-            else
-                {
-                iHwDeviceBuffer->Data().SetLength(iHwDeviceBuffer->RequestSize());
-                }
-
-            iCMMFHwDevice->ThisHwBufferEmptied(*iHwDeviceBuffer);
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::Stop
-// Stops the ongoing operation (Play, Record, TonePlay, Convert)
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::Stop()
-    {
-    DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::Stop"));
-
-    iPaused = EFalse;
-
-    if (iMode== EMMFStateIdle)
-        {
-        return;
-        }
-
-    // For custom interface
-
-     // Stop the hw device first - this unloads sound drivers
-    if(iCMMFHwDevice)
-        {
-        iCMMFHwDevice->Stop();
-        }
-
-    if ((iMode== EMMFStateTonePlaying) && (iTonePlayCompleteTimer))
-        {
-        iTonePlayCompleteTimer->Cancel();
-        }
-
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::Pause
-// Temporarily Stops the ongoing operation (Play, Record, TonePlay, Convert)
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::Pause()
-    {
-    DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::Pause"));
-    iPaused = ETrue;
-
-    if (iMode== EMMFStateIdle)
-        {
-        return;
-        }
-
-    // Pause the HW device first
-    if(iCMMFHwDevice)
-        {
-        iCMMFHwDevice->Pause();
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::SamplesRecorded
-// Returns the sample recorded so far.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TInt CMMFDevSoundAdaptation::CBody::SamplesRecorded()
-    {
-    TInt samples = 0;
-    samples = iRecordedBytesCount;
-    if(NumberOfChannels() > 1)
-        {
-        samples /= NumberOfChannels();
-        }
-    if(BytesPerAudioSample() > 1)
-        {
-        samples /= BytesPerAudioSample();
-        }
-    return samples;
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::SamplesPlayed
-// Returns the sample played so far.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TInt CMMFDevSoundAdaptation::CBody::SamplesPlayed()
-    {
-    TInt samples = 0;
-    samples = iPlayedBytesCount;
-    if(NumberOfChannels() > 1)
-        {
-        samples /= NumberOfChannels();
-        }
-
-    if(BytesPerAudioSample() > 1)
-        {
-        samples /= BytesPerAudioSample();
-        }
-    return samples; //each sample is 2 bytes
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::PlayToneL
-// Initializes audio device and start playing tone. Tone is played with
-// frequency and for duration specified.
-//
-// Leaves on failure.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::PlayToneL(
-    TInt aFrequency,
-    const TTimeIntervalMicroSeconds& aDuration)
-    {
-    DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::PlayToneL"));
-    if (iMode!= EMMFStateTonePlaying)
-        {
-        //tone playing only supported in tone play state
-        User::Leave(KErrNotSupported);
-        }
-    // Check whether frequency and duration is valid or not
-    TInt64 zeroInt64(0);
-    if ((aFrequency<0) || (aDuration.Int64() < zeroInt64))
-        {
-        User::Leave(KErrArgument);
-        }
-    if (!iDevSoundObserver)
-        {
-        User::Leave(KErrNotReady);
-        }
-    iToneGen.SetFrequencyAndDuration(aFrequency,aDuration);
-
-    StartPlayToneL();
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::PlayDualToneL
-// Initializes audio device and start playing a dual tone.
-// The tone consists of two sine waves of different frequencies summed together
-// Dual Tone is played with specified frequencies and for specified duration.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::PlayDualToneL(
-    TInt aFrequencyOne,
-    TInt aFrequencyTwo,
-    const TTimeIntervalMicroSeconds& aDuration)
-    {
-    DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::PlayDualToneL"));
-
-    // Check whether frequencies and duration are valid or not
-    TInt64 zeroInt64(0);
-    if ((aFrequencyOne<0) || (aFrequencyTwo<0) ||
-        (aDuration.Int64() < zeroInt64))
-        {
-        User::Leave(KErrArgument);
-        }
-    if (!iDevSoundObserver)
-        {
-        User::Leave(KErrNotReady);
-        }
-    iDualToneGen.SetFrequencyAndDuration(aFrequencyOne,
-                                         aFrequencyTwo,
-                                         aDuration);
-    StartPlayDualToneL();
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::PlayDTMFStringL
-// Initializes audio device and start playing DTMF string aDTMFString.
-// Leaves on failure.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::PlayDTMFStringL(
-    const TDesC& aDTMFString)
-    {
-    DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::PlayDTMFStringL"));
-
-    if (!iDevSoundObserver)
-        {
-        User::Leave(KErrNotReady);
-        }
-    if (iMode!= EMMFStateTonePlaying)
-        {
-        //tone playing only supported in tone play state
-        User::Leave(KErrNotSupported);
-        }
-    iDTMFGen.SetString(aDTMFString);
-    StartPlayDTMFStringL();
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::PlayToneSequenceL
-// Initializes audio device and start playing tone sequence.
-//
-// Leaves on failure.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::PlayToneSequenceL(const TDesC8& aData)
-    {
-    DEBPRN1(
-    _L("CMMFDevSoundAdaptationStub[0x%x]::CBody::PlayToneSequenceL:Length[%d]"),
-    aData.Length());
-
-    if (!iDevSoundObserver)
-        {
-        User::Leave(KErrNotReady);
-        }
-    if (iMode!= EMMFStateTonePlaying)
-        {
-        //tone playing only supported in tone play state
-        User::Leave(KErrNotSupported);
-        }
-
-    InitializeDevSoundUtilL();
-    // Check whether the sequence is valid or not
-    if (!iDevSoundUtil->RecognizeSequence(aData))
-        {
-        User::Leave(KErrCorrupt);
-        }
-
-    // For playing Tone sequence, we don't use PCM generator.
-    // We use a timer instead
-    // iSequenceGen.SetSequenceData(aData);
-
-    if (!iTonePlayCompleteTimer)
-        {
-        iTonePlayCompleteTimer =
-            CTonePlayCompleteTimer::NewL(*iDevSoundObserver);
-        }
-    // Determine the time out based on iRepeatCount and number of notes
-    // in the sequence
-    TUint repeats = ((iRepeatCount > 0) ? iRepeatCount : 1);
-    TTimeIntervalMicroSeconds32 time(KToneNotePlayTime*aData.Length()*repeats);
-    iTonePlayCompleteTimer->SetTimeOut(time);
-
-    StartPlayToneSequenceL();
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::PlayFixedSequenceL
-// Initializes audio device and start playing the specified pre-defined tone
-// sequence.
-//
-// Leaves on failure.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::PlayFixedSequenceL(TInt aSequenceNumber)
-    {
-    DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::PlayFixedSequenceL"));
-
-    if (!iDevSoundObserver)
-        {
-        User::Leave(KErrNotReady);
-        }
-    if (iMode!= EMMFStateTonePlaying)
-        {
-        //tone playing only supported in tone play state
-        User::Leave(KErrNotSupported);
-        }
-    ASSERT((aSequenceNumber >= 0) &&
-           (aSequenceNumber < iFixedSequences->Count()));
-
-    iFixedSequence.Set(iFixedSequences->MdcaPoint(aSequenceNumber));
-    iSequenceGen.SetSequenceData(iFixedSequence);
-
-    StartPlayToneSequenceL();
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::SetToneRepeats
-// Defines the number of times the audio is to be repeated during the tone
-// playback operation. A period of silence can follow each playing of tone.
-// The tone playing can be repeated indefinitely.
-// Supported only during tone playing.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::SetToneRepeats(
-    TInt aRepeatCount,
-    const TTimeIntervalMicroSeconds& aRepeatTrailingSilence)
-    {
-    iRepeatCount = aRepeatCount;
-    iRepeatTrailingSilence = aRepeatTrailingSilence;
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::SetDTMFLengths
-// Defines the duration of tone on, tone off and tone pause to be used during the
-// DTMF tone playback operation.
-// Supported only during tone playing.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::SetDTMFLengths(
-    TTimeIntervalMicroSeconds32& aToneOnLength,
-    TTimeIntervalMicroSeconds32& aToneOffLength,
-    TTimeIntervalMicroSeconds32& aPauseLength)
-    {
-
-    if(aToneOnLength.Int() < KMdaInfiniteDurationDTMFToneOnLength)
-        {
-        aToneOnLength = TTimeIntervalMicroSeconds32(0);
-        }
-    if(aToneOffLength.Int() < 0)
-        {
-        aToneOffLength = TTimeIntervalMicroSeconds32(0);
-        }
-    if(aPauseLength.Int() < 0)
-        {
-        aPauseLength = TTimeIntervalMicroSeconds32(0);
-        }
-
-    iDTMFGen.SetToneDurations(aToneOnLength,aToneOffLength,aPauseLength);
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::SetVolumeRamp
-// Defines the period over which the volume level is to rise smoothly from
-// nothing to the normal volume level.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::SetVolumeRamp(
-    const TTimeIntervalMicroSeconds& aRampDuration)
-    {
-    // save ramp duration for tone generator
-    iRampDuration = aRampDuration;
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::SetPrioritySettings
-// Defines the priority settings that should be used for this instance.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::SetPrioritySettings(
-    const TMMFPrioritySettings& /*aPrioritySettings*/)
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::CustomInterface
-// @see sounddevice.h
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TAny* CMMFDevSoundAdaptation::CBody::CustomInterface(TUid aInterfaceId)
-    {
-// Note: These can only be uncommented when supported by the
-//       MessageHandlerFactory and CustomInterfaceProxyFactory stubs.
-//       Will result in memory leak if re-enabled without updating of
-//       the proxy and message factory stubs.
-//
-    DEBPRN1(
-    _L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CustomInterface:InterfaceId[0x%x]"),
-    aInterfaceId);
-
-    if (aInterfaceId == KUidSpeechEncoderConfig)
-        {
-        TRAP_IGNORE(iSpeechEncoderConfigCI = CSpeechEncoderConfigCI::NewL());
-        DEBPRN0(
-        _L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CustomInterface:returning CSpeechEncoderConfigCI..."));
-        return iSpeechEncoderConfigCI;
-        }
-    else if (aInterfaceId == KUidErrorConcealmentIntfc)
-        {
-        TRAP_IGNORE(iErrorConcealmentIntfcCI = CErrorConcealmentIntfcCI::NewL());
-        DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CustomInterface:returning CErrorConcealmentIntfcCI..."));
-        return iErrorConcealmentIntfcCI;
-        }
-    else if (aInterfaceId == KUidG711DecoderIntfc)
-        {
-        TRAP_IGNORE(iG711DecoderIntfcCI = CG711DecoderIntfcCI::NewL());
-        DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CustomInterface:returning CG711DecoderIntfcCI..."));
-        return iG711DecoderIntfcCI;
-        }
-    else if (aInterfaceId == KUidG729DecoderIntfc)
-        {
-        TRAP_IGNORE(iG729DecoderIntfcCI = CG729DecoderIntfcCI::NewL());
-        DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CustomInterface:returning CG729DecoderIntfcCI..."));
-        return iG729DecoderIntfcCI;
-        }
-    else if (aInterfaceId == KUidIlbcDecoderIntfc)
-        {
-        TRAP_IGNORE(iIlbcDecoderIntfcCI = CIlbcDecoderIntfcCI::NewL());
-        DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CustomInterface:returning CIlbcDecoderIntfcCI..."));
-        return iIlbcDecoderIntfcCI;
-        }
-    else if (aInterfaceId == KUidG711EncoderIntfc)
-        {
-        TRAP_IGNORE(iG711EncoderIntfcCI = CG711EncoderIntfcCI::NewL());
-        DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CustomInterface:returning CG711EncoderIntfcCI..."));
-        return iG711EncoderIntfcCI;
-        }
-    else if (aInterfaceId == KUidG729EncoderIntfc)
-        {
-        TRAP_IGNORE(iG729EncoderIntfcCI = CG729EncoderIntfcCI::NewL());
-        DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CustomInterface:returning CG729EncoderIntfcCI..."));
-        return iG729EncoderIntfcCI;
-        }
-    else if (aInterfaceId == KUidIlbcEncoderIntfc)
-        {
-        TRAP_IGNORE(iIlbcEncoderIntfcCI = CIlbcEncoderIntfcCI::NewL());
-        DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CustomInterface:returning CIlbcEncoderIntfcCI..."));
-        return iIlbcEncoderIntfcCI;
-        }
-    else if (aInterfaceId == KUidAudioInput)
-        {
-        CAudioInputCI* retCI(NULL);
-        TRAP_IGNORE(retCI = CAudioInputCI::NewL());
-        DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CustomInterface:returning CAudioInputCI..."));
-        return retCI;
-        }
-    else if(aInterfaceId == KUidAudioOutput)
-        {
-        CAudioOutputCI* retCI(NULL);
-        TRAP_IGNORE(retCI = CAudioOutputCI::NewL());
-        DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CustomInterface:returning CAudioOutputCI..."));
-        return retCI;
-        }/*
-    else if (aInterfaceId == KUidSbcEncoderIntfc)
-        {
-        TRAP_IGNORE(iSbcEncoderIntfcCI = CSbcEncoderIntfcCI::NewL());
-        DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CustomInterface:returning CSbcEncoderIntfcCI..."));
-        return iSbcEncoderIntfcCI;
-        }
-    else if (aInterfaceId == KUidAudioVibraControl)
-        {
-        TRAP_IGNORE(iAudioVibraControlCI = CAudioVibraControlCI::NewL());
-        DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CustomInterface:returning CAudioVibraControlCI..."));
-        return iAudioVibraControlCI;
-        }
-    else if (aInterfaceId == KUidAudioResource)
-        {
-        CAudioResourceCIStub* retCI(NULL);
-        TRAP_IGNORE(retCI = CAudioResourceCIStub::NewL());
-        DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CustomInterface:returning CAudioResourceCIStub..."));
-        return retCI;
-        }
-    else if (aInterfaceId == KUidAudioEqualizerEffect)
-        {
-        CAudioEqualizerCI* retCI(NULL);
-        TRAP_IGNORE(retCI = CAudioEqualizerCI::NewL());
-        DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CustomInterface:returning CAudioEqualizerCI..."));
-        return retCI;
-        }
-    else if (aInterfaceId == KUidEnvironmentalReverbEffect)
-        {
-        CEnvironmentalReverbCI* retCI(NULL);
-        TRAP_IGNORE(retCI = CEnvironmentalReverbCI::NewL());
-        DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CustomInterface:returning CEnvironmentalReverbCI..."));
-        return retCI;
-        }
-    else if (aInterfaceId == KUidStereoWideningEffect)
-        {
-        CStereoWideningCI* retCI(NULL);
-        TRAP_IGNORE(retCI = CStereoWideningCI::NewL());
-        DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CustomInterface:returning CStereoWideningCI..."));
-        return retCI;
-        }
-    else if (aInterfaceId == KUidBassBoostEffect)
-        {
-        CBassBoostCI* retCI(NULL);
-        TRAP_IGNORE(retCI = CBassBoostCI::NewL());
-        DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CustomInterface:returning CBassBoostCI..."));
-        return retCI;
-        }
-    else if (aInterfaceId == KUidSourceDopplerEffect)
-        {
-        CSourceDopplerCI* retCI(NULL);
-        TRAP_IGNORE(retCI = CSourceDopplerCI::NewL());
-        DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CustomInterface:returning CSourceDopplerCI..."));
-        return retCI;
-        }
-    else if (aInterfaceId == KUidListenerDopplerEffect)
-        {
-        CListenerDopplerCI* retCI(NULL);
-        TRAP_IGNORE(retCI = CListenerDopplerCI::NewL());
-        DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CustomInterface:returning CListenerDopplerCI..."));
-        return retCI;
-        }
-    else if (aInterfaceId == KUidListenerLocationEffect)
-        {
-        CListenerLocationCI* retCI(NULL);
-        TRAP_IGNORE(retCI = CListenerLocationCI::NewL());
-        DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CustomInterface:returning CListenerLocationCI..."));
-        return retCI;
-        }
-    else if (aInterfaceId == KUidSourceLocationEffect)
-        {
-        CSourceLocationCI* retCI(NULL);
-        TRAP_IGNORE(retCI = CSourceLocationCI::NewL());
-        DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CustomInterface:returning CSourceLocationCI..."));
-        return retCI;
-        }
-    else if (aInterfaceId == KUidListenerOrientationEffect)
-        {
-        CListenerOrientationCI* retCI(NULL);
-        TRAP_IGNORE(retCI = CListenerOrientationCI::NewL());
-        DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CustomInterface:returning CListenerOrientationCI..."));
-        return retCI;
-        }
-    else if (aInterfaceId == KUidSourceOrientationEffect)
-        {
-        CSourceOrientationCI* retCI(NULL);
-        TRAP_IGNORE(retCI = CSourceOrientationCI::NewL());
-        DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CustomInterface:returning CSourceOrientationCI..."));
-        return retCI;
-        }
-    else if (aInterfaceId == KUidDistanceAttenuationEffect)
-        {
-        CDistanceAttenuationCI* retCI(NULL);
-        TRAP_IGNORE(retCI = CDistanceAttenuationCI::NewL());
-        DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CustomInterface:returning CDistanceAttenuationCI..."));
-        return retCI;
-        }
-    else if (aInterfaceId == KUidLoudnessEffect)
-        {
-        CLoudnessCI* retCI(NULL);
-        TRAP_IGNORE(retCI = CLoudnessCI::NewL());
-        DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CustomInterface:returning CLoudnessCI..."));
-        return retCI;
-        }
-    else if (aInterfaceId == KUidAddedDevSoundControlInterface)
-        {
-        CAddedDevSoundControlCI* retCI(NULL);
-        TRAP_IGNORE(retCI = CAddedDevSoundControlCI::NewL());
-        DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CustomInterface:returning CAddedDevSoundControlCI..."));
-        return (MAddedDevSoundControl*)retCI;
-        }
-    else if (aInterfaceId == KUidRestrictedAudioOutput)
-        {
-        CRestrictedAudioOutputCI* retCI(NULL);
-        TRAP_IGNORE(retCI = CRestrictedAudioOutputCI::NewL());
-        DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CustomInterface:returning CRestrictedAudioOutputCI..."));
-        return retCI;
-        }
-    else if (aInterfaceId == KUidAacDecoderConfig)
-        {
-        TRAP_IGNORE(iAacDecoderConfigCI = CAacDecoderConfigCI::NewL());
-        DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CustomInterface:returning CAacDecoderConfigCI..."));
-        return iAacDecoderConfigCI;
-        }
-    else if (aInterfaceId == KUidEAacPlusDecoderIntfc)
-        {
-        TRAP_IGNORE(iEAacPlusDecoderConfigCI = CEAacPlusDecoderIntfcCI::NewL());
-        DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CustomInterface:returning CEAacPlusDecoderIntfcCI..."));
-        return iEAacPlusDecoderConfigCI;
-        }*/
-    else
-        {
-        DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::CustomInterface:returning NULL..."));
-        return NULL;
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::FixedSequenceCount
-// Returns the number of available pre-defined tone sequences.
-// This is the number of fixed sequence supported by DevSound by default.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TInt CMMFDevSoundAdaptation::CBody::FixedSequenceCount()
-    {
-    return iFixedSequences->Count();
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::FixedSequenceName
-// Returns the name assigned to a specific pre-defined tone sequence.
-// This is the number of fixed sequence supported by DevSound by default.
-// The function raises a panic if sequence number specified invalid.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-const TDesC& CMMFDevSoundAdaptation::CBody::FixedSequenceName(
-    TInt aSequenceNumber)
-    {
-    ASSERT((aSequenceNumber >= 0) &&
-           (aSequenceNumber < iFixedSequences->Count()));
-
-    TRAPD(err, InitializeDevSoundUtilL());
-    if (err == KErrNone)
-        {
-        return iDevSoundUtil->FixedSequenceName(aSequenceNumber);
-        }
-    else
-        {
-        return KNullDesC;
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::GetSupportedInputDataTypesL
-// @see sounddevice.h
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::GetSupportedInputDataTypesL(
-    RArray<TFourCC>& aSupportedDataTypes,
-    const TMMFPrioritySettings& /*aPrioritySettings*/) const
-    {
-    //aPrioritySettings not used on ref DevSound
-    //search for playing datatypes
-    InitializeDevSoundUtilL();
-    iDevSoundUtil->SeekHwDevicePluginsL(aSupportedDataTypes, EMMFStatePlaying);
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::GetSupportedOutputDataTypesL
-// @see sounddevice.h
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::GetSupportedOutputDataTypesL(
-    RArray<TFourCC>& aSupportedDataTypes,
-    const TMMFPrioritySettings& /*aPrioritySettings*/) const
-    {
-    //aPrioritySettings not used on ref DevSound
-    // search for recording datatypes
-    InitializeDevSoundUtilL();
-    iDevSoundUtil->SeekHwDevicePluginsL(aSupportedDataTypes,
-                                        EMMFStateRecording);
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::SetClientConfig
-// Sets client capabilities for this instance of DevSound Adaptation.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::SetClientConfig(
-    const TMMFClientConfig& aClientConfig)
-    {
-    iClientConfig = aClientConfig;
-    }
-
-// -----------------------------------------------------------------------------
-// TMMFClientConfig& CMMFDevSoundAdaptation::CBody::ClientConfig
-// Returns client capabilities of this instance of DevSound Adaptation.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-const TMMFClientConfig& CMMFDevSoundAdaptation::CBody::ClientConfig() const
-    {
-    return iClientConfig;
-    }
-
-/********************************************************************************
- *              Implementations of Non Exported public functions begins here    *
- ********************************************************************************/
-
-//////////////////////////////////////////////////////////////////////////////////
-//              Audio Policy specific implementation begins here                //
-//////////////////////////////////////////////////////////////////////////////////
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::StartPlayDataL
-// Called by Audio Policy Server when a request to play is approved by the
-// Audio Policy Server.
-//
-// Leaves on failure??.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::StartPlayDataL()
-    {
-    DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::StartPlayDataL"));
-
-    ASSERT(iMode== EMMFStatePlaying);
-
-    TInt error = KErrNone;
-
-    if(iCMMFHwDevice)
-        {
-        // Initialize attribute values
-        iPlayedBytesCount = 0;
-        iLastBufferReceived = EFalse;
-
-        // Start HwDevice
-        if (iCMMFHwDevice->IsActive())
-            {
-            iCMMFHwDevice->Cancel();
-            }
-        error = iCMMFHwDevice->Start(EDevDecode, EDevOutFlow);
-        }
-    else
-        {
-        error = KErrNotReady;
-        }
-
-    if (error != KErrNone)
-        {
-        iDevSoundObserver->PlayError(error);
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::StartRecordDataL
-// Called by Audio Policy Server when a request to record is approved by the
-// Audio Policy Server.
-//
-// Leaves on failure.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::StartRecordDataL()
-    {
-    DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::StartRecordDataL"));
-
-    ASSERT(iMode== EMMFStateRecording);
-
-     if(iCMMFHwDevice)
-        {
-        TInt error = KErrNone;
-        // Initialize attribute values
-        iRecordedBytesCount = 0;
-
-        if (iCMMFHwDevice->IsActive())
-            {
-            iCMMFHwDevice->Cancel();
-            }
-        error = iCMMFHwDevice->Start(EDevEncode, EDevInFlow);
-
-        if (iHwDeviceBuffer)
-            {
-            iHwDeviceBuffer->SetLastBuffer(EFalse);
-            }
-        if (error != KErrNone)
-            {
-            iDevSoundObserver->RecordError(error);
-            return;
-            }
-        }
-    else
-        {
-        iDevSoundObserver->RecordError(KErrNotReady);
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::StartPlayToneL
-// Called by Audio Policy Server when a request to play tone is approved by
-// the Audio Policy Server.
-//
-// Leaves on failure.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::StartPlayToneL()
-    {
-    DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::StartPlayToneL"));
-
-    ASSERT(iMode== EMMFStateTonePlaying);
-
-     if(iCMMFHwDevice)
-        {
-        // Initialize attribute values
-        iPlayedBytesCount = 0;
-
-        // Configure tone generator
-        iToneGen.Configure(
-            KToneSamplingRate,
-            KToneChannels,
-            iRepeatCount,
-            I64LOW((iRepeatTrailingSilence.Int64()*KToneSamplingRate)/1000000),
-            I64LOW((iRampDuration.Int64()*KToneSamplingRate)/1000000)
-            );
-
-        iCurrentGenerator = &iToneGen;
-
-        // Start playback
-        DoPlayL();
-
-        }
-    else
-        {
-        iDevSoundObserver->ToneFinished(KErrNotReady);
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::StartPlayDualToneL
-// Called by Audio Policy Server when a request to play a dual tone is approved
-// by the Audio Policy Server.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::StartPlayDualToneL()
-    {
-    DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::StartPlayDualToneL"));
-
-    ASSERT(iMode== EMMFStateTonePlaying);
-
-     if(iCMMFHwDevice)
-        {
-        // Initialize attribute values
-        iPlayedBytesCount = 0;
-
-        // Configure dual tone generator
-        iDualToneGen.Configure(
-            KToneSamplingRate,
-            KToneChannels,
-            iRepeatCount,
-            I64LOW((iRepeatTrailingSilence.Int64()
-                    *KToneSamplingRate)/KOneMillionMicroSeconds),
-            I64LOW((iRampDuration.Int64()
-                    *KToneSamplingRate)/KOneMillionMicroSeconds)
-            );
-
-        iCurrentGenerator = &iDualToneGen;
-
-        // Start playback
-        DoPlayL();
-        }
-    else
-        iDevSoundObserver->ToneFinished(KErrNotReady);
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::StartPlayDTMFStringL
-// Called by Audio Policy Server when a request to play DTMF String is approved
-// by the Audio Policy Server.
-//
-// Leaves on failure.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::StartPlayDTMFStringL()
-    {
-    DEBPRN0(
-    _L("CMMFDevSoundAdaptationStub[0x%x]::CBody::StartPlayDTMFStringL"));
-
-    ASSERT(iMode== EMMFStateTonePlaying);
-
-    if(iCMMFHwDevice)
-        {
-        TInt error = KErrNone;
-        // Initialize attribute values
-        iPlayedBytesCount = 0;
-
-        iDTMFGen.Configure(
-            KToneSamplingRate,
-            KToneChannels,
-            iRepeatCount,
-            I64LOW((iRepeatTrailingSilence.Int64()*KToneSamplingRate)/1000000),
-            I64LOW((iRampDuration.Int64()*KToneSamplingRate)/1000000)
-            );
-
-        iCurrentGenerator = &iDTMFGen;
-
-        // Start playback
-        //need to trap this as we can leave with KErrUnderflow
-        //if there was no data to play - the error has already
-        //been sent to the observer and we don't want to call RunError
-        TRAP(error,DoPlayL());
-        if ((error != KErrUnderflow)&&(error != KErrNone))
-            {
-            User::Leave(error);
-            }
-        }
-    else
-        {
-        iDevSoundObserver->ToneFinished(KErrNotReady);
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::StartPlayToneSequenceL
-// Called by Audio Policy Server when a request to play tone sequence is
-// approved by the Audio Policy Server.
-//
-// Leaves on failure.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::StartPlayToneSequenceL()
-    {
-    DEBPRN0(
-    _L("CMMFDevSoundAdaptationStub[0x%x]::CBody::StartPlayToneSequenceL"));
-
-    ASSERT(iMode == EMMFStateTonePlaying);
-
-    // For playing Tone sequence, we don't use PCM generator.
-    // We use a timer instead
-/*
-    if(iCMMFHwDevice)
-        {
-        // Initialize attribute values
-        iPlayedBytesCount = 0;
-
-        iSequenceGen.Configure(
-            KToneSamplingRate,
-            KToneChannels,
-            iRepeatCount,
-            I64LOW((iRepeatTrailingSilence.Int64()*KToneSamplingRate)/1000000),
-            I64LOW((iRampDuration.Int64()*KToneSamplingRate)/1000000)
-            );
-
-        iCurrentGenerator = &iSequenceGen;
-
-        // Start playback
-        DoPlayL();
-        }
-    else
-        iDevSoundObserver->ToneFinished(KErrNotReady);
-*/
-    if (iTonePlayCompleteTimer->IsActive())
-        {
-        iTonePlayCompleteTimer->Cancel();
-        }
-    iTonePlayCompleteTimer->Start();
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::FillThisHwBuffer
-// MMMFHwDeviceObserver mixin implementation.
-// The CMMFHwDevice implementation object calls this method during decoding
-// (playing), when it needs the encoded data in the buffer
-// aHwDataBuffer.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TInt CMMFDevSoundAdaptation::CBody::FillThisHwBuffer(
-    CMMFBuffer& aHwDataBuffer)
-    {
-    DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::FillThisHwBuffer"));
-
-    TInt err = KErrNone;
-    // Keep a reference to this Hw data Buffer. We need to send the
-    // reference back to HwDevice implementation
-    iHwDeviceBuffer = static_cast<CMMFDataBuffer*> (&aHwDataBuffer);
-    // Set the request length, From HwDevice this comes with buffer
-    // length.
-    TInt len = iHwDeviceBuffer->Data().MaxLength();
-    // Ignore error. since buffer size = Buffer Length
-    TRAP(err, iHwDeviceBuffer->SetRequestSizeL(len));
-
-    if (iMode== EMMFStatePlaying) // Get Data from Observer
-        {
-        if (iLastBufferReceived)
-            {
-            iHwDeviceBuffer->Data().SetLength(0);
-            // Pass the buffer to the he device
-            err = iCMMFHwDevice->ThisHwBufferFilled(*iHwDeviceBuffer);
-            }
-        else
-            {
-            // Pass the buffer to the observer
-            iDevSoundObserver->BufferToBeFilled(&aHwDataBuffer);
-            }
-        }
-    else if (iMode== EMMFStateTonePlaying)
-        {
-        // Hw device will call this method right after its Start was called.
-        // When it calls this for the first time it hasn't played one single
-        // buffer yet so check that.
-        // In this case there's no need to set the active buffer as it's already
-        // waiting to be played.
-        if (!iFirstCallFromHwDevice)
-            {
-            SetActiveToneBuffer();
-            }
-
-        // If there is no data in the active buffer, tone play is finished.
-        // DevSound just have to wait for completion event from audio device.
-        if (iActiveToneBuffer->Data().Length() > 0)
-            {
-            len = iActiveToneBuffer->Data().Length();
-            // Copy data from tone buffer to hw device buffer
-            Mem::Copy((TAny*)(iHwDeviceBuffer->Data().Ptr()),
-                      (TAny*)(iActiveToneBuffer->Data().Ptr()),
-                      len);
-
-            iHwDeviceBuffer->Data().SetLength(len);
-            if (len < iHwDeviceBuffer->RequestSize())
-                {
-                iHwDeviceBuffer->SetLastBuffer(ETrue);
-                }
-            // Play data and try to generate next data block
-            err = iCMMFHwDevice->ThisHwBufferFilled(*iHwDeviceBuffer);
-            if (err != KErrNone)
-                {
-                return err;
-                }
-
-            // Check again whether this is the first call from Hw device.
-            // FillFreeToneBuffer assumes the iActiveToneBuffer has already
-            // been played.
-            if (!iFirstCallFromHwDevice)
-                {
-                err = FillFreeToneBuffer();
-                }
-            else
-                {
-                iFirstCallFromHwDevice = EFalse;  // Reset flag
-                }
-            }
-        else if (iFirstCallFromHwDevice)
-            {
-            //we have no data in the tone buffer and thus have no
-            //outstanding requests to play
-            err = KErrUnderflow; //simulate underrun
-            iHwDeviceBuffer->SetLastBuffer(ETrue);
-            // Play data and try to generate next data block
-            err = iCMMFHwDevice->ThisHwBufferFilled(*iHwDeviceBuffer);
-            if (err != KErrNone)
-                {
-                return err;
-                }
-            }
-
-        // If there was an error filling the buffer could be corrupt data
-        // notify the client and stop playing.Set err to KErrNone.
-        if (err != KErrNone)
-            {
-            Error(err);//Updates Bytes played informs client
-            err = KErrNone;
-            iCMMFHwDevice->Stop();//unloads sound device
-            Stopped();//Updates policy
-            }
-        }
-    else
-        {
-        err = KErrGeneral;
-        iDevSoundObserver->PlayError(KErrGeneral);
-        }
-    return err;
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::EmptyThisHwBuffer
-// MMMFHwDeviceObserver mixin implementation.
-// The CMMFHwDevice implementation object calls this method during encoding
-// (recording), when it fills the buffer aHwDataBuffer with
-// encoded data.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TInt CMMFDevSoundAdaptation::CBody::EmptyThisHwBuffer(
-    CMMFBuffer& aHwDataBuffer)
-    {
-    DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::EmptyThisHwBuffer"));
-
-    TInt err = KErrNone;
-    if(iMode== EMMFStateRecording)
-        {
-        // Keep a reference to this Hw data Buffer. We need to send the
-        // reference back to HwDevice implementation
-        iHwDeviceBuffer = static_cast<CMMFDataBuffer*>(&aHwDataBuffer);
-
-        // Set the request length, From HwDevice this comes with buffer
-        // length. MMF will use RequestSize attribute of the buffer.
-        // We can avoid this by setting in HwDevice implemenation
-        TInt len = iHwDeviceBuffer->Data().Length();
-        iRecordedBytesCount += len;
-        TRAP(err, iHwDeviceBuffer->SetRequestSizeL(len));
-
-        // if we're pausing (i.e. flushing) set the last buffer flag
-        // when we get an empty buffer from the logical driver
-        if(iPaused  && iHwDeviceBuffer->Data().Length() == 0)
-            {
-            iPaused = EFalse;
-            iHwDeviceBuffer->SetLastBuffer(ETrue);
-            }
-
-        // Send Data from Observer
-        iDevSoundObserver->BufferToBeEmptied(iHwDeviceBuffer);
-        }
-    else
-        {
-        err = KErrGeneral;
-        iDevSoundObserver->RecordError(KErrGeneral);
-        }
-
-    return err;
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::MsgFromHwDevice
-// MMMFHwDeviceObserver mixin implementation.
-// The CMMFHwDevice implementation object calls this method when a message from
-// the hardware device implementation is received.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TInt CMMFDevSoundAdaptation::CBody::MsgFromHwDevice(
-    TUid /*aMessageType*/,
-    const TDesC8& /*aMsg*/)
-    {
-    return KErrNotSupported;
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::Stopped
-// MMMFHwDeviceObserver mixin implementation.
-//
-// The CMMFHwDevice implementation object calls this method when the current
-// encode or decode task is finished or stopped.  The policy state is updated
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::Stopped()
-    {
-    //for swcodec wrap hw devices bytes played updated in MsgFromHwDevice
-    //but non Swcodec wrappers hw devices may do it differently also don't
-    //know if non Swcodec wrap hw device will call Stopped or Error first
-    iLastBufferReceived = EFalse;
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::Error
-// MMMFHwDeviceObserver mixin implementation
-//  Processes error from hw device
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::Error(
-    TInt aError)
-    {
-    DEBPRN1(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::Error(%d)"), aError);
-
-    if (iMode== EMMFStatePlaying)
-        {
-        iDevSoundObserver->PlayError(aError);
-        }
-    else if (iMode== EMMFStateRecording)
-        {
-        iDevSoundObserver->RecordError(aError);
-        }
-    else if (iMode== EMMFStateTonePlaying)
-        {
-        if (aError == KErrUnderflow)
-            {
-            iDevSoundObserver->ToneFinished(KErrNone);
-            }
-        else
-            {
-            iDevSoundObserver->ToneFinished(aError);
-            }
-        }
-    //else can't handle error
-    }
-
-/********************************************************************************
- *              Non Exported public functions ends here                         *
- ********************************************************************************/
-
-
-/********************************************************************************
- *              Private functions begins here                                   *
- ********************************************************************************/
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::DoPlayL
-// Creates buffer and begin playback using the specified tone generator.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::DoPlayL()
-    {
-    DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::DoPlayL"));
-
-    // Delete any buffer from previous call and try to create maximum buffer
-    // size. Double Buffer the Tone data.
-    if (iToneBuffer1)
-        {
-        delete iToneBuffer1;
-        iToneBuffer1 = NULL;
-        }
-
-    iToneBuffer1 = CMMFDataBuffer::NewL(KDevSoundDefaultFrameSize);
-    User::LeaveIfError(iCurrentGenerator->FillBuffer(iToneBuffer1->Data()));
-
-    if (iToneBuffer2)
-        {
-        delete iToneBuffer2;
-        iToneBuffer2 = NULL;
-        }
-    iToneBuffer2 = CMMFDataBuffer::NewL(KDevSoundDefaultFrameSize);
-    User::LeaveIfError(iCurrentGenerator->FillBuffer(iToneBuffer2->Data()));
-
-    // Assign active buffer
-    iActiveToneBuffer = iToneBuffer1;
-
-    // Hw device hasn't played anything yet so don't change
-    // active buffer. This is checked in FillThisHwBuffer.
-    iFirstCallFromHwDevice = ETrue;
-
-    // Start HwDevice to play data
-    if (iCMMFHwDevice->IsActive())
-        {
-        iCMMFHwDevice->Cancel();
-        }
-    User::LeaveIfError(iCMMFHwDevice->Start(EDevDecode, EDevOutFlow));
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::SetActiveToneBuffer
-// This method assigns the other buffer as active buffer. The tone audio
-//  generator should fill data in the other buffer by now.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::SetActiveToneBuffer()
-    {
-    DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::SetActiveToneBuffer"));
-
-    if (iActiveToneBuffer == iToneBuffer1)
-        {
-        iActiveToneBuffer = iToneBuffer2;
-        }
-    else if (iActiveToneBuffer == iToneBuffer2)
-        {
-        iActiveToneBuffer = iToneBuffer1;
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::FillFreeToneBuffer
-// This method fills data into the free buffer.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TInt CMMFDevSoundAdaptation::CBody::FillFreeToneBuffer()
-    {
-    DEBPRN0(_L("CMMFDevSoundAdaptationStub[0x%x]::CBody::FillFreeToneBuffer"));
-
-    TInt err(KErrNone);
-    if (iActiveToneBuffer == iToneBuffer1)
-        {
-        err = iCurrentGenerator->FillBuffer(iToneBuffer2->Data());
-        }
-    else if (iActiveToneBuffer == iToneBuffer2)
-        {
-        err = iCurrentGenerator->FillBuffer(iToneBuffer1->Data());
-        }
-    return err;
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::InitTask
-// Initializes audio device node by setting volume, and sampling rate.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TInt CMMFDevSoundAdaptation::CBody::InitTask()
-    {
-    // No Implementation
-    return KErrNone;
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::SamplingFrequency
-// Returns an integer representing Sampling Frequency the device is currently
-//  configured to.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TInt CMMFDevSoundAdaptation::CBody::SamplingFrequency()
-    {
-    if(iDeviceConfig.iRate == EMMFSampleRate8000Hz)
-        {
-        return 8000;
-        }
-    else if(iDeviceConfig.iRate == EMMFSampleRate11025Hz)
-        {
-        return 11025;
-        }
-    else if(iDeviceConfig.iRate == EMMFSampleRate12000Hz)
-        {
-        return 12000;
-        }
-    else if(iDeviceConfig.iRate == EMMFSampleRate16000Hz)
-        {
-        return 16000;
-        }
-    else if(iDeviceConfig.iRate == EMMFSampleRate22050Hz)
-        {
-        return 22050;
-        }
-    else if(iDeviceConfig.iRate == EMMFSampleRate24000Hz)
-        {
-        return 24000;
-        }
-    else if(iDeviceConfig.iRate == EMMFSampleRate32000Hz)
-        {
-        return 32000;
-        }
-    else if(iDeviceConfig.iRate == EMMFSampleRate44100Hz)
-        {
-        return 44100;
-        }
-    else if(iDeviceConfig.iRate == EMMFSampleRate48000Hz)
-        {
-        return 48000;
-        }
-    else if(iDeviceConfig.iRate == EMMFSampleRate88200Hz)
-        {
-        return 88200;
-        }
-    else if(iDeviceConfig.iRate == EMMFSampleRate96000Hz)
-        {
-        return 96000;
-        }
-    else
-        {
-        return 8000; //default
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::NumberOfChannels
-// Returns an integer representing number of channels the device is currently
-//  configured to.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TInt CMMFDevSoundAdaptation::CBody::NumberOfChannels()
-    {
-    if(iDeviceConfig.iChannels == EMMFMono)
-        {
-        return 1;
-        }
-    else
-        {
-        return 2;
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::BytesPerAudioSample
-// Returns an integer representing number of bytes in each audio sample
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TInt CMMFDevSoundAdaptation::CBody::BytesPerAudioSample()
-    {
-    TInt bytes=1;
-    switch (iDeviceConfig.iEncoding)
-        {
-        case EMMFSoundEncoding8BitPCM:
-        case EMMFSoundEncoding8BitALaw:
-        case EMMFSoundEncoding8BitMuLaw:
-            {
-            bytes=1;
-            }
-        break;
-        case EMMFSoundEncoding16BitPCM:
-            {
-            bytes=2;
-            }
-        break;
-        }
-    return bytes;
-    }
-
-// -----------------------------------------------------------------------------
-// CMMFDevSoundAdaptation::CBody::InitializeDevSoundUtilL
-// Initializes DevSoundUtil object.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMMFDevSoundAdaptation::CBody::InitializeDevSoundUtilL() const
-    {
-    if (!iDevSoundUtil)
-        {
-        DEBPRN0(
-        _L("CMMFDevSoundAdaptationStub[0x%x]::CBody::InitializeDevSoundUtilL:ENTER"));
-
-        iDevSoundUtil = CMMFDevSoundUtility::NewL();
-
-        // Initialize Fixed sequence related
-        DEBPRN0(
-        _L("CMMFDevSoundAdaptationStub[0x%x]::CBody::InitializeDevSoundUtilL"));
-        iDevSoundUtil->InitializeFixedSequenceL(&iFixedSequences);
-
-        DEBPRN0(
-        _L("CMMFDevSoundAdaptationStub[0x%x]::CBody::InitializeDevSoundUtilL"));
-        }
-
-    }
-
-//End of File