C++程序  |  37行  |  1.06 KB

#include "surfaceInterface.h"

#include <cutils/log.h>
#include <gui/Surface.h>

class SurfaceInterface : public android::ANativeObjectBase<
                                    ANativeWindow,
                                    android::Surface,
                                    android::RefBase> {
public:
    static SurfaceInterface* get();
    void setAsyncMode(ANativeWindow* anw, bool async) {
        ALOGD("SurfaceInterface::%s: set async mode %d", __func__, async);
        window = anw;
        android::Surface* s = android::Surface::getSelf(window);
        s->setAsyncMode(async);
        window = NULL;
    }
    ANativeWindow* window;
};

static SurfaceInterface* sSurfaceInterface = NULL;

SurfaceInterface* SurfaceInterface::get() {
    if (!sSurfaceInterface)
        sSurfaceInterface = new SurfaceInterface;
    return sSurfaceInterface;
}

extern "C" void surfaceInterface_init() {
    SurfaceInterface::get();
}

extern "C" void surfaceInterface_setAsyncModeForWindow(void* window) {
    SurfaceInterface::get()->setAsyncMode((ANativeWindow*)window, true);
}