Loading media/libstagefright/rtsp/JitterCalculator.cpp +11 −17 Original line number Diff line number Diff line Loading @@ -38,14 +38,13 @@ void JitterCalc::init(uint32_t rtpTime, int64_t arrivalTimeUs, int32_t base, int mInterArrivalJitterUs = inter; } void JitterCalc::putBaseData(int64_t rtpTime, int64_t arrivalTimeUs) { // A RTP time wraps around after UINT32_MAX. We must consider this case. const int64_t UINT32_MSB = 0x80000000; int64_t overflowMask = (mFirstTimeStamp & UINT32_MSB & ~rtpTime) << 1; int64_t tempRtpTime = overflowMask | rtpTime; void JitterCalc::putBaseData(uint32_t rtpTime, int64_t arrivalTimeUs) { // A RTP time wraps around after UINT32_MAX. Overflow can present. uint32_t diff = 0; __builtin_usub_overflow(rtpTime, mFirstTimeStamp, &diff); // Base jitter implementation can be various int64_t scheduledTimeUs = (tempRtpTime - (int64_t)mFirstTimeStamp) * 1000000ll / mClockRate; int64_t scheduledTimeUs = ((int32_t)diff) * 1000000ll / mClockRate; int64_t elapsedTimeUs = arrivalTimeUs - mFirstArrivalTimeUs; int64_t correctionTimeUs = elapsedTimeUs - scheduledTimeUs; // additional propagation delay; mBaseJitterUs = (mBaseJitterUs * 15 + correctionTimeUs) / 16; Loading @@ -53,18 +52,13 @@ void JitterCalc::putBaseData(int64_t rtpTime, int64_t arrivalTimeUs) { (long long)mBaseJitterUs, (long long)correctionTimeUs); } void JitterCalc::putInterArrivalData(int64_t rtpTime, int64_t arrivalTimeUs) { const int64_t UINT32_MSB = 0x80000000; int64_t tempRtpTime = rtpTime; int64_t tempLastTimeStamp = mLastTimeStamp; // A RTP time wraps around after UINT32_MAX. We must consider this case. int64_t overflowMask = (mLastTimeStamp ^ rtpTime) & UINT32_MSB; tempRtpTime |= ((overflowMask & ~rtpTime) << 1); tempLastTimeStamp |= ((overflowMask & ~mLastTimeStamp) << 1); void JitterCalc::putInterArrivalData(uint32_t rtpTime, int64_t arrivalTimeUs) { // A RTP time wraps around after UINT32_MAX. Overflow can present. uint32_t diff = 0; __builtin_usub_overflow(rtpTime, mLastTimeStamp, &diff); // 6.4.1 of RFC3550 defines this interarrival jitter value. int64_t diffTimeStampUs = abs(tempRtpTime - tempLastTimeStamp) * 1000000ll / mClockRate; int64_t diffTimeStampUs = abs((int32_t)diff) * 1000000ll / mClockRate; int64_t diffArrivalUs = arrivalTimeUs - mLastArrivalTimeUs; // Can't be minus ALOGV("diffTimeStampUs %lld \t\t diffArrivalUs %lld", (long long)diffTimeStampUs, (long long)diffArrivalUs); Loading @@ -72,7 +66,7 @@ void JitterCalc::putInterArrivalData(int64_t rtpTime, int64_t arrivalTimeUs) { int64_t varianceUs = diffArrivalUs - diffTimeStampUs; mInterArrivalJitterUs = (mInterArrivalJitterUs * 15 + abs(varianceUs)) / 16; mLastTimeStamp = (uint32_t)rtpTime; mLastTimeStamp = rtpTime; mLastArrivalTimeUs = arrivalTimeUs; } Loading media/libstagefright/rtsp/JitterCalculator.h +2 −2 Original line number Diff line number Diff line Loading @@ -40,8 +40,8 @@ public: JitterCalc(int32_t clockRate); void init(uint32_t rtpTime, int64_t arrivalTimeUs, int32_t base, int32_t inter); void putInterArrivalData(int64_t rtpTime, int64_t arrivalTime); void putBaseData(int64_t rtpTime, int64_t arrivalTimeUs); void putInterArrivalData(uint32_t rtpTime, int64_t arrivalTime); void putBaseData(uint32_t rtpTime, int64_t arrivalTimeUs); int32_t getBaseJitterMs(); int32_t getInterArrivalJitterMs(); }; Loading Loading
media/libstagefright/rtsp/JitterCalculator.cpp +11 −17 Original line number Diff line number Diff line Loading @@ -38,14 +38,13 @@ void JitterCalc::init(uint32_t rtpTime, int64_t arrivalTimeUs, int32_t base, int mInterArrivalJitterUs = inter; } void JitterCalc::putBaseData(int64_t rtpTime, int64_t arrivalTimeUs) { // A RTP time wraps around after UINT32_MAX. We must consider this case. const int64_t UINT32_MSB = 0x80000000; int64_t overflowMask = (mFirstTimeStamp & UINT32_MSB & ~rtpTime) << 1; int64_t tempRtpTime = overflowMask | rtpTime; void JitterCalc::putBaseData(uint32_t rtpTime, int64_t arrivalTimeUs) { // A RTP time wraps around after UINT32_MAX. Overflow can present. uint32_t diff = 0; __builtin_usub_overflow(rtpTime, mFirstTimeStamp, &diff); // Base jitter implementation can be various int64_t scheduledTimeUs = (tempRtpTime - (int64_t)mFirstTimeStamp) * 1000000ll / mClockRate; int64_t scheduledTimeUs = ((int32_t)diff) * 1000000ll / mClockRate; int64_t elapsedTimeUs = arrivalTimeUs - mFirstArrivalTimeUs; int64_t correctionTimeUs = elapsedTimeUs - scheduledTimeUs; // additional propagation delay; mBaseJitterUs = (mBaseJitterUs * 15 + correctionTimeUs) / 16; Loading @@ -53,18 +52,13 @@ void JitterCalc::putBaseData(int64_t rtpTime, int64_t arrivalTimeUs) { (long long)mBaseJitterUs, (long long)correctionTimeUs); } void JitterCalc::putInterArrivalData(int64_t rtpTime, int64_t arrivalTimeUs) { const int64_t UINT32_MSB = 0x80000000; int64_t tempRtpTime = rtpTime; int64_t tempLastTimeStamp = mLastTimeStamp; // A RTP time wraps around after UINT32_MAX. We must consider this case. int64_t overflowMask = (mLastTimeStamp ^ rtpTime) & UINT32_MSB; tempRtpTime |= ((overflowMask & ~rtpTime) << 1); tempLastTimeStamp |= ((overflowMask & ~mLastTimeStamp) << 1); void JitterCalc::putInterArrivalData(uint32_t rtpTime, int64_t arrivalTimeUs) { // A RTP time wraps around after UINT32_MAX. Overflow can present. uint32_t diff = 0; __builtin_usub_overflow(rtpTime, mLastTimeStamp, &diff); // 6.4.1 of RFC3550 defines this interarrival jitter value. int64_t diffTimeStampUs = abs(tempRtpTime - tempLastTimeStamp) * 1000000ll / mClockRate; int64_t diffTimeStampUs = abs((int32_t)diff) * 1000000ll / mClockRate; int64_t diffArrivalUs = arrivalTimeUs - mLastArrivalTimeUs; // Can't be minus ALOGV("diffTimeStampUs %lld \t\t diffArrivalUs %lld", (long long)diffTimeStampUs, (long long)diffArrivalUs); Loading @@ -72,7 +66,7 @@ void JitterCalc::putInterArrivalData(int64_t rtpTime, int64_t arrivalTimeUs) { int64_t varianceUs = diffArrivalUs - diffTimeStampUs; mInterArrivalJitterUs = (mInterArrivalJitterUs * 15 + abs(varianceUs)) / 16; mLastTimeStamp = (uint32_t)rtpTime; mLastTimeStamp = rtpTime; mLastArrivalTimeUs = arrivalTimeUs; } Loading
media/libstagefright/rtsp/JitterCalculator.h +2 −2 Original line number Diff line number Diff line Loading @@ -40,8 +40,8 @@ public: JitterCalc(int32_t clockRate); void init(uint32_t rtpTime, int64_t arrivalTimeUs, int32_t base, int32_t inter); void putInterArrivalData(int64_t rtpTime, int64_t arrivalTime); void putBaseData(int64_t rtpTime, int64_t arrivalTimeUs); void putInterArrivalData(uint32_t rtpTime, int64_t arrivalTime); void putBaseData(uint32_t rtpTime, int64_t arrivalTimeUs); int32_t getBaseJitterMs(); int32_t getInterArrivalJitterMs(); }; Loading