# GlMatrixTransformation

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/GlMatrixTransformation.java+class:androidx.media3.effect.GlMatrixTransformation)

*** ** * ** ***

<br />

```
@UnstableApi
interface GlMatrixTransformation : GlEffect
```

<br />

Known direct subclasses [MatrixTransformation](https://developer.android.com/reference/kotlin/androidx/media3/effect/MatrixTransformation)

|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/effect/MatrixTransformation` | Specifies a 3x3 transformation `https://developer.android.com/reference/android/graphics/Matrix.html` to apply in the vertex shader for each frame. |

Known indirect subclasses [Crop](https://developer.android.com/reference/kotlin/androidx/media3/effect/Crop), [Presentation](https://developer.android.com/reference/kotlin/androidx/media3/effect/Presentation), [ScaleAndRotateTransformation](https://developer.android.com/reference/kotlin/androidx/media3/effect/ScaleAndRotateTransformation)

|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/effect/Crop` | Specifies a crop to apply in the vertex shader. |
| `https://developer.android.com/reference/kotlin/androidx/media3/effect/Presentation` | Controls how a frame is presented with options to set the output resolution and choose how to map the input pixels onto the output frame geometry (for example, by stretching the input frame to match the specified output frame, or fitting the input frame using letterboxing). |
| `https://developer.android.com/reference/kotlin/androidx/media3/effect/ScaleAndRotateTransformation` | Specifies a simple rotation and/or scale to apply in the vertex shader. |

*** ** * ** ***

Specifies a 4x4 transformation `https://developer.android.com/reference/android/opengl/Matrix.html` to apply in the vertex shader for each input frame.

The matrix is applied to points given in normalized device coordinates (-1 to 1 on x, y, and z axes). Transformed pixels that are moved outside of the normal device coordinate range are clipped.

Output frame pixels outside of the transformed input frame will be black, with alpha = 0 if applicable.

## Summary

| ### Public functions |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/common/util/Size!` | `https://developer.android.com/reference/kotlin/androidx/media3/effect/GlMatrixTransformation#configure(int,int)(inputWidth: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, inputHeight: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` Configures the input and output dimensions. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html>!` | `https://developer.android.com/reference/kotlin/androidx/media3/effect/GlMatrixTransformation#getGlMatrixArray(long)(presentationTimeUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html)` Returns the 4x4 transformation `https://developer.android.com/reference/android/opengl/Matrix.html` to apply to the frame with the given timestamp. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `@https://developer.android.com/reference/kotlin/androidx/media3/common/C.TextureMinFilter https://developer.android.com/reference/kotlin/androidx/media3/effect/GlMatrixTransformation#getGlTextureMinFilter()()` Returns the `https://developer.android.com/reference/kotlin/androidx/media3/common/C.TextureMinFilter` to use for sampling the input texture when applying this matrix transformation. |
| `https://developer.android.com/reference/kotlin/androidx/media3/effect/BaseGlShaderProgram!` | `https://developer.android.com/reference/kotlin/androidx/media3/effect/GlMatrixTransformation#toGlShaderProgram(android.content.Context,boolean)(context: https://developer.android.com/reference/android/content/Context.html!, useHdr: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html)` Returns a `https://developer.android.com/reference/kotlin/androidx/media3/effect/GlShaderProgram` that applies the effect. |

### Inherited functions

From [androidx.media3.common.Effect](https://developer.android.com/reference/kotlin/androidx/media3/common/Effect) `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/common/Effect#getDurationAfterEffectApplied(long)(durationUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html)`

Returns the expected duration of the output stream when the effect is applied given a input `durationUs`.
From [androidx.media3.effect.GlEffect](https://developer.android.com/reference/kotlin/androidx/media3/effect/GlEffect) `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/effect/GlEffect#isNoOp(int,int)(inputWidth: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, inputHeight: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)`

Returns whether a `https://developer.android.com/reference/kotlin/androidx/media3/effect/GlEffect` applies no change at every timestamp.

## Public functions

### configure

```
fun configure(inputWidth: Int, inputHeight: Int): Size!
```

Configures the input and output dimensions.

Must be called before `https://developer.android.com/reference/kotlin/androidx/media3/effect/GlMatrixTransformation#getGlMatrixArray(long)`.

| Parameters |
|---|---|
| `inputWidth: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The input frame width, in pixels. |
| `inputHeight: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The input frame height, in pixels. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/common/util/Size!` | The output frame width and height, in pixels. |

### getGlMatrixArray

```
fun getGlMatrixArray(presentationTimeUs: Long): Array<Float>!
```

Returns the 4x4 transformation `https://developer.android.com/reference/android/opengl/Matrix.html` to apply to the frame with the given timestamp.

### getGlTextureMinFilter

```
@C.TextureMinFilter
fun getGlTextureMinFilter(): Int
```

Returns the `https://developer.android.com/reference/kotlin/androidx/media3/common/C.TextureMinFilter` to use for sampling the input texture when applying this matrix transformation.

### toGlShaderProgram

```
fun toGlShaderProgram(context: Context!, useHdr: Boolean): BaseGlShaderProgram!
```

Returns a `https://developer.android.com/reference/kotlin/androidx/media3/effect/GlShaderProgram` that applies the effect.

| Parameters |
|---|---|
| `context: https://developer.android.com/reference/android/content/Context.html!` | A `https://developer.android.com/reference/android/content/Context.html`. |
| `useHdr: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether input textures come from an HDR source. If `true`, colors will be in linear RGB BT.2020. If `false`, colors will be in linear RGB BT.709. |

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/common/VideoFrameProcessingException` | If an error occurs while creating the `https://developer.android.com/reference/kotlin/androidx/media3/effect/GlShaderProgram`. |