我想乱序显示MediaCodec的解码视频帧,或者省略帧,或多次显示帧.
我考虑过配置MediaCodec以使用Surface,反复调用MediaCodec.dequeueOutputBuffer(),保存生成的缓冲区索引,然后再调用MediaCodec.releaseOutputBuffer(desired_index,true),但是似乎没有办法增加数量输出缓冲区,因此如果我要处理许多要重新排列的帧,我可能会用完输出缓冲区.
我正在考虑的一个想法是使用glReadPixels()将像素数据读取到帧缓冲区中,适当地转换颜色格式,然后在需要显示帧时将其复制到SurfaceView.但这似乎是很多复制(和颜色格式转换)的开销,尤其是当我本来不需要修改像素数据时.
所以我想知道是否有更好,更高效的方法.也许有一种方法可以为每个解码帧配置不同的“表面/纹理/缓冲区”,然后通过一种方法告诉SurfaceView显示特定的“表面/纹理/缓冲区”(而不必执行内存复制).似乎必须有一种使用OpenGL完成此操作的方法,但是我对OpenGL还是很陌生,可以使用有关领域的建议进行调查.如果需要,我什至会去NDK.
到目前为止,我一直在审查Android文档以及fadden的bigflake和Grafika.谢谢.