--- 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