mmaudio_plat/audio_routing_api/tsrc/AudioRoutingTestClass/src/AudioRoutingTestClassBlocks.cpp
author hgs
Tue, 02 Nov 2010 12:13:59 +0000
changeset 5 b220a9341636
parent 0 b8ed18f6c07b
permissions -rw-r--r--
2010wk46_01

/*
* Copyright (c) 2002 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:  AudioroutingControl test module
*
*/



// INCLUDE FILES
#include <e32svr.h>
#include <StifParser.h>
#include <Stiftestinterface.h>
#include "AudioRoutingTestClass.h"
#include "debug.h"

// EXTERNAL DATA STRUCTURES
//extern  ?external_data;

// EXTERNAL FUNCTION PROTOTYPES
//extern ?external_function( ?arg_type,?arg_type );

// CONSTANTS
//const ?type ?constant_var = ?constant;

// MACROS
//#define ?macro ?macro_def

// LOCAL CONSTANTS AND MACROS
//const ?type ?constant_var = ?constant;
//#define ?macro_name ?macro_def

// MODULE DATA STRUCTURES
//enum ?declaration
//typedef ?declaration

// LOCAL FUNCTION PROTOTYPES
//?type ?function_name( ?arg_type, ?arg_type );

// FORWARD DECLARATIONS
//class ?FORWARD_CLASSNAME;

// ============================= LOCAL FUNCTIONS ===============================

// -----------------------------------------------------------------------------
// ?function_name ?description.
// ?description
// Returns: ?value_1: ?description
//          ?value_n: ?description_line1
//                    ?description_line2
// -----------------------------------------------------------------------------
//
/*
?type ?function_name(
    ?arg_type arg,  // ?description
    ?arg_type arg)  // ?description
    {

    ?code  // ?comment

    // ?comment
    ?code
    }
*/

// ============================ MEMBER FUNCTIONS ===============================

// -----------------------------------------------------------------------------
// CAudioAudioRoutingTest::Delete
// Delete here all resources allocated and opened from test methods.
// Called from destructor.
// -----------------------------------------------------------------------------
//
TInt CAudioRoutingTestClass::Delete()
{
	TInt error= KErrNone;
    FTRACE(FPrint(_L("CAudioRoutingTestClass::Delete")));

    iExpectedEvents.Close();
    iOcurredEvents.Close();

    iLog->Log(_L("Deleting test class..."));
	iLog->Log(_L(""));
	iLog->Log(_L(""));


	if (iAudioInput)
		{
		delete iAudioInput;
		}

	if (iAudioOutput)
		{
		delete iAudioOutput;
		}

	if (iAudioTone)
		{
		delete iAudioTone;
		}

	if (iAudioInputStream)
		{
		delete iAudioInputStream;
		}

	if (iAudioOutputStream)
		{
		delete iAudioOutputStream;
		}

	if (iCustomCommandUtility)
		{
		delete iCustomCommandUtility;
		}

	if (iMidiClientUtility)
		{
		iMidiClientUtility->Close();
		delete iMidiClientUtility;
		}

	if (iRecorder)
		{
		delete iRecorder;
		}

	if (iUtil)
		{
		delete iUtil;
		}

	if (iDrmPlayerUtility)
		{
		delete iDrmPlayerUtility;
		}


	if (iVideoPlayerUtility)
		{
		delete iVideoPlayerUtility;
		DeleteVideoWindow();
		}
	if (iDevSound)
		{
		delete iDevSound;
		}
	REComSession::FinalClose();
	return error;
}

// -----------------------------------------------------------------------------
// CAudioAudioRoutingTest::RunMethodL
// Run specified method. Contains also table of test mothods and their names.
// -----------------------------------------------------------------------------
//
TInt CAudioRoutingTestClass::RunMethodL( CStifItemParser& aItem )
    {

    static TStifFunctionInfo const KFunctions[] =
        {
        // Copy this line for every implemented function.
        // First string is the function name used in TestScripter script file.
        // Second is the actual implementation member function.
		ENTRY( "AudioInput", CAudioRoutingTestClass::CreateAudioInput),
		ENTRY( "CreateObject", CAudioRoutingTestClass::CreateObject),
		ENTRY( "AudioInputs", CAudioRoutingTestClass::AudioInput),
		ENTRY( "SetAudioInput", CAudioRoutingTestClass::SetAudioInputL),
		ENTRY( "AudioOutput", CAudioRoutingTestClass::AudioOutput),
		ENTRY( "DefaultAudioOutput", CAudioRoutingTestClass::DefaultAudioOutput),
		ENTRY( "RegisterObserver", CAudioRoutingTestClass::RegisterObserverL),
		ENTRY( "SecureOutput", CAudioRoutingTestClass::SecureOutput),
		ENTRY( "SetAudioOutput", CAudioRoutingTestClass::SetAudioOutputL),
		ENTRY( "SetSecureOutput", CAudioRoutingTestClass::SetSecureOutputL),
		ENTRY( "UnregisterObserver", CAudioRoutingTestClass::UnregisterObserver),
		ENTRY( "CustomCommandPlay",CAudioRoutingTestClass::CustomCommandSyncAsync),
		ENTRY("CustomCommandRec",CAudioRoutingTestClass::CustomCommandRecord),
		ENTRY("CustomCommandRoute",CAudioRoutingTestClass::CustomCommandRouting),
		ENTRY("CustomCommandVRecord",CAudioRoutingTestClass::CustomCommandVRecord)
		 };

    const TInt count = sizeof( KFunctions ) / sizeof( TStifFunctionInfo );

    return RunInternalL( KFunctions, count, aItem );

    }


