如何有效地从com.sun.jna.Memory对象读取像素数据

时间:2016-01-20 16:00:23

标签: java opengl-es-2.0 jna vlcj

我正在使用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?

任何判决?建议吗?以往的经验?替代?

谢谢。

0 个答案:

没有答案