From 53474c7d28ec9a1877c54ad8379787091df58e3d Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Fri, 21 Mar 2014 20:29:22 -0400 Subject: [PATCH] Check that the decoder supports high profile H.264 before using it --- .../binding/video/MediaCodecDecoderRenderer.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/com/limelight/binding/video/MediaCodecDecoderRenderer.java b/src/com/limelight/binding/video/MediaCodecDecoderRenderer.java index 06d37b8a..adf54d76 100644 --- a/src/com/limelight/binding/video/MediaCodecDecoderRenderer.java +++ b/src/com/limelight/binding/video/MediaCodecDecoderRenderer.java @@ -11,6 +11,8 @@ import com.limelight.nvstream.av.video.VideoDecoderRenderer; import android.media.MediaCodec; import android.media.MediaCodecInfo; +import android.media.MediaCodecInfo.CodecCapabilities; +import android.media.MediaCodecInfo.CodecProfileLevel; import android.media.MediaCodecList; import android.media.MediaFormat; import android.media.MediaCodec.BufferInfo; @@ -88,11 +90,18 @@ public class MediaCodecDecoderRenderer implements VideoDecoderRenderer { for (String mime : codecInfo.getSupportedTypes()) { if (mime.equalsIgnoreCase("video/avc")) { - LimeLog.info("Selected decoder: "+codecInfo.getName()); + LimeLog.info("Examining decoder capabilities of "+codecInfo.getName()); + + CodecCapabilities caps = codecInfo.getCapabilitiesForType("video/avc"); + for (CodecProfileLevel profile : caps.profileLevels) { + if (profile.profile == CodecProfileLevel.AVCProfileHigh) { + LimeLog.info("Decoder "+codecInfo.getName()+" supports high profile"); return codecInfo; } } } + } + } return null; }