7

我正在寻找一种将 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);

有谁知道这是否可以在本机代码中完成,如果可以,如何?

谢谢

4

0 回答 0