//-------------------------
            // ISurfaceTextureHost
            //-------------------------

            public void ReleaseSurfaceTexture(SurfaceTexture surfaceTexture)
            {
                if (surfaceTexture == null)
                {
                    Log.Debug(TAG, "releaseSurfaceTexture: null");
                }
                else if (mDidDetachFromWindow)
                {
                    if (surfaceTexture != mSurfaceTexture)
                    {
                        Log.Debug(TAG, "releaseSurfaceTexture: didDetachFromWindow(): release different SurfaceTexture");
                        surfaceTexture.Release();
                    }
                    else if (!mOwnSurfaceTexture)
                    {
                        Log.Debug(TAG, "releaseSurfaceTexture: didDetachFromWindow(): release detached SurfaceTexture");
                        surfaceTexture.Release();
                    }
                    else
                    {
                        Log.Debug(TAG, "releaseSurfaceTexture: didDetachFromWindow(): already released by TextureView");
                    }
                }
                else if (mWillDetachFromWindow)
                {
                    if (surfaceTexture != mSurfaceTexture)
                    {
                        Log.Debug(TAG, "releaseSurfaceTexture: willDetachFromWindow(): release different SurfaceTexture");
                        surfaceTexture.Release();
                    }
                    else if (!mOwnSurfaceTexture)
                    {
                        Log.Debug(TAG, "releaseSurfaceTexture: willDetachFromWindow(): re-attach SurfaceTexture to TextureView");
                        OwnSurfaceTexture = true;
                    }
                    else
                    {
                        Log.Debug(TAG, "releaseSurfaceTexture: willDetachFromWindow(): will released by TextureView");
                    }
                }
                else
                {
                    if (surfaceTexture != mSurfaceTexture)
                    {
                        Log.Debug(TAG, "releaseSurfaceTexture: alive: release different SurfaceTexture");
                        surfaceTexture.Release();
                    }
                    else if (!mOwnSurfaceTexture)
                    {
                        Log.Debug(TAG, "releaseSurfaceTexture: alive: re-attach SurfaceTexture to TextureView");
                        OwnSurfaceTexture = true;
                    }
                    else
                    {
                        Log.Debug(TAG, "releaseSurfaceTexture: alive: will released by TextureView");
                    }
                }
            }
Esempio n. 2
0
 private void Release()
 {
     if (IO.Agora.Api.Component.Constant.Engine == null)
     {
         return;
     }
     /**release external video source*/
     _externalVideoInputManager._textureTransformer.Release();
     IO.Agora.Api.Component.Constant.Engine.SetVideoSource(null);
     mSurface.Release();
     mEglCore.MakeNothingCurrent();
     mEglCore.ReleaseSurface(mEglSurface);
     mSurfaceTexture.Release();
     IO.Agora.Api.Component.Gles.Core.GlUtil.DeleteTextureObject(mTextureId);
     mTextureId = 0;
     mEglCore.Release();
 }