//------------------------- // 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"); } } }
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(); }