Собственный код 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);

Кто-нибудь знает, можно ли это сделать в нативном коде, и если да, то как?

Спасибо

0 ответов

Другие вопросы по тегам