mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/AdvancedAudioController/Src/AdvancedAudioPlayControllerExt.cpp
changeset 0 71ca22bcf22a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/AdvancedAudioController/Src/AdvancedAudioPlayControllerExt.cpp	Tue Feb 02 01:08:46 2010 +0200
@@ -0,0 +1,854 @@
+/*
+* 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 contains the base class from which specific audio
+*                play controllers are derived. This class encapsulates common
+*                behavior for all audio play controllers.
+*
+*/
+
+
+// INCLUDE FILES
+#include "AdvancedAudioPlayController.h"
+#include "AdvancedAudioResource.h"
+#include "DebugMacros.h"
+
+#include <AudioOutput.h>
+#include <MetaDataFieldContainer.h>
+#include <MetaDataUtility.h>
+#include <mmfformatimplementationuids.hrh>
+#include <mmfmeta.h>
+#include <MultimediaDataSourceEvents.h>
+#include <MultimediaDataSourceFactory.h>
+#include <oma2dcf.h>
+#include <DRMConfigIntfc.h>
+#include <AudioOutputControlUtility.h>
+
+// CONSTANTS
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MacSetSinkSampleRateL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MacSetSinkSampleRateL(
+	TUint aSampleRate)
+    {
+    if (!iDataSink || !iDataSource)
+		{
+        User::Leave(KErrNotReady);
+		}
+
+    if (iDataSink->DataSinkType() != KUidMmfFileSink)
+        {
+        User::Leave(KErrNotSupported);
+        }
+
+    switch (aSampleRate)
+        {
+/*
+		case KAAPSampleRate8000Hz:
+        case KAAPSampleRate11025Hz:
+        case KAAPSampleRate12000Hz:
+        case KAAPSampleRate16000Hz:
+        case KAAPSampleRate22050Hz:
+        case KAAPSampleRate24000Hz:
+        case KAAPSampleRate32000Hz:
+        case KAAPSampleRate44100Hz:
+        case KAAPSampleRate48000Hz:
+        case KAAPSampleRate64000Hz:
+        case KAAPSampleRate88200Hz:
+        case KAAPSampleRate96000Hz:
+            if ((TInt)aSampleRate > iSampleRate)
+                {
+                // Only allow downsampling
+                User::Leave(KErrNotSupported);
+                }
+            else
+                {
+                iSinkSampleRate = aSampleRate;
+                }
+			break;
+//For future use...
+*/
+        case KAAPSampleRate8000Hz:
+            if ((TUint)iSampleRate == KAAPSampleRate8000Hz ||
+                 (TUint)iSampleRate == KAAPSampleRate16000Hz)
+                {
+                iSinkSampleRate = aSampleRate;
+                }
+            else
+                {
+                // Very limited due to Symbian conversion limitations...
+                User::Leave(KErrNotSupported);
+                }
+            break;
+        case KAAPSampleRate16000Hz:
+            if ((TUint)iSampleRate == KAAPSampleRate16000Hz)
+                {
+                iSinkSampleRate = aSampleRate;
+                }
+            else
+                {
+                // Very limited due to Symbian conversion limitations...
+                User::Leave(KErrNotSupported);
+                }
+            break;
+        default:
+            User::Leave(KErrNotSupported);
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MacGetSinkBitRateL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MacSetSinkBitRateL(
+	TUint aRate)
+    {
+    if (!iDataSink || !iDataSource)
+		{
+        User::Leave(KErrNotReady);
+		}
+
+    if (iDataSink->DataSinkType() != KUidMmfFileSink ||
+		(TInt)aRate != iBitRate)
+        {
+        User::Leave(KErrNotSupported);
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MacSetSinkNumChannelsL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MacSetSinkNumChannelsL(
+	TUint aNumChannels)
+	{
+    if (!iDataSink)
+		{
+        User::Leave(KErrNotReady);
+		}
+
+    if (iDataSink->DataSinkType() != KUidMmfFileSink)
+        {
+        User::Leave(KErrNotSupported);
+        }
+
+    if (aNumChannels <= 2)
+        {
+        iSinkNumChannels = aNumChannels;
+        }
+    else
+        {
+        User::Leave(KErrNotSupported);
+        }
+	}
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MacSetSinkFormatL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MacSetSinkFormatL(
+	TUid aFormatUid)
+    {
+    DP1(_L("CAdvancedAudioPlayController::MacSetSinkFormatL[%x]"), aFormatUid);
+
+    if (aFormatUid != TUid::Uid(KMmfUidFormatRAWWrite))
+        {
+        User::Leave(KErrNotSupported);
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MacSetSinkDataTypeL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MacSetSinkDataTypeL(
+	TFourCC aDataType)
+	{
+    if (!iDataSink)
+		{
+        User::Leave(KErrNotReady);
+		}
+
+    if (iDataSink->DataSinkType() != KUidMmfFileSink ||
+		 aDataType != KMMFFourCCCodePCM16)
+        {
+        User::Leave(KErrNotSupported);
+        }
+	}
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MacGetSourceSampleRateL
+// Returns the sampling rate obtrained from the source.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MacGetSourceSampleRateL(
+	TUint& aRate)
+    {
+    if (!iDataSource)
+		{
+        User::Leave(KErrNotReady);
+		}
+    aRate = iSampleRate;
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MacGetSourceBitRateL
+// Returns the bit rate obtained from the source.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MacGetSourceBitRateL(
+	TUint& aRate)
+    {
+    if (!iDataSource)
+		{
+        User::Leave(KErrNotReady);
+		}
+		
+	// bit rate might be changed implicitly within a Controller's Utility
+//    UpdateBitRate();
+    aRate = iBitRate;
+	DP1(_L("CAdvancedAudioPlayController::MacGetSourceBitRateL[%d]"), iBitRate);
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MacGetSourceNumChannelsL
+// Returns the number of channels from the source.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MacGetSourceNumChannelsL(
+	TUint& aNumChannels)
+    {
+    if (!iDataSource)
+		{
+        User::Leave(KErrNotReady);
+		}
+    aNumChannels = iChannels;
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MacGetSourceFormatL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MacGetSourceFormatL(
+	TUid& aFormat)
+    {
+    aFormat = iSourceFormat;
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MacGetSourceDataTypeL
+// Returns the data type from the source.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MacGetSourceDataTypeL(
+	TFourCC& aDataType)
+    {
+    if (!iDataSource)
+    	{
+        User::Leave(KErrNotReady);
+		}
+    aDataType = iDataType;
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MacGetSinkSampleRateL
+// Returns the sample rates configured in the audio output.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MacGetSinkSampleRateL(
+	TUint& aRate)
+    {
+    if (!iDataSink)
+    	{
+        User::Leave(KErrNotReady);
+		}
+
+    RArray<TUint> rates;
+    CleanupClosePushL(rates);
+    iAudioOutput->ConfigRatesL(rates);
+
+    ASSERT(rates.Count() == 1);
+    aRate = rates[0];
+    CleanupStack::PopAndDestroy(&rates);	// rates
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MacGetSinkBitRateL
+// Default implementation.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MacGetSinkBitRateL(
+	TUint& aRate)
+    {
+    if (!iDataSink || !iDataSource)
+		{
+        User::Leave(KErrNotReady);
+		}
+
+    if (iDataSink->DataSinkType() != KUidMmfFileSink)
+        {
+        User::Leave(KErrNotSupported);
+        }
+
+    aRate = iBitRate;
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MacGetSinkNumChannelsL
+// Returns the number of channels configured in the audio output.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MacGetSinkNumChannelsL(
+	TUint& aNumChannels)
+    {
+    if (!iDataSink)
+     	{
+		User::Leave(KErrNotReady);
+		}
+
+    RArray<TUint> channels;
+    CleanupClosePushL(channels);
+	iAudioOutput->ConfigChannelsL(channels);
+
+    ASSERT(channels.Count() == 1);
+    aNumChannels = channels[0];
+    CleanupStack::PopAndDestroy(&channels);	// channels
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MacGetSinkFormatL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MacGetSinkFormatL(
+	TUid& aFormat)
+    {
+    aFormat = TUid::Uid(KMmfUidFormatRAWWrite);
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MacGetSinkDataTypeL
+// Returns the data types configured in the audio output.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MacGetSinkDataTypeL(
+	TFourCC& aDataType)
+    {
+    if (!iDataSink)
+    	{
+		User::Leave(KErrNotReady);
+		}
+
+    RArray<TFourCC> dataTypes;
+    CleanupClosePushL(dataTypes);
+    iAudioOutput->ConfigDataTypesL(dataTypes);
+
+    ASSERT(dataTypes.Count() == 1);
+    aDataType = dataTypes[0];
+    CleanupStack::PopAndDestroy(&dataTypes);	// dataTypes
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MacGetSupportedSourceSampleRatesL
+// Returns the supported sample rates.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MacGetSupportedSourceSampleRatesL(
+	RArray<TUint>& aSupportedRates)
+    {
+    if (!iDataSource)
+    	{
+        User::Leave(KErrNotReady);
+		}
+
+    aSupportedRates.Reset();
+    User::LeaveIfError(aSupportedRates.Append(iSampleRate));
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MacGetSupportedSourceBitRatesL
+// Returns the supported bit rate by the source.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MacGetSupportedSourceBitRatesL(
+	RArray<TUint>& aSupportedRates)
+    {
+    if (!iDataSource)
+    	{
+        User::Leave(KErrNotReady);
+		}
+
+    aSupportedRates.Reset();
+    User::LeaveIfError(aSupportedRates.Append(iBitRate));
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MacGetSupportedSourceNumChannelsL
+// Returns the supported number of channels by the source.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MacGetSupportedSourceNumChannelsL(
+	RArray<TUint>& aSupportedChannels)
+    {
+    if (!iDataSource)
+    	{
+        User::Leave(KErrNotReady);
+		}
+
+    aSupportedChannels.Reset();
+    User::LeaveIfError(aSupportedChannels.Append(iChannels));
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MacGetSupportedSourceDataTypesL
+// Returns the supported data types by the source.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MacGetSupportedSourceDataTypesL(
+	RArray<TFourCC>& aSupportedDataTypes)
+    {
+    if (!iDataSource)
+    	{
+        User::Leave(KErrNotReady);
+		}
+
+    aSupportedDataTypes.Reset();
+    User::LeaveIfError(aSupportedDataTypes.Append(iDataType));
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MacGetSupportedSinkSampleRatesL
+// Returns the supported sample rates by audio output.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MacGetSupportedSinkSampleRatesL(
+	RArray<TUint>& aSupportedRates)
+    {
+    if (!iDataSource)
+    	{
+        User::Leave(KErrNotReady);
+		}
+
+    aSupportedRates.Reset();
+    iAudioOutput->CapabilitiesRatesL(aSupportedRates);
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MacGetSupportedSinkBitRatesL
+// Default implementation.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MacGetSupportedSinkBitRatesL(
+	RArray<TUint>& aSupportedRates)
+    {
+    if (!iDataSink || !iDataSource)
+		{
+        User::Leave(KErrNotReady);
+		}
+
+    if (iDataSink->DataSinkType() != KUidMmfFileSink)
+        {
+        User::Leave(KErrNotSupported);
+        }
+
+    aSupportedRates.Reset();
+    aSupportedRates.Append(iBitRate);
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MacGetSupportedSinkNumChannelsL
+// Returns the supported number of channels by audio output.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MacGetSupportedSinkNumChannelsL(
+	RArray<TUint>& aSupportedChannels)
+    {
+    if (!iDataSink)
+    	{
+        User::Leave(KErrNotReady);
+		}
+
+    aSupportedChannels.Reset();
+    iAudioOutput->CapabilitiesChannelsL(aSupportedChannels);
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MacGetSupportedSinkDataTypesL
+// Returns the supported data types by audio output.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MacGetSupportedSinkDataTypesL(
+	RArray<TFourCC>& aSupportedDataTypes)
+    {
+    if (!iDataSink)
+    	{
+        User::Leave(KErrNotReady);
+		}
+
+    aSupportedDataTypes.Reset();
+    iAudioOutput->CapabilitiesDataTypesL(aSupportedDataTypes);
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MapcSetPlaybackWindowL
+// Default implementation.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MapcSetPlaybackWindowL(
+    const TTimeIntervalMicroSeconds& aStart,
+    const TTimeIntervalMicroSeconds& aEnd)
+    {
+	DP0(_L("CAdvancedAudioPlayController::MapcSetPlaybackWindowL"));
+    SetPlaybackWindowBoundariesL(aStart, aEnd);
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MapcDeletePlaybackWindowL
+// Default implementation.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MapcDeletePlaybackWindowL()
+    {
+    DP0(_L("CAdvancedAudioPlayController::MapcDeletePlaybackWindowL"));
+    // iPlayWindowStartPosition = TTimeIntervalMicroSeconds(0);
+    // iPlayWindowEndPosition = TTimeIntervalMicroSeconds(0);
+    // ClearPlayWindow() can be called in either EPlaying or EPaused or EStopped state.
+    // If ClearPlayWindow() is called before opening an audio file, then it doesn't have any effect.
+    // This will call the Unregister event on the play window end position and sets the start and end position accordingly
+    SetPlaybackWindowBoundariesL(0, 0);
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MapcGetLoadingProgressL
+// Default implementation.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MapcGetLoadingProgressL(
+	TInt& /*aPercentageComplete*/)
+    {
+    User::Leave(KErrNotSupported);
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MapdSetVolumeL
+// Sets the volume in audion output.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MapdSetVolumeL(
+	TInt aVolume)
+    {
+    DP1(_L("CAdvancedAudioPlayController::MapdSetVolumeL[%d]"), aVolume);
+
+    if (!iDataSink)
+    	{
+        User::Leave(KErrNotReady);
+		}
+
+    if (0 <= aVolume && aVolume <= iAudioOutput->MaxVolumeL())
+        {
+        iAudioOutput->SetVolumeL(aVolume);
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MapdGetMaxVolumeL
+// Returns the max volume supported by the audio output.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MapdGetMaxVolumeL(
+	TInt& aMaxVolume)
+    {
+    if (!iDataSink)
+    	{
+        User::Leave(KErrNotReady);
+		}
+
+	aMaxVolume = iAudioOutput->MaxVolumeL();
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MapdGetVolumeL
+// Returns the current volume set in audio output.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MapdGetVolumeL(
+	TInt& aVolume)
+    {
+    if (!iDataSink)
+    	{
+        User::Leave(KErrNotReady);
+		}
+
+    aVolume = iAudioOutput->VolumeL();
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MapdSetVolumeRampL
+// Sets the volume ramp duration in audio output.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MapdSetVolumeRampL(
+	const TTimeIntervalMicroSeconds& aRampDuration)
+    {
+    if (!iDataSink)
+    	{
+        User::Leave(KErrNotReady);
+		}
+
+	iAudioOutput->SetVolumeRampL(aRampDuration);
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MapdSetBalanceL
+// Sets the balance.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MapdSetBalanceL(
+	TInt aBalance)
+    {
+    if(!iDataSink)
+    	{
+        User::Leave(KErrNotReady);
+		}
+
+    if(aBalance < KMMFBalanceMaxLeft || aBalance > KMMFBalanceMaxRight)
+    	{
+        User::Leave(KErrArgument);
+		}
+
+    TInt left  = 0;
+    TInt right = 0;
+    TInt rightBalance = 0;
+    TInt leftBalance  = 0;
+    
+    CalculateLeftRightBalanceL(left, right, aBalance);
+	iAudioOutput->SetPlayBalanceL(left, right);
+    iAudioOutput->GetPlayBalanceL(leftBalance, rightBalance);
+
+    TBool postCondition = ((rightBalance == right) && (leftBalance == left));
+    
+    if (!postCondition)
+        User::Leave(KErrNotSupported);
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MapdGetBalanceL
+// Returns the currently set balance value.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::MapdGetBalanceL(
+	TInt& aBalance)
+    {
+    if (!iDataSink)
+    	{
+        User::Leave(KErrNotReady);
+		}
+
+    TInt left = 0;
+    TInt right = 0;
+
+	iAudioOutput->GetPlayBalanceL(left, right);
+    CalculateBalanceL(aBalance, left, right);
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::GetBitRate
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CAdvancedAudioPlayController::GetBitRate(TUint& aBitRate)
+    {
+	DP0(_L("CAdvancedAudioPlayController::GetBitRate"));
+    UpdateBitRate();    
+    aBitRate = iBitRate;
+    return KErrNone;
+    }
+    
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MscEnableEvents
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CAdvancedAudioPlayController::MscEnableEvents(TBool aEnable)
+    {
+    iEventsEnabled = aEnable;
+        
+    // bit rate might be changed implicitly within a Controller's Utility, that would have effect on the duration event
+    if (iAudioUtility)
+        {
+        TInt err = KErrNone;
+            
+        if (iEventsEnabled)
+            {
+            // callback on every 1000 millisecond (1 second) if bitrate changes
+            TRAP(err, iAudioUtility->EnableBitRateChangedEventL(1000));
+            }
+        else
+            {
+            TRAP(err, iAudioUtility->EnableBitRateChangedEventL(-1));
+            }
+
+		DP1(_L("CAdvancedAudioPlayController::MscEnableEvents, EnableBitRateChangedEventL err[%d]"), err);
+        }
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MscGetSeekingSupported
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CAdvancedAudioPlayController::MscGetSeekingSupported(TBool& /*aSupported*/)
+    {
+    return KErrNotSupported;
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MscGetRandomSeekingSupported
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CAdvancedAudioPlayController::MscGetRandomSeekingSupported(TBool& /*aSupported*/)
+    {
+    return KErrNotSupported;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::CalculateLeftRightBalanceL
+// Calculates percentage of the balance going into left and right channels.
+// -----------------------------------------------------------------------------
+//
+void CAdvancedAudioPlayController::CalculateLeftRightBalanceL(
+	TInt& aLeft,
+	TInt& aRight,
+	TInt aBalance)
+    {
+    if ((aBalance < KMMFBalanceMaxLeft) || (aBalance > KMMFBalanceMaxRight))
+        User::Leave(KErrArgument);
+    
+    aLeft = (100 * (aBalance-KMMFBalanceMaxRight)) / (KMMFBalanceMaxLeft-KMMFBalanceMaxRight);
+    aRight = 100 - aLeft;
+    
+    if ((aLeft > 100) || (aLeft < 0) || (aRight > 100) || (aRight < 0))
+        User::Leave(KErrArgument);
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::CalculateBalanceL
+// Calculates the balance based on the current left and right values.
+// -----------------------------------------------------------------------------
+//
+void CAdvancedAudioPlayController::CalculateBalanceL(
+	TInt& aBalance,
+	TInt aLeft,
+	TInt aRight)
+    {
+    if ((aLeft == 0) && (aRight == 0))
+        {
+        aBalance = 0;
+        }
+    else
+        {
+        if ((aLeft + aRight) != 100)
+            User::Leave(KErrArgument);
+        
+        if ((aLeft > 100) || (aLeft < 0) || (aRight > 100) || (aRight < 0))
+            User::Leave(KErrArgument);
+        
+        aBalance = (aLeft * (KMMFBalanceMaxLeft-KMMFBalanceMaxRight))/100 + KMMFBalanceMaxRight;
+        
+        if ((aBalance < KMMFBalanceMaxLeft) || (aBalance > KMMFBalanceMaxRight))
+            User::Leave(KErrArgument);
+        }
+    }
+
+#ifdef SYMBIAN_CAF_V2
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MdcEvaluateIntent
+// Returns the result of EvaluateIntent() when DataSourceType is KUidMmfFileSource.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CAdvancedAudioPlayController::MdcEvaluateIntent(ContentAccess::TIntent aIntent)
+	{
+	if (iDataSourceAdapter == NULL)
+	    {
+	    return KErrNotReady;
+	    }
+	TInt status = iDataSourceAdapter->EvaluateIntent(aIntent);
+	return status;
+	}
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MdcExecuteIntent
+// Returns the result of ExecuteIntent() when DataSourceType is KUidMmfFileSource.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CAdvancedAudioPlayController::MdcExecuteIntent(ContentAccess::TIntent aIntent)
+	{
+    if (iDataSourceAdapter == NULL)
+        {
+        return KErrNotReady;
+        }
+	TInt status = iDataSourceAdapter->ExecuteIntent(aIntent);
+	return status;
+	}
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MdcDisableAutomaticIntent
+// Returns KErrNone. Setting the iDisableAutoIntent based on the client request.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CAdvancedAudioPlayController::MdcDisableAutomaticIntent(TBool aDisableAutoIntent)
+	{
+	iDisableAutoIntent = aDisableAutoIntent;
+	return KErrNone;
+	}
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MdcSetAgentProperty
+// Returns the result of SetAgentProperty() when DataSourceType is KUidMmfFileSource.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CAdvancedAudioPlayController::MdcSetAgentProperty(ContentAccess::TAgentProperty aProperty, TInt aValue)
+	{
+    if (iDataSourceAdapter == NULL)
+        {
+        return KErrNotReady;
+        }
+	TInt status = iDataSourceAdapter->SetAgentProperty(aProperty, aValue);
+	return status;
+	}
+
+#endif
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::MapcSetRepeats
+// Sets the number of times the audio sample is to be repeated during the playback operation.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CAdvancedAudioPlayController::MapcSetRepeats(TInt aRepeatNumberOfTimes, const TTimeIntervalMicroSeconds& aTrailingSilence)
+    {
+    DP0(_L("CAdvancedAudioPlayController::MapcSetRepeats"));
+    if (iState == EInitializing)
+        {
+        return KErrNotReady;
+        }
+    else
+        {
+        TInt result = DoSetRepeats(aRepeatNumberOfTimes, aTrailingSilence);
+        return result;
+        }
+    }
+// End of file