// -----------------------------------------------------------------------------
// CAudioAudioRoutingTest::EventName
// Return descriptor with the notification description
// -----------------------------------------------------------------------------
TPtrC CAudioRoutingTestClass::EventName( TInt aKey )
{
	static TText* const badKeyword = (TText*)L"BadKeyword";
	static TText* const keywords[] =
		{

		(TText*)L"EInitializeComplete",

		};



	if( (TUint)aKey >= (sizeof( keywords )/sizeof(TText*)) )
		{
		iLog->Log(_L("Keyword out of bounds"));
		TPtrC keyword( badKeyword );
		return keyword;
		}
	else
		{
		TPtrC keyword( keywords[aKey] );
		return keyword;
		}
}

// -----------------------------------------------------------------------------
// CAudioAudioRoutingTest::AddExpectedEvent
// Add an event to the expected events' list
// -----------------------------------------------------------------------------
void CAudioRoutingTestClass::AddExpectedEvent(TG711ExpectedEvent event, TInt ms)
{
	FTRACE(FPrint(_L("CAudioRoutingTestClass::AddExpectedEvent")));
	iExpectedEvents.Append(event);
	TPtrC eventName = EventName(event);
	iLog->Log(_L("Adding expected event:(0x%02x)%S Total=%d"), event, &eventName, iExpectedEvents.Count() );

	if ( iTimeoutController && !iTimeoutController->IsActive() )
		{
		if (ms > 0)
			{
			iTimeoutController->Start( TTimeIntervalMicroSeconds(ms * 1000) );
			}
		else
			{
			iLog->Log(_L("Timeout with default value (1s)"));
			iTimeoutController->Start( TTimeIntervalMicroSeconds(1000000) );
			}
		}
}

// -----------------------------------------------------------------------------
// CAudioAudioRoutingTest::RemoveExpectedEvent
// Remove the indicated event from the expected events' list
// -----------------------------------------------------------------------------
TBool CAudioRoutingTestClass::RemoveExpectedEvent(TG711ExpectedEvent aEvent)
{
	FTRACE(FPrint(_L("CAudioRoutingTestClass::RemoveExpectedEvent")));
	TBool match = EFalse;
	for (TUint i=0; i < iExpectedEvents.Count() ; i++)
		{
		if (iExpectedEvents[i] == aEvent)
			{
			iExpectedEvents.Remove(i);
			match = ETrue;
			break;
			}
		}

	return match;
}


// -----------------------------------------------------------------------------
// CAudioAudioRoutingTest::RemoveAllExpectedEvents
// Remove the indicated event from the expected events' list
// -----------------------------------------------------------------------------
void CAudioRoutingTestClass::RemoveAllExpectedEvents()
{
	FTRACE(FPrint(_L("CAudioRoutingTestClass::RemoveAllExpectedEvents")));
	iLog->Log(_L("Removing all expected events"));

	iExpectedEvents.Reset();
	iOcurredEvents.Reset();
}


// -----------------------------------------------------------------------------
// CAudioAudioRoutingTest::ProcessEvent
// -----------------------------------------------------------------------------
void CAudioRoutingTestClass::ProcessEvent(TG711ExpectedEvent aEvent, TInt aError)
{
	FTRACE(FPrint(_L("CAudioRoutingTestClass::ProcessEvent")));
	TPtrC nameEvent = EventName(aEvent);

	// Check for error
	if (aError == KErrNone)
		{
		// Remove the event
		if (RemoveExpectedEvent(aEvent))
			{
			iLog->Log(_L("Expected Event: (0x%02x)%S has ocurred Total=%d"), aEvent, &nameEvent,iExpectedEvents.Count());
			}
		else
			{
			iLog->Log(_L("Event: (0x%02x)%S has ocurred"), aEvent, &nameEvent);
			return;
			}

		// All expected events have ocurred
		if (iExpectedEvents.Count() == 0 )
			{
			Signal();
			iTimeoutController->Cancel();
			}
		}
	else
		{
		iLog->Log(_L("[Error] Event: (0x%02x)%S return with error code=%d"), aEvent, &nameEvent, aError);
		if (iExpectedEvents.Count() != 0 )
			{
			RemoveExpectedEvent(aEvent);
			}
		iTimeoutController->Cancel();
		Signal(KErrCallbackErrorCode);
		}
}

// -----------------------------------------------------------------------------
// CAudioAudioRoutingTest::HandleTimeout
// Review if all the expected events have ocurred once the time is over
// -----------------------------------------------------------------------------

