From 3236c0b93a135c2b18e8e4c3df210c6d2f7e5c24 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Mon, 1 Dec 2014 22:58:52 -0800 Subject: [PATCH] Lower the level_idc of the SPS to the minimum required for streaming at a given resolution --- .../video/MediaCodecDecoderRenderer.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) 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 5af027e0..178f8662 100644 --- a/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java +++ b/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java @@ -410,6 +410,23 @@ public class MediaCodecDecoderRenderer extends EnhancedDecoderRenderer { spsBuf.position(header.offset+5); SeqParameterSet sps = SeqParameterSet.read(spsBuf); + + // Some decoders rely on H264 level to decide how many buffers are needed + // Since we only need one frame buffered, we'll set the level as low as we can + // for known resolution combinations + if (initialWidth == 1280 && initialHeight == 720) { + // Max 5 buffered frames at 1280x720x60 + LimeLog.info("Patching level_idc to 32"); + sps.level_idc = 32; + } + else if (initialWidth == 1920 && initialHeight == 1080) { + // Max 4 buffered frames at 1920x1080x64 + LimeLog.info("Patching level_idc to 42"); + sps.level_idc = 42; + } + else { + // Leave the profile alone (currently 5.0) + } // TI OMAP4 requires a reference frame count of 1 to decode successfully. Exynos 4 // also requires this fixup.