Revision: 201034 RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 15 Sep 2010 12:38:06 +0300
branchRCL_3
changeset 55 f72c4fccd381
parent 46 4da1f672912e
child 59 b0e4b01681c5
Revision: 201034 Kit: 201036
multimediacommscontroller/mmccfilesourcesink/inc/mccfilesink.h
multimediacommscontroller/mmccfilesourcesink/src/mccfilesink.cpp
multimediacommscontroller/mmccfilesourcesink/tsrc/ut_filesourcesink/Inc/UT_CMccFileSink.h
multimediacommscontroller/mmccfilesourcesink/tsrc/ut_filesourcesink/Src/UT_CMccFileSink.cpp
--- a/multimediacommscontroller/mmccfilesourcesink/inc/mccfilesink.h	Wed Sep 01 12:20:28 2010 +0100
+++ b/multimediacommscontroller/mmccfilesourcesink/inc/mccfilesink.h	Wed Sep 15 12:38:06 2010 +0300
@@ -230,6 +230,8 @@
 	   	
 	   	TBool iDecSpecInfoProvided;
 	   	TBool iKeyFrameProvided;
+	   	
+	   	TInt64 iCurrAvgTimestampDifference;
 
 	#ifdef EUNIT_TEST
         friend class UT_CMccFileSink;
--- a/multimediacommscontroller/mmccfilesourcesink/src/mccfilesink.cpp	Wed Sep 01 12:20:28 2010 +0100
+++ b/multimediacommscontroller/mmccfilesourcesink/src/mccfilesink.cpp	Wed Sep 15 12:38:06 2010 +0300
@@ -33,7 +33,8 @@
 
 const TInt KMccMaxNumTimestamps = 5;
 
-const TInt KMccTimestampDifferenceMultiplier = 10;
+// used for Calculate Average Timestamp
+const TInt KMccDefaultAvgTimestampDiff = 66000;
 
 // ============================ MEMBER FUNCTIONS ===============================
 
@@ -71,7 +72,8 @@
 // -----------------------------------------------------------------------------
 //
 CMccFileSink::CMccFileSink() : 
-    CMccDataSink( KMccFileSinkUid )
+    CMccDataSink( KMccFileSinkUid ),
+    iCurrAvgTimestampDifference( KMccDefaultAvgTimestampDiff )
     {
     iVideoCodec.iFourCC = TFourCC( KMccFourCCIdH263 );
     // FJKI-7J58CB no use case for audio in file, hence removing the audio track capability 
@@ -565,6 +567,10 @@
                
        averageTimeStampDifference = averageTimeStampDifference / ( KMccMaxNumTimestamps - 1 );
        }
+    if ( averageTimeStampDifference > 0 )
+	   {
+	   iCurrAvgTimestampDifference = averageTimeStampDifference;
+       }
     
     if ( aCurrentTimestamp > iPreviousTimestamp )
        {
@@ -574,19 +580,19 @@
            }
        iTimestamps.AppendL( aCurrentTimestamp.Int64() );
        }
-    else
+    else if ( aCurrentTimestamp < iPreviousTimestamp )
        {
-       TInt64 currDifference = iPreviousTimestamp.Int64() - aCurrentTimestamp.Int64();
-       if ( averageTimeStampDifference != 0 && 
-            currDifference > ( averageTimeStampDifference * KMccTimestampDifferenceMultiplier ) )
-           {
-           iAddToTimestamp += ( currDifference + averageTimeStampDifference );
-           iTimestamps.Reset();
-		   iPausedDuration = 0;
+	   TInt64 currDifference = iPreviousTimestamp.Int64() - aCurrentTimestamp.Int64();
+       iAddToTimestamp += ( currDifference + iCurrAvgTimestampDifference );
+       iTimestamps.Reset();
+       iPausedDuration = 0;
            
-           __FILESINK_CONTROLL_INT1("CMccFileSink::TimeToPlay, iAddToTimestamp=", iAddToTimestamp )  
-           }
+       __FILESINK_CONTROLL_INT1("CMccFileSink::TimeToPlay, iAddToTimestamp=", iAddToTimestamp )  
        }
