我正在使用vlcj在Linux机器上播放视频,通过OpenGL ES 2.0渲染输出。
来自视频解码器的传入像素数据位于com.sun.jna.Memory对象中。
到目前为止,我已将像素数据的“管道”传递给OpenGL纹理,如下所示:
@Override
public void display( DirectMediaPlayer mediaPlayer, Memory[] nativeBuffer, BufferFormat format )
{
....
IntBuffer pixelBuffer = nativeBuffer.getByteBuffer( 0L, nativeBuffer.size() ).asIntBuffer();
....
}
我将pixelBuffer的引用保留在另一个对象中,然后在我准备显示帧时将pixelBuffer引用抛出到glTexSubImage2D调用。
我担心这是否是最有效的方法?它可以工作但如果它复制数据可能是丑陋或昂贵的,而不是简单地获取指向Memory对象中包含的原始数据的指针。
另一个方面是如果LibVLC能够使用硬件加速,那么这个内存可能在GPU上的VRAM中 - 这样的功能是否意味着数据通过总线被拉回RAM?
任何判决?建议吗?以往的经验?替代?
谢谢。