diff -r 000000000000 -r 1bce908db942 multimediacommscontroller/tsrc/componenttests/src/test_audiocontrol.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommscontroller/tsrc/componenttests/src/test_audiocontrol.cpp Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,537 @@ +/* +* 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: +* +*/ + + + + +// INCLUDES +#include "test_audiocontrol.h" +#include "mccteststubs.h" +#include "mmccinterface.h" +#include "mmcccodecinformation.h" +#include "testdefinitions.hrh" + +// ======== MEMBER FUNCTIONS ================================================= + +// --------------------------------------------------------------------------- +// CTestAudioControlAudioControl::CTestAudioControlAudioControl +// C++ default constructor can NOT contain any code, that +// might leave. +// --------------------------------------------------------------------------- +// +CTestAudioControl::CTestAudioControl( CConsoleBase& aConsole, + const TMccNetSettings& aNetsettings, CMccInterface& aIF, + CMccInterfaceStub& aIFStub ) + : iConsole( aConsole ), iNetsettings( aNetsettings ), iInterface( aIF ), + iIfStub( aIFStub ) + { + } + +// --------------------------------------------------------------------------- +// CTestAudioControl::ConstructL +// Symbian 2nd phase constructor can leave. +// --------------------------------------------------------------------------- +// +void CTestAudioControl::ConstructL( ) + { + } + +// --------------------------------------------------------------------------- +// CTestAudioControl::NewL +// Static constructor. +// --------------------------------------------------------------------------- +// +CTestAudioControl* CTestAudioControl::NewL( CConsoleBase& aConsole, + const TMccNetSettings& aNetsettings, CMccInterface& aIF, + CMccInterfaceStub& aIFStub ) + { + CTestAudioControl* self + = new ( ELeave ) CTestAudioControl( aConsole, aNetsettings, aIF, aIFStub ); + CleanupStack::PushL( self ); + + self->ConstructL(); + + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CTestAudioControl::~CTestAudioControl +// Destructor. +// --------------------------------------------------------------------------- +// +CTestAudioControl::~CTestAudioControl() + { + } + +// --------------------------------------------------------------------------- +// CTestAudioControl::DoRunAudioControlTestsL +// --------------------------------------------------------------------------- +// +void CTestAudioControl::DoRunAudioControlTestsL() + { + iConsole.Printf( _L("\n*** AUDIO CONTROL TESTS ***\n") ); + + CreateStreamsL(); + + iConsole.Printf( _L("Get volume test\n") ); + RDebug::Print( _L("Mcc_COM_TEST_START: TestGetVolumeL") ); + __UHEAP_MARK; + TestGetVolumeL(); + __UHEAP_MARKEND; + RDebug::Print( _L("Mcc_COM_TEST_STOP: TestGetVolumeL") ); + + iConsole.Printf( _L("Get gain test\n") ); + RDebug::Print( _L("Mcc_COM_TEST_START: TestGetGainL") ); + __UHEAP_MARK; + TestGetGainL(); + __UHEAP_MARKEND; + RDebug::Print( _L("Mcc_COM_TEST_STOP: TestGetGainL") ); + + iConsole.Printf( _L("Get balance test\n") ); + RDebug::Print( _L("Mcc_COM_TEST_START: TestGetBalanceL") ); + __UHEAP_MARK; + TestGetBalanceL(); + __UHEAP_MARKEND; + RDebug::Print( _L("Mcc_COM_TEST_STOP: TestGetBalanceL") ); + + iConsole.Printf( _L("Get max volume test\n") ); + RDebug::Print( _L("Mcc_COM_TEST_START: TestGetMaxVolumeL") ); + __UHEAP_MARK; + TestGetMaxVolumeL(); + __UHEAP_MARKEND; + RDebug::Print( _L("Mcc_COM_TEST_STOP: TestGetMaxVolumeL") ); + + iConsole.Printf( _L("Get max gain test\n") ); + RDebug::Print( _L("Mcc_COM_TEST_START: TestGetMaxGainL") ); + __UHEAP_MARK; + TestGetMaxGainL(); + __UHEAP_MARKEND; + RDebug::Print( _L("Mcc_COM_TEST_STOP: TestGetMaxGainL") ); + + iConsole.Printf( _L("Set volume test\n") ); + RDebug::Print( _L("Mcc_COM_TEST_START: TestSetVolumeL") ); + __UHEAP_MARK; + TestSetVolumeL(); + __UHEAP_MARKEND; + RDebug::Print( _L("Mcc_COM_TEST_STOP: TestSetVolumeL") ); + + iConsole.Printf( _L("Set gain test\n") ); + RDebug::Print( _L("Mcc_COM_TEST_START: TestSetGainL") ); + __UHEAP_MARK; + TestSetGainL(); + __UHEAP_MARKEND; + RDebug::Print( _L("Mcc_COM_TEST_STOP: TestSetGainL") ); + + iConsole.Printf( _L("Set balance test\n") ); + RDebug::Print( _L("Mcc_COM_TEST_START: TestSetBalanceL") ); + __UHEAP_MARK; + TestSetBalanceL(); + __UHEAP_MARKEND; + RDebug::Print( _L("Mcc_COM_TEST_STOP: TestSetBalanceL") ); + + DeleteStreamsL(); + } + + +// --------------------------------------------------------------------------- +// CTestAudioControl::TestGetVolumeL +// --------------------------------------------------------------------------- +// +void CTestAudioControl::TestGetVolumeL() + { + TInt volume( 0 ); + TPckgBuf volPckg( volume ); + User::LeaveIfError( iInterface.GetParameter( + iSessionId, iLinkId, iDlStreamId, iAudioSinkId, + KMccSpeakerVolume, volPckg ) ); + + TInt err = iInterface.GetParameter( + iSessionId, iLinkId, iUlStreamId, iAudioSourceId, + KMccSpeakerVolume, volPckg ); + if ( KErrNone == err ) + { + // VOLUME IS PROPERTY OF PLAYBACK DEVICE ONLY + //User::Leave( KErrTotalLossOfPrecision ); + } + } + +// --------------------------------------------------------------------------- +// CTestAudioControl::TestGetGainL +// --------------------------------------------------------------------------- +// +void CTestAudioControl::TestGetGainL() + { + TInt gain( 0 ); + TPckgBuf gainPckg( gain ); + User::LeaveIfError( iInterface.GetParameter( + iSessionId, iLinkId, iUlStreamId, iAudioSourceId, + KMccMicGain, gainPckg ) ); + + TInt err = iInterface.GetParameter( + iSessionId, iLinkId, iDlStreamId, iAudioSinkId, + KMccMicGain, gainPckg ); + if ( KErrNone == err ) + { + // GAIN IS PROPERTY OF RECORD DEVICE ONLY + //User::Leave( KErrTotalLossOfPrecision ); + } + } + +// --------------------------------------------------------------------------- +// CTestAudioControl::TestGetBalanceL +// --------------------------------------------------------------------------- +// +void CTestAudioControl::TestGetBalanceL() + { + TPckgBuf val; + User::LeaveIfError( iInterface.GetParameter( + iSessionId, iLinkId, iUlStreamId, iAudioSourceId, KMccMicBalance, val ) ); + TInt err = iInterface.GetParameter( + iSessionId, iLinkId, iDlStreamId, iAudioSinkId, KMccMicBalance, val ); + if ( KErrNone == err ) + { + //User::Leave( KErrTotalLossOfPrecision ); + } + + User::LeaveIfError( iInterface.GetParameter( + iSessionId, iLinkId, iDlStreamId, iAudioSinkId, KMccSpeakerBalance, val ) ); + err = iInterface.GetParameter( + iSessionId, iLinkId, iUlStreamId, iAudioSourceId, KMccSpeakerBalance, val ); + if ( KErrNone == err ) + { + //User::Leave( KErrTotalLossOfPrecision ); + } + } + +// --------------------------------------------------------------------------- +// CTestAudioControl::TestGetMaxVolumeL +// --------------------------------------------------------------------------- +// +void CTestAudioControl::TestGetMaxVolumeL() + { + TInt maxVol( 0 ); + TPckgBuf maxVolPckg( maxVol ); + + User::LeaveIfError( iInterface.GetParameter( + iSessionId, iLinkId, iDlStreamId, iAudioSinkId, + KMccSpeakerMaxVolume, maxVolPckg ) ); + if ( 0 == maxVolPckg() ) + { + User::Leave( KErrTotalLossOfPrecision ); + } + + TInt err = iInterface.GetParameter( + iSessionId, iLinkId, iUlStreamId, iAudioSourceId, + KMccSpeakerMaxVolume, maxVolPckg ); + if ( KErrNone == err ) + { + // VOLUME IS PROPERTY OF PLAYBACK DEVICE ONLY + //User::Leave( KErrTotalLossOfPrecision ); + } + } + +// --------------------------------------------------------------------------- +// CTestAudioControl::TestGetMaxGainL +// --------------------------------------------------------------------------- +// +void CTestAudioControl::TestGetMaxGainL() + { + TInt maxGain( 0 ); + TPckgBuf maxGainPckg( maxGain ); + User::LeaveIfError( iInterface.GetParameter( iSessionId, + iLinkId, iUlStreamId, iAudioSourceId, KMccMicMaxGain, maxGainPckg ) ); + if ( 0 == maxGainPckg() ) + { + User::Leave( KErrTotalLossOfPrecision ); + } + + TInt err = iInterface.GetParameter( iSessionId, + iLinkId, iDlStreamId, iAudioSinkId, KMccMicMaxGain, maxGainPckg ); + if ( KErrNone == err ) + { + // GAIN IS PROPERTY OF RECORD DEVICE ONLY + //User::Leave( KErrTotalLossOfPrecision ); + } + } + +// --------------------------------------------------------------------------- +// CTestAudioControl::TestSetVolumeL +// --------------------------------------------------------------------------- +// +void CTestAudioControl::TestSetVolumeL() + { + TInt maxVol( 0 ); + TPckgBuf maxVolPckg( maxVol ); + User::LeaveIfError( iInterface.GetParameter( + iSessionId, iLinkId, iDlStreamId, iAudioSinkId, + KMccSpeakerMaxVolume, maxVolPckg ) ); + + TPckgBuf volPckg( maxVolPckg() ); + User::LeaveIfError( iInterface.SetParameter( iSessionId, + iLinkId, iDlStreamId, iAudioSinkId, KMccSpeakerVolume, volPckg ) ); + TInt setVol = volPckg(); + User::LeaveIfError( iInterface.GetParameter( iSessionId, + iLinkId, iDlStreamId, iAudioSinkId, KMccSpeakerVolume, volPckg ) ); + if ( setVol != volPckg() ) + { + User::Leave( KErrTotalLossOfPrecision ); + } + + TPckgBuf volPckg2( maxVolPckg() + 1 ); + TInt err = iInterface.SetParameter( iSessionId, + iLinkId, iDlStreamId, iAudioSinkId, KMccSpeakerVolume, volPckg2 ); + if ( KErrNone == err ) + { + User::Leave( KErrTotalLossOfPrecision ); + } + + TPckgBuf volPckg3( 0 ); + User::LeaveIfError( iInterface.SetParameter( iSessionId, + iLinkId, iDlStreamId, iAudioSinkId, KMccSpeakerVolume, volPckg3 ) ); + + + err = iInterface.SetParameter( iSessionId, iLinkId, iUlStreamId, + iAudioSourceId, KMccSpeakerVolume, volPckg3 ); + if ( KErrNone == err ) + { + // VOLUME IS PROPERTY OF PLAYBACK DEVICE ONLY + //User::Leave( KErrTotalLossOfPrecision ); + } + } + +// --------------------------------------------------------------------------- +// CTestAudioControl::TestSetGainL +// --------------------------------------------------------------------------- +// +void CTestAudioControl::TestSetGainL() + { + TInt maxGain( 0 ); + TPckgBuf maxGainPckg( maxGain ); + User::LeaveIfError( iInterface.GetParameter( iSessionId, + iLinkId, iUlStreamId, iAudioSourceId, KMccMicMaxGain, maxGainPckg ) ); + + TPckgBuf gainPckg( maxGainPckg() ); + User::LeaveIfError( iInterface.SetParameter( iSessionId, + iLinkId, iUlStreamId, iAudioSourceId, KMccMicGain, gainPckg ) ); + TInt setGain = gainPckg(); + User::LeaveIfError( iInterface.GetParameter( iSessionId, + iLinkId, iUlStreamId, iAudioSourceId, KMccMicGain, gainPckg ) ); + if ( setGain != gainPckg() ) + { + User::Leave( KErrTotalLossOfPrecision ); + } + + TPckgBuf gainPckg2( maxGainPckg() + 1 ); + TInt err = iInterface.SetParameter( iSessionId, + iLinkId, iUlStreamId, iAudioSourceId, KMccMicGain, gainPckg2 ); + if ( KErrNone == err ) + { + //User::Leave( KErrTotalLossOfPrecision ); + } + + TPckgBuf gainPckg3( 0 ); + User::LeaveIfError( iInterface.SetParameter( iSessionId, + iLinkId, iUlStreamId, iAudioSourceId, KMccMicGain, gainPckg3 ) ); + + err = iInterface.SetParameter( iSessionId, + iLinkId, iDlStreamId, iAudioSinkId, KMccMicGain, gainPckg3 ); + if ( KErrNone == err ) + { + // GAIN IS PROPERTY OF RECORD DEVICE ONLY + //User::Leave( KErrTotalLossOfPrecision ); + } + } + +// --------------------------------------------------------------------------- +// CTestAudioControl::TestSetBalanceL +// --------------------------------------------------------------------------- +// +void CTestAudioControl::TestSetBalanceL() + { + TInt error( KErrNone ); + TPckgBuf val; + + // TRY SOME INVALID VALUES + val = KMMFBalanceMaxLeft - 1; + error = iInterface.SetParameter( + iSessionId, iLinkId, iUlStreamId, iAudioSourceId, KMccMicBalance, val ); + if ( error == KErrNone ) + { + //User::Leave( KErrTotalLossOfPrecision ); + } + error = iInterface.SetParameter( + iSessionId, iLinkId, iDlStreamId, iAudioSinkId, KMccSpeakerBalance, val ); + if ( error == KErrNone ) + { + //User::Leave( KErrTotalLossOfPrecision ); + } + + val = KMMFBalanceMaxRight + 1; + error = iInterface.SetParameter( + iSessionId, iLinkId, iUlStreamId, iAudioSourceId, KMccMicBalance, val ); + if ( error == KErrNone ) + { + //User::Leave( KErrTotalLossOfPrecision ); + } + error = iInterface.SetParameter( + iSessionId, iLinkId, iDlStreamId, iAudioSinkId, KMccSpeakerBalance, val ); + if ( error == KErrNone ) + { + //User::Leave( KErrTotalLossOfPrecision ); + } + + // TRY SOME VALID VALUES + val = KMMFBalanceMaxLeft; + User::LeaveIfError( iInterface.SetParameter( + iSessionId, iLinkId, iUlStreamId, iAudioSourceId, KMccMicBalance, val ) ); + User::LeaveIfError( iInterface.SetParameter( + iSessionId, iLinkId, iDlStreamId, iAudioSinkId, KMccSpeakerBalance, val ) ); + + val = KMMFBalanceMaxRight; + User::LeaveIfError( iInterface.SetParameter( + iSessionId, iLinkId, iUlStreamId, iAudioSourceId, KMccMicBalance, val ) ); + User::LeaveIfError( iInterface.SetParameter( + iSessionId, iLinkId, iDlStreamId, iAudioSinkId, KMccSpeakerBalance, val ) ); + + // Check that the new value is taken into use + val = KMMFBalanceCenter; + User::LeaveIfError( iInterface.SetParameter( + iSessionId, iLinkId, iUlStreamId, iAudioSourceId, KMccMicBalance, val ) ); + TInt setBalance = val(); + User::LeaveIfError( iInterface.GetParameter( + iSessionId, iLinkId, iUlStreamId, iAudioSourceId, KMccSpeakerBalance, val ) ); + if ( setBalance != val() ) + { + User::Leave( KErrTotalLossOfPrecision ); + } + + User::LeaveIfError( iInterface.SetParameter( + iSessionId, iLinkId, iDlStreamId, iAudioSinkId, KMccMicBalance, val ) ); + setBalance = val(); + User::LeaveIfError( iInterface.GetParameter( + iSessionId, iLinkId, iUlStreamId, iAudioSourceId, KMccSpeakerBalance, val ) ); + if ( setBalance != val() ) + { + User::Leave( KErrTotalLossOfPrecision ); + } + + // WRONG ENUMERATION + error = iInterface.SetParameter( + iSessionId, iLinkId, iUlStreamId, iAudioSourceId, KMccSpeakerBalance, val ); + if ( KErrNone == error ) + { + //User::Leave( KErrTotalLossOfPrecision ); + } + error = iInterface.SetParameter( + iSessionId, iLinkId, iDlStreamId, iAudioSinkId, KMccMicBalance, val ); + if ( KErrNone == error ) + { + //User::Leave( KErrTotalLossOfPrecision ); + } + } + + +// --------------------------------------------------------------------------- +// CTestAudioControl::CreateStreamsL +// --------------------------------------------------------------------------- +// +void CTestAudioControl::CreateStreamsL() + { + User::LeaveIfError( iInterface.CreateSession( iSessionId ) ); + User::LeaveIfError( + iInterface.CreateLink( iSessionId, KMccLinkGeneral, iLinkId, + iNetsettings ) ); + iIfStub.WaitForEvent( iSessionId, iLinkId, 0, KMccLinkCreated ); + + User::LeaveIfError( + iInterface.AddDataSink( KMccRtpSinkUid, KNullDesC8, iRtpSinkId ) ); + User::LeaveIfError( + iInterface.AddDataSource( KUidMmfAudioInput, KNullDesC8, iAudioSourceId ) ); + + CMccCodecInformation* codec + = FetchCodecByMimeSubtypeNameL( iInterface, KAMRSdpName ); + CleanupStack::PushL( codec ); + + User::LeaveIfError( iInterface.CreateStream( iSessionId, iLinkId, iUlStreamId, + KMccAudioUplinkStream, *codec ) ); + + User::LeaveIfError( + iInterface.AddDataSink( KUidMmfAudioOutput, KNullDesC8, iAudioSinkId ) ); + User::LeaveIfError( + iInterface.AddDataSource( KMccRtpSourceUid, KNullDesC8, iRtpSourceId ) ); + User::LeaveIfError( iInterface.CreateStream( iSessionId, iLinkId, iDlStreamId, + KMccAudioDownlinkStream, *codec ) ); + + CleanupStack::PopAndDestroy( codec ); + } + + +// --------------------------------------------------------------------------- +// CTestAudioControl::DeleteStreamsL +// --------------------------------------------------------------------------- +// +void CTestAudioControl::DeleteStreamsL() + { + /* + User::LeaveIfError( + iInterface.RemoveDataSource( iSessionId, iLinkId, iUlStreamId, iAudioSourceId ) ); + User::LeaveIfError( + iInterface.RemoveDataSink( iSessionId, iLinkId, iUlStreamId, iRtpSinkId ) ); + User::LeaveIfError( + iInterface.RemoveDataSource( iSessionId, iLinkId, iDlStreamId, iRtpSourceId ) ); + User::LeaveIfError( + iInterface.RemoveDataSink( iSessionId, iLinkId, iDlStreamId, iAudioSinkId ) ); + */ + User::LeaveIfError( + iInterface.DeleteStream( iSessionId, iLinkId, iUlStreamId ) ); + User::LeaveIfError( + iInterface.DeleteStream( iSessionId, iLinkId, iDlStreamId ) ); + User::LeaveIfError( iInterface.CloseLink( iSessionId, iLinkId ) ); + User::LeaveIfError( iInterface.CloseSession( iSessionId ) ); + } + +// --------------------------------------------------------------------------- +// CTestAudioControl::FetchCodecByMimeSubtypeNameL +// --------------------------------------------------------------------------- +// +CMccCodecInformation* CTestAudioControl::FetchCodecByMimeSubtypeNameL( + const CMccInterface& aInterface, const TDesC8& aName ) const + { + RPointerArray codecArray; + CleanupResetAndDestroy< RPointerArray >::PushL( codecArray ); + User::LeaveIfError( aInterface.GetCapabilities( codecArray ) ); + + CMccCodecInformation* tmp = NULL; + TInt ind( codecArray.Count() ); + + while ( ( ind-- ) && ( NULL == tmp ) ) + { + if ( codecArray[ind]->SdpName().Compare( aName ) == 0 ) + { + tmp = codecArray[ind]->CloneDetailedL(); + } + } + + if ( NULL == tmp ) + { + User::Leave( KErrNotFound ); + } + + CleanupStack::PopAndDestroy( &codecArray ); + return tmp; + }