我目前正在编写一个 android 应用程序,我需要在其中缓存视频帧,以便我可以轻松地来回切换,几乎没有延迟。
MediaCodec
现在,我通过向对象的 Configure 调用提供 SurfacereleaseOutputBuffer
并将渲染标志设置为true
.
我发现访问解码的表面数据的唯一方法(除了解码返回的字节缓冲区,其格式似乎与设备相关)是调用链接到表面updateTeximage
的链接,将其附加到目标并将其渲染到我创建的目标纹理我自己为了缓存它。SurfaceTexture
GL_TEXTURE_EXTERNAL_OES
GL_TEXTURE2D
我想优化这个缓存过程并能够在不同的线程上解码帧。使用我当前的方法,这意味着我必须为视频解码器创建另一个 EGL 上下文,共享上下文等...
我的问题是:是否可以在不调用的情况下访问与 Surface 关联的 EGL 图像或本机缓冲区数据 updateTexImage
?
这样我就可以缓存 egl 图像(根据 ,它不需要 EGL 上下文EGL_ANDROID_image_native_buffer
)。这也将以 YUV 格式缓存,这将比我现在缓存的原始 RGB 纹理更节省存储。