RSTextureView.java revision d4ca9910982853e50429ea9233f2150ca619b3d8
1faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams/* 2faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * Copyright (C) 2011 The Android Open Source Project 3faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * 4faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * you may not use this file except in compliance with the License. 6faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * You may obtain a copy of the License at 7faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * 8faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 9faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * 10faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * Unless required by applicable law or agreed to in writing, software 11faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * See the License for the specific language governing permissions and 14faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * limitations under the License. 15faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams */ 16faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams 17faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Samspackage android.renderscript; 18faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams 19faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Samsimport java.io.Writer; 20faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Samsimport java.util.ArrayList; 21faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Samsimport java.util.concurrent.Semaphore; 22faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams 23faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Samsimport android.content.Context; 24faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Samsimport android.graphics.SurfaceTexture; 25faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Samsimport android.os.Handler; 26faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Samsimport android.os.Message; 27faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Samsimport android.util.AttributeSet; 28faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Samsimport android.util.Log; 29faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Samsimport android.view.TextureView; 30faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams 319c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines/** 32d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams * @deprecated in API 16 33684b23513c9137ddc04b06ac05a4b15be06ad2f4Jason Sams * The Texture View for a graphics renderscript (RenderScriptGL) 34684b23513c9137ddc04b06ac05a4b15be06ad2f4Jason Sams * to draw on. 35faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * 36faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams */ 37faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Samspublic class RSTextureView extends TextureView implements TextureView.SurfaceTextureListener { 38faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams private RenderScriptGL mRS; 39faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams private SurfaceTexture mSurfaceTexture; 40faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams 419c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 42d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams * @deprecated in API 16 43faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * Standard View constructor. In order to render something, you 44faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * must call {@link android.opengl.GLSurfaceView#setRenderer} to 45faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * register a renderer. 46faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams */ 47faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams public RSTextureView(Context context) { 48faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams super(context); 49faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams init(); 50faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams //Log.v(RenderScript.LOG_TAG, "RSSurfaceView"); 51faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams } 52faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams 539c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 54d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams * @deprecated in API 16 55faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * Standard View constructor. In order to render something, you 56faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * must call {@link android.opengl.GLSurfaceView#setRenderer} to 57faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * register a renderer. 58faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams */ 59faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams public RSTextureView(Context context, AttributeSet attrs) { 60faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams super(context, attrs); 61faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams init(); 62faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams //Log.v(RenderScript.LOG_TAG, "RSSurfaceView"); 63faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams } 64faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams 65faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams private void init() { 66faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams setSurfaceTextureListener(this); 67faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams //android.util.Log.e("rs", "getSurfaceTextureListerner " + getSurfaceTextureListener()); 68faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams } 69faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams 70d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams /** 71d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams * @deprecated in API 16 72d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams */ 73faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams @Override 74faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { 75faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams //Log.e(RenderScript.LOG_TAG, "onSurfaceTextureAvailable"); 76faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams mSurfaceTexture = surface; 77faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams 78faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams if (mRS != null) { 79faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams mRS.setSurfaceTexture(mSurfaceTexture, width, height); 80faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams } 81faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams } 82faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams 83d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams /** 84d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams * @deprecated in API 16 85d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams */ 86faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams @Override 87faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { 88faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams //Log.e(RenderScript.LOG_TAG, "onSurfaceTextureSizeChanged"); 89faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams mSurfaceTexture = surface; 90faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams 91faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams if (mRS != null) { 92faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams mRS.setSurfaceTexture(mSurfaceTexture, width, height); 93faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams } 94faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams } 95faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams 96d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams /** 97d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams * @deprecated in API 16 98d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams */ 99faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams @Override 100402f05530352f34d5320c2d23be43c274d97c4e2Grace Kloba public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { 101faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams //Log.e(RenderScript.LOG_TAG, "onSurfaceTextureDestroyed"); 102faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams mSurfaceTexture = surface; 103faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams 104faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams if (mRS != null) { 105faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams mRS.setSurfaceTexture(null, 0, 0); 106faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams } 107402f05530352f34d5320c2d23be43c274d97c4e2Grace Kloba 108402f05530352f34d5320c2d23be43c274d97c4e2Grace Kloba return true; 109faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams } 110faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams 111d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams /** 112d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams * @deprecated in API 16 113d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams */ 114cf559377b750271472aa0a717bf3b7d34abc0b39Grace Kloba @Override 115cf559377b750271472aa0a717bf3b7d34abc0b39Grace Kloba public void onSurfaceTextureUpdated(SurfaceTexture surface) { 116cf559377b750271472aa0a717bf3b7d34abc0b39Grace Kloba //Log.e(RenderScript.LOG_TAG, "onSurfaceTextureUpdated"); 117cf559377b750271472aa0a717bf3b7d34abc0b39Grace Kloba mSurfaceTexture = surface; 118cf559377b750271472aa0a717bf3b7d34abc0b39Grace Kloba } 119cf559377b750271472aa0a717bf3b7d34abc0b39Grace Kloba 1209c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 121d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams * @deprecated in API 16 122faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * Inform the view that the activity is paused. The owner of this view must 123faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * call this method when the activity is paused. Calling this method will 124faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * pause the rendering thread. 125faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * Must not be called before a renderer has been set. 126faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams */ 127faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams public void pause() { 128faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams if(mRS != null) { 129faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams mRS.pause(); 130faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams } 131faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams } 132faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams 1339c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 134d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams * @deprecated in API 16 135faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * Inform the view that the activity is resumed. The owner of this view must 136faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * call this method when the activity is resumed. Calling this method will 137faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * recreate the OpenGL display and resume the rendering 138faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * thread. 139faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * Must not be called before a renderer has been set. 140faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams */ 141faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams public void resume() { 142faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams if(mRS != null) { 143faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams mRS.resume(); 144faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams } 145faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams } 146faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams 1479c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 148d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams * @deprecated in API 16 149faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * Create a new RenderScriptGL object and attach it to the 150faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * TextureView if present. 151faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * 152faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * 153faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * @param sc The RS surface config to create. 154faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * 155faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * @return RenderScriptGL The new object created. 156faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams */ 157faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams public RenderScriptGL createRenderScriptGL(RenderScriptGL.SurfaceConfig sc) { 158faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams RenderScriptGL rs = new RenderScriptGL(this.getContext(), sc); 159faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams setRenderScriptGL(rs); 160faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams if (mSurfaceTexture != null) { 161faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams mRS.setSurfaceTexture(mSurfaceTexture, getWidth(), getHeight()); 162faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams } 163faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams return rs; 164faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams } 165faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams 1669c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 167d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams * @deprecated in API 16 168faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * Destroy the RenderScriptGL object associated with this 169faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * TextureView. 170faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams */ 171faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams public void destroyRenderScriptGL() { 172faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams mRS.destroy(); 173faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams mRS = null; 174faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams } 175faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams 1769c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 177d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams * @deprecated in API 16 178faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * Set a new RenderScriptGL object. This also will attach the 179faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * new object to the TextureView if present. 180faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * 181faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * @param rs The new RS object. 182faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams */ 183faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams public void setRenderScriptGL(RenderScriptGL rs) { 184faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams mRS = rs; 185faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams if (mSurfaceTexture != null) { 186faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams mRS.setSurfaceTexture(mSurfaceTexture, getWidth(), getHeight()); 187faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams } 188faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams } 189faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams 1909c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 191d4ca9910982853e50429ea9233f2150ca619b3d8Jason Sams * @deprecated in API 16 192faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * Returns the previously set RenderScriptGL object. 193faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * 194faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * @return RenderScriptGL 195faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams */ 196faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams public RenderScriptGL getRenderScriptGL() { 197faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams return mRS; 198faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams } 199faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams} 200faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams 201