NDK使用ANativeWindow渲染surface,
大致代码如下:
在测试的过程中,发现有些机型上出现花屏的现象,经内存拷贝测试,发现这些机型上,windowbuffer.bits的大小不等于 width * height * RGBSIZE,因此会导致数据错位而无法正常显示。
翻了下native_window.h(development/ndk/platforms/android-x/include/android目录下),对于windowBuffer的定义如下:
其中一个叫stride的项,表示在内存中每一行包含的像素数量,这个值可能会大于width。
再次测试,发现所有有问题的机型,果然stride大于width。因此在拷贝的时候需要注意内存对齐。。
最后解决方案如下: