Я читаю содержимое слоя, чтобы проверить, совпадает ли его содержимое с отображаемым приложением на экране. Я читаю содержимое до того, как оно будет объединено с помощью SurfaceFlinger. Вот блок кода в HWCLayerVersion1::setAcquireFenceFd() в HWComposer.cpp для вывода содержимого слоя/пикселей< /strong> в необработанный файл.
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, и любая помощь будет оценена по достоинству.