diff --git a/src/com/limelight/Game.java b/src/com/limelight/Game.java index cecfecef..da0f28d3 100644 --- a/src/com/limelight/Game.java +++ b/src/com/limelight/Game.java @@ -164,13 +164,6 @@ public class Game extends Activity implements SurfaceHolder.Callback, OnGenericM SurfaceView sv = (SurfaceView) findViewById(R.id.surfaceView); sv.setOnGenericMotionListener(this); sv.setOnTouchListener(this); - - SurfaceHolder sh = sv.getHolder(); - - if (stretchToFit) { - // Set the surface to the size of the video - sh.setFixedSize(width, height); - } // Warn the user if they're on a metered connection checkDataConnection(); @@ -191,7 +184,15 @@ public class Game extends Activity implements SurfaceHolder.Callback, OnGenericM PlatformBinding.getCryptoProvider(this)); keybTranslator = new KeyboardTranslator(conn); controllerHandler = new ControllerHandler(conn); + decoderRenderer = new ConfigurableDecoderRenderer(); + decoderRenderer.initializeWithFlags(drFlags); + + SurfaceHolder sh = sv.getHolder(); + if (stretchToFit || !decoderRenderer.isHardwareAccelerated()) { + // Set the surface to the size of the video + sh.setFixedSize(width, height); + } // The connection will be started when the surface gets created sh.addCallback(this); @@ -613,10 +614,6 @@ public class Game extends Activity implements SurfaceHolder.Callback, OnGenericM if (!stretchToFit && decoderRenderer.isHardwareAccelerated()) { resizeSurfaceWithAspectRatio((SurfaceView) findViewById(R.id.surfaceView), width, height); } - else if (!decoderRenderer.isHardwareAccelerated()) { - // Make sure the surface is the correct size since we render directly to it - holder.setFixedSize(width, height); - } conn.start(PlatformBinding.getDeviceName(), holder, drFlags, PlatformBinding.getAudioRenderer(), decoderRenderer); diff --git a/src/com/limelight/binding/video/ConfigurableDecoderRenderer.java b/src/com/limelight/binding/video/ConfigurableDecoderRenderer.java index 99b8c19e..edc31636 100644 --- a/src/com/limelight/binding/video/ConfigurableDecoderRenderer.java +++ b/src/com/limelight/binding/video/ConfigurableDecoderRenderer.java @@ -16,18 +16,27 @@ public class ConfigurableDecoderRenderer implements VideoDecoderRenderer { @Override public boolean setup(int width, int height, int redrawRate, Object renderTarget, int drFlags) { + if (decoderRenderer == null) { + throw new IllegalStateException("ConfigurableDecoderRenderer not initialized"); + } + return decoderRenderer.setup(width, height, redrawRate, renderTarget, drFlags); + } + + public void initializeWithFlags(int drFlags) { if ((drFlags & VideoDecoderRenderer.FLAG_FORCE_HARDWARE_DECODING) != 0 || - ((drFlags & VideoDecoderRenderer.FLAG_FORCE_SOFTWARE_DECODING) == 0 && - MediaCodecDecoderRenderer.findSafeDecoder() != null)) { + ((drFlags & VideoDecoderRenderer.FLAG_FORCE_SOFTWARE_DECODING) == 0 && + MediaCodecDecoderRenderer.findSafeDecoder() != null)) { decoderRenderer = new MediaCodecDecoderRenderer(); } else { decoderRenderer = new AndroidCpuDecoderRenderer(); } - return decoderRenderer.setup(width, height, redrawRate, renderTarget, drFlags); } public boolean isHardwareAccelerated() { + if (decoderRenderer == null) { + throw new IllegalStateException("ConfigurableDecoderRenderer not initialized"); + } return (decoderRenderer instanceof MediaCodecDecoderRenderer); }