From 735ad02fb4c16b0a6b512a5f526f75322b63c25c Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Fri, 21 Mar 2014 18:20:55 -0400 Subject: [PATCH] The surface format must be RGBX if we're doing CPU rendering. If the surface is RGB565, the renderer will not properly format the output and the decoder will crash. --- .../limelight/binding/video/AndroidCpuDecoderRenderer.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/com/limelight/binding/video/AndroidCpuDecoderRenderer.java b/src/com/limelight/binding/video/AndroidCpuDecoderRenderer.java index 80523f22..1949449d 100644 --- a/src/com/limelight/binding/video/AndroidCpuDecoderRenderer.java +++ b/src/com/limelight/binding/video/AndroidCpuDecoderRenderer.java @@ -6,6 +6,7 @@ import java.io.FileReader; import java.io.IOException; import java.nio.ByteBuffer; +import android.graphics.PixelFormat; import android.view.SurfaceHolder; import com.limelight.LimeLog; @@ -124,12 +125,15 @@ public class AndroidCpuDecoderRenderer implements VideoDecoderRenderer { LimeLog.info("Using high quality decoding"); } + SurfaceHolder sh = (SurfaceHolder)renderTarget; + sh.setFormat(PixelFormat.RGBX_8888); + int err = AvcDecoder.init(width, height, avcFlags, threadCount); if (err != 0) { throw new IllegalStateException("AVC decoder initialization failure: "+err); } - AvcDecoder.setRenderTarget(((SurfaceHolder)renderTarget).getSurface()); + AvcDecoder.setRenderTarget(sh.getSurface()); decoderBuffer = ByteBuffer.allocate(DECODER_BUFFER_SIZE + AvcDecoder.getInputPaddingSize());