Android
Overlay学习
1、 测试代码
frameworks/base/libs/surfaceflinger/tests/overlays/overlays.cpp提供了一个简单的overlay调用流程,可惜这个测试程序有错误,
在sp surface = client->createSurface(getpid(), 0, 320, 240,
PIXEL_FORMAT_UNKNOWN,
ISurfaceComposer::ePushBuffers);
这句话编译不过去,错误在Surface的申请,和overlay无关。
我们来看看这段代码:
int
main(int argc, char** argv)
{
// set up the thread-pool 建立线程池
sp proc(ProcessState::self());
ProcessState::self()->startThreadPool();
// create a client to surfaceflinger 创建一个SurfaceFlinger client
sp client = new SurfaceComposerClient();
// create pushbuffer surface 创建一个surface,最后那个参数是类型?
sp surface = client->createSurface(getpid(), 0, 320, 240,
PIXEL_FORMAT_UNKNOWN, ISurfaceComposer::ePushBuffers);
// get to the isurface 取得isurface接口
sp isurface =
Test::getISurface(surface);
printf("isurface = %p/n",
isurface.get());
// now request an overlay 创建一个overlay
sp ref = isurface->createOverlay(320, 240,
PIXEL_FORMAT_RGB_565);
sp overlay = new
Overlay(ref);
/*
* here we can use the overlay API
创建好overlay后,即可使用overlay的API,这些都对应到overlay HAL的具体实现
*/
overlay_buffer_t buffer;
overlay->dequeueBuffer(&buffer);
p