void CAudioRoutingTestClass::HandleTimeout(TInt aError)
{
	FTRACE(FPrint(_L("CAudioRoutingTestClass::HandleTimeout")));
	// All expected events have ocurred
	if (aError != KErrNone)
		{
		if (iExpectedEvents.Count() == 0 )
			{
			iLog->Log(_L("Timing out but events have ocurred"));
			Signal();
			}
		else
			{
			RemoveAllExpectedEvents();
			iLog->Log(_L("Timing out and events still pending"));
			Signal(KErrEventPending);
			}
		}
	else
		{
		iLog->Log(_L("Timing out return a error %d"), aError);
		Signal(aError);
		}
}

// -----------------------------------------------------------------------------
// CAudioAudioRoutingTest::SetTimeout
// Create a timer and set a timeout
// When the timeout is reached the test case is marked as failed
// It's used rather than the "timeout" keyword in the configuration file
// because in this way the log continues
// -----------------------------------------------------------------------------
TInt CAudioRoutingTestClass::SetTimeout( CStifItemParser& aItem )
{
	FTRACE(FPrint(_L("CAudioRoutingTestClass::SetTimeout")));
	TInt timeout=0;
	TInt error = aItem.GetNextInt(timeout) ;
	if ( iTimeoutController )
		{
		if ( timeout > 0 )
			{
			iTimeoutController->Start( TTimeIntervalMicroSeconds(timeout*1000) );
			}
		else
			{
			iTimeoutController->Start( TTimeIntervalMicroSeconds(1000000) );
			}
		}
	else
		{
		iLog->Log(_L("Timeout Controller doesn't exist"));
		error = KErrTimeoutController;
		}
	return error;
}


// -----------------------------------------------------------------------------
// Uses the TestModuleBase API to allow a panic as exit reason for a test case
// -----------------------------------------------------------------------------
TInt CAudioRoutingTestClass::SetAllowedPanic( CStifItemParser& aItem )
{
	FTRACE(FPrint(_L("CAudioRoutingTestClass::SetAllowedPanic")));
	TInt error = KErrNone;
	TInt panicCode;
	TPtrC panicType;
	if (  ( KErrNone == aItem.GetNextString(panicType) ) &&
	( KErrNone == aItem.GetNextInt(panicCode) )  )
		{
		iLog->Log(_L("Allowing panic: %S %d"), &panicType, panicCode);
		iTestModuleIf.SetExitReason( CTestModuleIf::EPanic, panicCode );
		iNormalExitReason = EFalse;
		}
	else
		{
		iLog->Log(KMsgBadTestParameters);
		error = KErrBadTestParameter;
		}
	return error;
}

// -----------------------------------------------------------------------------
// CAudioAudioRoutingTest::SetExpectedEvents()
// -----------------------------------------------------------------------------
TInt CAudioRoutingTestClass::SetExpectedEvents( CStifItemParser& aItem )
{
	FTRACE(FPrint(_L("CAudioRoutingTestClass::SetExpectedEvents")));
	TInt error = KErrNone;
	TInt event=0;
	while ( KErrNone == aItem.GetNextInt(event))
		{
		AddExpectedEvent(static_cast<TG711ExpectedEvent>(event), 0); // Default timeout value
		}
	return error;
}


// -----------------------------------------------------------------------------
// CAudioAudioRoutingTest::ExampleL
// Example test method function.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
TInt CAudioRoutingTestClass::ExampleL( CStifItemParser& aItem )
    {
    _LIT( KAudioRoutingTestClass, "AudioRoutingTestClass" );
    _LIT( KExample, "In Example" );
    TestModuleIf().Printf( 0, KAudioRoutingTestClass, KExample );

    iLog->Log( KExample );

    TInt i = 0;
    TPtrC string;
    _LIT( KParam, "Param[%i]: %S" );
    while ( aItem.GetNextString ( string ) == KErrNone )
        {
        TestModuleIf().Printf( i, KAudioRoutingTestClass, KParam, i, &string );
        i++;
        }

    return KErrNone;
    }

// -----------------------------------------------------------------------------
// CG711DecoderIntfcTestClass::CreateObject
// Create Factory
// -----------------------------------------------------------------------------
//


