diff -r 000000000000 -r 9b3e960ffc8a camcordermmfplugin/tsrc/public/basic/src/camcTest_9.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/camcordermmfplugin/tsrc/public/basic/src/camcTest_9.cpp Thu Dec 17 08:51:24 2009 +0200 @@ -0,0 +1,716 @@ +/* +* 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: Camcorder MMF API Test DLL +* +*/ + + + +// INCLUDE FILES +#include "CamcTest_9.h" +#include "CamcTest.h" +#include + + +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTION PROTOTYPES + +// CONSTANTS + +// MACROS + +// LOCAL CONSTANTS AND MACROS + +// Allows a 10% margin for the filesize +#define TC9_ALLOWED_MARGIN ( TC9_FILE_SIZE_LIMIT * 0.1 ) + +// MODULE DATA STRUCTURES + +// LOCAL FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + +CCamcTest_9::CCamcTest_9 () + { + } + + + +CCamcTest_9::~CCamcTest_9 () + { + delete iCamcTestClient; + iCamcTestClient = NULL; + } + + +void CCamcTest_9::setUpL () + { + { + iCamcTestClient = CCamcTestClient_9::NewL( ); + } + // Do nothing in the setUp to get Memory Failure functionality + iWaitScheduler = new (ELeave) CActiveSchedulerWait; + + // Create a new Camera API implementation object, if supported + TRAPD( err, iUiLevelCamera = CCamera::New2L( static_cast(*this), 0 /*index*/, 0 /*Priority*/ ) ); + if ( err ) + { + PRINT( ( _L( "CCamcTest_9::setUpL CCamera::New2L return code=%d" ), err ) ); + // Create old Camera API implementation object. + iUiLevelCamera = CCamera::NewL( static_cast(*this), 0 /*Index*/ ); + } + else + { + PRINT( ( _L( "CCamcTest_9::setUp() using new MCameraObserver2" )) ); + } + + iUiLevelCameraHandle = iUiLevelCamera->Handle(); + iUiLevelCamera->Reserve(); + iWaitScheduler->Start(); + } + + +void CCamcTest_9::tearDown () + { + delete iCamcTestClient; + iCamcTestClient = NULL; + delete iWaitScheduler; + delete iUiLevelCamera; + REComSession::FinalClose(); + } + + +// +// Own test functions. +// + +// ////////////////////////////////////////////////////////////////// +// Prepare tests +// ////////////////////////////////////////////////////////////////// + +void CCamcTest_9::Prepare_007_L() + { + /////////////////////////////////////// + // ID: CAMC_API.PREPARE_007 + // Action : + // Prepare when controller is open. + // Call prepare, without setting anything (using all defaults) + // Output : + // OK + /////////////////////////////////////// + + iCamcTestClient->Start_Active_ObjectL(K_Tc9_PrepareWhenControllerReadyWhitoutSetting, iUiLevelCameraHandle); + } + +void CCamcTest_9::Prepare_008_L() + { + /////////////////////////////////////// + // ID: CAMC_API.PREPARE_008 + // Action : + // Prepare when controller is open. Call prepare, setting + // only VideoBitRate (using defaults for the other parameters) + // Output : + // OK + /////////////////////////////////////// + + iCamcTestClient->Start_Active_ObjectL(K_Tc9_PrepareWhenControllerReadyOnlyVideoBitRateSetting, iUiLevelCameraHandle); + } + +void CCamcTest_9::Prepare_009_L() + { + /////////////////////////////////////// + // ID: CAMC_API.PREPARE_009 + // Action : + // Prepare when controller is open. Call prepare, setting + // only VideoFrameSize (using defaults for the other parameters) + // Output : + // OK + /////////////////////////////////////// + + iCamcTestClient->Start_Active_ObjectL(K_Tc9_PrepareWhenControllerReadyOnlyVideoFrameSizeSetting, iUiLevelCameraHandle); + } + +void CCamcTest_9::RecordTimeAvailableL_005_L() + { + /////////////////////////////////////// + // ID: CAMC_API.RECORDTIMEAVAILABLEL_005 + // Action : + // Asking RecordTimeAvailable() + // Once Recording is ready + // Output : + // Value must be sensible + /////////////////////////////////////// + + iCamcTestClient->Start_Active_ObjectL( K_Tc9_RecordTimeAvailWhenRecordingReady, iUiLevelCameraHandle ); + } + +/**************************/ +/* SET MAX CLIP SIZE */ +/**************************/ + +void CCamcTest_9::SetMaxClipSizeL_008_L() + { + /////////////////////////////////////// + // ID: CAMC_API.SETMAXCLIPSIZEL_008 + // Action : + // SetMaxClipSizeL when controller is open. Set size = 0 + // Output : + // Must record until disk full. + /////////////////////////////////////// + + iCamcTestClient->Start_Active_ObjectL(K_Tc9_SetMaxClipSizeLWhenControllerReadySize0, iUiLevelCameraHandle); + } + +void CCamcTest_9::SetMaxClipSizeL_009_L() + { + /////////////////////////////////////// + // ID: CAMC_API.SETMAXCLIPSIZEL_009 + // Action : + // SetMaxClipSizeL when controller is open. Set size = KMMFNoMaxClipSize + // Output : + // Must record until disk full. + /////////////////////////////////////// + + iCamcTestClient->Start_Active_ObjectL(K_Tc9_SetMaxClipSizeLWhenControllerReadyKMMFNoMaxClipSize, iUiLevelCameraHandle); + } + +/**************************/ +/* NEW FILE NAME */ +/**************************/ + +void CCamcTest_9::NewFileName_001_L() + { + /////////////////////////////////////// + // ID: CAMC_API.NEWFILENAME_001 + // Action : + // Set NewFileName when prepared, not recording + // Output : + // New video, which have new name. + /////////////////////////////////////// + TInt err; + + RFile file; + RFs fsSession; + fsSession.Connect(); + + TFileName fileName; + AddDriveLetterToPath(_L("NewFileName.3gp"),fileName); + err = fsSession.Delete( fileName ); + + if ( ( err != KErrNone ) && ( err != KErrNotFound ) ) + { + User::Leave(KErrGeneral); + } + + iCamcTestClient->Start_Active_ObjectL(K_TC9_NewFileNameWhenPreparedNotRecording, iUiLevelCameraHandle); + + err = file.Open(fsSession,fileName,EFileShareAny); + file.Close(); + fsSession.Close(); + assertTIntsEqualL( KErrNone, err ); + } + +void CCamcTest_9::NewFileName_002_L() + { + /////////////////////////////////////// + // ID: CAMC_API.NEWFILENAME_002 + // Action : + // Set NewFileName when recorded ready + // Output : + // Record two videos, and the second one have new name. + /////////////////////////////////////// + + RFile file; + RFs fsSession; + fsSession.Connect(); + TInt err; + TFileName fileName; + AddDriveLetterToPath(_L("recordQCIF.3gp"),fileName); + TFileName newfile; + AddDriveLetterToPath(_L("NewFileName.3gp"),newfile); + err = fsSession.Delete( fileName ); + if ( ( err != KErrNone ) && ( err != KErrNotFound ) ) + { + User::Leave(KErrGeneral); + } + + err = fsSession.Delete( newfile ); + if ( ( err != KErrNone ) && ( err != KErrNotFound ) ) + { + User::Leave(KErrGeneral); + } + + iCamcTestClient->Start_Active_ObjectL(K_TC9_NewFileNameWhenRecordSecondTime, iUiLevelCameraHandle); + + + err = file.Open(fsSession,fileName,EFileShareAny); + assertTIntsEqualL( KErrNone, err ); + err = file.Open(fsSession,newfile,EFileShareAny); + assertTIntsEqualL( KErrNone, err ); + + file.Close(); + fsSession.Close(); + } + +void CCamcTest_9::NewFileName_003_L() + { + /////////////////////////////////////// + // ID: CAMC_API.NEWFILENAME_003 + // Action : + // Set NewFileName when recording + // Output : + // Leave. + /////////////////////////////////////// + + TRAPD(err, iCamcTestClient->Start_Active_ObjectL(K_TC9_NewFileNameWhenRecording, iUiLevelCameraHandle)); + assertTIntsEqualL( KErrNotReady, err ); + } + +void CCamcTest_9::NewFileName_004_L() + { + /////////////////////////////////////// + // ID: CAMC_API.NEWFILENAME_004 + // Action : + // Set NewFileName when paused + // Output : + // Leave. + /////////////////////////////////////// + + TRAPD(err, iCamcTestClient->Start_Active_ObjectL(K_TC9_NewFileNameWhenPaused, iUiLevelCameraHandle)); + assertTIntsEqualL( KErrNotReady, err ); + } + +void CCamcTest_9::NewFileName_005_L() + { + /////////////////////////////////////// + // ID: CAMC_API.NEWFILENAME_005 + // Action : + // One video is recorded. It ends because of filesize reached. + // A second video is recorded, changing the filename using custom + // command, no OpenFile(). + // Output : + // FileSize of both video is ok. + /////////////////////////////////////// + + RFile file; + TInt filesize,err; + RFs fsSession; + fsSession.Connect(); + TFileName fileName1, fileName2; + + TRAPD(leavingCode, + { + AddDriveLetterToPath(_L("recordQCIF.3gp"),fileName1); + err = fsSession.Delete( fileName1 ); + AddDriveLetterToPath(_L("NewFileName.3gp"),fileName2); + err = fsSession.Delete( fileName2 ); + + // Start the test case + iCamcTestClient->Start_Active_ObjectL(K_TC9_NewFileNameWhenInternalStop, iUiLevelCameraHandle); + + // Check if size of files is according to previously set Size limit + err = file.Open(fsSession,fileName1,EFileShareAny); + assertTIntsEqualL( KErrNone, err ); + err = file.Size(filesize); + file.Close(); + + if ( ( filesize > TC9_FILE_SIZE_LIMIT + TC9_ALLOWED_MARGIN ) || + (filesize < TC9_FILE_SIZE_LIMIT - TC9_ALLOWED_MARGIN ) ) + { + assertL(0); + } + + err = file.Open(fsSession,fileName2,EFileShareAny); + assertTIntsEqualL( KErrNone, err ); + err = file.Size(filesize); + file.Close(); + + if ( ( filesize > TC9_FILE_SIZE_LIMIT + TC9_ALLOWED_MARGIN ) || + (filesize < TC9_FILE_SIZE_LIMIT - TC9_ALLOWED_MARGIN ) ) + { + assertL(0); + } + } ); //End of TRAPD + + fsSession.Close(); + User::LeaveIfError(leavingCode); + } + +void CCamcTest_9::NewFileName_006_L() + { + /////////////////////////////////////// + // ID: CAMC_API.NEWFILENAME_006 + // Action : + // Custom command sent, prepare(), and record() + // Output : + // 2nd recorded file has the name + // requested in the custom command. + /////////////////////////////////////// + + RFile file; + RFs fsSession; + fsSession.Connect(); + TInt err; + TFileName fileName; + AddDriveLetterToPath(_L("recordQCIF.3g2"),fileName); + TFileName newfile; + AddDriveLetterToPath(_L("NewFileName.3g2"),newfile); + err = fsSession.Delete( fileName ); + if ( ( err != KErrNone ) && ( err != KErrNotFound ) ) + { + User::Leave(KErrGeneral); + } + + err = fsSession.Delete( newfile ); + if ( ( err != KErrNone ) && ( err != KErrNotFound ) ) + { + User::Leave(KErrGeneral); + } + + iCamcTestClient->Start_Active_ObjectL(K_TC9_NewFileNameWhenRecordSecondTimeDiffFileFormat, iUiLevelCameraHandle); + + + err = file.Open(fsSession,fileName,EFileShareAny); + assertTIntsEqualL( KErrNone, err ); + err = file.Open(fsSession,newfile,EFileShareAny); + assertTIntsEqualL( KErrNone, err ); + + file.Close(); + fsSession.Close(); + } + +void CCamcTest_9::NewFileName_007_L() + { + /////////////////////////////////////// + // ID: CAMC_API.NEWFILENAME_007 + // Action : + // Custom command sent, prepare(), and record() + // Output : + // 2nd recorded file has the name + // requested in the custom command. + /////////////////////////////////////// + + RFile file; + RFs fsSession; + fsSession.Connect(); + TInt err; + TFileName fileName; + AddDriveLetterToPath(_L("recordQCIF.mp4"),fileName); + TFileName newfile; + AddDriveLetterToPath(_L("NewFileName.mp4"),newfile); + err = fsSession.Delete( fileName ); + if ( ( err != KErrNone ) && ( err != KErrNotFound ) ) + { + User::Leave(KErrGeneral); + } + + err = fsSession.Delete( newfile ); + if ( ( err != KErrNone ) && ( err != KErrNotFound ) ) + { + User::Leave(KErrGeneral); + } + + iCamcTestClient->Start_Active_ObjectL(K_TC9_NewFileNameWhenRecordSecondTimeMPEG4FileFormat, iUiLevelCameraHandle); + + + err = file.Open(fsSession,fileName,EFileShareAny); + assertTIntsEqualL( KErrNone, err ); + err = file.Open(fsSession,newfile,EFileShareAny); + assertTIntsEqualL( KErrNone, err ); + + file.Close(); + fsSession.Close(); + } + +void CCamcTest_9::NewFileName_008_L() + { + /////////////////////////////////////// + // ID: CAMC_API.NEWFILENAME_008 + // Action : + // Custom command sent, prepare(), and record() + // Output : + // 2nd recorded file has the name + // requested in the custom command. + /////////////////////////////////////// + + RFile file; + RFs fsSession; + fsSession.Connect(); + TInt err; + TFileName fileName; + AddDriveLetterToPath(_L("recordCIF.mp4"),fileName); + TFileName newfile; + AddDriveLetterToPath(_L("NewFileName.mp4"),newfile); + err = fsSession.Delete( fileName ); + if ( ( err != KErrNone ) && ( err != KErrNotFound ) ) + { + User::Leave(KErrGeneral); + } + + err = fsSession.Delete( newfile ); + if ( ( err != KErrNone ) && ( err != KErrNotFound ) ) + { + User::Leave(KErrGeneral); + } + + iCamcTestClient->Start_Active_ObjectL(K_TC9_NewFileNameWhenRecordSecondTimeH264BaselineFileFormat, iUiLevelCameraHandle); + + + err = file.Open(fsSession,fileName,EFileShareAny); + assertTIntsEqualL( KErrNone, err ); + err = file.Open(fsSession,newfile,EFileShareAny); + assertTIntsEqualL( KErrNone, err ); + + file.Close(); + fsSession.Close(); + } + +void CCamcTest_9::NewFileName_009_L() + { + /////////////////////////////////////// + // ID: CAMC_API.NEWFILENAME_009 + // Action : + // Custom command sent, prepare(), and record() + // Output : + // 2nd recorded file has the name + // requested in the custom command. + /////////////////////////////////////// + + RFile file; + RFs fsSession; + fsSession.Connect(); + TInt err; + TFileName fileName; + AddDriveLetterToPath(_L("recordCIF.mp4"),fileName); + TFileName newfile; + AddDriveLetterToPath(_L("NewFileName.mp4"),newfile); + err = fsSession.Delete( fileName ); + if ( ( err != KErrNone ) && ( err != KErrNotFound ) ) + { + User::Leave(KErrGeneral); + } + + err = fsSession.Delete( newfile ); + if ( ( err != KErrNone ) && ( err != KErrNotFound ) ) + { + User::Leave(KErrGeneral); + } + + iCamcTestClient->Start_Active_ObjectL(K_TC9_NewFileNameWhenRecordSecondTimeH264HighFileFormat, iUiLevelCameraHandle); + + + err = file.Open(fsSession,fileName,EFileShareAny); + assertTIntsEqualL( KErrNone, err ); + err = file.Open(fsSession,newfile,EFileShareAny); + assertTIntsEqualL( KErrNone, err ); + + file.Close(); + fsSession.Close(); + } + + +/*****************************/ +/* OPEN FILE */ +/*****************************/ + +void CCamcTest_9::OpenFileL_016_L() + { + + /////////////////////////////////////// + // ID: CAMC_API.OPENFILEL_016 + // + // Action :FileOpen with FileName "foo/filename.3gp", ie a folder + // that doesn't exists. Then normal recording procedure. + // + // Output :Folder is created, video is correctly recorded. + // (Existence of the video checked) + /////////////////////////////////////// + + iCamcTestClient->Start_Active_ObjectL(K_Tc9_OpenFileInAFolderNonExistent, iUiLevelCameraHandle); + + RFile file; + RFs fsSession; + fsSession.Connect(); + TInt err; + TFileName fileName; + AddDriveLetterToPath(_L("non-existent-folder\\recordQCIF.3gp"), fileName); + err = file.Open(fsSession,fileName,EFileShareAny); + assertTIntsEqualL( KErrNone, err ); + + file.Close(); + fsSession.Close(); + } + +// +// An own static function to collect the test functions into one +// suite of tests. The framework will run the tests and free the +// memory allocated for the test suite. +// + + +// ////////////////////////////////////////////////////////////////// +// Dummy Camera API callback functions +// ////////////////////////////////////////////////////////////////// +void CCamcTest_9::ReserveComplete(TInt /*aError*/) + { + RDebug::Print(_L("CCamcTest_9::ReserveComplete")); + + // UI level camera is being initialized + if (iWaitScheduler->IsStarted()) + { + iUiLevelCamera->PowerOn(); + return; + } + } + +void CCamcTest_9::PowerOnComplete(TInt /*aError*/) + { + RDebug::Print(_L("CCamcTest_9::PowerOnComplete")); + + // UI level camera is being initialized + if (iWaitScheduler->IsStarted()) + { + iWaitScheduler->AsyncStop(); + return; + } + } + +void CCamcTest_9::ViewFinderFrameReady(CFbsBitmap& /*aFrame*/) + { + } +void CCamcTest_9::ImageReady(CFbsBitmap* /*aBitmap */,HBufC8* /*aData*/,TInt /*aError*/) + { + } +void CCamcTest_9::FrameBufferReady(MFrameBuffer* /*aFrameBuffer*/,TInt /*aError*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CCamcTest_9::HandleEvent +// MCameraObserver2 call-back handler +// ----------------------------------------------------------------------------- +// +void CCamcTest_9::HandleEvent( const TECAMEvent& aEvent) + { + PRINT(( _L( "CCamcTest_9::HandleEvent() entering, type=%x, err=%d" ), aEvent.iEventType.iUid, aEvent.iErrorCode )); + + if ( aEvent.iEventType == KUidECamEventCameraNoLongerReserved ) + { + PRINT(( _L( "CCamcTest_9::HandleEvent() KUidECamEventCameraNoLongerReserved" ) )); + } + else if ( aEvent.iEventType == KUidECamEventPowerOnComplete ) + { + PRINT(( _L( "CCamcTest_9::HandleEvent() KUidECamEventPowerOnComplete" ) )); + PowerOnComplete( aEvent.iErrorCode ); + } + else if ( aEvent.iEventType == KUidECamEventReserveComplete ) + { + PRINT(( _L( "CCamcTest_9::HandleEvent() KUidECamEventReserveComplete" ) )); + ReserveComplete( aEvent.iErrorCode ); + } + + PRINT(( _L( "CCamcTestClient_7::HandleEvent() returning" ) )); + } + +// ----------------------------------------------------------------------------- +// CCamcTest_9::ViewFinderReady +// MCameraObserver2 call-back handler +// ----------------------------------------------------------------------------- +// +void CCamcTest_9::ViewFinderReady( MCameraBuffer& aCameraBuffer, TInt aError) + { + PRINT(( _L( "CCamcTest_9::ViewFinderReady() NOT HANDLED err=%d, NumFrames=%d" ), aError, aCameraBuffer.NumFrames() )); + CFbsBitmap *buffer = NULL; + if ( !aError ) + { + aCameraBuffer.Release(); + } + ViewFinderFrameReady( *buffer ); + } + +// ----------------------------------------------------------------------------- +// CCamcTest_9::ImageBufferReady +// MCameraObserver2 call-back handler +// ----------------------------------------------------------------------------- +// +void CCamcTest_9::ImageBufferReady( MCameraBuffer& aCameraBuffer, TInt aError) + { + PRINT(( _L( "CCamcTest_9::ImageBufferReady() BUFFER NOT HANDLED, err=%d, NumFrames=%d" ), aError, aCameraBuffer.NumFrames() )); + + if ( !aError ) + { + aCameraBuffer.Release(); + } + ImageReady( NULL, NULL, aError ); + } + +// ----------------------------------------------------------------------------- +// CCamcTest_9::VideoBufferReady +// MCameraObserver2 call-back handler +// ----------------------------------------------------------------------------- +// +void CCamcTest_9::VideoBufferReady( MCameraBuffer& aCameraBuffer, TInt aError) + { + PRINT(( _L( "CCamcTest_9::VideoBufferReady() entering, err=%d, NumFrames=%d" ), aError, aCameraBuffer.NumFrames() )); + MFrameBuffer* buffer = NULL; + + if ( !aError ) + { + aCameraBuffer.Release(); + } + // Call old Camera-API observer handler + FrameBufferReady( buffer, aError ); + + PRINT(( _L( "CCamcTest_9::VideoBufferReady() returning" ))); + } + + +MTest* CCamcTest_9::suiteL () + { + // Always use NewL (Do not use NewLC) !!! + CTestSuite *suite = CTestSuite::NewL(_L8("CCamcTest_9")); + + suite->addTestL(CTestCaller::NewL(_L8("CAMC_API.PREPARE_007"), &Prepare_007_L)); + suite->addTestL(CTestCaller::NewL(_L8("CAMC_API.PREPARE_008"), &Prepare_008_L)); + suite->addTestL(CTestCaller::NewL(_L8("CAMC_API.PREPARE_009"), &Prepare_009_L)); + + suite->addTestL(CTestCaller::NewL(_L8("CAMC_API.RECORDTIMEAVAILABLEL_005"), &RecordTimeAvailableL_005_L)); + + // SetMaxClipSizeL_008 and SetMaxClipSizeL_009, only to be tested on HW +#if !( defined (__WINS__) || defined (__WINSCW__) ) + suite->addTestL(CTestCaller::NewL(_L8("CAMC_API.SETMAXCLIPSIZEL_008"), &SetMaxClipSizeL_008_L)); + suite->addTestL(CTestCaller::NewL(_L8("CAMC_API.SETMAXCLIPSIZEL_009"), &SetMaxClipSizeL_009_L)); +#endif + + suite->addTestL(CTestCaller::NewL(_L8("CAMC_API.NEWFILENAME_001"), &NewFileName_001_L)); + suite->addTestL(CTestCaller::NewL(_L8("CAMC_API.NEWFILENAME_002"), &NewFileName_002_L)); + suite->addTestL(CTestCaller::NewL(_L8("CAMC_API.NEWFILENAME_003"), &NewFileName_003_L)); + suite->addTestL(CTestCaller::NewL(_L8("CAMC_API.NEWFILENAME_004"), &NewFileName_004_L)); + suite->addTestL(CTestCaller::NewL(_L8("CAMC_API.NEWFILENAME_005"), &NewFileName_005_L)); + suite->addTestL(CTestCaller::NewL(_L8("CAMC_API.NEWFILENAME_006"), &NewFileName_006_L)); + +#ifdef MP4_FILE_FORMAT_SUPPORTED +#if ((!defined __WINS__) || (!defined __WINSCW__)) // AAC supported only in HW + suite->addTestL(CTestCaller::NewL(_L8("CAMC_API.NEWFILENAME_007"), &NewFileName_007_L)); + suite->addTestL(CTestCaller::NewL(_L8("CAMC_API.NEWFILENAME_008"), &NewFileName_008_L)); + suite->addTestL(CTestCaller::NewL(_L8("CAMC_API.NEWFILENAME_009"), &NewFileName_009_L)); +#endif +#endif + + suite->addTestL(CTestCaller::NewL(_L8("CAMC_API.OPENFILEL_016"), &OpenFileL_016_L)); + + return suite; + } +