Kotlin

カスタムレンダラ(MyRenderer)の作成

次に、フレームデータを実際にロードしてOpenGLテクスチャに渡すカスタムレンダラを作成します。これは、反転カラーフラグメントシェーダを適用するために使用されます。

シェーダーコードは後で修正します。

  1. kotlinクラスを作成する マイレンダラー (InvertedColorsVideoRendererの内部でもかまいません)
static class MyRenderer implements GLSurfaceView.Renderer {

    private int viewportWidth;
    private int viewportHeight;

    ReentrantLock frameLock = new ReentrantLock();
    Frame currentFrame;

    public void displayFrame(Frame frame) {
        frameLock.lock();

        if (currentFrame != null) {
            currentFrame.destroy(); // Disposes previous frame
        }

        currentFrame = frame;
        frameLock.unlock();
    }

    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
        // Initialize shaders, textures, etc.
    }

    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) {
        GLES20.glViewport(0, 0, width, height);
        viewportWidth = width;
        viewportHeight = height;
    }

    @Override
    public void onDrawFrame(GL10 gl) {
        // Upload YUV frame → textures
        // Draw using shaders
        // Implementation of YUV → RGB shader pipeline
        // using inverted color math
    }
}
  1. を検証してみよう。 displayFrame メソッドを使用する。ここで重要なのは、SDKが Renderer での onFrame メソッドのプロパティとなった。 Renderer.不要になったフレームを破棄するのはこのクラス次第だ。新しいフレームが Renderer
public void displayFrame(Frame frame) {
    frameLock.lock();

    if (currentFrame != null) {
        currentFrame.destroy(); // Disposes previous frame
    }
    
    currentFrame = frame;
    frameLock.unlock();
}