SeparableConvolutionShaderProgram


@UnstableApi
public class SeparableConvolutionShaderProgram implements GlShaderProgram


A GlShaderProgram for performing separable convolutions.

A single ConvolutionFunction1D is applied horizontally on a first pass and vertically on a second pass.

Summary

Public constructors

SeparableConvolutionShaderProgram(
    Context context,
    boolean useHdr,
    ConvolutionFunction1D.Provider convolutionFunction1DProvider
)

Creates an instance.

SeparableConvolutionShaderProgram(
    Context context,
    boolean useHdr,
    SeparableConvolution convolution,
    float scaleWidth,
    float scaleHeight
)

Creates an instance.

Public methods

final void

Flushes the GlShaderProgram.

final void
queueInputFrame(
    GlObjectsProvider glObjectsProvider,
    GlTextureInfo inputTexture,
    long presentationTimeUs
)

Processes an input frame if possible.

void

Releases all resources.

final void

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

final void
setErrorListener(
    Executor errorListenerExecutor,
    GlShaderProgram.ErrorListener errorListener
)

Sets the ErrorListener.

final void

Sets the InputListener.

final void

Sets the OutputListener.

final void

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

Protected methods

void

Called when the blur has been rendered onto the frame.

Public constructors

SeparableConvolutionShaderProgram

public SeparableConvolutionShaderProgram(
    Context context,
    boolean useHdr,
    ConvolutionFunction1D.Provider convolutionFunction1DProvider
)

Creates an instance.

Parameters
Context context

The Context.

boolean useHdr

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.

ConvolutionFunction1D.Provider convolutionFunction1DProvider

The ConvolutionFunction1D.Provider which will provide the 1D convolution function to apply in each direction.

Throws
androidx.media3.common.VideoFrameProcessingException

If a problem occurs while reading shader files.

SeparableConvolutionShaderProgram

public SeparableConvolutionShaderProgram(
    Context context,
    boolean useHdr,
    SeparableConvolution convolution,
    float scaleWidth,
    float scaleHeight
)

Creates an instance.

Parameters
Context context

The Context.

boolean useHdr

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.

SeparableConvolution convolution

The SeparableConvolution to apply in each direction.

float scaleWidth

The scaling factor used to determine the width of the output relative to the input.

float scaleHeight

The scaling factor used to determine the height of the output relative to the input.

Throws
androidx.media3.common.VideoFrameProcessingException

If a problem occurs while reading shader files.

Public methods

flush

public final void flush()

Flushes the GlShaderProgram.

The GlShaderProgram should reclaim the ownership of its allocated textures, notify its InputListener about the flush event, and report its availability if necessary.

The implementation must not output frames until after this method returns.

queueInputFrame

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

Processes an input frame if possible.

The GlShaderProgram owns the accepted frame until it calls onInputFrameProcessed. 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 accept an input frame.

Parameters
GlObjectsProvider glObjectsProvider

The GlObjectsProvider for using EGL and GLES.

GlTextureInfo inputTexture

A GlTextureInfo describing the texture containing the input frame.

long presentationTimeUs

The presentation timestamp of the input frame, in microseconds.

release

@CallSuper
public void release()

Releases all resources.

Throws
androidx.media3.common.VideoFrameProcessingException

If an error occurs while releasing resources.

releaseOutputFrame

public final 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 final void setErrorListener(
    Executor errorListenerExecutor,
    GlShaderProgram.ErrorListener errorListener
)

Sets the ErrorListener.

The ErrorListener is invoked on the provided Executor.

setInputListener

public final void setInputListener(GlShaderProgram.InputListener inputListener)

Sets the InputListener.

The InputListener should be invoked on the thread that owns the parent OpenGL context. For example, DefaultVideoFrameProcessor invokes the InputListener methods on its internal thread.

setOutputListener

public final void setOutputListener(GlShaderProgram.OutputListener outputListener)

Sets the OutputListener.

The OutputListener should be invoked on the thread that owns the parent OpenGL context. For example, DefaultVideoFrameProcessor invokes the OutputListener methods on its internal thread.

signalEndOfCurrentInputStream

public final 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.

Protected methods

onBlurRendered

protected void onBlurRendered(GlTextureInfo inputTexture)

Called when the blur has been rendered onto the frame.

The default implementation is a no-op.

Parameters
GlTextureInfo inputTexture

The input texture.