TInt CAudioRoutingTestClass::CreateObject( CStifItemParser& aItem )
	{
	FTRACE(FPrint(_L("CAudioAudioRoutingTest::CreateObject")));
	iLog->Log(_L("CAudioAudioRoutingTest::CreateObject"));
	TInt error = KErrNone;

	TPtrC object;
	aItem.GetNextString ( object );

	iObject.Set(object);
	iLog->Log(_L("the object to create is [%S]"),&object);

	if (object == KTagDevSound)
		{
	    TRAP(error, iDevSound = CMMFDevSound::NewL());
		if (error == KErrNone)
		    {
		    TRAP(error,iDevSound->InitializeL(*this,KMMFFourCCCodeAMR,EMMFStatePlaying));
		    }
		}
	else if (object == KTagRecorder)
		{
		iInputOutput = ETrue;
		CreateInput();
		}
	else if (object== KTagCustomCommand)
		{
		TPtrC type;
		aItem.GetNextString ( type );
		if (type == KTagAudioPlayer)
			{
			TRAP(error,iCustomCommandUtility = CCustomCommandUtility::NewL(*iUtil));
			}
		if (type == KTagAudioConvert)
		    {
		     TRAP(error,iCustomCommandUtility = CCustomCommandUtility::NewL(*iUtilConvert));
		    }
		if(type ==KTagCustomCommand)
		    {
               TRAP(error,iCustomCommandUtility = CCustomCommandUtility::NewL(*iUtil));
		    }
		else
			{
			TRAP(error,iCustomCommandUtility = CCustomCommandUtility::NewL(*iRecorder,ETrue));
			}
		}
	else if (object == KTagCustomInterface)
		{
		TPtrC type;
		aItem.GetNextString ( type );
		if (type == KTagAudioPlayer)
			{
			TRAP(error,iCustomInterfaceUtility = CCustomInterfaceUtility::NewL(*iUtil));
			}
		else if (type == KTagCustomCommand)
			{
			TRAP(error,iCustomInterfaceUtility = CCustomInterfaceUtility::NewL(*iCustomCommandUtility));
			}
		else if (type == KTagRecorder)
			{
			TRAP(error,iCustomInterfaceUtility = CCustomInterfaceUtility::NewL(*iRecorder,ETrue));
			}
		else if(type == KTagAudioConvert)
		    {
            TRAP(error,iCustomInterfaceUtility = CCustomInterfaceUtility::NewL(*iUtilConvert));
		    }
		else if(type == KTagDevSound)
	    {
		  TRAP(error,iCustomInterfaceUtility = CCustomInterfaceUtility::NewL(*iDevSound));
		 }
		}
	else if (object == KTagInputStream)
		{
		TRAP(error,iAudioInputStream = CMdaAudioInputStream::NewL(*this));
		}
	else if (object == KTagAudioPlayer)
		{
		CreateOutput();
		}
	else if (object == KTagOuputRecord)
		{
		iInputOutput = EFalse;
		CreateInput();
		}
	else if (object == KTagOutputStream)
		{
		iStreamSettings.iChannels = TMdaAudioDataSettings::EChannelsMono;
		iStreamSettings.iSampleRate = TMdaAudioDataSettings::ESampleRate16000Hz;
		iStreamSettings.iVolume = 1;
		TRAPD(error, iAudioOutputStream = CMdaAudioOutputStream::NewL(*this));
		if (error == KErrNone)
			{
			iAudioOutputStream->Open(&iStreamSettings);
			}
		}
	else if (object == KTagToneUtility)
		{
		TRAP(error,iAudioTone = CMdaAudioToneUtility::NewL(*this));
		}
	else if (object == KTagDevSound1)
		{
	    TRAP(error, iDevSound = CMMFDevSound::NewL());
		}
	else if (object == KTagMidiClient)
		{
	    TRAP(error, iMidiClientUtility = CMidiClientUtility::NewL(*this,80,TMdaPriorityPreference(0x00000000),EFalse));
	    //TRAP(error, iMidiClientUtility = CMidiClientUtility::NewL(*this));
	    if(error == KErrNone)
	    	{
	    	isInput = EFalse;
	    	//iMidiClientUtility->OpenFile(KAudioMidiFile);
	    	}
		}
	else if (object == KTagDrmPlayer)
		{
	    TRAP(error, iDrmPlayerUtility = CDrmPlayerUtility::NewL(*this,EMdaPriorityNormal,TMdaPriorityPreference(0x00000000)));
	    if (error == KErrNone)
	    	{
	    	iDrmPlayerUtility->OpenFileL(KAudioDrmFile);
	    	}
		}
	else if (object == KTagVideoPlayer)
		{
		aItem.GetNextString ( object );
		error = KErrNone;
		TRAP(error, CreateSessionAndScreen());
		TRAP(error, CreateWindowGroup());
		TRAP(error, CreateVideoWindow());
		TRAP(error, CreateVideoObject());
    }
	else if(object == KTagVideoRecord)
	    {
        TRAP(error, CreateVideoRecorderObject());        
	    }
	if (error == KErrNone)
		{
	    AddExpectedEvent(EInitializeComplete, KMediumTimeout);
		}
	else
	    {
	    iLog->Log(_L("CAudioRoutingTestClass::CreateObject Error [%d] - [%S]"),error,&object);
	    FTRACE(FPrint(_L("CAudioRoutingTestClass::CreateObject Error [%d] - [%S]"),error,&object));
	    }
	return error;
	}

