From 17afbffdb5edded9bff483e77f4c1ea39a55528b Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Wed, 25 Mar 2015 01:08:23 -0400 Subject: [PATCH] Include the time it takes to get an input buffer in the frame latency calculation --- .../video/MediaCodecDecoderRenderer.java | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) 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 5cdc51b1..13c2ad85 100644 --- a/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java +++ b/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java @@ -239,13 +239,13 @@ public class MediaCodecDecoderRenderer extends EnhancedDecoderRenderer { for (int i = 0; i < 5; i++) { inputIndex = dequeueInputBuffer(false, false); du = depacketizer.pollNextDecodeUnit(); + if (du != null) { + lastDuDequeueTime = System.currentTimeMillis(); + notifyDuReceived(du); + } // Stop if we can't get a DU or input buffer if (du == null || inputIndex == -1) { - if (du != null) { - lastDuDequeueTime = System.currentTimeMillis(); - } - break; } @@ -283,6 +283,7 @@ public class MediaCodecDecoderRenderer extends EnhancedDecoderRenderer { du = depacketizer.pollNextDecodeUnit(); if (du != null) { lastDuDequeueTime = System.currentTimeMillis(); + notifyDuReceived(du); } } @@ -421,14 +422,7 @@ public class MediaCodecDecoderRenderer extends EnhancedDecoderRenderer { @SuppressWarnings("deprecation") private void submitDecodeUnit(DecodeUnit decodeUnit, ByteBuffer buf, int inputBufferIndex) { - long currentTime = System.currentTimeMillis(); - long delta = currentTime-decodeUnit.getReceiveTimestamp(); - if (delta >= 0 && delta < 1000) { - totalTimeMs += currentTime-decodeUnit.getReceiveTimestamp(); - totalFrames++; - } - - long timestampUs = currentTime * 1000; + long timestampUs = System.currentTimeMillis() * 1000; if (timestampUs <= lastTimestampUs) { // We can't submit multiple buffers with the same timestamp // so bump it up by one before queuing @@ -614,10 +608,21 @@ public class MediaCodecDecoderRenderer extends EnhancedDecoderRenderer { return decoderName; } + private void notifyDuReceived(DecodeUnit du) { + long currentTime = System.currentTimeMillis(); + long delta = currentTime-du.getReceiveTimestamp(); + if (delta >= 0 && delta < 1000) { + totalTimeMs += currentTime-du.getReceiveTimestamp(); + totalFrames++; + } + } + @Override public void directSubmitDecodeUnit(DecodeUnit du) { int inputIndex; + notifyDuReceived(du); + for (;;) { try { inputIndex = dequeueInputBuffer(true, true);