除了将位复制到 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。
我在 android 中使用原生 window 以表面视图显示视频。 这是我的代码的一部分。
ANativeWindow_lock(window, &windowBuffer, NULL);
memcpy(windowBuffer.bits, buffer, size);
ANativeWindow_unlockAndPost(window);
但是 memcpy 花费了太多时间。有没有没有 memcpy 的任何其他方法,以便我可以直接使用本机代码中分配的缓冲区?我想用缓冲区中的数据完全填充表面视图。
表面不是缓冲区,它们是缓冲区队列。前往显示器的任何内容都将进行双缓冲或三缓冲。
您可以将输出直接生成到 ANativeWindow_lock()
返回的缓冲区中。因为它(至少)是双缓冲的,所以在解锁前一个缓冲区后立即锁定下一个缓冲区不会有任何损失——您不会通过立即调用 lock 来阻止合成器看到刚刚完成的帧。
有关详细信息,请参阅 Android 图形架构文档,尤其是 this section。