TInt CAudioRoutingTestClass::CreateAudioInput( CStifItemParser& aItem )
	{
	TInt error = KErrNone;

	TPtrC object;
	RArray<CAudioInput::TAudioInputPreference> inputArray;

	aItem.GetNextString ( object );
	iLog->Log(_L("The AudioInput to create is with [%S]"),&object);

	if ( object == KTagVideoRecord )
		{
		FTRACE(FPrint(_L("CAudioRoutingTest::CAudioInput")));
		iLog->Log(_L("CAudioRoutingTest::CAudioInput"));		
		TRAP(error, iAudioInput = CAudioInput::NewL(*iVideoRecord));
		if (error == KErrNotFound)
			{
		    error = KErrNone;
			iLog->Log(_L("CAudioInput::NewL(*iVideoRecord) OK with expected error"));
			}
		}

	else if ( object == KTagDevSound )
		{
		FTRACE(FPrint(_L("CAudioRoutingTest::CAudioInput")));
		iLog->Log(_L("CAudioRoutingTest::CAudioInput"));
		TRAP(error, iAudioInput = CAudioInput::NewL(*iDevSound));
		if (error == KErrNone)
			{
			iLog->Log(_L("CAudioInput::NewL(*iDevSound) OK"));
			}
		}
	else if (object == KTagRecorder)
		{
		FTRACE(FPrint(_L("CAudioRoutingTest::CAudioInput")));
		iLog->Log(_L("CAudioRoutingTest::CAudioInput"));
		TRAP(error, iAudioInput = CAudioInput::NewL(*iRecorder));
		if (error == KErrNone)
			{
			iLog->Log(_L("CAudioInput::NewL(*iRecorder) OK"));
			}
		}
	else if (object == KTagCustomCommand)
		{
		FTRACE(FPrint(_L("CAudioRoutingTest::CAudioInput - iCustomCommandUtility")));
		iLog->Log(_L("CAudioRoutingTest::CAudioInput - iCustomCommandUtility"));
		TRAP(error, iAudioInput = CAudioInput::NewL(*iCustomCommandUtility));
		if (error == KErrNone)
			{
			iLog->Log(_L("CAudioInput::NewL(*iCustomCommandUtility) OK"));
			}
		}
	else if (object == KTagCustomInterface)
		{
		FTRACE(FPrint(_L("CAudioRoutingTest::CAudioInput - CustomInterfaceUtility")));
		iLog->Log(_L("CAudioRoutingTest::CAudioInput - CustomInterfaceUtility"));
		TRAP(error, iAudioInput = CAudioInput::NewL(*iCustomInterfaceUtility));
		if (error == KErrNone)
			{
			iLog->Log(_L("CAudioInput::NewL(*iCustomInterfaceUtility) OK"));
			}
		}
	else if (object == KTagInputStream)
		{
		FTRACE(FPrint(_L("CAudioRoutingTest::CAudioInput - InputStream")));
		iLog->Log(_L("CAudioRoutingTest::CAudioInput - InputStream"));
		TRAP(error, iAudioInput = CAudioInput::NewL(*iAudioInputStream));
		if (error == KErrNone)
			{
			iLog->Log(_L(" CAudioInput::NewL(*iAudioInputStream) OK"));
			}
		}
	else if (object == KTagOuputRecord)
		{
		FTRACE(FPrint(_L("CAudioRoutingTest::CAudioInput - InputStream")));
		iLog->Log(_L("CAudioRoutingTest::CAudioInput - InputStream"));
		TRAP(error, iAudioOutput = CAudioOutput::NewL(*iRecorder,ETrue));
		if (error == KErrNone)
			{
			iLog->Log(_L("CAudioOutput::NewL(*iRecorder,ETrue OK"));
			}
		}
	else if (object == KTagOutputStream)
		{
		FTRACE(FPrint(_L("CAudioRoutingTest::CAudioOutput - OutputStream")));
		iLog->Log(_L("CAudioRoutingTest::CAudioOutput - OutputStream"));
		TRAP(error, iAudioOutput = CAudioOutput::NewL(*iAudioOutputStream));
		if (error == KErrNone)
			{
			iLog->Log(_L("CAudioOutput::NewL(*iAudioOutputStream) OK"));
			}
		}
	else if (object == KTagToneUtility)
		{
		FTRACE(FPrint(_L("CAudioRoutingTest::CAudioOutput - AudioTone")));
		iLog->Log(_L("CAudioRoutingTest::CAudioOutput - AudioTone"));
		TRAP(error, iAudioOutput = CAudioOutput::NewL(*iAudioTone));
		if (error == KErrNone)
			{
			iLog->Log(_L("CAudioOutput::NewL(*iAudioTone) OK"));
			}
		}
	else if (object == KTagDevSound1)
		{
		FTRACE(FPrint(_L("CAudioRoutingTest::CAudioOutput - DevSound")));
		iLog->Log(_L("CAudioRoutingTest::CAudioOutput - DevSound"));
		TRAP(error, iAudioOutput = CAudioOutput::NewL(*iDevSound));
		if (error == KErrNone)
			{
			iLog->Log(_L("CAudioOutput::NewL(*iDevSound) OK"));
			}
		}
	else if (object == KTagCustomInterfaceOutput)
		{
		FTRACE(FPrint(_L("CAudioRoutingTest::CAudioOutput - CustomInterfaceOutput")));
		iLog->Log(_L("CAudioRoutingTest::CAudioOutput - CustomInterfaceOutput"));
		TRAP(error, iAudioOutput = CAudioOutput::NewL(*iCustomInterfaceUtility));
		}
	else if (object == KTagAudioPlayer)
		{
		FTRACE(FPrint(_L("CAudioRoutingTest::CAudioOutput - AudioPlayer")));
		iLog->Log(_L("CAudioRoutingTest::CAudioOutput - AudioPlayer"));
		TRAPD(error,iAudioOutput = CAudioOutput::NewL(*iUtil));
		if (error == KErrNone)
			{
			iLog->Log(_L("CAudioOutput::NewL(*iUtil) OK"));
			}
		}
	else if (object == KTagCustomCommandOutput)
		{
		FTRACE(FPrint(_L("CAudioRoutingTest::CAudioOutput - iCustomCommandOutput")));
		iLog->Log(_L("CAudioRoutingTest::CAudioOutput - iCustomCommandOutput"));
		TRAP(error, iAudioOutput = CAudioOutput::NewL(*iCustomCommandUtility));
		if (error == KErrNone)
			{
			iLog->Log(_L("CAudioOutput::NewL(*iCustomCommandUtility) OK"));
			}
		}

	else if (object == KTagMidiClient)
		{
		FTRACE(FPrint(_L("CAudioRoutingTest::CAudioOutput - CMidiClientUtility")));
		iLog->Log(_L("CAudioRoutingTest::CAudioOutput - CMidiClientUtility"));
		TRAP(error, iAudioOutput = CAudioOutput::NewL(*iMidiClientUtility));
		if (error == KErrNone)
			{
			iLog->Log(_L("CAudioOutput::NewL(*iMidiClientUtility) OK"));
			}
		}
	else if (object == KTagDrmPlayer)
		{
		FTRACE(FPrint(_L("CAudioRoutingTest::CAudioOutput - CDrmPlayerUtility")));
		iLog->Log(_L("CAudioRoutingTest::CAudioOutput - CDrmPlayerUtility"));
		TRAP(error, iAudioOutput = CAudioOutput::NewL(*iDrmPlayerUtility));
		if (error == KErrNone)
			{
			iLog->Log(_L("CAudioOutput::NewL(*iDrmPlayerUtility) OK"));
			}
		}
	else if (object == KTagVideoPlayer)
		{
		FTRACE(FPrint(_L("CAudioRoutingTest::CAudioOutput - VideoPlayer")));
		iLog->Log(_L("CAudioRoutingTest::CAudioOutput - VideoPlayer"));
		TRAP(error, iAudioOutput = CAudioOutput::NewL(*iVideoPlayerUtility));
		if (error == KErrNone)
			{
			iLog->Log(_L("CAudioOutput::NewL(*iVideoPlayerUtility) OK"));
			}
		}
	else
		{
		iLog->Log(_L(" No Intut Data"));
		}
	if (error != KErrNone)
	    {
	     iLog->Log(_L("CAudioRoutingTestClass::CreateAudioInput ERROR [%d] for [%s]"),error,&object);
	    }
	return error;
}

