# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1284543486 -10800 # Node ID f72c4fccd381660800b86e2111bded888ed53b5f # Parent 4da1f672912e29c1b06945034f5376eecb4c5f17 Revision: 201034 Kit: 201036 diff -r 4da1f672912e -r f72c4fccd381 multimediacommscontroller/mmccfilesourcesink/inc/mccfilesink.h --- 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; diff -r 4da1f672912e -r f72c4fccd381 multimediacommscontroller/mmccfilesourcesink/src/mccfilesink.cpp --- 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 + } } // ----------------------------------------------------------------------------- diff -r 4da1f672912e -r f72c4fccd381 multimediacommscontroller/mmccfilesourcesink/tsrc/ut_filesourcesink/Inc/UT_CMccFileSink.h --- 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 ); diff -r 4da1f672912e -r f72c4fccd381 multimediacommscontroller/mmccfilesourcesink/tsrc/ut_filesourcesink/Src/UT_CMccFileSink.cpp --- 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