|
1 /* |
|
2 * Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: |
|
15 * |
|
16 */ |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 // CLASS HEADER |
|
22 #include "UT_CMccFileAudio.h" |
|
23 |
|
24 // EXTERNAL INCLUDES |
|
25 #include <digia/eunit/eunitmacros.h> |
|
26 |
|
27 |
|
28 // INTERNAL INCLUDES |
|
29 #include "MccFileAudio.h" |
|
30 #include "MccFileVideo.h" |
|
31 #include "MccFileSourceImpl.h" |
|
32 #include "mmccinterfacedef.h" |
|
33 #include "mccresourcepool.h" |
|
34 #include "Mcculdatapath.h" |
|
35 |
|
36 // CONSTRUCTION |
|
37 UT_CMccFileAudio* UT_CMccFileAudio::NewL() |
|
38 { |
|
39 UT_CMccFileAudio* self = UT_CMccFileAudio::NewLC(); |
|
40 CleanupStack::Pop(); |
|
41 |
|
42 return self; |
|
43 } |
|
44 |
|
45 UT_CMccFileAudio* UT_CMccFileAudio::NewLC() |
|
46 { |
|
47 UT_CMccFileAudio* self = new( ELeave ) UT_CMccFileAudio(); |
|
48 CleanupStack::PushL( self ); |
|
49 |
|
50 self->ConstructL(); |
|
51 |
|
52 return self; |
|
53 } |
|
54 |
|
55 // Destructor (virtual by CBase) |
|
56 UT_CMccFileAudio::~UT_CMccFileAudio() |
|
57 { |
|
58 } |
|
59 |
|
60 // Default constructor |
|
61 UT_CMccFileAudio::UT_CMccFileAudio() |
|
62 { |
|
63 } |
|
64 |
|
65 // Second phase construct |
|
66 void UT_CMccFileAudio::ConstructL() |
|
67 { |
|
68 // The ConstructL from the base class CEUnitTestSuiteClass must be called. |
|
69 // It generates the test case table. |
|
70 CEUnitTestSuiteClass::ConstructL(); |
|
71 } |
|
72 |
|
73 // METHODS |
|
74 |
|
75 |
|
76 |
|
77 void UT_CMccFileAudio::Setup2L( ) |
|
78 { |
|
79 iBuffer = CMMFDescriptorBuffer::NewL( 1000 ); |
|
80 iBuffer->Data().Copy(_L("aaaaaaaaaa")); |
|
81 TMediaId media = KUidMediaTypeAudio; |
|
82 |
|
83 MAsyncEventHandler* eventHandler = NULL; |
|
84 CMccResourcePool* iMccResource = NULL; |
|
85 |
|
86 iAudioULDPStub = CMccUlDataPath::NewL( eventHandler,iMccResource, media ); |
|
87 media = KUidMediaTypeVideo; |
|
88 iVideoULDPStub = CMccUlDataPath::NewL( eventHandler, iMccResource, media ); |
|
89 |
|
90 TMccFileSourceSettingBuf settingBuf; |
|
91 |
|
92 iFileSourceImpl = CMccFileSourceImpl::NewL( 0 ); |
|
93 |
|
94 iAudio = CMccFileAudio::NewL(*iFileSourceImpl); |
|
95 iVideo = CMccFileVideo::NewL(*iFileSourceImpl); |
|
96 |
|
97 #define KFileName TFileName(_L("c:\\test.mp4")); |
|
98 TFileName fileName = KFileName; |
|
99 TFileName fullFileName; |
|
100 MP4Err error = MP4_OK; |
|
101 |
|
102 RFs fS; |
|
103 User::LeaveIfError( fS.Connect() ); |
|
104 CleanupClosePushL( fS ); |
|
105 TParse fp; |
|
106 if ( fS.Parse( fileName, fp ) != KErrNone ) |
|
107 { |
|
108 RDebug::Print(_L("CMccFileSourceImpl::OpenFileL file name parse error!")); |
|
109 User::Leave( KErrGeneral ); |
|
110 } |
|
111 |
|
112 fullFileName = fp.FullName(); |
|
113 |
|
114 CleanupStack::PopAndDestroy( &fS ); |
|
115 |
|
116 if (MP4ParseOpen( &iMP4Handle, (wchar_t *) fullFileName.PtrZ() ) != MP4_OK ) |
|
117 { |
|
118 iMP4Handle = NULL; |
|
119 User::Leave(KErrGeneral); |
|
120 } |
|
121 |
|
122 iAudio->ParseUpdateAudioDescriptions(iMP4Handle); |
|
123 iVideo->ParseUpdateVideoDescriptions(iMP4Handle); |
|
124 iAudio->ParseUpdateStreamDescription(iMP4Handle); |
|
125 iAudio->SetFileHandle(iMP4Handle); |
|
126 iVideo->SetFileHandle(iMP4Handle); |
|
127 } |
|
128 |
|
129 void UT_CMccFileAudio::SetupL( ) |
|
130 { |
|
131 TMccFileSourceSettingBuf settingBuf; |
|
132 |
|
133 iBuffer = CMMFDescriptorBuffer::NewL( 1000 ); |
|
134 iBuffer->Data().Copy(_L("aaaaaaaaaa")); |
|
135 TMediaId media = KUidMediaTypeAudio; |
|
136 |
|
137 MAsyncEventHandler* eventHandler = NULL; |
|
138 CMccResourcePool* iMccResource = NULL; |
|
139 |
|
140 iAudioULDPStub = CMccUlDataPath::NewL( eventHandler,iMccResource, media ); |
|
141 media = KUidMediaTypeVideo; |
|
142 iVideoULDPStub = CMccUlDataPath::NewL( eventHandler, iMccResource, media ); |
|
143 |
|
144 iFileSourceImpl = CMccFileSourceImpl::NewL( 0 ); |
|
145 iAudio = CMccFileAudio::NewL(*iFileSourceImpl); |
|
146 iVideo = CMccFileVideo::NewL(*iFileSourceImpl); |
|
147 |
|
148 #define KFileName2 TFileName(_L("c:\\CrazyFrog.3gp")); |
|
149 TFileName fileName = KFileName2; |
|
150 TFileName fullFileName; |
|
151 MP4Err error = MP4_OK; |
|
152 |
|
153 RFs fS; |
|
154 User::LeaveIfError( fS.Connect() ); |
|
155 CleanupClosePushL( fS ); |
|
156 TParse fp; |
|
157 if ( fS.Parse( fileName, fp ) != KErrNone ) |
|
158 { |
|
159 RDebug::Print(_L("CMccFileSourceImpl::OpenFileL file name parse error!")); |
|
160 User::Leave( KErrGeneral ); |
|
161 } |
|
162 |
|
163 fullFileName = fp.FullName(); |
|
164 |
|
165 CleanupStack::PopAndDestroy( &fS ); |
|
166 |
|
167 if (MP4ParseOpen( &iMP4Handle, (wchar_t *) fullFileName.PtrZ() ) != MP4_OK ) |
|
168 { |
|
169 iMP4Handle = NULL; |
|
170 User::Leave(KErrGeneral); |
|
171 } |
|
172 |
|
173 iAudio->ParseUpdateAudioDescriptions(iMP4Handle); |
|
174 iVideo->ParseUpdateVideoDescriptions(iMP4Handle); |
|
175 iAudio->ParseUpdateStreamDescription(iMP4Handle); |
|
176 iAudio->SetFileHandle(iMP4Handle); |
|
177 iVideo->SetFileHandle(iMP4Handle); |
|
178 } |
|
179 |
|
180 void UT_CMccFileAudio::Setup3L( ) |
|
181 { |
|
182 TMccFileSourceSettingBuf settingBuf; |
|
183 |
|
184 iBuffer = CMMFDescriptorBuffer::NewL( 1000 ); |
|
185 iBuffer->Data().Copy(_L("aaaaaaaaaa")); |
|
186 TMediaId media = KUidMediaTypeAudio; |
|
187 |
|
188 MAsyncEventHandler* eventHandler = NULL; |
|
189 CMccResourcePool* iMccResource = NULL; |
|
190 |
|
191 iAudioULDPStub = CMccUlDataPath::NewL( eventHandler,iMccResource, media ); |
|
192 media = KUidMediaTypeVideo; |
|
193 iVideoULDPStub = CMccUlDataPath::NewL( eventHandler, iMccResource, media ); |
|
194 |
|
195 iFileSourceImpl = CMccFileSourceImpl::NewL( 0 ); |
|
196 iVideo = CMccFileVideo::NewL(*iFileSourceImpl); |
|
197 iAudio = NULL; |
|
198 |
|
199 #define KFileName3 TFileName(_L("c:\\test_avc.3gp")); |
|
200 TFileName fileName = KFileName3; |
|
201 TFileName fullFileName; |
|
202 MP4Err error = MP4_OK; |
|
203 |
|
204 RFs fS; |
|
205 User::LeaveIfError( fS.Connect() ); |
|
206 CleanupClosePushL( fS ); |
|
207 TParse fp; |
|
208 if ( fS.Parse( fileName, fp ) != KErrNone ) |
|
209 { |
|
210 RDebug::Print(_L("CMccFileSourceImpl::OpenFileL file name parse error!")); |
|
211 User::Leave( KErrGeneral ); |
|
212 } |
|
213 |
|
214 fullFileName = fp.FullName(); |
|
215 |
|
216 CleanupStack::PopAndDestroy( &fS ); |
|
217 |
|
218 if (MP4ParseOpen( &iMP4Handle, (wchar_t *) fullFileName.PtrZ() ) != MP4_OK ) |
|
219 { |
|
220 iMP4Handle = NULL; |
|
221 User::Leave(KErrGeneral); |
|
222 } |
|
223 ; |
|
224 iVideo->ParseUpdateVideoDescriptions(iMP4Handle); |
|
225 iVideo->SetFileHandle(iMP4Handle); |
|
226 } |
|
227 |
|
228 void UT_CMccFileAudio::Teardown( ) |
|
229 { |
|
230 if ( iMP4Handle ) |
|
231 { |
|
232 MP4Err error = MP4ParseClose( iMP4Handle ); |
|
233 iMP4Handle = NULL; |
|
234 } |
|
235 |
|
236 delete iVideo; |
|
237 delete iAudio; |
|
238 delete iFileSourceImpl; |
|
239 delete iVideoULDPStub; |
|
240 delete iAudioULDPStub; |
|
241 delete iBuffer; |
|
242 } |
|
243 |
|
244 void UT_CMccFileAudio::UT_CMccFileAudio_NewLL( ) |
|
245 { |
|
246 EUNIT_ASSERT( ETrue ); |
|
247 } |
|
248 |
|
249 void UT_CMccFileAudio::UT_CMccFileAudio_SetPositionLL( ) |
|
250 { |
|
251 iAudio->SetFileHandle(NULL); |
|
252 iAudio->SetPositionL(100); |
|
253 EUNIT_ASSERT_EQUALS( iAudio->Position(), 100 ); |
|
254 |
|
255 iAudio->SetPositionL(200); |
|
256 EUNIT_ASSERT_EQUALS( iAudio->Position(), 200 ); |
|
257 |
|
258 // If position is changed while reader is active, position is changed to nearest iframe |
|
259 iVideo->SetFileHandle(iMP4Handle); |
|
260 iVideo->iIsPaused = EFalse; |
|
261 iVideo->SetPositionL(50); |
|
262 EUNIT_ASSERT( iVideo->Position() != 50 ); |
|
263 |
|
264 // If position setting is called just because resuming (pos not changed while paused), |
|
265 // position is exactly the one which was when pause occured |
|
266 iVideo->iPosition = 50; |
|
267 iVideo->SetPositionL(50, ETrue); |
|
268 EUNIT_ASSERT_EQUALS( iVideo->Position(), 50 ); |
|
269 |
|
270 // If position was changed while paused, position is changed to nearest iframe |
|
271 iVideo->iIsPaused = ETrue; |
|
272 iVideo->SetPositionL(100); |
|
273 EUNIT_ASSERT_EQUALS( iVideo->Position(), 100 ); |
|
274 iVideo->iIsPaused = EFalse; |
|
275 iVideo->SetPositionL(100, ETrue); |
|
276 EUNIT_ASSERT( iVideo->Position() != 100 ); |
|
277 |
|
278 // If position is tried to be set over the end, end pos is used |
|
279 iVideo->iIsPaused = EFalse; |
|
280 TUint32 duration = iVideo->Duration(); |
|
281 iVideo->SetPositionL(duration + 1000, EFalse); |
|
282 EUNIT_ASSERT( iVideo->Position() <= duration ); |
|
283 } |
|
284 |
|
285 void UT_CMccFileAudio::UT_CMccFileAudio_TypeL( ) |
|
286 { |
|
287 CCMRMediaBuffer::TBufferType bufferType1 = iAudio->Type(); |
|
288 CCMRMediaBuffer::TBufferType bufferType2 = iVideo->Type(); |
|
289 } |
|
290 |
|
291 void UT_CMccFileAudio::UT_CMccFileAudio_PositionLL( ) |
|
292 { |
|
293 TUint32 pos = iAudio->Position(); |
|
294 TUint32 pos2 = iVideo->Position(); |
|
295 } |
|
296 |
|
297 void UT_CMccFileAudio::UT_CMccFileAudio_DurationLL( ) |
|
298 { |
|
299 TUint32 duration = iAudio->Duration(); |
|
300 TUint32 duration2 = iVideo->Duration(); |
|
301 } |
|
302 |
|
303 void UT_CMccFileAudio::UT_CMccFileAudio_AudioBitRateLL( ) |
|
304 { |
|
305 TUint32 audioBitRate = iAudio->AudioBitRate(); |
|
306 TUint32 audioBitRate2 = iVideo->AudioBitRate(); |
|
307 } |
|
308 |
|
309 void UT_CMccFileAudio::UT_CMccFileAudio_VideoFrameSizeLL( ) |
|
310 { |
|
311 TSize size = iAudio->VideoFrameSize(); |
|
312 TSize size2 = iVideo->VideoFrameSize(); |
|
313 } |
|
314 |
|
315 void UT_CMccFileAudio::UT_CMccFileAudio_VideoFrameRateLL( ) |
|
316 { |
|
317 TReal videoFrameRate = iAudio->VideoFrameRateL(); |
|
318 TReal videoFrameRate2 = iVideo->VideoFrameRateL(); |
|
319 } |
|
320 |
|
321 void UT_CMccFileAudio::UT_CMccFileAudio_StartTimerL( ) |
|
322 { |
|
323 // Audio |
|
324 iAudio->StartTimerL(); |
|
325 EUNIT_ASSERT( !iAudio->iIsPaused ); |
|
326 TInt posMod = iAudio->iPositionModifier; |
|
327 iAudio->StopTimer(); |
|
328 EUNIT_ASSERT( iAudio->iIsPaused ); |
|
329 |
|
330 User::After( 1000 ); |
|
331 iAudio->StartTimerL(); |
|
332 EUNIT_ASSERT( posMod != iAudio->iPositionModifier ); |
|
333 |
|
334 // Video |
|
335 iVideo->StartTimerL(); |
|
336 EUNIT_ASSERT( !iVideo->iIsPaused ); |
|
337 iVideo->StopTimer(); |
|
338 } |
|
339 |
|
340 void UT_CMccFileAudio::UT_CMccFileAudio_StopTimerL( ) |
|
341 { |
|
342 // Audio |
|
343 iAudio->StartTimerL(); |
|
344 EUNIT_ASSERT( !iAudio->iIsPaused ); |
|
345 iAudio->StopTimer(); |
|
346 EUNIT_ASSERT( iAudio->iIsPaused ); |
|
347 |
|
348 // Video |
|
349 iVideo->StartTimerL(); |
|
350 EUNIT_ASSERT( !iVideo->iIsPaused ); |
|
351 iVideo->StopTimer(); |
|
352 TTime pauseStarted = iVideo->iPauseStarted; |
|
353 EUNIT_ASSERT( iVideo->iIsPaused ); |
|
354 |
|
355 User::After( 1000 ); |
|
356 iVideo->StopTimer(); |
|
357 EUNIT_ASSERT( iVideo->iIsPaused ); |
|
358 EUNIT_ASSERT( pauseStarted == iVideo->iPauseStarted ); |
|
359 } |
|
360 |
|
361 void UT_CMccFileAudio::UT_CMccFileAudio_GetFourCCL( ) |
|
362 { |
|
363 TFourCC fourCC = iAudio->GetFourCC(); |
|
364 TFourCC fourCC2 = iVideo->GetFourCC(); |
|
365 } |
|
366 |
|
367 void UT_CMccFileAudio::UT_CMccFileAudio_ResetTimeL( ) |
|
368 { |
|
369 iAudio->ResetTimeL(); |
|
370 iVideo->ResetTimeL(); |
|
371 } |
|
372 |
|
373 void UT_CMccFileAudio::UT_CMccFileAudio_TickAudioLL( ) |
|
374 { |
|
375 iAudio->TickAudioL(iAudio); |
|
376 iVideo->TickVideoL(iVideo); |
|
377 } |
|
378 |
|
379 void UT_CMccFileAudio::UT_CMccFileAudio_ReadFrameLL( ) |
|
380 { |
|
381 // 3GP clip |
|
382 TInt audioPos = iAudio->iPosition; |
|
383 iAudio->ReadFrameL( EFalse ); |
|
384 EUNIT_ASSERT( iAudio->iPosition >= audioPos ); |
|
385 audioPos = iAudio->iPosition; |
|
386 |
|
387 iAudio->iConsumer = iAudioULDPStub; |
|
388 iAudio->iConsumerBuffer = iBuffer; |
|
389 iAudio->ReadFrameL( ETrue ); |
|
390 EUNIT_ASSERT( iAudio->iPosition > audioPos ); |
|
391 |
|
392 TInt videoPos = iVideo->iPosition; |
|
393 iVideo->ReadFrameL(); |
|
394 EUNIT_ASSERT( iVideo->iPosition >= videoPos ); |
|
395 videoPos = iVideo->iPosition; |
|
396 iVideo->iConsumer = iVideoULDPStub; |
|
397 iVideo->iConsumerBuffer = iBuffer; |
|
398 iVideo->ReadFrameL(); |
|
399 EUNIT_ASSERT( iVideo->iPosition > videoPos ); |
|
400 } |
|
401 |
|
402 void UT_CMccFileAudio::UT_CMccFileAudio_ReadFrameL2L( ) |
|
403 { |
|
404 // MP4 clip |
|
405 TInt audioPos = iAudio->iPosition; |
|
406 iAudio->ReadFrameL( EFalse ); |
|
407 EUNIT_ASSERT( iAudio->iPosition == audioPos ); // No audio |
|
408 |
|
409 TInt videoPos = iVideo->iPosition; |
|
410 iVideo->ReadFrameL(); |
|
411 EUNIT_ASSERT( iVideo->iPosition >= videoPos ); |
|
412 videoPos = iVideo->iPosition; |
|
413 |
|
414 iVideo->ReadFrameL(); |
|
415 EUNIT_ASSERT( iVideo->iPosition > videoPos ); |
|
416 } |
|
417 |
|
418 void UT_CMccFileAudio::UT_CMccFileAudio_ParseUpdateAudioDescriptionsL( ) |
|
419 { |
|
420 iAudio->ParseUpdateAudioDescriptions(iMP4Handle); |
|
421 iVideo->ParseUpdateVideoDescriptions(iMP4Handle); |
|
422 } |
|
423 |
|
424 void UT_CMccFileAudio::UT_CMccFileAudio_GetFrameLengthL() |
|
425 { |
|
426 TBuf8<3> data; |
|
427 data.Append( 42 ); |
|
428 TUint8 dataVal = dataVal & 0x0; |
|
429 data[ 0 ] = dataVal; |
|
430 EUNIT_ASSERT_EQUALS( iAudio->GetFrameLength( data ), 13 ); |
|
431 |
|
432 dataVal = dataVal & 0x0 | ( 0x1 << 3 ); |
|
433 data[ 0 ] = dataVal; |
|
434 EUNIT_ASSERT_EQUALS( iAudio->GetFrameLength( data ), 14 ); |
|
435 |
|
436 dataVal = dataVal & 0x0 | ( 0x2 << 3 ); |
|
437 data[ 0 ] = dataVal; |
|
438 EUNIT_ASSERT_EQUALS( iAudio->GetFrameLength( data ), 16 ); |
|
439 |
|
440 dataVal = dataVal & 0x0 | ( 0x3 << 3 ); |
|
441 data[ 0 ] = dataVal; |
|
442 EUNIT_ASSERT_EQUALS( iAudio->GetFrameLength( data ), 18 ); |
|
443 |
|
444 dataVal = dataVal & 0x0 | ( 0x4 << 3 ); |
|
445 data[ 0 ] = dataVal; |
|
446 EUNIT_ASSERT_EQUALS( iAudio->GetFrameLength( data ), 20 ); |
|
447 |
|
448 dataVal = dataVal & 0x0 | ( 0x5 << 3 ); |
|
449 data[ 0 ] = dataVal; |
|
450 EUNIT_ASSERT_EQUALS( iAudio->GetFrameLength( data ), 21 ); |
|
451 |
|
452 dataVal = dataVal & 0x0 | ( 0x6 << 3 ); |
|
453 data[ 0 ] = dataVal; |
|
454 EUNIT_ASSERT_EQUALS( iAudio->GetFrameLength( data ), 27 ); |
|
455 |
|
456 dataVal = dataVal & 0x0 | ( 0x7 << 3 ); |
|
457 data[ 0 ] = dataVal; |
|
458 EUNIT_ASSERT_EQUALS( iAudio->GetFrameLength( data ), 32 ); |
|
459 |
|
460 dataVal = dataVal & 0x0 | ( 0x8 << 3 ); |
|
461 data[ 0 ] = dataVal; |
|
462 EUNIT_ASSERT_EQUALS( iAudio->GetFrameLength( data ), 6 ); |
|
463 |
|
464 dataVal = dataVal & 0x0 | ( 0xF << 3 ); |
|
465 data[ 0 ] = dataVal; |
|
466 EUNIT_ASSERT_EQUALS( iAudio->GetFrameLength( data ), 1 ); |
|
467 |
|
468 dataVal = dataVal & 0x0 | ( 0x9 << 3 ); |
|
469 data[ 0 ] = dataVal; |
|
470 EUNIT_ASSERT_EQUALS( iAudio->GetFrameLength( data ), 0 ); |
|
471 } |
|
472 |
|
473 void UT_CMccFileAudio::UT_CMccFileAudio_SetStartTimeL() |
|
474 { |
|
475 static_cast<CMccFileSourceTypeBase*>(iAudio)->SetStartTime(); |
|
476 } |
|
477 |
|
478 void UT_CMccFileAudio::UT_CMccFileAudio_IsPausedL() |
|
479 { |
|
480 static_cast<CMccFileSourceTypeBase*>(iAudio)->IsPaused(); |
|
481 } |
|
482 |
|
483 void UT_CMccFileAudio::UT_CMccFileSink_GetTimeStampL() |
|
484 { |
|
485 TTimeIntervalMicroSeconds audioTimestamp = iAudio->GetTimeStamp(100); |
|
486 TTimeIntervalMicroSeconds videoTimestamp = iVideo->GetTimeStamp(); |
|
487 } |
|
488 |
|
489 void UT_CMccFileAudio::UT_CMccFileAudio_FillBufferL() |
|
490 { |
|
491 // Audio |
|
492 iAudio->FillBufferL( iBuffer, iAudioULDPStub ); |
|
493 CMccFrameItem* frame = CreateFrameItemLC( 800 ); |
|
494 iAudio->iFrames.AppendL( frame ); |
|
495 CleanupStack::Pop( frame ); |
|
496 |
|
497 iAudio->FillBufferL( iBuffer, iAudioULDPStub ); |
|
498 EUNIT_ASSERT_EQUALS( iAudio->iFrames.Count(), 0 ); |
|
499 |
|
500 // Video |
|
501 iVideo->FillBufferL( iBuffer, iVideoULDPStub ); |
|
502 frame = CreateFrameItemLC( 800 ); |
|
503 iVideo->iFrames.AppendL( frame ); |
|
504 CleanupStack::Pop( frame ); |
|
505 |
|
506 iVideo->FillBufferL( iBuffer, iVideoULDPStub ); |
|
507 EUNIT_ASSERT_EQUALS( iVideo->iFrames.Count(), 0 ); |
|
508 } |
|
509 |
|
510 void UT_CMccFileAudio::UT_CMccFileAudio_WriteBufferL() |
|
511 { |
|
512 // Audio |
|
513 iAudio->WriteBufferL(); |
|
514 |
|
515 iAudio->FillBufferL( iBuffer, iAudioULDPStub ); |
|
516 CMccFrameItem* frame = CreateFrameItemLC( 800 ); |
|
517 iAudio->iFrames.AppendL( frame ); |
|
518 CleanupStack::Pop( frame ); |
|
519 |
|
520 iAudio->WriteBufferL(); |
|
521 EUNIT_ASSERT_EQUALS( iAudio->iFrames.Count(), 0 ); |
|
522 |
|
523 // Too big frame |
|
524 iAudio->FillBufferL( iBuffer, iAudioULDPStub ); |
|
525 frame = CreateFrameItemLC( 1200 ); |
|
526 iAudio->iFrames.AppendL( frame ); |
|
527 CleanupStack::Pop( frame ); |
|
528 |
|
529 iAudio->WriteBufferL(); |
|
530 EUNIT_ASSERT_EQUALS( iAudio->iFrames.Count(), 0 ); |
|
531 |
|
532 // Video |
|
533 iVideo->WriteBufferL(); |
|
534 |
|
535 iVideo->FillBufferL( iBuffer, iVideoULDPStub ); |
|
536 frame = CreateFrameItemLC( 800 ); |
|
537 iVideo->iFrames.AppendL( frame ); |
|
538 CleanupStack::Pop( frame ); |
|
539 |
|
540 iVideo->WriteBufferL(); |
|
541 EUNIT_ASSERT_EQUALS( iVideo->iFrames.Count(), 0 ); |
|
542 |
|
543 // Too big frame |
|
544 iVideo->FillBufferL( iBuffer, iVideoULDPStub ); |
|
545 frame = CreateFrameItemLC( 1200 ); |
|
546 iVideo->iFrames.AppendL( frame ); |
|
547 CleanupStack::Pop( frame ); |
|
548 |
|
549 iVideo->WriteBufferL(); |
|
550 EUNIT_ASSERT_EQUALS( iVideo->iFrames.Count(), 0 ); |
|
551 |
|
552 // AVC parameter sets exists and are written at first round |
|
553 delete iVideo->iAVCNALUsBuffer; |
|
554 iVideo->iAVCNALUsBuffer = NULL; |
|
555 iVideo->iAVCNALUsBuffer = _L8("somedata").AllocL(); |
|
556 iVideo->iInsertParameterSets = ETrue; |
|
557 iVideo->FillBufferL( iBuffer, iVideoULDPStub ); |
|
558 frame = CreateFrameItemLC( 800 ); |
|
559 iVideo->iFrames.AppendL( frame ); |
|
560 CleanupStack::Pop( frame ); |
|
561 |
|
562 iVideo->WriteBufferL(); |
|
563 // real frame wasn't therefore yet written |
|
564 EUNIT_ASSERT_EQUALS( iVideo->iFrames.Count(), 1 ); |
|
565 EUNIT_ASSERT_EQUALS( iVideo->iInsertParameterSets, EFalse ); |
|
566 TInt64 firstParameterSetsTime = iVideo->iInsertParameterSetsTime.Int64(); |
|
567 EUNIT_ASSERT( firstParameterSetsTime != 0 ); |
|
568 |
|
569 // Next round takes the real frame |
|
570 iVideo->FillBufferL( iBuffer, iVideoULDPStub ); |
|
571 iVideo->WriteBufferL(); |
|
572 EUNIT_ASSERT_EQUALS( iVideo->iFrames.Count(), 0 ); |
|
573 |
|
574 // Once enough time has elapsed, AVC parameter sets are again written |
|
575 // const TUint32 KMccFileSourceParameterSetsIntervalInMicroSeconds = 2000000; |
|
576 iVideo->iInsertParameterSetsTime = ( iVideo->iInsertParameterSetsTime.Int64() - 2000002 ); |
|
577 firstParameterSetsTime = iVideo->iInsertParameterSetsTime.Int64(); |
|
578 |
|
579 iVideo->FillBufferL( iBuffer, iVideoULDPStub ); |
|
580 frame = CreateFrameItemLC( 800 ); |
|
581 iVideo->iFrames.AppendL( frame ); |
|
582 CleanupStack::Pop( frame ); |
|
583 |
|
584 iVideo->WriteBufferL(); |
|
585 EUNIT_ASSERT_EQUALS( iVideo->iFrames.Count(), 0 ); // param sets were not written yet |
|
586 EUNIT_ASSERT_EQUALS( iVideo->iInsertParameterSets, ETrue ); |
|
587 |
|
588 iVideo->FillBufferL( iBuffer, iVideoULDPStub ); |
|
589 frame = CreateFrameItemLC( 800 ); |
|
590 iVideo->iFrames.AppendL( frame ); |
|
591 CleanupStack::Pop( frame ); |
|
592 |
|
593 iVideo->WriteBufferL(); |
|
594 EUNIT_ASSERT_EQUALS( iVideo->iFrames.Count(), 1 ); // parameter sets were written |
|
595 EUNIT_ASSERT_EQUALS( iVideo->iInsertParameterSets, EFalse ); |
|
596 EUNIT_ASSERT( iVideo->iInsertParameterSetsTime.Int64() != firstParameterSetsTime ); |
|
597 |
|
598 } |
|
599 |
|
600 void UT_CMccFileAudio::UT_CMccFileAudio_TimingCorrectionL() |
|
601 { |
|
602 const TInt KMccTestTimerInterval = 100; |
|
603 iAudio->SetStartTime(); |
|
604 iAudio->iTimerInterval = KMccTestTimerInterval; |
|
605 iAudio->DoTimingCorrection( 0 ); // Not enough time has elapsed |
|
606 User::After( 2000100 ); |
|
607 |
|
608 // Enough time has elapsed, correction not needed |
|
609 iAudio->DoTimingCorrection( 2000 ); |
|
610 EUNIT_ASSERT( iAudio->iCorrectionInterval == KMccTestTimerInterval ); |
|
611 |
|
612 // Enough time has elapsed and correction is needed as position is not |
|
613 // far enough (speeding the timer) |
|
614 iAudio->iPreviousCorrection -= TTimeIntervalMicroSeconds32( 2000000 ); |
|
615 iAudio->DoTimingCorrection( 1000 ); |
|
616 |
|
617 EUNIT_ASSERT( iAudio->iCorrectionInterval < KMccTestTimerInterval ); |
|
618 |
|
619 // Enough time has elapsed and correction is needed as position is too |
|
620 // far (slowing the timer) |
|
621 User::After( 2000100 ); |
|
622 iAudio->DoTimingCorrection( 8000 ); |
|
623 EUNIT_ASSERT( iAudio->iCorrectionInterval > KMccTestTimerInterval ); |
|
624 } |
|
625 |
|
626 void UT_CMccFileAudio::UT_CMccFileAudio_ConfigKeyL() |
|
627 { |
|
628 HBufC8* confKey = iVideo->GetConfigKeyL(); |
|
629 CleanupStack::PushL( confKey ); |
|
630 EUNIT_ASSERT( confKey && confKey->Length() > 0 ); |
|
631 |
|
632 |
|
633 // Test also non-sdp version |
|
634 HBufC8* confKey2 = NULL; |
|
635 iVideo->ExtractH264ParameterSetNALUsL( &confKey2 ); |
|
636 CleanupStack::PushL( confKey2 ); |
|
637 EUNIT_ASSERT( confKey2 && confKey2->Length() > 0 ); |
|
638 EUNIT_ASSERT( confKey2->Des().CompareF( *confKey ) != 0 ); |
|
639 |
|
640 CleanupStack::PopAndDestroy( confKey2 ); |
|
641 CleanupStack::PopAndDestroy( confKey ); |
|
642 } |
|
643 |
|
644 CMccFrameItem* UT_CMccFileAudio::CreateFrameItemLC( TInt aSize ) |
|
645 { |
|
646 CMccFrameItem* item = new (ELeave) CMccFrameItem(); |
|
647 CleanupStack::PushL( item ); |
|
648 item->iFrame = HBufC8::NewL( aSize ); |
|
649 item->iTimeStamp = 1000; |
|
650 return item; |
|
651 } |
|
652 |
|
653 // TEST TABLE |
|
654 |
|
655 EUNIT_BEGIN_TEST_TABLE( |
|
656 UT_CMccFileAudio, |
|
657 "Add test suite description here.", |
|
658 "UNIT" ) |
|
659 |
|
660 EUNIT_TEST( |
|
661 "NewL - test ", |
|
662 "CMccFileAudio", |
|
663 "NewL", |
|
664 "FUNCTIONALITY", |
|
665 SetupL, UT_CMccFileAudio_NewLL, Teardown) |
|
666 |
|
667 EUNIT_TEST( |
|
668 "SetPositionL - test ", |
|
669 "CMccFileAudio", |
|
670 "SetPositionL", |
|
671 "FUNCTIONALITY", |
|
672 SetupL, UT_CMccFileAudio_SetPositionLL, Teardown) |
|
673 |
|
674 EUNIT_TEST( |
|
675 "Type - test ", |
|
676 "CMccFileAudio", |
|
677 "Type", |
|
678 "FUNCTIONALITY", |
|
679 SetupL, UT_CMccFileAudio_TypeL, Teardown) |
|
680 |
|
681 EUNIT_TEST( |
|
682 "PositionL - test ", |
|
683 "CMccFileAudio", |
|
684 "PositionL", |
|
685 "FUNCTIONALITY", |
|
686 SetupL, UT_CMccFileAudio_PositionLL, Teardown) |
|
687 |
|
688 EUNIT_TEST( |
|
689 "DurationL - test ", |
|
690 "CMccFileAudio", |
|
691 "DurationL", |
|
692 "FUNCTIONALITY", |
|
693 SetupL, UT_CMccFileAudio_DurationLL, Teardown) |
|
694 |
|
695 EUNIT_TEST( |
|
696 "AudioBitRateL - test ", |
|
697 "CMccFileAudio", |
|
698 "AudioBitRateL", |
|
699 "FUNCTIONALITY", |
|
700 SetupL, UT_CMccFileAudio_AudioBitRateLL, Teardown) |
|
701 |
|
702 EUNIT_TEST( |
|
703 "VideoFrameSizeL - test ", |
|
704 "CMccFileAudio", |
|
705 "VideoFrameSizeL", |
|
706 "FUNCTIONALITY", |
|
707 SetupL, UT_CMccFileAudio_VideoFrameSizeLL, Teardown) |
|
708 |
|
709 EUNIT_TEST( |
|
710 "VideoFrameRateL - test ", |
|
711 "CMccFileAudio", |
|
712 "VideoFrameRateL", |
|
713 "FUNCTIONALITY", |
|
714 SetupL, UT_CMccFileAudio_VideoFrameRateLL, Teardown) |
|
715 |
|
716 EUNIT_TEST( |
|
717 "StartTimer - test ", |
|
718 "CMccFileAudio", |
|
719 "StartTimer", |
|
720 "FUNCTIONALITY", |
|
721 SetupL, UT_CMccFileAudio_StartTimerL, Teardown) |
|
722 |
|
723 EUNIT_TEST( |
|
724 "StopTimer - test ", |
|
725 "CMccFileAudio", |
|
726 "StopTimer", |
|
727 "FUNCTIONALITY", |
|
728 SetupL, UT_CMccFileAudio_StopTimerL, Teardown) |
|
729 |
|
730 EUNIT_TEST( |
|
731 "GetFourCC - test ", |
|
732 "CMccFileAudio", |
|
733 "GetFourCC", |
|
734 "FUNCTIONALITY", |
|
735 SetupL, UT_CMccFileAudio_GetFourCCL, Teardown) |
|
736 |
|
737 EUNIT_TEST( |
|
738 "ResetTime - test ", |
|
739 "CMccFileAudio", |
|
740 "ResetTime", |
|
741 "FUNCTIONALITY", |
|
742 SetupL, UT_CMccFileAudio_ResetTimeL, Teardown) |
|
743 |
|
744 EUNIT_TEST( |
|
745 "TickAudioL - test ", |
|
746 "CMccFileAudio", |
|
747 "TickAudioL", |
|
748 "FUNCTIONALITY", |
|
749 SetupL, UT_CMccFileAudio_TickAudioLL, Teardown) |
|
750 |
|
751 EUNIT_TEST( |
|
752 "ReadFrameL - test ", |
|
753 "CMccFileAudio", |
|
754 "ReadFrameL", |
|
755 "FUNCTIONALITY", |
|
756 SetupL, UT_CMccFileAudio_ReadFrameLL, Teardown) |
|
757 |
|
758 EUNIT_TEST( |
|
759 "ReadFrameL2 - test ", |
|
760 "CMccFileAudio", |
|
761 "ReadFrameL2", |
|
762 "FUNCTIONALITY", |
|
763 Setup2L, UT_CMccFileAudio_ReadFrameL2L, Teardown) |
|
764 |
|
765 EUNIT_TEST( |
|
766 "ParseUpdateAudioDescriptions - test ", |
|
767 "CMccFileAudio", |
|
768 "ParseUpdateAudioDescriptions", |
|
769 "FUNCTIONALITY", |
|
770 SetupL, UT_CMccFileAudio_ParseUpdateAudioDescriptionsL, Teardown) |
|
771 |
|
772 EUNIT_TEST( |
|
773 "GetFrameLengthL - test ", |
|
774 "CMccFileAudio", |
|
775 "GetFrameLengthL", |
|
776 "FUNCTIONALITY", |
|
777 SetupL, UT_CMccFileAudio_GetFrameLengthL, Teardown) |
|
778 |
|
779 EUNIT_TEST( |
|
780 "SetStartTimeL - test ", |
|
781 "CMccFileAudio", |
|
782 "SetStartTimeL", |
|
783 "FUNCTIONALITY", |
|
784 SetupL, UT_CMccFileAudio_SetStartTimeL, Teardown) |
|
785 |
|
786 EUNIT_TEST( |
|
787 "IsPausedL - test ", |
|
788 "CMccFileAudio", |
|
789 "IsPausedL", |
|
790 "FUNCTIONALITY", |
|
791 SetupL, UT_CMccFileAudio_IsPausedL, Teardown) |
|
792 |
|
793 EUNIT_TEST( |
|
794 "GetTimeStampL - test ", |
|
795 "CMccFileAudio", |
|
796 "GetTimeStampL", |
|
797 "FUNCTIONALITY", |
|
798 SetupL, UT_CMccFileSink_GetTimeStampL, Teardown) |
|
799 |
|
800 EUNIT_TEST( |
|
801 "FillBufferL - test ", |
|
802 "CMccFileAudio", |
|
803 "FillBufferL", |
|
804 "FUNCTIONALITY", |
|
805 SetupL, UT_CMccFileAudio_FillBufferL, Teardown) |
|
806 |
|
807 EUNIT_TEST( |
|
808 "WriteBufferL - test ", |
|
809 "CMccFileAudio", |
|
810 "WriteBufferL", |
|
811 "FUNCTIONALITY", |
|
812 SetupL, UT_CMccFileAudio_WriteBufferL, Teardown) |
|
813 |
|
814 EUNIT_TEST( |
|
815 "TimingCorrectionL - test ", |
|
816 "CMccFileAudio", |
|
817 "TimingCorrectionL", |
|
818 "FUNCTIONALITY", |
|
819 SetupL, UT_CMccFileAudio_TimingCorrectionL, Teardown) |
|
820 |
|
821 EUNIT_TEST( |
|
822 "ConfigKeyL - test ", |
|
823 "CMccFileAudio", |
|
824 "ConfigKeyL", |
|
825 "FUNCTIONALITY", |
|
826 Setup3L, UT_CMccFileAudio_ConfigKeyL, Teardown) |
|
827 |
|
828 EUNIT_END_TEST_TABLE |
|
829 |
|
830 // END OF FILE |