除了将位复制到 ANativeWindow 缓冲区之外还有其他方法吗?

Any other method than copying bits to an ANativeWindow buffer?

我在 android 中使用原生 window 以表面视图显示视频。 这是我的代码的一部分。

ANativeWindow_lock(window, &windowBuffer, NULL);
memcpy(windowBuffer.bits, buffer,  size);
ANativeWindow_unlockAndPost(window);

但是 memcpy 花费了太多时间。有没有没有 memcpy 的任何其他方法,以便我可以直接使用本机代码中分配的缓冲区?我想用缓冲区中的数据完全填充表面视图。

表面不是缓冲区,它们是缓冲区队列。前往显示器的任何内容都将进行双缓冲或三缓冲。

您可以将输出直接生成到 ANativeWindow_lock() 返回的缓冲区中。因为它(至少)是双缓冲的,所以在解锁前一个缓冲区后立即锁定下一个缓冲区不会有任何损失——您不会通过立即调用 lock 来阻止合成器看到刚刚完成的帧。

有关详细信息,请参阅 Android 图形架构文档,尤其是 this section