mmlibs/mmfw/tsrc/mmfunittest/aclnt/TSU_MMF_ACLNT_01/TestStepRecorderCrop.cpp
author hgs
Thu, 07 Oct 2010 22:34:12 +0100
changeset 0 b8ed18f6c07b
permissions -rw-r--r--
2010wk40
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     1
// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     2
// All rights reserved.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     7
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     8
// Initial Contributors:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    10
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    11
// Contributors:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    12
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    13
// Description:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    14
// This file contains an example Test step implementation 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    15
// This demonstrates the various functions provided
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    16
// by the CTestStep base class which are available within
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    17
// a test step 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    18
// 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    19
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    20
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    21
// EPOC includes
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    22
#include <e32base.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    23
#include <e32test.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    24
#include <e32keys.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    25
#include <c32comm.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    26
#include <f32file.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    27
#include <etel.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    28
#include <etelmm.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    29
#include <testframework.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    30
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    31
//#include <MdaAudioSamplePlayer.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    32
#include <mdaaudiosampleeditor.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    33
//#include <MdaAudioTonePlayer.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    34
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    35
// Test system includes
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    36
#include <testframework.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    37
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    38
// Specific includes for this test suite
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    39
#include "TestStepUnitMMFAudClient.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    40
#include "TestSuiteUnitMMFAudClient.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    41
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    42
// Specific includes for these test steps
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    43
#include "TestStepRecorder.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    44
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    45
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    46
#include "MmfAudioController.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    47
#include "mmfclientaudiorecorder.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    48
//#include "MmfClientAudioPlayer.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    49
//#include <mmffourcc.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    50
//#include <mmfpaniccodes.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    51
//#include <mmfFormatImplementationUIDs.hrh>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    52
// --------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    53
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    54
//const TInt KPcm16FrameInterval = 371512;	// EABI warning removal
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    55
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    56
// frame size is now variable, depeding on the sample rate
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    57
//const TInt KFrameSize8K16Bit = 4096;	// frame size for 8Khz	// EABI warning removal
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    58
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    59
//if frame size is 4096 bytes, then a sample file of 8KHz, 16bit, mono, 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    60
// would be 16000 bytes per second, therefore a frame would represent 256 millisecs
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    61
// we make sure the deviation is not greater than a frame since we can only crop frames.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    62
const TInt KExpectedDeviation	 = (256000); //200000
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    63
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    64
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    65
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    66
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    67
// Orig duration = 1000120 Us, 90% = 900108 Us; @8KHz, 16bits, 1 channel = 14400 bytes (aligned to sample)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    68
const TInt KExpectedCropSize1	 = 14400 + 44;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    69
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    70
// Second crop - original duration is still taken from source (known error) = 10000120 Us.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    71
//Therefore crop point = 40% of 10000120 Us = 400048 Us.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    72
//Crop from begining to 400048Us with @8KHz, 16bits, 1 channel = 6400 bytes (aligned to sample).
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    73
//New file = KExpectedCropSize1 - 6400 = 8046
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    74
const TInt KExpectedCropSize2	 = 8000 + 44;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    75
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    76
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    77
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    78
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    79
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    80
 * Static constructor for CTestStepRecorderCrop.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    81
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    82
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    83
 * @return	"CTestStepRecorderCrop*"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    84
 *			The constructed CTestStepRecorderCrop
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    85
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    86
 * @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    87
 * 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    88
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    89
CTestStepRecorderCrop* CTestStepRecorderCrop::NewL(const TDesC& aTestName, TBool aIsConverterTest)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    90
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    91
	CTestStepRecorderCrop* self = new(ELeave) CTestStepRecorderCrop(aTestName, aIsConverterTest);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    92
	return self;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    93
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    94
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    95
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    96
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    97
 * Test step constructor.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    98
 * Each test step initialises its own name.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    99
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   100
 * @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   101
 * 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   102
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   103
CTestStepRecorderCrop::CTestStepRecorderCrop(const TDesC& aTestName, TBool aIsConverterTest)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   104
: iError(0), iHasCropped(EFalse), iIsConverterTest(aIsConverterTest)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   105
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   106
	// store the name of this test case
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   107
	// this is the name that is used by the script file
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   108
	iTestStepName = aTestName;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   109
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   110
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   111
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   112
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   113
 * Test step destructor.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   114
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   115
 * @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   116
 * 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   117
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   118
CTestStepRecorderCrop::~CTestStepRecorderCrop()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   119
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   120
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   121
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   122
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   123
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   124
 * Test step Preamble.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   125
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   126
 * @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   127
 * 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   128
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   129
enum TVerdict CTestStepRecorderCrop::DoTestStepPreambleL(void)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   130
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   131
	 enum TVerdict verdict = EPass;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   132
	 // this installs the scheduler
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   133
	 verdict = CTestStepUnitMMFAudClient::DoTestStepPreambleL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   134
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   135
	// Printing to the console and log file
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   136
	INFO_PRINTF1(iTestStepName);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   137
	if (!iIsConverterTest)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   138
		INFO_PRINTF1(_L("this is a test of CMdaAudioRecorderUtility::CropL(beginning/end)"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   139
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   140
		INFO_PRINTF1(_L("this is a test of CMdaAudioConvertUtility::CropL(beginning/end)"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   141
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   142
	// open the file to be cropped
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   143
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   144
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   145
	User::LeaveIfError(iFs.Connect());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   146
	iFileMan = CFileMan::NewL(iFs);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   147
	if (iIsConverterTest)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   148
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   149
		if(!GetStringFromConfig(_L("SectionOne"), _L("AudioFNameToConvertAndCrop"), iFileName))  //au
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   150
			return EInconclusive;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   151
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   152
		iFileNameTmp = iFileName;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   153
		_LIT(KExtTmp,".tmp.au");
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   154
		iFileNameTmp.Append(KExtTmp);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   155
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   156
		//create a copy of the input file to work on
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   157
		User::LeaveIfError(iFileMan->Copy(iFileName, iFileNameTmp));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   158
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   159
		//construct an autput filename
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   160
		iOutputFileName = iFileName;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   161
		_LIT(KExtOutput,".output.wav");
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   162
		iOutputFileName.Append(KExtOutput);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   163
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   164
		//delete any existing output file
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   165
		TInt deleteErr = iFileMan->Delete(iOutputFileName); //delete oput file before start test
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   166
		if(deleteErr != KErrNone && deleteErr != KErrNotFound)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   167
			User::Leave(deleteErr);	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   168
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   169
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   170
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   171
		if(!GetStringFromConfig(_L("SectionOne"), _L("AudioFNameToCrop"), iFileName))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   172
			return EInconclusive;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   173
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   174
		iFileNameTmp = iFileName;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   175
		_LIT(KExtTmp,".tmp.wav");
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   176
		iFileNameTmp.Append(KExtTmp);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   177
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   178
		User::LeaveIfError(iFileMan->Copy(iFileName, iFileNameTmp));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   179
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   180
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   181
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   182
	iFs.Close();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   183
	delete iFileMan;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   184
	iFileMan = NULL;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   185
	User::After(200000); // just in case
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   186
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   187
	if (!iIsConverterTest)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   188
		{//0240
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   189
		if ( (iRecorder = CMMFMdaAudioRecorderUtility::NewL(*this)) == NULL )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   190
			verdict = EInconclusive;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   191
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   192
		iRecorder->OpenFileL(iFileNameTmp);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   193
		CActiveScheduler::Start(); 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   194
		if (iError != KErrNone ||
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   195
			iRecorder->State() != CMdaAudioRecorderUtility::EOpen)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   196
			return EInconclusive;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   197
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   198
		iRecorder->SetGain(iRecorder->MaxGain()/2);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   199
		iOrigDuration = iRecorder->Duration().Int64();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   200
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   201
		if ( iError != KErrNone || 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   202
			iRecorder->State() != CMdaAudioRecorderUtility::EOpen)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   203
			verdict = EInconclusive;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   204
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   205
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   206
		{//566
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   207
		if ( (iConvert = CMdaAudioConvertUtility::NewL(*this)) == NULL )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   208
			verdict = EInconclusive;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   209
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   210
		iConvert->OpenL(iFileNameTmp, iOutputFileName);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   211
		// Another initialisation of the convert utility
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   212
		// should behave the same as the one above
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   213
		//TMdaFileClipLocation* target = new TMdaFileClipLocation(iFileName3);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   214
		//TMdaAuClipFormat auClipFormat;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   215
		//TMdaPcm16BitAuCodec au16bitCodec; //KMMFFourCCCodePCM16B
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   216
		//iConvert->OpenL(iFileNameTmp, target, 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   217
		//				&auClipFormat,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   218
		//				&au16bitCodec);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   219
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   220
		CActiveScheduler::Start(); 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   221
		if (iError != KErrNone ||
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   222
			iConvert->State() != CMdaAudioConvertUtility::EOpen)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   223
			return EInconclusive;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   224
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   225
		iOrigDuration = iConvert->Duration().Int64();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   226
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   227
		if ( iError != KErrNone || 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   228
			iConvert->State() != CMdaAudioConvertUtility::EOpen)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   229
			verdict = EInconclusive;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   230
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   231
		// convert because cropping only applies to destination
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   232
		// before conversion destination is empty -> hence no cropping available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   233
		TRAPD(err, iConvert->ConvertL());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   234
		// Note: Converting by just openning a wav and an au file will work incorrectly:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   235
		// the resutling file will contain noise, since the default conversion will be e.g.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   236
		// wav:PCM16 -> au:PCM16, instead of wav:PCM16 -> au:PCM16BE (Big Endian)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   237
		// Cropping, duration, position and the flow of the tested code is fine though, 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   238
		// so it serves the purpose of this test, i.e. cropping
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   239
		// This error might be fixed in the future so Big Endian codec is chosen
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   240
		CActiveScheduler::Start(); // open -> record
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   241
		if (err != KErrNone || iError != KErrNone)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   242
			return EInconclusive;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   243
		CActiveScheduler::Start(); // record -> open
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   244
		if (err != KErrNone || iError != KErrNone)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   245
			return EInconclusive;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   246
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   247
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   248
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   249
	return verdict;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   250
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   251
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   252
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   253
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   254
 * Test step Postamble.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   255
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   256
 * @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   257
 * 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   258
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   259
enum TVerdict CTestStepRecorderCrop::DoTestStepPostambleL(void)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   260
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   261
	if (!iIsConverterTest)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   262
		iRecorder->Close();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   263
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   264
		iConvert->Close();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   265
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   266
	//delete the temp, cropped file 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   267
	User::LeaveIfError(iFs.Connect());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   268
	iFileMan = CFileMan::NewL(iFs);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   269
	User::LeaveIfError(iFileMan->Delete(iFileNameTmp));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   270
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   271
	if (iIsConverterTest)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   272
		User::LeaveIfError(iFileMan->Delete(iOutputFileName));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   273
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   274
	iFs.Close();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   275
	delete iFileMan;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   276
	iFileMan = NULL;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   277
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   278
	if (!iIsConverterTest)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   279
		{//240
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   280
		delete iRecorder;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   281
		iRecorder = NULL;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   282
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   283
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   284
		{//566
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   285
		delete iConvert;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   286
		iConvert = NULL;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   287
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   288
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   289
	//[ Destroy the scheduler ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   290
	return CTestStepUnitMMFAudClient::DoTestStepPostambleL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   291
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   292
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   293
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   294
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   295
 * Callback Handle.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   296
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   297
 * @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   298
 * 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   299
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   300
void CTestStepRecorderCrop::MoscoStateChangeEvent(CBase* /*aObject*/,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   301
														  TInt /*aPreviousState*/,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   302
														  TInt /*aCurrentState*/,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   303
														  TInt aErrorcCode)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   304
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   305
	iError = aErrorcCode;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   306
	CActiveScheduler::Stop();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   307
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   308
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   309
void CTestStepRecorderCrop::CropAndStartSchedulerL(const TTimeIntervalMicroSeconds& aBegin,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   310
												   const TTimeIntervalMicroSeconds& aEnd) 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   311
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   312
	if (!iIsConverterTest)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   313
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   314
		iRecorder->CropL(aBegin, aEnd);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   315
		//CActiveScheduler::Start(); // it works synchronously even if we don't start the ActiveScheduler
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   316
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   317
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   318
		//Check if the cropped duration is within the deviation from the expected duration
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   319
		TInt64 cropDur = iRecorder->Duration().Int64();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   320
		TInt64 difDur = aEnd.Int64() - aBegin.Int64();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   321
		TInt delta = I64INT(cropDur - difDur);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   322
		if(delta < 0)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   323
			delta *= (-1);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   324
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   325
		if ( delta <= KExpectedDeviation )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   326
			iHasCropped = ETrue;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   327
		//iRecorder->Stop();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   328
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   329
	else // not really used in this test
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   330
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   331
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   332
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   333
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   334
void CTestStepRecorderCrop::CropAndStartSchedulerL(TTimeIntervalMicroSeconds aCropPoint, TBool aCropToEnd) 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   335
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   336
	_LIT(_toEnd,"to end from");
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   337
	_LIT(_fromBegining,"from beginning to");
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   338
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   339
	if (!iIsConverterTest)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   340
		{//240
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   341
		iRecorder->SetPosition(aCropPoint);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   342
		const TTimeIntervalMicroSeconds pos = iRecorder->Position();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   343
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   344
		iRecorder->CropL(aCropToEnd);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   345
		//CActiveScheduler::Start(); // it works synchronously even if we don't start the ActiveScheduler
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   346
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   347
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   348
		//Check if the cropped duration is within the deviation from the expected duration
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   349
		TInt64 cropDur = iRecorder->Duration().Int64();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   350
		TInt64 difDur = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   351
		if (aCropToEnd)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   352
			difDur = pos.Int64();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   353
		else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   354
			difDur = iOrigDuration - pos.Int64();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   355
		TInt delta = I64INT(cropDur - difDur);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   356
		if(delta < 0)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   357
			delta *= (-1);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   358
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   359
		if ( delta <= KExpectedDeviation )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   360
			iHasCropped = ETrue;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   361
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   362
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   363
		INFO_PRINTF2(_L("Cropping from original duration = %d"), iOrigDuration);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   364
		INFO_PRINTF3(_L("Cropping %S %d "), (aCropToEnd ? &_toEnd : &_fromBegining), aCropPoint.Int64());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   365
		INFO_PRINTF2(_L("Crop point was set at = %d"), pos.Int64());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   366
		INFO_PRINTF2(_L("Cropped to = %d"), cropDur);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   367
		//iRecorder->Stop();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   368
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   369
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   370
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   371
		iHasCropped = ETrue;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   372
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   373
		iConvert->SetPosition(aCropPoint);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   374
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   375
		if (aCropToEnd)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   376
			iConvert->CropL(); // default: crop to end
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   377
		else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   378
			iConvert->CropFromBeginningL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   379
		//CActiveScheduler::Start(); // it works synchronously even if we don't start the ActiveScheduler
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   380
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   381
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   382
		//Check if the cropped duration is within the deviation from the expected duration
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   383
		// Note: there is a problem with duration, since Duration() always returns the 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   384
		// duration of the original clip (source clip) before conversion
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   385
		// One can set the position beyond the end of the cropped file, but still below the
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   386
		// original duration before cropping, and start a second cropping. This might lead
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   387
		// to unexpected behaviour.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   388
		//TInt64 cropDur = iConvert->Duration().Int64();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   389
		// there is no converter API to check the destination(sink) duration after cropping
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   390
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   391
		// we are just checking if the cropping took place by checking the size of the
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   392
		// cropped file
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   393
		TInt croppedSize = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   394
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   395
		User::LeaveIfError(iFs.Connect());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   396
		RFile croppedFile;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   397
		User::LeaveIfError(croppedFile.Open(iFs, iOutputFileName, EFileRead ));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   398
		CleanupClosePushL(croppedFile);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   399
		User::LeaveIfError(croppedFile.Size(croppedSize));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   400
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   401
		TInt expectedCrop=0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   402
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   403
		if (aCropToEnd)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   404
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   405
			expectedCrop=KExpectedCropSize1;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   406
			if (croppedSize != expectedCrop)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   407
			iHasCropped = EFalse;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   408
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   409
		else // second crop to beginning
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   410
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   411
			expectedCrop=KExpectedCropSize2;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   412
			if (croppedSize != expectedCrop) 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   413
				iHasCropped = EFalse;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   414
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   415
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   416
		INFO_PRINTF2(_L("Cropping from original duration = %d"), iOrigDuration);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   417
		INFO_PRINTF3(_L("Cropping %S %d "), (aCropToEnd ? &_toEnd : &_fromBegining), aCropPoint.Int64());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   418
		INFO_PRINTF3(_L("Cropped to = %d bytes (expected %d bytes)"), croppedSize,expectedCrop);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   419
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   420
		CleanupStack::PopAndDestroy(&croppedFile);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   421
		iFs.Close();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   422
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   423
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   424
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   425
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   426
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   427
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   428
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   429
 * Do the test step.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   430
 * Each test step must supply an implementation for DoTestStepL.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   431
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   432
 * @return	"TVerdict"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   433
 *			The result of the test step
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   434
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   435
 * @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   436
 * 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   437
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   438
TVerdict CTestStepRecorderCrop::DoTestStepL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   439
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   440
	iTestStepResult = EPass;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   441
    TInt err       = KErrNone;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   442
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   443
	//NB: crop points are carfully choosen to ensure that at least one block is removed 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   444
	//during each crop operation.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   445
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   446
	if (!iIsConverterTest)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   447
		{//240
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   448
		//crop 40% from beginning of clip
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   449
		TRAP( err, CropAndStartSchedulerL(iOrigDuration / 5 *2, EFalse) );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   450
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   451
		if (err != KErrNone ||
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   452
			!iHasCropped ||
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   453
			iRecorder->State() != CMdaAudioRecorderUtility::EOpen )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   454
			return EFail;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   455
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   456
		iHasCropped = EFalse;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   457
		iOrigDuration = iRecorder->Duration().Int64();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   458
		//crop frop 80% to end of file
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   459
		TRAP( err, CropAndStartSchedulerL(iOrigDuration - (iOrigDuration/5), ETrue) );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   460
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   461
		if (err != KErrNone ||
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   462
			!iHasCropped ||
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   463
			iRecorder->State() != CMdaAudioRecorderUtility::EOpen )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   464
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   465
			INFO_PRINTF4(_L("Failed err=%d  iHasCropped=%d  State=%d"),err, iHasCropped,  iRecorder->State());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   466
			return EFail;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   467
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   468
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   469
	else // iIsConverterTest == ETRue
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   470
		{//566
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   471
		//crop from 90% to end of file
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   472
		TRAP( err, CropAndStartSchedulerL(iOrigDuration - (iOrigDuration/10), ETrue) );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   473
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   474
		if (err != KErrNone ||
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   475
			!iHasCropped ||
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   476
			iConvert->State() != CMdaAudioConvertUtility::EOpen )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   477
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   478
			INFO_PRINTF4(_L("Failed err=%d  iHasCropped=%d  State=%d"),err, iHasCropped,  iConvert->State());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   479
			return EFail;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   480
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   481
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   482
		// crop again
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   483
		iHasCropped = EFalse;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   484
		iOrigDuration = iConvert->Duration().Int64();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   485
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   486
		//crop 40% from beginning of clip
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   487
		TRAP( err, CropAndStartSchedulerL(iOrigDuration / 5 * 2, EFalse) ); // crop from beginning
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   488
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   489
		if (err != KErrNone ||
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   490
			!iHasCropped ||
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   491
			iConvert->State() != CMdaAudioConvertUtility::EOpen )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   492
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   493
			INFO_PRINTF4(_L("Failed err=%d  iHasCropped=%d  State=%d"),err, iHasCropped,  iConvert->State());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   494
			return EFail;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   495
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   496
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   497
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   498
	INFO_PRINTF1(_L("finished with this test step"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   499
	// test steps return a result
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   500
	return iTestStepResult;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   501
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   502
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   503
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   504
// add new test here for descriptor crop
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   505
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   506
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   507
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   508
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   509
 * Static constructor for CTestStepRecCropDescriptor
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   510
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   511
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   512
 * @return	"CTestStepRecCropDescriptor*"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   513
 *			The constructed CTestStepRecCropDescriptor
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   514
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   515
 * @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   516
 * 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   517
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   518
CTestStepRecCropDescriptor* CTestStepRecCropDescriptor::NewL(const TDesC& aTestName, 	TBool aUseOldApi )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   519
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   520
	CTestStepRecCropDescriptor* self = new(ELeave) CTestStepRecCropDescriptor(aTestName, aUseOldApi);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   521
	return self;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   522
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   523
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   524
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   525
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   526
 * Test step constructor.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   527
 * Each test step initialises its own name.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   528
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   529
 * @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   530
 * 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   531
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   532
CTestStepRecCropDescriptor::CTestStepRecCropDescriptor(const TDesC& aTestName, 	TBool aUseOldApi ) 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   533
: iError(0), iHasCropped(EFalse), iIsOldAPiTest( aUseOldApi )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   534
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   535
	// store the name of this test case
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   536
	// this is the name that is used by the script file
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   537
	iTestStepName = aTestName;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   538
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   539
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   540
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   541
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   542
 * Test step destructor.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   543
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   544
 * @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   545
 * 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   546
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   547
CTestStepRecCropDescriptor::~CTestStepRecCropDescriptor()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   548
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   549
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   550
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   551
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   552
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   553
 * Test step Preamble.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   554
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   555
 * @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   556
 * 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   557
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   558
enum TVerdict CTestStepRecCropDescriptor::DoTestStepPreambleL(void)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   559
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   560
	 enum TVerdict verdict = EPass;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   561
	 // this installs the scheduler
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   562
	 verdict = CTestStepUnitMMFAudClient::DoTestStepPreambleL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   563
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   564
	// Printing to the console and log file
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   565
	INFO_PRINTF1(iTestStepName);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   566
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   567
	INFO_PRINTF1(_L("this is a test of CMdaAudioRecorderUtility::CropL(beginning/end)"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   568
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   569
	// open the file to be cropped
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   570
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   571
	if(!(GetStringFromConfig(_L("SectionOne"), _L("AudioFNameToCrop"), iFileName)))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   572
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   573
		return EInconclusive;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   574
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   575
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   576
	// copy file to descriptor
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   577
	iFileNameTmp = iFileName;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   578
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   579
	//[ append to file name and copy file to tmp file ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   580
	_LIT(KExtTmp,".tmp.wav");
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   581
	iFileNameTmp.Append(KExtTmp);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   582
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   583
    iFs.Connect();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   584
	iFileMan = CFileMan::NewL(iFs);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   585
	iFileMan->Copy(iFileName, iFileNameTmp);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   586
	iFs.Close();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   587
	delete iFileMan;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   588
	iFileMan = NULL;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   589
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   590
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   591
	//[ read the file into a descriptor ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   592
	ReadFileToDescriptorL( iFileNameTmp);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   593
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   594
	delete iFileMan;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   595
	iFileMan = NULL;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   596
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   597
	User::After(200000); // just in case
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   598
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   599
	if ( (iRecorder = CMMFMdaAudioRecorderUtility::NewL(*this)) == NULL )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   600
		verdict = EInconclusive;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   601
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   602
	//[ Open the descriptor]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   603
    //[ set up the tdes8 here and every thing should be kosher]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   604
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   605
	if( iIsOldAPiTest ) 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   606
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   607
		iRecorder->OpenDesL( *iDes8 );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   608
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   609
	else 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   610
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   611
		//[ since TDes8 is derived from TDesC8 we can do this cast
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   612
		// to force the correct api to be used ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   613
		iRecorder->OpenDesL( (const TDesC8&)(*iDes8)  );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   614
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   615
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   616
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   617
	CActiveScheduler::Start(); 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   618
	if (iError != KErrNone ||
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   619
		iRecorder->State() != CMdaAudioRecorderUtility::EOpen)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   620
		return EInconclusive;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   621
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   622
	iRecorder->SetGain(iRecorder->MaxGain()/2);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   623
	iOrigDuration = iRecorder->Duration().Int64();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   624
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   625
	if ( iError != KErrNone || 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   626
		iRecorder->State() != CMdaAudioRecorderUtility::EOpen)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   627
		verdict = EInconclusive;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   628
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   629
	return verdict;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   630
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   631
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   632
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   633
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   634
 * Test step Postamble.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   635
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   636
 * @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   637
 * 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   638
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   639
enum TVerdict CTestStepRecCropDescriptor::DoTestStepPostambleL(void)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   640
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   641
	iRecorder->Close();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   642
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   643
	//delete the temp, cropped file 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   644
	iFs.Connect();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   645
	iFileMan = CFileMan::NewL(iFs);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   646
	iFileMan->Delete(iFileNameTmp);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   647
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   648
	iFs.Close();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   649
	delete iFileMan;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   650
	iFileMan = NULL;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   651
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   652
	delete iRecorder;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   653
	iRecorder = NULL;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   654
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   655
	delete iDescHBuf;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   656
	delete iDes8;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   657
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   658
	//[ Destroy the scheduler ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   659
	return CTestStepUnitMMFAudClient::DoTestStepPostambleL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   660
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   661
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   662
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   663
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   664
 * Callback Handle.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   665
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   666
 * @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   667
 * 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   668
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   669
void CTestStepRecCropDescriptor::MoscoStateChangeEvent(CBase* /*aObject*/,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   670
														  TInt /*aPreviousState*/,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   671
														  TInt /*aCurrentState*/,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   672
														  TInt aErrorcCode)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   673
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   674
	iError = aErrorcCode;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   675
	CActiveScheduler::Stop();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   676
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   677
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   678
void CTestStepRecCropDescriptor::CropAndStartSchedulerL(const TTimeIntervalMicroSeconds& aBegin,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   679
												   const TTimeIntervalMicroSeconds& aEnd) 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   680
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   681
		iRecorder->CropL(aBegin, aEnd);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   682
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   683
		//Check if the cropped duration is within the deviation from the expected duration
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   684
		TInt64 cropDur = iRecorder->Duration().Int64();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   685
		TInt64 difDur = aEnd.Int64() - aBegin.Int64();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   686
		TInt delta = I64INT(cropDur - difDur);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   687
		if(delta < 0)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   688
			delta *= (-1);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   689
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   690
		if ( delta <= KExpectedDeviation )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   691
			iHasCropped = ETrue;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   692
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   693
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   694
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   695
void CTestStepRecCropDescriptor::CropAndStartSchedulerL(TBool aCropToEnd) 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   696
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   697
	const TTimeIntervalMicroSeconds pos = iRecorder->Position();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   698
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   699
	iRecorder->CropL(aCropToEnd);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   700
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   701
	//Check if the cropped duration is within the deviation from the expected duration
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   702
	TInt64 cropDur = iRecorder->Duration().Int64();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   703
	TInt64 difDur = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   704
	if (aCropToEnd)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   705
		difDur = pos.Int64();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   706
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   707
		difDur = iOrigDuration - pos.Int64();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   708
	TInt delta = I64INT(cropDur - difDur);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   709
	if(delta < 0)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   710
		delta *= (-1);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   711
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   712
	if ( delta <= KExpectedDeviation )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   713
		iHasCropped = ETrue;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   714
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   715
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   716
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   717
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   718
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   719
 * Do the test step.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   720
 * Each test step must supply an implementation for DoTestStepL.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   721
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   722
 * @return	"TVerdict"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   723
 *			The result of the test step
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   724
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   725
 * @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   726
 * 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   727
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   728
TVerdict CTestStepRecCropDescriptor::DoTestStepL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   729
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   730
	iTestStepResult = EPass;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   731
    TInt err       = KErrNone;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   732
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   733
	const TTimeIntervalMicroSeconds middle( iOrigDuration / 2 );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   734
	const TTimeIntervalMicroSeconds threeQuarters( iOrigDuration - (iOrigDuration/4) );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   735
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   736
    iRecorder->SetPosition(threeQuarters);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   737
	TRAP( err, CropAndStartSchedulerL(ETrue) );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   738
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   739
	if (err != KErrNone ||
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   740
		!iHasCropped ||
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   741
		iRecorder->State() != CMdaAudioRecorderUtility::EOpen )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   742
		return EFail;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   743
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   744
	iHasCropped = EFalse;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   745
	iOrigDuration = iRecorder->Duration().Int64();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   746
	iRecorder->SetPosition(middle);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   747
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   748
	CropAndStartSchedulerL(EFalse);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   749
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   750
	if (err != KErrNone ||
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   751
		!iHasCropped ||
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   752
		iRecorder->State() != CMdaAudioRecorderUtility::EOpen )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   753
		return EFail;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   754
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   755
	INFO_PRINTF1(_L("finished with this test step"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   756
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   757
	return iTestStepResult;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   758
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   759
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   760
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   761
 * This function reads from a source file into the member variable heap buffer, 'iDescHBuf'.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   762
 * @param aFilename - The file to read from.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   763
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   764
void CTestStepRecCropDescriptor::ReadFileToDescriptorL(const TDesC& aFilename )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   765
	{	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   766
	RFs rfs;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   767
	rfs.Connect();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   768
	RFile file;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   769
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   770
	// Try to open the file.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   771
	User::LeaveIfError( file.Open(rfs,aFilename,EFileRead|EFileShareAny) );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   772
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   773
	// Create the databuffer in which to store the data.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   774
	TInt fileSize = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   775
	file.Size(fileSize);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   776
	iDescHBuf = HBufC8::NewL(fileSize);	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   777
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   778
	TPtr8 dataBuf = iDescHBuf->Des();	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   779
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   780
	// Read the data from the file to the data buffer
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   781
	User::LeaveIfError( file.Read(dataBuf) );	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   782
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   783
	//[ set up the descriptor ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   784
	iDes8 = new (ELeave) TPtr8( NULL, 0 );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   785
	iDes8->Set( iDescHBuf->Des());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   786
    
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   787
	file.Close();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   788
	rfs.Close();	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   789
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   790
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   791