gpt4 book ai didi

android - 在 Android-surfaceflinger 中访问图层内容

转载 作者:太空狗 更新时间:2023-10-29 15:03:37 29 4
gpt4 key购买 nike

我正在读取 layer 内容,以检查它是否与应用程序在屏幕上呈现的内容相同。在它们被 SurfaceFlinger 合成之前,我正在阅读内容。这是 HWCLayerVersion1::setAcquireFenceFd() 中 HWComposer.cpp 中的代码块,用于转储图层内容/像素 到原始文件。

    getLayer()->acquireFenceFd = fenceFd;
private_handle_t *hnd = (private_handle_t*)getLayer()->handle; // the handle of the layer

/*code for checking layer contents*/
if(private_handle_t::validate(getLayer()->handle)==0){
ALOGD("beta: we are gonna read a valid buffer-> %08x", intptr_t(getLayer()->handle));
char filename[64];
memset(filename, 0, 64);
int name = clock();
sprintf(filename, "/data/dump.%08x.raw", intptr_t(getLayer()->handle));
if(getLayer()->acquireFenceFd >= 0){
int ret = sync_wait(getLayer()->acquireFenceFd, -1);
if(ret < 0){
ALOGD("beta: sync_wait failed");
} else{
FILE *file = fopen(filename,"w+");
//ALOGD("beta: writing pixels");
fwrite((void*)hnd->base, hnd->size, 1, file);
close(getLayer()->acquireFenceFd);
//getLayer()->acquireFenceFd = -1;
}
} else {
ALOGD("beta: fencefd not valid");
}
}

当我使用具有适当属性的 IrfanView 读取像素时,图像仅与实际内容有些相似,但颜色都被弄脏了。这背后的原因是什么?在我阅读内容时是否正在渲染缓冲区?我是 AOSP 的新手,如有任何帮助,我们将不胜感激。

最佳答案

如果您的主机(如果是模拟器)或设备支持图形加速,那么是的,您正在读取的缓冲区尚未完全呈现。最新的 Android 版本支持同步机制,这意味着缓冲区(层)可以在渲染时由 SurfaceFlinger 获取。它们受到防护机制的保护,该机制可确保不会显示未完全呈现的缓冲区。

关于android - 在 Android-surfaceflinger 中访问图层内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24184259/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com