From 702376078280546f27d69c68b910b2e22782dfe5 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Mon, 17 Aug 2015 18:40:25 -0700 Subject: [PATCH] Use monotonic system time for rendering timestamps. This is required now in Android 6.0 since these timestamps are propagated to the codec. --- app/libs/limelight-common.jar | Bin 1008810 -> 1009379 bytes .../video/AndroidCpuDecoderRenderer.java | 8 +++---- .../video/MediaCodecDecoderRenderer.java | 20 +++++++++--------- .../binding/video/MediaCodecHelper.java | 4 ++++ 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/app/libs/limelight-common.jar b/app/libs/limelight-common.jar index b97c16b5f0c24e3053acd4cc3b9385a1a989d869..86da8155b2e47c0b5fec809d95a20f7dfa4f2444 100644 GIT binary patch delta 20824 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 TK`-GtLio=$=Wvn$<#7HFcY74^ delta 20336 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 WAIT_CEILING_MS) { try { @@ -203,7 +203,7 @@ public class AndroidCpuDecoderRenderer extends EnhancedDecoderRenderer { } private long computePresentationTimeMs(int frameRate) { - return System.currentTimeMillis() + (1000 / frameRate); + return MediaCodecHelper.getMonotonicMillis() + (1000 / frameRate); } @Override @@ -251,7 +251,7 @@ public class AndroidCpuDecoderRenderer extends EnhancedDecoderRenderer { boolean success = (AvcDecoder.decode(data, 0, decodeUnit.getDataLength()) == 0); if (success) { - long timeAfterDecode = System.currentTimeMillis(); + long timeAfterDecode = MediaCodecHelper.getMonotonicMillis(); // Add delta time to the totals (excluding probable outliers) long delta = timeAfterDecode - decodeUnit.getReceiveTimestamp(); diff --git a/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java b/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java index 6f555f7f..0d51caa5 100644 --- a/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java +++ b/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java @@ -169,7 +169,7 @@ public class MediaCodecDecoderRenderer extends EnhancedDecoderRenderer { videoDecoder.releaseOutputBuffer(lastIndex, true); // Add delta time to the totals (excluding probable outliers) - long delta = System.currentTimeMillis() - (presentationTimeUs / 1000); + long delta = MediaCodecHelper.getMonotonicMillis() - (presentationTimeUs / 1000); if (delta >= 0 && delta < 1000) { decoderTimeMs += delta; totalTimeMs += delta; @@ -201,14 +201,14 @@ public class MediaCodecDecoderRenderer extends EnhancedDecoderRenderer { int index; long startTime, queueTime; - startTime = System.currentTimeMillis(); + startTime = MediaCodecHelper.getMonotonicMillis(); index = videoDecoder.dequeueInputBuffer(wait ? (infiniteWait ? -1 : 3000) : 0); if (index < 0) { return index; } - queueTime = System.currentTimeMillis(); + queueTime = MediaCodecHelper.getMonotonicMillis(); if (queueTime - startTime >= 20) { LimeLog.warning("Queue input buffer ran long: " + (queueTime - startTime) + " ms"); @@ -236,7 +236,7 @@ public class MediaCodecDecoderRenderer extends EnhancedDecoderRenderer { inputIndex = dequeueInputBuffer(false, false); du = depacketizer.pollNextDecodeUnit(); if (du != null) { - lastDuDequeueTime = System.currentTimeMillis(); + lastDuDequeueTime = MediaCodecHelper.getMonotonicMillis(); notifyDuReceived(du); } @@ -278,7 +278,7 @@ public class MediaCodecDecoderRenderer extends EnhancedDecoderRenderer { if (du == null) { du = depacketizer.pollNextDecodeUnit(); if (du != null) { - lastDuDequeueTime = System.currentTimeMillis(); + lastDuDequeueTime = MediaCodecHelper.getMonotonicMillis(); notifyDuReceived(du); } } @@ -286,7 +286,7 @@ public class MediaCodecDecoderRenderer extends EnhancedDecoderRenderer { // If we've got both a decode unit and an input buffer, we'll // submit now. Otherwise, we wait until we have one. if (du != null && inputIndex >= 0) { - long submissionTime = System.currentTimeMillis(); + long submissionTime = MediaCodecHelper.getMonotonicMillis(); if (submissionTime - lastDuDequeueTime >= 20) { LimeLog.warning("Receiving an input buffer took too long: "+(submissionTime - lastDuDequeueTime)+" ms"); } @@ -317,7 +317,7 @@ public class MediaCodecDecoderRenderer extends EnhancedDecoderRenderer { videoDecoder.releaseOutputBuffer(lastIndex, true); // Add delta time to the totals (excluding probable outliers) - long delta = System.currentTimeMillis()-(presentationTimeUs/1000); + long delta = MediaCodecHelper.getMonotonicMillis()-(presentationTimeUs/1000); if (delta >= 0 && delta < 1000) { decoderTimeMs += delta; totalTimeMs += delta; @@ -435,7 +435,7 @@ public class MediaCodecDecoderRenderer extends EnhancedDecoderRenderer { @SuppressWarnings("deprecation") private void submitDecodeUnit(DecodeUnit decodeUnit, int inputBufferIndex) { - long timestampUs = System.currentTimeMillis() * 1000; + long timestampUs = System.nanoTime() / 1000; if (timestampUs <= lastTimestampUs) { // We can't submit multiple buffers with the same timestamp // so bump it up by one before queuing @@ -608,7 +608,7 @@ public class MediaCodecDecoderRenderer extends EnhancedDecoderRenderer { // Queue the new SPS queueInputBuffer(inputIndex, 0, inputBuffer.position(), - System.currentTimeMillis() * 1000, + System.nanoTime() / 1000, MediaCodec.BUFFER_FLAG_CODEC_CONFIG); LimeLog.info("SPS replay complete"); @@ -649,7 +649,7 @@ public class MediaCodecDecoderRenderer extends EnhancedDecoderRenderer { } private void notifyDuReceived(DecodeUnit du) { - long currentTime = System.currentTimeMillis(); + long currentTime = MediaCodecHelper.getMonotonicMillis(); long delta = currentTime-du.getReceiveTimestamp(); if (delta >= 0 && delta < 1000) { totalTimeMs += currentTime-du.getReceiveTimestamp(); diff --git a/app/src/main/java/com/limelight/binding/video/MediaCodecHelper.java b/app/src/main/java/com/limelight/binding/video/MediaCodecHelper.java index 0b0b48e6..daba5c10 100644 --- a/app/src/main/java/com/limelight/binding/video/MediaCodecHelper.java +++ b/app/src/main/java/com/limelight/binding/video/MediaCodecHelper.java @@ -83,6 +83,10 @@ public class MediaCodecHelper { return false; } + + public static long getMonotonicMillis() { + return System.nanoTime() / 1000000L; + } @TargetApi(Build.VERSION_CODES.KITKAT) public static boolean decoderSupportsAdaptivePlayback(String decoderName, MediaCodecInfo decoderInfo) {