Fix a regression in video scaling after the CPU decoding fix

This commit is contained in:
Cameron Gutman 2014-08-06 22:33:41 -07:00
parent 1b1d4399a9
commit 9393bf7f79
2 changed files with 20 additions and 14 deletions

View File

@ -165,13 +165,6 @@ public class Game extends Activity implements SurfaceHolder.Callback, OnGenericM
sv.setOnGenericMotionListener(this); sv.setOnGenericMotionListener(this);
sv.setOnTouchListener(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 // Warn the user if they're on a metered connection
checkDataConnection(); checkDataConnection();
@ -191,7 +184,15 @@ public class Game extends Activity implements SurfaceHolder.Callback, OnGenericM
PlatformBinding.getCryptoProvider(this)); PlatformBinding.getCryptoProvider(this));
keybTranslator = new KeyboardTranslator(conn); keybTranslator = new KeyboardTranslator(conn);
controllerHandler = new ControllerHandler(conn); controllerHandler = new ControllerHandler(conn);
decoderRenderer = new ConfigurableDecoderRenderer(); 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 // The connection will be started when the surface gets created
sh.addCallback(this); sh.addCallback(this);
@ -613,10 +614,6 @@ public class Game extends Activity implements SurfaceHolder.Callback, OnGenericM
if (!stretchToFit && decoderRenderer.isHardwareAccelerated()) { if (!stretchToFit && decoderRenderer.isHardwareAccelerated()) {
resizeSurfaceWithAspectRatio((SurfaceView) findViewById(R.id.surfaceView), width, height); 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, conn.start(PlatformBinding.getDeviceName(), holder, drFlags,
PlatformBinding.getAudioRenderer(), decoderRenderer); PlatformBinding.getAudioRenderer(), decoderRenderer);

View File

@ -16,18 +16,27 @@ public class ConfigurableDecoderRenderer implements VideoDecoderRenderer {
@Override @Override
public boolean setup(int width, int height, int redrawRate, Object renderTarget, int drFlags) { 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 || if ((drFlags & VideoDecoderRenderer.FLAG_FORCE_HARDWARE_DECODING) != 0 ||
((drFlags & VideoDecoderRenderer.FLAG_FORCE_SOFTWARE_DECODING) == 0 && ((drFlags & VideoDecoderRenderer.FLAG_FORCE_SOFTWARE_DECODING) == 0 &&
MediaCodecDecoderRenderer.findSafeDecoder() != null)) { MediaCodecDecoderRenderer.findSafeDecoder() != null)) {
decoderRenderer = new MediaCodecDecoderRenderer(); decoderRenderer = new MediaCodecDecoderRenderer();
} }
else { else {
decoderRenderer = new AndroidCpuDecoderRenderer(); decoderRenderer = new AndroidCpuDecoderRenderer();
} }
return decoderRenderer.setup(width, height, redrawRate, renderTarget, drFlags);
} }
public boolean isHardwareAccelerated() { public boolean isHardwareAccelerated() {
if (decoderRenderer == null) {
throw new IllegalStateException("ConfigurableDecoderRenderer not initialized");
}
return (decoderRenderer instanceof MediaCodecDecoderRenderer); return (decoderRenderer instanceof MediaCodecDecoderRenderer);
} }