私は現在、ビデオフレームをキャッシュする必要があるAndroidアプリを作成しているため、ほとんどまたはまったく遅延なく簡単に行き来できます。
MediaCodec
現在、オブジェクトの Configure 呼び出しに Surface を提供releaseOutputBuffer
し、render フラグを に設定して呼び出して、Android にビデオ フレームをデコードさせていますtrue
。
デコードされたサーフェス データにアクセスするために見つけた唯一の方法 (形式がデバイスに依存しているように見える、返されたバイトバッファーをデコードする以外に) は、サーフェスにリンクされた を呼び出し、これをターゲットにアタッチし、updateTeximage
作成したターゲット テクスチャにレンダリングすることです。それをキャッシュするために自分自身。SurfaceTexture
GL_TEXTURE_EXTERNAL_OES
GL_TEXTURE2D
このキャッシュ プロセスを最適化し、別のスレッドでフレームをデコードできるようにしたいと考えています。現在の方法を使用すると、これは、ビデオ デコーダー用に別の EGL コンテキストを作成し、コンテキストを共有する必要があることを意味します...
私の質問は:を呼び出さずに、Surface に関連付けられた EGL イメージまたはネイティブ バッファ データにアクセスすることは可能 updateTexImage
ですか?
そうすれば、egl イメージをキャッシュすることができます (これは、 に従って EGL コンテキストを必要としませんEGL_ANDROID_image_native_buffer
)。これは、現在キャッシュしている未加工の RGB テクスチャよりもはるかにストレージ効率の高い YUV 形式でもキャッシュされます。