# DebugViewShaderProgram

Artifact: [androidx.media3:media3-effect](https://developer.android.com/jetpack/androidx/releases/media3) [View Source](https://cs.android.com/search?q=file:androidx/media3/effect/DebugViewShaderProgram.java+class:androidx.media3.effect.DebugViewShaderProgram)

*** ** * ** ***


```
@UnstableApi
public final class DebugViewShaderProgram implements GlShaderProgram
```

<br />

*** ** * ** ***

`https://developer.android.com/reference/androidx/media3/effect/GlShaderProgram` that renders to a `https://developer.android.com/reference/android/view/SurfaceView.html` provided by `https://developer.android.com/reference/androidx/media3/common/DebugViewProvider`.

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/effect/DebugViewShaderProgram#DebugViewShaderProgram(android.content.Context,androidx.media3.common.DebugViewProvider,androidx.media3.common.ColorInfo)( https://developer.android.com/reference/android/content/Context.html context, https://developer.android.com/reference/androidx/media3/common/DebugViewProvider debugViewProvider, https://developer.android.com/reference/androidx/media3/common/ColorInfo outputColorInfo )` |

| ### Public methods |
|---|---|
| `void` | `https://developer.android.com/reference/androidx/media3/effect/DebugViewShaderProgram#flush()()` Flushes the `GlShaderProgram`. |
| `void` | `https://developer.android.com/reference/androidx/media3/effect/DebugViewShaderProgram#queueInputFrame(androidx.media3.common.GlObjectsProvider,androidx.media3.common.GlTextureInfo,long)( https://developer.android.com/reference/androidx/media3/common/GlObjectsProvider glObjectsProvider, https://developer.android.com/reference/androidx/media3/common/GlTextureInfo inputTexture, long presentationTimeUs )` Processes an input frame if possible. |
| `void` | `https://developer.android.com/reference/androidx/media3/effect/DebugViewShaderProgram#release()()` Releases all resources. |
| `void` | `https://developer.android.com/reference/androidx/media3/effect/DebugViewShaderProgram#releaseOutputFrame(androidx.media3.common.GlTextureInfo)(https://developer.android.com/reference/androidx/media3/common/GlTextureInfo outputTexture)` Notifies the `GlShaderProgram` that the frame on the given output texture is no longer used and can be overwritten. |
| `void` | `https://developer.android.com/reference/androidx/media3/effect/DebugViewShaderProgram#setErrorListener(java.util.concurrent.Executor,androidx.media3.effect.GlShaderProgram.ErrorListener)( https://developer.android.com/reference/java/util/concurrent/Executor.html executor, https://developer.android.com/reference/androidx/media3/effect/GlShaderProgram.ErrorListener errorListener )` Sets the `https://developer.android.com/reference/androidx/media3/effect/GlShaderProgram.ErrorListener`. |
| `void` | `https://developer.android.com/reference/androidx/media3/effect/DebugViewShaderProgram#setInputListener(androidx.media3.effect.GlShaderProgram.InputListener)(https://developer.android.com/reference/androidx/media3/effect/GlShaderProgram.InputListener inputListener)` Sets the `https://developer.android.com/reference/androidx/media3/effect/GlShaderProgram.InputListener`. |
| `void` | `https://developer.android.com/reference/androidx/media3/effect/DebugViewShaderProgram#setOutputListener(androidx.media3.effect.GlShaderProgram.OutputListener)(https://developer.android.com/reference/androidx/media3/effect/GlShaderProgram.OutputListener outputListener)` Sets the `https://developer.android.com/reference/androidx/media3/effect/GlShaderProgram.OutputListener`. |
| `void` | `https://developer.android.com/reference/androidx/media3/effect/DebugViewShaderProgram#signalEndOfCurrentInputStream()()` Notifies the `GlShaderProgram` that no further input frames belonging to the current input stream will be queued. |

## Public constructors

### DebugViewShaderProgram

```
public DebugViewShaderProgram(
    Context context,
    DebugViewProvider debugViewProvider,
    ColorInfo outputColorInfo
)
```

## Public methods

### flush

```
public void flush()
```

Flushes the `GlShaderProgram`.

The `GlShaderProgram` should reclaim the ownership of its allocated textures, `https://developer.android.com/reference/androidx/media3/effect/GlShaderProgram.InputListener#onFlush()` its `https://developer.android.com/reference/androidx/media3/effect/GlShaderProgram.InputListener` about the flush event, and `https://developer.android.com/reference/androidx/media3/effect/GlShaderProgram.InputListener#onReadyToAcceptInputFrame()` if necessary.

The implementation must not `https://developer.android.com/reference/androidx/media3/effect/GlShaderProgram.OutputListener#onOutputFrameAvailable(androidx.media3.common.GlTextureInfo,long)` until after this method returns.

### queueInputFrame

```
public void queueInputFrame(
    GlObjectsProvider glObjectsProvider,
    GlTextureInfo inputTexture,
    long presentationTimeUs
)
```

Processes an input frame if possible.

The `GlShaderProgram` owns the accepted frame until it calls `https://developer.android.com/reference/androidx/media3/effect/GlShaderProgram.InputListener#onInputFrameProcessed(androidx.media3.common.GlTextureInfo)`. The caller should not overwrite or release the texture before the `GlShaderProgram` has finished processing it.

This method must only be called when the `GlShaderProgram` can `https://developer.android.com/reference/androidx/media3/effect/GlShaderProgram.InputListener#onReadyToAcceptInputFrame()`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/GlObjectsProvider glObjectsProvider` | The `https://developer.android.com/reference/androidx/media3/common/GlObjectsProvider` for using EGL and GLES. |
| `https://developer.android.com/reference/androidx/media3/common/GlTextureInfo inputTexture` | A `https://developer.android.com/reference/androidx/media3/common/GlTextureInfo` describing the texture containing the input frame. |
| `long presentationTimeUs` | The presentation timestamp of the input frame, in microseconds. |

### release

```
public void release()
```

Releases all resources.

| Throws |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/VideoFrameProcessingException` | If an error occurs while releasing resources. |

### releaseOutputFrame

```
public void releaseOutputFrame(GlTextureInfo outputTexture)
```

Notifies the `GlShaderProgram` that the frame on the given output texture is no longer used and can be overwritten.

### setErrorListener

```
public void setErrorListener(
    Executor executor,
    GlShaderProgram.ErrorListener errorListener
)
```

Sets the `https://developer.android.com/reference/androidx/media3/effect/GlShaderProgram.ErrorListener`.

The `https://developer.android.com/reference/androidx/media3/effect/GlShaderProgram.ErrorListener` is invoked on the provided `https://developer.android.com/reference/java/util/concurrent/Executor.html`.

### setInputListener

```
public void setInputListener(GlShaderProgram.InputListener inputListener)
```

Sets the `https://developer.android.com/reference/androidx/media3/effect/GlShaderProgram.InputListener`.

The `https://developer.android.com/reference/androidx/media3/effect/GlShaderProgram.InputListener` should be invoked on the thread that owns the parent OpenGL context. For example, `https://developer.android.com/reference/androidx/media3/effect/DefaultVideoFrameProcessor` invokes the `https://developer.android.com/reference/androidx/media3/effect/GlShaderProgram.InputListener` methods on its internal thread.

### setOutputListener

```
public void setOutputListener(GlShaderProgram.OutputListener outputListener)
```

Sets the `https://developer.android.com/reference/androidx/media3/effect/GlShaderProgram.OutputListener`.

The `https://developer.android.com/reference/androidx/media3/effect/GlShaderProgram.OutputListener` should be invoked on the thread that owns the parent OpenGL context. For example, `https://developer.android.com/reference/androidx/media3/effect/DefaultVideoFrameProcessor` invokes the `https://developer.android.com/reference/androidx/media3/effect/GlShaderProgram.OutputListener` methods on its internal thread.

### signalEndOfCurrentInputStream

```
public void signalEndOfCurrentInputStream()
```

Notifies the `GlShaderProgram` that no further input frames belonging to the current input stream will be queued.

Input frames that are queued after this method is called belong to a different input stream.