1

我在 android 中使用本机窗口在表面视图中显示视频。这是我的代码的一部分。

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

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

4

1 回答 1

3

表面不是缓冲区,它们是缓冲区队列。任何指向显示器的内容都将被双重或三重缓冲。

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

有关更多详细信息,请参阅 Android 图形架构文档,尤其是本节

于 2015-08-03T02:26:56.557 回答