mmfenh/advancedaudiocontroller/tsrc/advancedaudiocontrollertestmodule/AudioPlaybackTestModule/src/MmfTsPlay_work.cpp
changeset 0 71ca22bcf22a
child 18 2eb3b066cc7d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmfenh/advancedaudiocontroller/tsrc/advancedaudiocontrollertestmodule/AudioPlaybackTestModule/src/MmfTsPlay_work.cpp	Tue Feb 02 01:08:46 2010 +0200
@@ -0,0 +1,582 @@
+/*
+* 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:  mmftsplay test component
+*
+*/
+
+#include <StifTestInterface.h>
+#include "MmfTsPlay.h"
+#include "SimpleSoundPlayer.h"
+#include <badesca.h>
+//#include "RecordFormats.h"
+
+// Binh
+TInt CMmfTsPlay::TestCasePlayFileMetaInfoL(CStifSectionParser *section , TTestResult &aResult, TBool aFileHandler)
+	{
+	TPtrC FileNamePtr;
+	if ( !section->GetLine(KTagSoundFile, FileNamePtr, ENoTag) )
+		{
+		CSimpleSoundPlayer *sndPlayer;
+		TFileName FileName = FileNamePtr;
+		iLogger->Log(_L("Creating simple player with file [%S]"), &FileNamePtr);
+
+        if (aFileHandler)
+        {
+          	RFs	  fs;
+	        RFile file;
+
+        	User::LeaveIfError(fs.Connect());
+	        fs.ShareProtected();
+
+			User::LeaveIfError(file.Open( fs, FileName, EFileRead));
+    		sndPlayer = CSimpleSoundPlayer::NewLC( file, TestModuleIf() , *iLogger);
+
+    		fs.Close();
+        }
+        else
+        {
+    		sndPlayer = CSimpleSoundPlayer::NewLC( FileName, TestModuleIf() , *iLogger);
+        }
+
+        // Binh
+    	CStifItemParser *item1 = section->GetItemLineL(KTagDontPlayAudioClip);
+    	if (item1)
+    	{
+    	    sndPlayer->iDontPlayAudioClip = true;
+            delete item1;
+    	}
+
+		// * ************************************************
+
+		sndPlayer->metaInfo = true;
+	/*	TInt NumMetaDatas;
+		TInt MetaDataError = sndPlayer->GetNumberOfMetaDataEntries(NumMetaDatas);
+		if ( MetaDataError )
+			{	//Error getting meta data info
+			}
+		else
+			{	//No error yet
+			TInt currMetaDataIndex;
+			for ( currMetaDataIndex=0 ; currMetaDataIndex < NumMetaDatas ; currMetaDataIndex++)
+				{
+				CMMFMetaDataEntry *currMetaData = sndPlayer->GetMetaDataEntryL(currMetaDataIndex);
+				iLogger->Log(_L("MetaData[%d]: Name: [%S], Value: [%S]") , currMetaDataIndex , &(currMetaData->Name()) , &(currMetaData->Value()) );
+				delete currMetaData;
+				}
+			} */
+
+		// * ************************************************
+		iLogger->Log(_L("Starting scheduler"));
+		CActiveScheduler::Start();
+
+		iLogger->Log(_L("Returned from player, errorcode: %d"), sndPlayer->iFinalError );
+		aResult.iResult = sndPlayer->iFinalError;
+		if (aResult.iResult)
+			{
+			iLogger->Log(_L("Test failed, error code %d"), aResult.iResult);
+			aResult.iResultDes.Copy(KTestCaseResultFail());
+			}
+		else
+			{
+			iLogger->Log(_L("Test was successful"));
+			aResult.iResultDes.Copy(KTestCaseResultSuccess());
+			}
+		CleanupStack::PopAndDestroy(sndPlayer);
+		return KErrExecuted;
+		}
+	else
+		{
+		aResult.iResultDes.Copy(KConfigInvalid());
+		aResult.iResult = KErrNotExecuted;
+		return KErrConfigInvalid;
+		}
+	}
+
+#define USE_FILE_FORMATS
+TInt CMmfTsPlay::TestCasePlayFileFormatsL(CStifSectionParser * section , TTestResult & aResult)
+	{
+#ifndef USE_FILE_FORMATS
+	return KErrNotSupported;
+#endif
+#ifdef USE_FILE_FORMATS
+
+	//=/TInt KErrRecFormats = -1130;
+	//[*]TPtrC FileNamePtr;
+	TInt Error=KErrNone;
+	//[*]if ( !section->GetLine(KTagSoundFile, FileNamePtr, ENoTag) )
+	//[*]	{
+	//[*]	TFileName FileName = FileNamePtr;
+	//[*]	iLogger->Log(_L("Creating simple player with file [%S]"), &FileNamePtr);
+	//[*]	CSimpleSoundPlayer *sndPlayer = CSimpleSoundPlayer::NewLC( FileName, TestModuleIf() , *iLogger);
+
+		// * ************************************************
+
+
+
+
+
+
+		REComSession session;
+		TRAPD(err,session = REComSession::OpenL());
+		if (err != KErrNone)
+			{
+			iLogger->Log(_L("Error (%d) opening REComSession"),err);
+			aResult.iResult = err;
+			aResult.iResultDes.Copy( KTestCaseResultFail() );
+			return KErrExecuted;
+			}
+
+		//-/for (TInt i=0; i<1; i++)
+			//-/{
+			//TUid id;
+			//id.iUid = KUidInterfaceMMFController; //KMmfUidPluginInterfaceController; //KMmfUidPluginInterfaceFormatDecode; //KMmfUidPluginInterfaceFormatEncode
+			//TUid id = KUidInterfaceMMFController;
+			TBool UsingDefault;
+			TUid id;
+			id.iUid = GetIntL(section, KTagInterfaceId, UsingDefault, KUidInterfaceMMFController.iUid);
+			RImplInfoPtrArray aArray;
+
+			iLogger->Log(_L("Calling REComSession::ListImplementationsL()") );
+			TRAPD(err2,REComSession::ListImplementationsL(id,aArray));
+			if (err2 != KErrNone)
+				{
+				iLogger->Log(_L("Error (%d) getting implementations (ListImplementationsL)"),err2);
+				aResult.iResult = err;
+				aResult.iResultDes.Copy( KTestCaseResultFail() );
+				return KErrExecuted;
+				//return KErrRecFormats;
+				}
+
+			for (TInt j=0; j<aArray.Count() ; j++)
+				{
+				CMMFControllerImplementationInformation* controller = NULL;
+
+				iLogger->Log(_L("Calling CMMFControllerImplementationInformation::NewL()"));
+				TRAPD(err3, controller=CMMFControllerImplementationInformation::NewL(id));
+
+				//TRAPD(err3,controller = CMMFControllerImplementationInformation::NewL( *(aArray[j]) )  );
+
+				if (err3 != KErrNone)
+					{
+					iLogger->Log(_L("Error %d openning controller"),err3);
+					aResult.iResult = Error = err3;
+					break;
+					//continue;
+					}
+				CleanupStack::PushL(controller);
+
+				iLogger->Log(_L("Calling CMMFControllerImplementationInformation::PlayFormats()"));
+				RMMFFormatImplInfoArray formats = controller->PlayFormats();
+				for (TInt k = 0; k < formats.Count(); k++)
+					{
+					CMMFFormatImplementationInformation* info = formats[k];
+					CleanupStack::PushL(info);
+
+					for (TInt l = 0; l < (info->SupportedFileExtensions()).Count(); l++)
+						{
+						iLogger->Log(_L("Calling CMMFFormatImplementationInformation::SupportedFileExtensions()"));
+						iLogger->Log(_L("Format supported: %S"),(info->SupportedFileExtensions())[l]);
+						}
+					CleanupStack::PopAndDestroy();
+					}
+				formats.Close();
+				CleanupStack::PopAndDestroy(controller);
+				CleanupStack::PopAndDestroy();
+				}
+			//-/}
+		aArray.Close();
+
+		session.Close();
+
+		//return KErrNone;
+
+		// * ************************************************
+		//[*]iLogger->Log(_L("Starting scheduler"));
+		//[*]CActiveScheduler::Start();
+
+		//[*]iLogger->Log(_L("Returned from player, errorcode: %d"), sndPlayer->iFinalError );
+		//[*]aResult.iResult = sndPlayer->iFinalError ;
+		if (aResult.iResult)
+			{
+			iLogger->Log(_L("Test failed, error code %d"), aResult.iResult);
+			aResult.iResultDes.Copy(KTestCaseResultFail());
+			}
+		else
+			{
+			iLogger->Log(_L("Test was successful"));
+			aResult.iResultDes.Copy(KTestCaseResultSuccess());
+			}
+		//[*]CleanupStack::PopAndDestroy(sndPlayer);
+		return KErrExecuted;
+	//[*]	}
+	//[*]else
+	//[*]	{
+	//[*]	//Falta el nombre del archivo a reproducir
+	//[*]	aResult.iResultDes.Copy(KConfigInvalid());
+	//[*]	aResult.iResult = KErrNotExecuted;
+	//[*]	return KErrConfigInvalid;
+	//[*]	}
+#endif
+	}
+
+TInt CMmfTsPlay::GetIntL(CStifSectionParser *aSection, const TDesC &aTag, TBool &aUsingDefault, const TInt &aDefaultInt, TBool aContinue)
+	{
+	TInt ParseError=KErrNotFound;
+	TInt TempDelay=0;
+	TInt ReturnValue=aDefaultInt;
+
+	CStifItemParser *item;
+	if (aContinue)
+		{
+		item = aSection->GetNextItemLineL(aTag);
+		}
+	else
+		{
+		 item = aSection->GetItemLineL(aTag);
+		}
+	if (item)
+		{
+		CleanupStack::PushL(item);
+		ParseError = item->GetInt(aTag, TempDelay) ;
+		CleanupStack::PopAndDestroy(item);
+		}
+
+	if (ParseError)
+		{	//Integer not found, using defaults
+		aUsingDefault=ETrue;
+		}
+	else
+		{	//Integer found.
+		aUsingDefault=EFalse;
+		ReturnValue=TempDelay;
+		}
+
+	if (ParseError) {iLogger->Log(_L("Error retrieving integer, [%S] not found"), &aTag);}
+	iLogger->Log(_L("Integer read, value (%d)") , ReturnValue);
+	return ReturnValue;
+	}
+
+// Binh
+//  This test will compare the MetaData in the audio clip with the value read in from the cfg file.
+TInt CMmfTsPlay::TestMetaDataDataL(CStifSectionParser* section ,
+                                   TTestResult &aResult,
+                                   TBool aFileHandler)
+{
+    TInt err = KErrNone;
+	TPtrC FileNamePtr;
+	if ( !section->GetLine(KTagSoundFile, FileNamePtr, ENoTag) )
+	{
+		TFileName FileName = FileNamePtr;
+        CSimpleSoundPlayer *sndPlayer;
+
+		iLogger->Log(_L("Creating simple player with file [%S]"), &FileNamePtr);
+
+        if (aFileHandler)
+        {
+          	RFs	  fs;
+	        RFile file;
+
+        	User::LeaveIfError(fs.Connect());
+	        fs.ShareProtected();
+
+			User::LeaveIfError(file.Open( fs, FileName, EFileRead));
+    		sndPlayer = CSimpleSoundPlayer::NewLC( file, TestModuleIf() , *iLogger);
+
+    		fs.Close();
+        }
+        else
+        {
+    		sndPlayer = CSimpleSoundPlayer::NewLC( FileName, TestModuleIf() , *iLogger);
+        }
+
+		aResult.iResult = err;
+
+    	CStifItemParser *item1 = section->GetItemLineL(KTagDontPlayAudioClip);
+    	if (item1)
+    	{
+    	    sndPlayer->iDontPlayAudioClip = true;
+            delete item1;
+    	}
+
+   		iLogger->Log(_L("Starting scheduler"));
+    	CActiveScheduler::Start();
+
+	    TInt count = 0;
+	    sndPlayer->GetNumberOfMetaDataEntries(count);
+	    // Populate MetaData fields from audio file.
+   		DisplayFields(count, sndPlayer , EFalse);
+    	CStifItemParser *item = section->GetItemLineL(KTagMetaDataName);
+    	while (item)
+    	{
+            // read MetaData Tag Name from cfg file
+      		TPtrC namePtr;
+		    CleanupStack::PushL(item);
+		    err = item->GetString(KTagMetaDataName, namePtr);
+		    CleanupStack::PopAndDestroy(item);
+
+		    if (err)
+		    {
+   		        // Metadata Tag name is missing
+   				aResult.iResultDes.Copy(KConfigInvalid());
+    			aResult.iResult = KErrNotExecuted;
+   				err = KErrConfigInvalid;
+   				break;
+		    }
+
+   		    TInt fieldId = GetFieldId(namePtr);
+
+   		    // read MetaData Tag data from cfg file
+    	    TPtrC dataPtr;
+	        item = section->GetNextItemLineL(KTagMetaDataData);
+	        if (!item)
+   		    {
+   		        // Metadata Tag data is missing
+   				aResult.iResultDes.Copy(KConfigInvalid());
+    			aResult.iResult = KErrNotExecuted;
+   				err = KErrConfigInvalid;
+   				break;
+   		    }
+
+   		    CleanupStack::PushL(item);
+   		    TInt err1 = KErrNone;
+    	    err1 = item->GetString(KTagMetaDataData, dataPtr);
+
+		    if (err1)
+		    {
+   		        // Error reading Metadata Tag data
+   				aResult.iResultDes.Copy(KConfigInvalid());
+    			aResult.iResult = KErrNotExecuted;
+   				err = KErrConfigInvalid;
+   		        CleanupStack::PopAndDestroy(item);
+   				break;
+		    }
+
+            // Build whole data string with spaces.
+		    TBuf<250> dataString(dataPtr);
+		    while (!err1)
+		    {
+		        err1 = item->GetNextString(dataPtr);
+		        if (!err1)
+		        {
+		            dataString.Append(_L(" "));
+		            dataString.Append(dataPtr);
+		        }
+		    }
+	        CleanupStack::PopAndDestroy(item);
+
+            // Compare data
+            if (!iMetaDataField[fieldId])
+            {
+                // Tag does not exist in file
+                iLogger->Log(_L("Tag %S does not exist in the file."), &iMetaDataFieldName[fieldId]);
+    	    	aResult.iResultDes.Copy(KTestCaseResultFail());
+    		    aResult.iResult = KErrExpectedValueDifferent;
+    		    err = KErrExecuted;
+    		    break;
+            }
+            else if (iMetaDataField[fieldId]->Compare(dataString))
+            {
+                // Test Case Failed: No match
+                iLogger->Log(_L("Actual   %S = %S"), &iMetaDataFieldName[fieldId],
+                                                     iMetaDataField[fieldId]);
+                iLogger->Log(_L("Expected %S = %S"), &iMetaDataFieldName[fieldId],
+                                                     &dataString);
+		    	aResult.iResultDes.Copy(KTestCaseResultFail());
+   			    aResult.iResult = KErrExpectedValueDifferent;
+   			    err = KErrExecuted;
+   			    break;
+            }
+            else
+            {
+                // Test Case Passed:  Match
+			    iLogger->Log(_L("Test was successful"));
+   				aResult.iResultDes.Copy(KTestCaseResultSuccess());
+            }
+
+	        item = section->GetNextItemLineL(KTagMetaDataName);
+    	}
+
+        // Clear metadata fields
+        DeleteMetaDataFields();
+
+		CleanupStack::PopAndDestroy(sndPlayer);
+
+		return err;
+	}
+	else
+	{
+		//The file name of the clip to play is missing
+		aResult.iResultDes.Copy(KConfigInvalid());
+		aResult.iResult = KErrNotExecuted;
+		return KErrConfigInvalid;
+	}
+}
+
+// Binh
+TInt CMmfTsPlay::DisplayFields(TInt aEntryCount, CSimpleSoundPlayer* aSndPlayer, TBool aDisplay)
+{
+	TInt i;
+	TInt j=0;
+    CMMFMetaDataEntry*	metaDataPtr;
+
+	for( i = 0; i < aEntryCount; i++)
+	{
+		TRAPD(err, metaDataPtr = aSndPlayer->GetMetaDataEntryL(i));
+
+		if(err == KErrNone)
+		{
+    		TInt fieldId = GetFieldId(metaDataPtr->Name());
+		    // in case file has duplicate field ID
+		    if (iMetaDataField[fieldId])
+		        delete iMetaDataField[fieldId];
+
+			iMetaDataField[fieldId] = metaDataPtr->Value().AllocL();
+			if (aDisplay)
+			{
+			    TBuf<50> fieldName = iMetaDataFieldName[fieldId];
+			    fieldName.Append(_L("..."));
+			    iLogger->Log(fieldName);
+            	iLogger->Log(_L("%S"), iMetaDataField[fieldId]);
+			}
+			j++;
+		}
+		delete metaDataPtr;
+		metaDataPtr = NULL;
+	}
+
+	if (j==aEntryCount)
+		return KErrNone;
+	else
+		return KErrExpectedValueDifferent;
+}
+
+// Binh
+TInt CMmfTsPlay::GetFieldId(const TDesC& aString)
+{
+    for(TInt i=1; i < KNumMetaDataField; i++)
+    {
+        if (!aString.Compare(iMetaDataFieldName[i]))
+            return i;
+    }
+
+    return 0;
+}
+
+//Binh
+void CMmfTsPlay::DeleteMetaDataFields()
+{
+    // Clear metadata fields
+    for (TInt i=0; i < KNumMetaDataField; i++)
+        if (iMetaDataField[i])
+        {
+            delete iMetaDataField[i];
+            iMetaDataField[i] = NULL;
+        }
+}
+
+
+// Binh
+TInt CMmfTsPlay::TestMetaDataCountL(CStifSectionParser *section , TTestResult &aResult, TBool aFileHandler)
+{
+	TPtrC FileNamePtr;
+	if ( !section->GetLine(KTagSoundFile, FileNamePtr, ENoTag) )
+	{
+		TFileName FileName = FileNamePtr;
+        CSimpleSoundPlayer *sndPlayer;
+
+		iLogger->Log(_L("Creating simple player with file [%S]"), &FileNamePtr);
+
+        if (aFileHandler)
+        {
+          	RFs	  fs;
+	        RFile file;
+
+        	User::LeaveIfError(fs.Connect());
+	        fs.ShareProtected();
+
+			User::LeaveIfError(file.Open( fs, FileName, EFileRead));
+    		sndPlayer = CSimpleSoundPlayer::NewLC( file, TestModuleIf() , *iLogger);
+
+    		fs.Close();
+        }
+        else
+        {
+    		sndPlayer = CSimpleSoundPlayer::NewLC( FileName, TestModuleIf() , *iLogger);
+        }
+
+    	CStifItemParser *item1 = section->GetItemLineL(KTagDontPlayAudioClip);
+    	if (item1)
+    	{
+    	    sndPlayer->iDontPlayAudioClip = true;
+            delete item1;
+    	}
+
+   		iLogger->Log(_L("Starting scheduler"));
+    	CActiveScheduler::Start();
+
+		TInt entryCount = 0;
+		TInt expectedEntryCount = 0;
+
+		sndPlayer->GetNumberOfMetaDataEntries(entryCount);
+
+		CStifItemParser *item = section->GetItemLineL(KTagEntriesCount);
+
+		if (item)
+		{
+			CleanupStack::PushL(item);
+			item->GetInt(KTagEntriesCount, expectedEntryCount);
+			CleanupStack::PopAndDestroy(item);
+
+			if (entryCount==expectedEntryCount)
+			{
+				iLogger->Log(_L("Test was successful"));
+        		aResult.iResult = KErrNone ;
+				aResult.iResultDes.Copy(KTestCaseResultSuccess());
+			}
+			else
+			{
+				iLogger->Log(_L("EntryCount is %d"), entryCount);
+				iLogger->Log(_L("ExpectedEntryCount is %d"), expectedEntryCount);
+				iLogger->Log(_L("ExpectedEntryCount is different from real metadata count"));
+				aResult.iResultDes.Copy(KTestCaseResultFail());
+				aResult.iResult = KErrExpectedValueDifferent;
+			}
+		}
+		else
+		{
+			//The metaData count is missing
+			aResult.iResultDes.Copy(KConfigInvalid());
+			aResult.iResult = KErrNotExecuted;
+
+    		CleanupStack::PopAndDestroy(sndPlayer);
+
+			return KErrConfigInvalid;
+		}
+
+		CleanupStack::PopAndDestroy(sndPlayer);
+
+		return KErrExecuted;
+	}
+	else
+	{
+		//The file name of the clip to play is missing
+		aResult.iResultDes.Copy(KConfigInvalid());
+		aResult.iResult = KErrNotExecuted;
+		return KErrConfigInvalid;
+	}
+}
+
+
+
+