【问题标题】:Accessing layer contents in Android-surfaceflinger在 Android-surfaceflinger 中访问图层内容
【发布时间】:2014-06-12 12:19:43
【问题描述】:

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

    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 完全陌生,如果有任何帮助,我将不胜感激。

【问题讨论】:

  • “颜色都被弄脏了”是什么意思?你能发布好/坏的样本图片吗? (您可能需要在外部网站上执行此操作并发布链接——我认为您需要更高的代表才能将它们内联)您在什么设备上进行测试?
  • 非常抱歉发布这个问题。发布后几分钟,我尝试了一个新的解决方案,一切正常!原来我没有在 IrfanView 中使用正确的分辨率。无缘无故浪费了一整天!但是有一个问题,我是否有必要等待 acquireFenceFd,因为它似乎也可以在没有它的情况下工作?

标签: android android-source surfaceflinger


【解决方案1】:

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2023-01-30
  • 2012-10-16
  • 1970-01-01
  • 1970-01-01
  • 2012-11-23
  • 1970-01-01
  • 2020-12-18
  • 1970-01-01
相关资源
最近更新 更多