0
我正在研究一个涉及读取要由surfaceflinger合成的图层的内容的项目。阅读android层的内容
我特别需要检查要合成的图层是否全部为1位0或全0位。
这是在SurfaceFlinger合成之前应用一些优化。
我通过adb-logcat(通过添加我自己的日志消息)跟踪创建缓冲区,但无法找到读取图层实际内容的方法。
任何人都可以告诉我,如果这是可能的,如果是,如何?
我正在研究一个涉及读取要由surfaceflinger合成的图层的内容的项目。阅读android层的内容
我特别需要检查要合成的图层是否全部为1位0或全0位。
这是在SurfaceFlinger合成之前应用一些优化。
我通过adb-logcat(通过添加我自己的日志消息)跟踪创建缓冲区,但无法找到读取图层实际内容的方法。
任何人都可以告诉我,如果这是可能的,如果是,如何?
一般情况下,不是。例如,如果图层显示受DRM保护的视频,则无法读取数据。
对于不受保护的图层,您可以使用glReadPixels()
来读取像素值 - SurfaceFlinger的屏幕截图代码中有一些代码可用于检查空白屏幕截图 - 但这样做会很慢。
请记住,并非所有图层都是RGB。如果图层是YUV,则“全零”图层实际上会是暗绿色。
我正在跟踪缓冲区分配(使用adb logcat),发现返回一个缓冲区句柄(类型为private_handle_t),该句柄也有一个基地址。我可以使用这个读取缓冲区内容吗?如果是的话,因为每个图层都在缓冲区中结束,所以在组成之前不能读取图层内容?如果我错了,请纠正我。 – sg1993
在你可以访问它之前,你必须锁定它。锁定它可能涉及来自其他地方的memcpy,缓存刷新或其他活动,并且如果缓冲区受DRM保护(因为它生活在CPU无法触摸的受信任的内存中)可能会失败。如上所述,您可能还需要检查gralloc缓冲区格式以了解您正在查看的内容。假设缓冲区包含渲染器输出,您还需要确保相关的栅栏已完成信号通知。另请参阅http://source.android.com/devices/graphics.html。 – fadden