From 2f708ce9cc7fc2e4d498bcc20a095bdf8e9c803d Mon Sep 17 00:00:00 2001 From: Pannag Sanketi Date: Thu, 26 Apr 2012 14:29:21 -0700 Subject: Resolving the black screen / crash in effects b:/6278826 The SurfaceTextureTarget Filter was not unregistering the surface on closing leading to crashes and blank screens. Change-Id: Ia9f6fc69b92d5a5e2e1e3803969152d11528aa3d --- .../filterpacks/videosrc/SurfaceTextureTarget.java | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/media/mca/filterpacks/java/android/filterpacks/videosrc/SurfaceTextureTarget.java b/media/mca/filterpacks/java/android/filterpacks/videosrc/SurfaceTextureTarget.java index 436caab0dcae..20e4b32058bd 100644 --- a/media/mca/filterpacks/java/android/filterpacks/videosrc/SurfaceTextureTarget.java +++ b/media/mca/filterpacks/java/android/filterpacks/videosrc/SurfaceTextureTarget.java @@ -160,9 +160,22 @@ public class SurfaceTextureTarget extends Filter { @Override public void open(FilterContext context) { // Set up SurfaceTexture internals - mSurfaceId = context.getGLEnvironment().registerSurfaceTexture(mSurfaceTexture, mScreenWidth, mScreenHeight); + mSurfaceId = context.getGLEnvironment().registerSurfaceTexture( + mSurfaceTexture, mScreenWidth, mScreenHeight); + if (mSurfaceId <= 0) { + throw new RuntimeException("Could not register SurfaceTexture: " + mSurfaceTexture); + } } + + @Override + public void close(FilterContext context) { + if (mSurfaceId > 0) { + context.getGLEnvironment().unregisterSurfaceId(mSurfaceId); + } + } + + @Override public void process(FilterContext context) { if (mLogVerbose) Log.v(TAG, "Starting frame processing"); @@ -173,9 +186,11 @@ public class SurfaceTextureTarget extends Filter { Frame input = pullInput("frame"); boolean createdFrame = false; - float currentAspectRatio = (float)input.getFormat().getWidth() / input.getFormat().getHeight(); + float currentAspectRatio = + (float)input.getFormat().getWidth() / input.getFormat().getHeight(); if (currentAspectRatio != mAspectRatio) { - if (mLogVerbose) Log.v(TAG, "New aspect ratio: " + currentAspectRatio +", previously: " + mAspectRatio); + if (mLogVerbose) Log.v(TAG, "New aspect ratio: " + currentAspectRatio + + ", previously: " + mAspectRatio); mAspectRatio = currentAspectRatio; updateTargetRect(); } -- cgit v1.2.3-59-g8ed1b