我正在寻找一种方法将Surface(本机窗口)对象分配给显示器,以便提交到该本机窗口的缓冲区将呈现给该特定显示而不是主显示。我想在本机代码中这样做。
在Java中,可以使用Presentation API完成。
在本机代码中,我尝试调用SurfaceComposerClient::setDisplaySurface()
,向其显示IBinder
对象(由SurfaceComposerClient::getBuiltInDisplay()
返回)和IGraphicBufferProducer
对象(由Surface::getIGraphicBufferProducer()
返回。
问题是显示变为空白,即使我向本机窗口提交缓冲区也没有显示。
如果我不打电话给SurfaceComposerClient::setDisplaySurface()
,则原生窗口会显示在主显示屏上。
示例代码:
sp<IBinder> display(SurfaceComposerClient::getBuiltInDisplay(1));
SurfaceComposerClient::getDisplayInfo(display, &displayInfo);
surfaceControl = surfaceComposerClient->createSurface(String8(""), displayInfo.w, displayInfo.h, HAL_PIXEL_FORMAT_RGB_565);
sp<Surface> surface = surfaceControl->getSurface();
sp<IGraphicBufferProducer> iGraphicBufferProducer = surface->getIGraphicBufferProducer();
SurfaceComposerClient::setDisplaySurface(display, iGraphicBufferProducer);
有没有人知道这是否可以在本机代码中完成,如果是这样的话?
由于