+    else
+        {
+        // NOP
+        }
     }
 
 // -----------------------------------------------------------------------------
--- a/multimediacommscontroller/mmccfilesourcesink/tsrc/ut_filesourcesink/Inc/UT_CMccFileSink.h	Wed Sep 01 12:20:28 2010 +0100
+++ b/multimediacommscontroller/mmccfilesourcesink/tsrc/ut_filesourcesink/Inc/UT_CMccFileSink.h	Wed Sep 15 12:38:06 2010 +0300
@@ -141,6 +141,8 @@
          
          void UT_CMccFileSink_UpdateActiveUserL();
          
+         void UT_CMccFileSink_CalculateAverageTimestampDifferenceL();
+         
     private: // Helpers
     
          CMccTestEventHandler* AddUserL( TBool aIsAvc = EFalse );
--- a/multimediacommscontroller/mmccfilesourcesink/tsrc/ut_filesourcesink/Src/UT_CMccFileSink.cpp	Wed Sep 01 12:20:28 2010 +0100
+++ b/multimediacommscontroller/mmccfilesourcesink/tsrc/ut_filesourcesink/Src/UT_CMccFileSink.cpp	Wed Sep 15 12:38:06 2010 +0300
@@ -613,6 +613,41 @@
     EUNIT_ASSERT_EQUALS( iFileSink->iActiveUserIndex, 1 );
     EUNIT_ASSERT( iFileSink->iAsyncEventHandler == iEventHandler2 );
     }
+
+void UT_CMccFileSink::UT_CMccFileSink_CalculateAverageTimestampDifferenceL()
+	{
+	const TInt KMccMaxNumTimestamps = 5;
+	const TInt KMccTimestampDifferenceMultiplier = 10;
+	TInt originalTime(1000);
+	TInt timeIncrement(1000);
+	
+	iFileSink->iCurrAvgTimestampDifference = 0;
+
+	// Ask so long that average timestamp difference can be calculated
+	for (TInt i = 0; i < (KMccTimestampDifferenceMultiplier + 2); i++)
+		{
+		TTimeIntervalMicroSeconds timeToPlay = iFileSink->TimeToPlayL(
+				TTimeIntervalMicroSeconds(originalTime));
+
+		EUNIT_ASSERT_EQUALS( timeToPlay.Int64(), originalTime );
+
+		originalTime += timeIncrement;
+		}
+
+	EUNIT_ASSERT_EQUALS( iFileSink->iTimestamps.Count(), KMccMaxNumTimestamps );
+	EUNIT_ASSERT_GREATER( iFileSink->iCurrAvgTimestampDifference, 0 );
+	
+	iFileSink->iTimestamps.Reset();
+	iFileSink->iPreviousTimestamp = 500;
+	iFileSink->TimeToPlayL( TTimeIntervalMicroSeconds( originalTime ) );
+	EUNIT_ASSERT_GREATER( iFileSink->iTimestamps.Count(), 0 );
+	
+	originalTime = 1000;
+	iFileSink->iAddToTimestamp = 0;
+	iFileSink->iPreviousTimestamp = 1010;
+	iFileSink->TimeToPlayL( TTimeIntervalMicroSeconds( originalTime ) );
+	EUNIT_ASSERT_GREATER( iFileSink->iAddToTimestamp, 0 );
+	}
     
 // HELPERS
 
@@ -812,6 +847,13 @@
     "UpdateActiveUserL",
     "FUNCTIONALITY",
     SetupL, UT_CMccFileSink_UpdateActiveUserL, Teardown)    
+    
+EUNIT_TEST(
+    "CalculateAverageTimestampDifferenceL - test ",
+    "CMccFileSink",
+    "CalculateAverageTimestampDifferenceL",
+    "FUNCTIONALITY",
+    SetupL, UT_CMccFileSink_CalculateAverageTimestampDifferenceL, Teardown)
    
 EUNIT_END_TEST_TABLE