bool Hwcomposer::initialize() { int err; log.d("initialize"); // open frame buffer device hw_module_t const* module; err = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module); if (err) { log.e("Hwcomposer::initialize: failed to load gralloc module, %d", err); return false; } IMG_gralloc_module_public_t *imgGrallocModule; imgGrallocModule = (IMG_gralloc_module_public_t*)module; // open frame buffer device err = framebuffer_open(module, (framebuffer_device_t**)&mFBDev); if (err) { log.e("Hwcomposer::initialize: failed to open frame buffer device, %d", err); return false; } mFBDev->bBypassPost = 1; // create display plane manager mPlaneManager = createDisplayPlaneManager(); if (!mPlaneManager || !mPlaneManager->initialize()) { log.e("initialize: failed to create display plane manager"); goto dpm_create_err; } // create display device for (int i = 0; i < IDisplayDevice::DEVICE_COUNT; i++) { IDisplayDevice *device = createDisplayDevice(i, *mPlaneManager); if (!device || !device->initialize()) { log.e("initialize: failed to create device %d", i); continue; } // add this device mDisplayDevices.insertAt(device, i, 1); } mInitialized = true; return true; device_create_err: for (size_t i = 0; i < mDisplayDevices.size(); i++) { IDisplayDevice *device = mDisplayDevices.itemAt(i); delete device; } dpm_create_err: framebuffer_close((framebuffer_device_t*)mFBDev); mInitialized = false; return false; }