# HG changeset patch
# User hgs
# Date 1283512392 -10800
# Node ID c4cbfcae3f52626c577c0346299a53d4e334bdc1
# Parent fb024d5e35fa8038bfc031be0cf6dfd99eaa9a95
201035
diff -r fb024d5e35fa -r c4cbfcae3f52 multimediacommscontroller/mmccfilesourcesink/inc/mccfilesink.h
--- a/multimediacommscontroller/mmccfilesourcesink/inc/mccfilesink.h Mon Aug 23 17:50:26 2010 +0300
+++ b/multimediacommscontroller/mmccfilesourcesink/inc/mccfilesink.h Fri Sep 03 14:13:12 2010 +0300
@@ -230,6 +230,8 @@
TBool iDecSpecInfoProvided;
TBool iKeyFrameProvided;
+
+ TInt64 iCurrAvgTimestampDifference;
#ifdef EUNIT_TEST
friend class UT_CMccFileSink;
diff -r fb024d5e35fa -r c4cbfcae3f52 multimediacommscontroller/mmccfilesourcesink/src/mccfilesink.cpp
--- a/multimediacommscontroller/mmccfilesourcesink/src/mccfilesink.cpp Mon Aug 23 17:50:26 2010 +0300
+++ b/multimediacommscontroller/mmccfilesourcesink/src/mccfilesink.cpp Fri Sep 03 14:13:12 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 fb024d5e35fa -r c4cbfcae3f52 multimediacommscontroller/mmccfilesourcesink/tsrc/ut_filesourcesink/Inc/UT_CMccFileSink.h
--- a/multimediacommscontroller/mmccfilesourcesink/tsrc/ut_filesourcesink/Inc/UT_CMccFileSink.h Mon Aug 23 17:50:26 2010 +0300
+++ b/multimediacommscontroller/mmccfilesourcesink/tsrc/ut_filesourcesink/Inc/UT_CMccFileSink.h Fri Sep 03 14:13:12 2010 +0300
@@ -141,6 +141,8 @@
void UT_CMccFileSink_UpdateActiveUserL();
+ void UT_CMccFileSink_CalculateAverageTimestampDifferenceL();
+
private: // Helpers
CMccTestEventHandler* AddUserL( TBool aIsAvc = EFalse );
diff -r fb024d5e35fa -r c4cbfcae3f52 multimediacommscontroller/mmccfilesourcesink/tsrc/ut_filesourcesink/Src/UT_CMccFileSink.cpp
--- a/multimediacommscontroller/mmccfilesourcesink/tsrc/ut_filesourcesink/Src/UT_CMccFileSink.cpp Mon Aug 23 17:50:26 2010 +0300
+++ b/multimediacommscontroller/mmccfilesourcesink/tsrc/ut_filesourcesink/Src/UT_CMccFileSink.cpp Fri Sep 03 14:13:12 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
diff -r fb024d5e35fa -r c4cbfcae3f52 package_definition.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/package_definition.xml Fri Sep 03 14:13:12 2010 +0300
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r fb024d5e35fa -r c4cbfcae3f52 package_map.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/package_map.xml Fri Sep 03 14:13:12 2010 +0300
@@ -0,0 +1,1 @@
+