Собственный код Android: назначение поверхности определенному дисплею
Я ищу способ назначить объект Surface (собственное окно) для отображения, чтобы буферы, отправленные в это собственное окно, отображались на этом конкретном дисплее, а не на основном дисплее. Я хотел бы сделать это в родном коде.
В Java это можно сделать с помощью 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);
Кто-нибудь знает, можно ли это сделать в нативном коде, и если да, то как?
Спасибо