Android 11 ? から前面カメラと背面カメラを同時に利用できるようになったらしいのでワイプ付きのカメラを作った。
OpenGL を利用してアウトカメラとフロントカメラを描画しています。
(SurfaceView を2つ利用しているわけではなく、SurfaceView + OpenGL でやっています。録画機能もありますが私の実装が雑なので一回だけ使えます。)
カメラの映像はSurfaceTexture
を利用することで、フラグメントシェーダからテクスチャとして利用できます。
SurfaceTexture#setOnFrameAvailableListener
がカメラのフレームが取得されるたびに呼び出されるので、SurfaceTexture#updateTexImage
を呼び出してテクスチャを転送?した後、
GLES20.glDrawArrays
を呼んで描画するようにしています。
シェーダーはよくわかりませんがなんか動いています。
シェーダーは AOSP のをそのまま使ってます。よくわからん;;
https://cs.android.com/android/platform/superproject/+/master:cts/tests/tests/media/common/src/android/media/cts/InputSurface.java