请教各位大大,在实现overlay系统时遇到了以下一些问题,望赐教:
1.自带的test-overlay测试程序总是编译出错
frameworks/base/include/utils/RefBase.h:323: error: cannot convert 'android::SurfaceControl* const' to 'android::Surface*' in initialization ,将createSurface的返回类型改为SurfaceControl后就可以编译
通过,这样做对实际的surface create有无影响?
2.overlay系统的control device是在displayhardware初始化的时候打开的,这个初始化是在系统起来后就已经
完成的吗?
3.经过1的改动后编译成的测试程序,在ui层就返回了一个空的overlayRef,根本调不到surfaceflinger中的LayerBuffer,
这是什么原因造成的,跟1中所做的改动有关吗?
望板上各位大大帮帮忙,不吝赐教,困扰很多天了!

解决方案 »

  1.   

    gcc -version
    g++ -version
    看你的gcc是哪个版本的。如果是大于4.3版本的,那就跟新到4.3版本
      

  2.   

    我在移植的时候也在E/SurfaceFlinger(  836): GL error 0x0505这里死了。不知道是什么原因。系统加载图形系统的时候就死了。
      

  3.   

    1. 我用的4.3编译没问题
    2. 是的,但是overlay需要用户自己实现的,默认情况下是没有这个系统的。你看看out/target/product/<platform>/system/lib/hw 下有没有overlay.xxx.so 这样的库,如果没有,绝对是起不来的。 如果你有的话,看看overlay.xxx.so中的xxxx是不是符合你的系统,这个在logcat中可以看到你请求的xxxx是什么的。  displayHardware的init的code:你可以打trace
     
        mOverlayEngine = NULL;
        if (hw_get_module(OVERLAY_HARDWARE_MODULE_ID, &module) == 0) {
            overlay_control_open(module, &mOverlayEngine);
    LOGE("ERROR! hw_get_module OK %s %d!!!", __FILE__, __LINE__);
        }
    else
    {
    LOGE("ERROR! can not open overlay%s %d!!!", __FILE__, __LINE__);
    }3. 在layer buffer的create overlay部分,有:
    LayerBuffer::OverlaySource::OverlaySource(LayerBuffer& layer,
            sp<OverlayRef>* overlayRef, 
            uint32_t w, uint32_t h, int32_t format)
        : Source(layer), mVisibilityChanged(false),
        mOverlay(0), mOverlayHandle(0), mOverlayDevice(0)
    {
        overlay_control_device_t* overlay_dev = mLayer.mFlinger->getOverlayEngine();
        if (overlay_dev == NULL) {
            // overlays not supported, 
      LayerBuffer::OverlaySource::OverlaySource %s %d", __FILE__, __LINE__);
            return;
        }
    ...当没有找到overlay dev的时候,直接返回,没有带回OverlayRef,这样overlayRef就是NULL了
    综上,你没有实现overlay。在android根目录上建一个vendor目录,自己实现一下吧。
    你可以参考下ti的实现:
    http://android.git.kernel.org/?p=platform/hardware/ti/omap3.git;a=summary