multimediacommscontroller/mmccfilesourcesink/tsrc/ut_filesourcesink/Src/UT_CMccFileAudio.cpp
changeset 0 1bce908db942
child 26 bcc434605a01
equal deleted inserted replaced
-1:000000000000 0:1bce908db942
       
     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