void CAudioRoutingTestClass::CreateInput()
   {
   //TInt error = KErrNone;
   isInput = ETrue;
   iUtil = CMdaAudioPlayerUtility::NewFilePlayerL(KMp3TestFile, *this);
   TRAPD(error, iRecorder = CMdaAudioRecorderUtility::NewL(*this));
	if (error == KErrNone)
		{
		iLog->Log(_L("CMdaAudioRecorderUtility::NewL(*this) OK"));
		}
   }

void CAudioRoutingTestClass::CreateOutput()
   {
   isInput = EFalse;
	iUtil = CMdaAudioPlayerUtility::NewFilePlayerL(KMp3TestFile, *this);
   }

void CAudioRoutingTestClass::CreateOutput_AudioConvert()
    {
    isInput = EFalse;
    iUtilConvert = CMdaAudioConvertUtility::NewL(*this,NULL);
    }
TInt CAudioRoutingTestClass::CreateVideoInput()
   {
  // TInt error1 = KErrNone;
   TInt error = KErrNone;
   isInput = ETrue;
   iUtil = CMdaAudioPlayerUtility::NewFilePlayerL(KMp3TestFile,*this);
   if (iUtil)
	   {
	   iRecorder = CMdaAudioRecorderUtility::NewL(*this);
	   if (iRecorder)
		   {
		   iLog->Log(_L("CMdaAudioRecorderUtility::NewL(*this) OK"));
		   }
	   }
	return error;
   }

TInt CAudioRoutingTestClass::CreateVideoWindow()
	{
	TInt error = KErrNone;
	TRAP(error,iWindow = RWindow( iWindowSession ));
	if (error == KErrNone)
		{
		TRAP(error,User::LeaveIfError(iWindow.Construct(iWindowGroup, reinterpret_cast<TUint32>(&iWindowGroup) + 1)));
		if (error == KErrNone)
			{
			iWindow.SetBackgroundColor(TRgb(0x90, 0x90, 0x90));
			iWindow.Activate();
			iWindow.SetExtent(TPoint(0, 0), TSize(screenWidth, screenHeight));
			iWindow.SetVisible(ETrue);
			iWindowGc->Activate(iWindow);
			iRect = TRect(iWindow.Size());
			iWindow.Invalidate(iRect);
			iWindow.BeginRedraw(iRect);
			}
		}
	return error;
	}

TInt CAudioRoutingTestClass::DeleteVideoWindow()
	{
	TInt error = KErrNone;

	TRAP(error,iWindowSession.Close());

	if (iScreenDevice)
		{

		}
	if (iWindowGc)
		{

		}

    return error;
	}

