From fa847ef2fc5886438ccf52f4ce98531cdf6d1149 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Fri, 17 Oct 2014 14:45:58 -0700 Subject: [PATCH] Ensure that no input buffers will ever be submitted with the same timestamp per SDK docs --- .../binding/video/MediaCodecDecoderRenderer.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/com/limelight/binding/video/MediaCodecDecoderRenderer.java b/src/com/limelight/binding/video/MediaCodecDecoderRenderer.java index 03f6e7e3..a6411fa5 100644 --- a/src/com/limelight/binding/video/MediaCodecDecoderRenderer.java +++ b/src/com/limelight/binding/video/MediaCodecDecoderRenderer.java @@ -39,6 +39,7 @@ public class MediaCodecDecoderRenderer implements VideoDecoderRenderer { private boolean adaptivePlayback; private int initialWidth, initialHeight; + private long lastTimestampUs; private long totalTimeMs; private long decoderTimeMs; private int totalFrames; @@ -463,6 +464,14 @@ public class MediaCodecDecoderRenderer implements VideoDecoderRenderer { totalFrames++; } + long timestampUs = currentTime * 1000; + if (timestampUs == lastTimestampUs) { + // We can't submit multiple buffers with the same timestamp + // so bump it up by one before queuing + timestampUs = lastTimestampUs + 1; + } + lastTimestampUs = timestampUs; + // Clear old input data buf.clear(); @@ -521,7 +530,7 @@ public class MediaCodecDecoderRenderer implements VideoDecoderRenderer { try { videoDecoder.queueInputBuffer(inputBufferIndex, 0, buf.position(), - currentTime * 1000, codecFlags); + timestampUs, codecFlags); } catch (Exception e) { throw new RendererException(this, e, buf, codecFlags); } @@ -542,7 +551,7 @@ public class MediaCodecDecoderRenderer implements VideoDecoderRenderer { try { videoDecoder.queueInputBuffer(inputBufferIndex, 0, decodeUnit.getDataLength(), - currentTime * 1000, codecFlags); + timestampUs, codecFlags); } catch (Exception e) { throw new RendererException(this, e, buf, codecFlags); }