Package com.google.android.exoplayer2.util

## Class EGLSurfaceTexture

- java.lang.Object
- - com.google.android.exoplayer2.util.EGLSurfaceTexture

- All Implemented Interfaces:
    `SurfaceTexture.OnFrameAvailableListener`, `Runnable`

      @RequiresApi(17)
      public final class EGLSurfaceTexture
      extends Object
      implements SurfaceTexture.OnFrameAvailableListener, Runnable

  Generates a `SurfaceTexture` using EGL/GLES functions.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `static class` | `EGLSurfaceTexture.GlException` | A runtime exception to be thrown if some EGL operations failed.
    `static interface` | `EGLSurfaceTexture.SecureMode` | Secure mode to be used by the EGL surface and context.
    `static interface` | `EGLSurfaceTexture.TextureImageListener` | Listener to be called when the texture image on `SurfaceTexture` has been updated.

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `static int` | `SECURE_MODE_NONE` | No secure EGL surface and context required.
    `static int` | `SECURE_MODE_PROTECTED_PBUFFER` | Creating a secure surface backed by a pixel buffer.
    `static int` | `SECURE_MODE_SURFACELESS_CONTEXT` | Creating a surfaceless, secured EGL context.

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `EGLSurfaceTexture​(Handler handler)` |
    `EGLSurfaceTexture​(Handler handler, EGLSurfaceTexture.TextureImageListener callback)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `SurfaceTexture` | `getSurfaceTexture()` | Returns the wrapped `SurfaceTexture`.
    `void` | `init​(int secureMode)` | Initializes required EGL parameters and creates the `SurfaceTexture`.
    `void` | `onFrameAvailable​(SurfaceTexture surfaceTexture)` |
    `void` | `release()` | Releases all allocated resources.
    `void` | `run()` |

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### SECURE_MODE_NONE

          public static final int SECURE_MODE_NONE

      No secure EGL surface and context required.
      See Also:
        Constant Field Values

    - #### SECURE_MODE_SURFACELESS_CONTEXT

          public static final int SECURE_MODE_SURFACELESS_CONTEXT

      Creating a surfaceless, secured EGL context.
      See Also:
        Constant Field Values

    - #### SECURE_MODE_PROTECTED_PBUFFER

          public static final int SECURE_MODE_PROTECTED_PBUFFER

      Creating a secure surface backed by a pixel buffer.
      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### EGLSurfaceTexture

          public EGLSurfaceTexture​(Handler handler)

      Parameters:
        `handler` - The `Handler` that will be used to call `SurfaceTexture.updateTexImage()` to update images on the `SurfaceTexture`. Note that `init(int)` has to be called on the same looper thread as the `Handler`'s looper.

    - #### EGLSurfaceTexture

          public EGLSurfaceTexture​(Handler handler,
                                   @Nullable
                                   EGLSurfaceTexture.TextureImageListener callback)

      Parameters:
        `handler` - The `Handler` that will be used to call `SurfaceTexture.updateTexImage()` to update images on the `SurfaceTexture`. Note that `init(int)` has to be called on the same looper thread as the looper of the `Handler`.
        `callback` - The `EGLSurfaceTexture.TextureImageListener` to be called when the texture image on `SurfaceTexture` has been updated. This callback will be called on the same handler thread as the `handler`.

  - ### Method Detail

    - #### init

          public void init​(@SecureMode
                           int secureMode)

      Initializes required EGL parameters and creates the `SurfaceTexture`.
      Parameters:
        `secureMode` - The `EGLSurfaceTexture.SecureMode` to be used for EGL surface.

    - #### release

          public void release()

      Releases all allocated resources.

    - #### getSurfaceTexture

          public SurfaceTexture getSurfaceTexture()

      Returns the wrapped `SurfaceTexture`. This can only be called after `init(int)`.

    - #### onFrameAvailable

          public void onFrameAvailable​(SurfaceTexture surfaceTexture)

      Specified by:
        `onFrameAvailable` in interface `SurfaceTexture.OnFrameAvailableListener`

    - #### run

          public void run()

      Specified by:
        `run` in interface `Runnable`