TInt CAudioRoutingTestClass::CreateSessionAndScreen()
	{
	TInt error = KErrNone;
	error = User::LeaveIfError(iWindowSession.Connect());

	if (error == KErrNone)
		{
		TRAP(error,iScreenDevice = new(ELeave) CWsScreenDevice(iWindowSession));
		}

	if (error == KErrNone)
		{
	    TRAP(error, iScreenDevice->Construct());
		}

    return error;
	}

TInt CAudioRoutingTestClass::CreateVideoObject( )
	{
    TInt error = KErrNone;


    TRAP(error, iVideoPlayerUtility = CVideoPlayerUtility::NewL ( *this,
                    EMdaPriorityNormal,
                    EMdaPriorityPreferenceNone,
                    iWindowSession,
                    *iScreenDevice,
                    iWindow,
                    iRect,
                    iRect));
    if (error == KErrNone)
        {
        TRAP(error, iVideoPlayerUtility->OpenFileL(K3gpTestFile));
        //		AddExpectedEvent(EInitializeComplete, 6000);	
        CActiveScheduler::Start();
        }
    if (error == KErrNone)
        {
        EndDrawing();
        iWindow.Close();
        iWindowGroup.Close();
        }
    return error;

    }
TInt CAudioRoutingTestClass::CreateVideoRecorderObject()
    {
    TInt error = KErrNone;
    TRAP(error, iVideoRecord = CVideoRecorderUtility::NewL(*this));

            if (error == KErrNone)
                {
//                const TUid KVidTstControllerUid = {0x101F8503};
                TUid NULLUid ={0};
                
                TRAP(error,iVideoRecord->OpenFileL(K3gpTestFile, NULL, NULLUid, NULLUid));                
                }

    return error;
	}

TInt CAudioRoutingTestClass::CreateWindowGroup()
	{
	TInt error = KErrNone;
	TRAP(error, iWindowGroup = RWindowGroup(iWindowSession));
    if (error == KErrNone)
    	{
    	error = User::LeaveIfError(iWindowGroup.Construct(reinterpret_cast<TUint32>(&iWindowGroup), EFalse));
        if (error == KErrNone)
            {
            TRAP(error, iWindowGroup.SetOrdinalPosition(10, ECoeWinPriorityAlwaysAtFront));
            }
    	}
    else
    	{
		iLog->Log(_L("iWindowGroup = RWindowGroup(iWindowSession) Failed [%d]"),error);
    	}

    User::LeaveIfError(iScreenDevice->CreateContext(iWindowGc));

    return error;
	}

TInt CAudioRoutingTestClass::EndDrawing()
	{
	TInt error = KErrNone;
	TRAP(error,{iWindow.EndRedraw();iWindowGc->Deactivate();iWindowSession.Flush();});
	if (error!=KErrNone)
		{
		iLog->Log(_L("CAudioRoutingTestClass::EndDrawing Failed [%d]"),error);
		}
    return error;
	}

TInt CAudioRoutingTestClass::AudioInput()
   {
   if (iAudioInput)
	   {
		CAudioInput::TAudioInputArray currentInputs = iAudioInput->AudioInput();
		CAudioInput::TAudioInputPreference currentInput = currentInputs[0];
		iLog->Log(_L("AudioInput - currentInput = %d"),currentInput);
	   }
   return KErrNone;
   }

TInt CAudioRoutingTestClass::SetAudioInputL()
	{
	if (iAudioInput)
		{
		RArray<CAudioInput::TAudioInputPreference> inputArray;
		inputArray.Append(CAudioInput::EDefaultMic);
		iAudioInput->SetAudioInputL(inputArray.Array());
		inputArray.Reset();
		}
	iLog->Log(_L("AudioInput - SetAudioInputL "));
	return KErrNone;
	}

TInt CAudioRoutingTestClass::AudioOutput()
   {
   if (iAudioOutput)
		{
		iAudioOutput->AudioOutput();
		}
	iLog->Log(_L("AudioOutput - AudioOutput "));
	return KErrNone;
   }
TInt CAudioRoutingTestClass::DefaultAudioOutput()
   {
   if (iAudioOutput)
	   {
	   iAudioOutput->DefaultAudioOutput();
	   }
	iLog->Log(_L("iAudioOutput - DefaultAudioOutput "));
	return KErrNone;
   }

TInt CAudioRoutingTestClass::RegisterObserverL()
   {
  	if(iAudioOutput)
		{
		iAudioOutput->RegisterObserverL(*this);
		}
	iLog->Log(_L("iAudioOutput - RegisterObserverL "));
	return KErrNone;
   }

TInt CAudioRoutingTestClass::SecureOutput()
   {
   if (iAudioOutput)
	   {
	   TBool secureOutput = iAudioOutput->SecureOutput();
	   iLog->Log(_L("CAudioRoutingTestClass::SecureOutput - SecureOutput = %d"),secureOutput);
	   }
	iLog->Log(_L("iAudioOutput - SecureOutput "));
	return KErrNone;
   }


TInt CAudioRoutingTestClass::SetAudioOutputL()
   {
	if(iAudioOutput)
		{
		iAudioOutput->SetAudioOutputL(CAudioOutput::EPublic);
		}
	iLog->Log(_L("iAudioOutput - SetAudioOutputL "));
	return KErrNone;
   }

