Android原生代码:将Surface分配给特定显示

时间:2014-10-30 18:39:06

标签: android native surfaceflinger

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

有没有人知道这是否可以在本机代码中完成,如果是这样的话?

由于

0 个答案:

没有答案