Index: webrtc/api/java/src/org/webrtc/MediaCodecVideoDecoder.java |
diff --git a/webrtc/api/java/src/org/webrtc/MediaCodecVideoDecoder.java b/webrtc/api/java/src/org/webrtc/MediaCodecVideoDecoder.java |
index 41fd0791dccd8249f79b600b0951d373a04e52e4..26b1cf2491bcf82fe471bf5f53b571dda8fe948f 100644 |
--- a/webrtc/api/java/src/org/webrtc/MediaCodecVideoDecoder.java |
+++ b/webrtc/api/java/src/org/webrtc/MediaCodecVideoDecoder.java |
@@ -41,6 +41,7 @@ public class MediaCodecVideoDecoder { |
// possibly to minimize the amount of translation work necessary. |
private static final String TAG = "MediaCodecVideoDecoder"; |
+ private static final long MAX_DECODE_TIME_MS = 200; |
// Tracks webrtc::VideoCodecType. |
public enum VideoCodecType { |
@@ -594,13 +595,19 @@ public class MediaCodecVideoDecoder { |
default: |
hasDecodedFirstFrame = true; |
TimeStamps timeStamps = decodeStartTimeMs.remove(); |
+ long decodeTimeMs = SystemClock.elapsedRealtime() - timeStamps.decodeStartTimeMs; |
+ if (decodeTimeMs > MAX_DECODE_TIME_MS) { |
+ Logging.e(TAG, "Very high decode time: " + decodeTimeMs + "ms." |
+ + " Might be caused by resuming H264 decoding after a pause."); |
+ decodeTimeMs = MAX_DECODE_TIME_MS; |
+ } |
return new DecodedOutputBuffer(result, |
info.offset, |
info.size, |
TimeUnit.MICROSECONDS.toMillis(info.presentationTimeUs), |
timeStamps.timeStampMs, |
timeStamps.ntpTimeStampMs, |
- SystemClock.elapsedRealtime() - timeStamps.decodeStartTimeMs, |
+ decodeTimeMs, |
SystemClock.elapsedRealtime()); |
} |
} |