TInt CAudioRoutingTestClass::SetSecureOutputL()
   {
        TInt err;
	if(iAudioOutput)
	   {
	    TRAP(err,iAudioOutput->SetSecureOutputL(EFalse));
	   }
	if(err == KErrNotSupported)
	   {
	   iLog->Log(_L("SetsecureoutputL is deprecated,so not supported"));
	   return KErrNone;
	   }
	else
	   {
	   return KErrGeneral;
	   }
	
   }

TInt CAudioRoutingTestClass::UnregisterObserver()
   {
	iLog->Log(_L("iAudioOutput - UnregisterObserver INIT"));
	if(iAudioOutput)
		{
		iAudioOutput->UnregisterObserver(*this);
		}
	iLog->Log(_L("iAudioOutput - UnregisterObserver "));
	return KErrNone;
}
TInt CAudioRoutingTestClass::CustomCommandSyncAsync()
     {
    iLog->Log(_L("CustomCommandPlay-CustomCommandSyncAsync"));
     TMMFMessageDestination temp(TUid::Uid(0),NULL);
     const TMMFMessageDestinationPckg destination(temp) ;
     TInt function = 1;
           _LIT8(KData1, "NULL");
               
           const TDesC8&   dataTo1 = KData1;
           const TDesC8&   dataTo2 = KData1;
           TRequestStatus status = NULL;
           TBuf8 <50> test;
          iCustomCommandUtility = CCustomCommandUtility::NewL(*iUtil);
          iCustomCommandUtility->CustomCommandAsync(destination,function,dataTo1,dataTo2,status);
          iCustomCommandUtility->CustomCommandSync(destination,function,dataTo1,dataTo2);
          iCustomCommandUtility->CustomCommandAsync(destination,function,dataTo1,dataTo2,test,status);
             
             return KErrNone;
             }

TInt CAudioRoutingTestClass::CustomCommandRecord()
     {
    iLog->Log(_L("CustomCommandRecord"));
     TMMFMessageDestination temp(TUid::Uid(0),NULL);
     const TMMFMessageDestinationPckg destination(temp) ;
     TInt function = 1;
           _LIT8(KData1, "NULL");
               
           const TDesC8&   dataTo1 = KData1;
           const TDesC8&   dataTo2 = KData1;
           TBuf8 <50> test;
        	 TBool recstream = 0;
           TBool recstream1 = 1;
           TRequestStatus status = NULL;
                   
           iCustomCommandUtility = CCustomCommandUtility::NewL(*iRecorder,recstream);
           iCustomCommandUtility->CustomCommandSync(destination,function,dataTo1,dataTo2,test);
           iCustomCommandUtility->CustomCommandSync(destination,function,dataTo1,dataTo2);
           iCustomCommandUtility = CCustomCommandUtility::NewL(*iRecorder,recstream1);
           iCustomCommandUtility->CustomCommandAsync(destination,function,dataTo1,dataTo2,status);
           iCustomCommandUtility->CustomCommandAsync(destination,function,dataTo1,dataTo2,test,status);
           
            return KErrNone;
     }


TInt CAudioRoutingTestClass::CustomCommandRouting()
     {
     	 iLog->Log(_L("CustomCommandRouting"));
    
     TMMFMessageDestination temp(TUid::Uid(0),NULL);
     const TMMFMessageDestinationPckg destination(temp) ;
     TInt function = 1;
           _LIT8(KData1, "NULL");
               
           const TDesC8&   dataTo1 = KData1;
           const TDesC8&   dataTo2 = KData1;
          TRequestStatus status = NULL;
           TBuf8 <50> test;
                   
           iCustomCommandUtility = CCustomCommandUtility::NewL(*iUtilConvert);
          iCustomCommandUtility->CustomCommandAsync(destination,function,dataTo1,dataTo2,status);
          iCustomCommandUtility->CustomCommandSync(destination,function,dataTo1,dataTo2);
          iCustomCommandUtility->CustomCommandAsync(destination,function,dataTo1,dataTo2,test,status);
                
                 return KErrNone;
          }

TInt CAudioRoutingTestClass::CustomCommandVRecord()
     {
     iLog->Log(_L("CustomCommandVideoRecord"));
     TMMFMessageDestination temp(TUid::Uid(0),NULL);
     const TMMFMessageDestinationPckg destination(temp) ;
     TInt function = 1;
           _LIT8(KData1, "NULL");
               
           const TDesC8&   dataTo1 = KData1;
           const TDesC8&   dataTo2 = KData1;
           TRequestStatus status = NULL;
           TBuf8 <50> test;
                   
          iCustomCommandUtility = CCustomCommandUtility::NewL(*iVideoRecord);
          iCustomCommandUtility->CustomCommandAsync(destination,function,dataTo1,dataTo2,status);
          iCustomCommandUtility->CustomCommandSync(destination,function,dataTo1,dataTo2);
          iCustomCommandUtility->CustomCommandAsync(destination,function,dataTo1,dataTo2,test,status);
                
                 return KErrNone;
          }
//  End of File