summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorPannag Sanketi <psanketi@google.com>2012-06-20 22:31:12 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2012-06-20 22:31:12 -0700
commit4bae6149bd419eac00e5782a30d19463957e3c42 (patch)
tree45cd934a52fbba72876f892d2d77cd2b39eca781 /media
parente96f06ae1607be2af6fa810bb3913cac679d0ac9 (diff)
parent60c5b714dc747eef0b5c2a57db60b162315fba2f (diff)
downloadframeworks_base-4bae6149bd419eac00e5782a30d19463957e3c42.zip
frameworks_base-4bae6149bd419eac00e5782a30d19463957e3c42.tar.gz
frameworks_base-4bae6149bd419eac00e5782a30d19463957e3c42.tar.bz2
am 60c5b714: Merge "Crash in SurfaceTextureTarget filter open" into jb-dev
* commit '60c5b714dc747eef0b5c2a57db60b162315fba2f': Crash in SurfaceTextureTarget filter open
Diffstat (limited to 'media')
-rw-r--r--media/mca/filterpacks/java/android/filterpacks/videosrc/SurfaceTextureTarget.java15
1 files changed, 12 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 674a2bd..b6d9f94 100644
--- a/media/mca/filterpacks/java/android/filterpacks/videosrc/SurfaceTextureTarget.java
+++ b/media/mca/filterpacks/java/android/filterpacks/videosrc/SurfaceTextureTarget.java
@@ -162,6 +162,10 @@ public class SurfaceTextureTarget extends Filter {
@Override
public synchronized void open(FilterContext context) {
// Set up SurfaceTexture internals
+ if (mSurfaceTexture == null) {
+ Log.e(TAG, "SurfaceTexture is null!!");
+ throw new RuntimeException("Could not register SurfaceTexture: " + mSurfaceTexture);
+ }
mSurfaceId = context.getGLEnvironment().registerSurfaceTexture(
mSurfaceTexture, mScreenWidth, mScreenHeight);
if (mSurfaceId <= 0) {
@@ -170,19 +174,24 @@ public class SurfaceTextureTarget extends Filter {
}
+ // Once the surface is unregistered, we still need the surfacetexture reference.
+ // That is because when the the filter graph stops and starts again, the app
+ // may not set the mSurfaceTexture again on the filter. In some cases, the app
+ // may not even know that the graph has re-started. So it is difficult to enforce
+ // that condition on an app using this filter. The only case where we need
+ // to let go of the mSurfaceTexure reference is when the app wants to shut
+ // down the graph on purpose, such as in the disconnect call.
@Override
public synchronized void close(FilterContext context) {
if (mSurfaceId > 0) {
context.getGLEnvironment().unregisterSurfaceId(mSurfaceId);
mSurfaceId = -1;
- // Once the surface is unregistered, remove the surfacetexture reference.
- // The surfaceId could not have been valid without a valid surfacetexture.
- mSurfaceTexture = null;
}
}
// This should be called from the client side when the surfacetexture is no longer
// valid. e.g. from onPause() in the application using the filter graph.
+ // In this case, we need to let go of our surfacetexture reference.
public synchronized void disconnect(FilterContext context) {
if (mLogVerbose) Log.v(TAG, "disconnect");
if (mSurfaceTexture == null) {