./system/core/include/system/window.h:326:ANativeWindow()

来源:互联网 发布:电脑淘宝代收货怎么弄 编辑:程序博客网 时间:2024/06/02 12:00

        最近看Android4.1.2 多媒体播放这一块源码老是出现ANativeWindow()这个类,不知道干嘛的!老是搜来搜去!找到它的定义!做个笔记!研究研究!

        源码文件:system/core/include/system/window.h

       

struct ANativeWindow{#ifdef __cplusplus    ANativeWindow()        : flags(0), minSwapInterval(0), maxSwapInterval(0), xdpi(0), ydpi(0)    {        common.magic = ANDROID_NATIVE_WINDOW_MAGIC;        common.version = sizeof(ANativeWindow);        memset(common.reserved, 0, sizeof(common.reserved));    }    /* Implement the methods that sp<ANativeWindow> expects so that it       can be used to automatically refcount ANativeWindow's. */    void incStrong(const void* id) const {        common.incRef(const_cast<android_native_base_t*>(&common));    }    void decStrong(const void* id) const {        common.decRef(const_cast<android_native_base_t*>(&common));    }#endif    struct android_native_base_t common;    /* flags describing some attributes of this surface or its updater */    const uint32_t flags;    /* min swap interval supported by this updated */    const int   minSwapInterval;    /* max swap interval supported by this updated */    const int   maxSwapInterval;    /* horizontal and vertical resolution in DPI */    const float xdpi;    const float ydpi;    /* Some storage reserved for the OEM's driver. */    intptr_t    oem[4];    /*     * Set the swap interval for this surface.     *     * Returns 0 on success or -errno on error.     */    int     (*setSwapInterval)(struct ANativeWindow* window,                int interval);    /*     * Hook called by EGL to acquire a buffer. After this call, the buffer     * is not locked, so its content cannot be modified. This call may block if     * no buffers are available.     *     * The window holds a reference to the buffer between dequeueBuffer and     * either queueBuffer or cancelBuffer, so clients only need their own     * reference if they might use the buffer after queueing or canceling it.     * Holding a reference to a buffer after queueing or canceling it is only     * allowed if a specific buffer count has been set.     *     * Returns 0 on success or -errno on error.     */    int     (*dequeueBuffer)(struct ANativeWindow* window,                struct ANativeWindowBuffer** buffer);    /*     * hook called by EGL to lock a buffer. This MUST be called before modifying     * the content of a buffer. The buffer must have been acquired with     * dequeueBuffer first.     *     * Returns 0 on success or -errno on error.     */    int     (*lockBuffer)(struct ANativeWindow* window,                struct ANativeWindowBuffer* buffer);    /*     * Hook called by EGL when modifications to the render buffer are done.     * This unlocks and post the buffer.     *     * The window holds a reference to the buffer between dequeueBuffer and     * either queueBuffer or cancelBuffer, so clients only need their own     * reference if they might use the buffer after queueing or canceling it.     * Holding a reference to a buffer after queueing or canceling it is only     * allowed if a specific buffer count has been set.     *     * Buffers MUST be queued in the same order than they were dequeued.     *     * Returns 0 on success or -errno on error.     */    int     (*queueBuffer)(struct ANativeWindow* window,                struct ANativeWindowBuffer* buffer);    /*     * hook used to retrieve information about the native window.     *     * Returns 0 on success or -errno on error.     */    int     (*query)(const struct ANativeWindow* window,                int what, int* value);    /*     * hook used to perform various operations on the surface.     * (*perform)() is a generic mechanism to add functionality to     * ANativeWindow while keeping backward binary compatibility.     *     * DO NOT CALL THIS HOOK DIRECTLY.  Instead, use the helper functions     * defined below.     *     *  (*perform)() returns -ENOENT if the 'what' parameter is not supported     *  by the surface's implementation.     *     * The valid operations are:     *     NATIVE_WINDOW_SET_USAGE     *     NATIVE_WINDOW_CONNECT               (deprecated)     *     NATIVE_WINDOW_DISCONNECT            (deprecated)     *     NATIVE_WINDOW_SET_CROP              (private)     *     NATIVE_WINDOW_SET_BUFFER_COUNT     *     NATIVE_WINDOW_SET_BUFFERS_GEOMETRY  (deprecated)     *     NATIVE_WINDOW_SET_BUFFERS_TRANSFORM     *     NATIVE_WINDOW_SET_BUFFERS_TIMESTAMP     *     NATIVE_WINDOW_SET_BUFFERS_DIMENSIONS     *     NATIVE_WINDOW_SET_BUFFERS_FORMAT     *     NATIVE_WINDOW_SET_SCALING_MODE       (private)     *     NATIVE_WINDOW_LOCK                   (private)     *     NATIVE_WINDOW_UNLOCK_AND_POST        (private)     *     NATIVE_WINDOW_API_CONNECT            (private)     *     NATIVE_WINDOW_API_DISCONNECT         (private)     *     NATIVE_WINDOW_SET_BUFFERS_USER_DIMENSIONS (private)     *     NATIVE_WINDOW_SET_POST_TRANSFORM_CROP (private)     *     */    int     (*perform)(struct ANativeWindow* window,                int operation, ... );    /*     * Hook used to cancel a buffer that has been dequeued.     * No synchronization is performed between dequeue() and cancel(), so     * either external synchronization is needed, or these functions must be     * called from the same thread.     *     * The window holds a reference to the buffer between dequeueBuffer and     * either queueBuffer or cancelBuffer, so clients only need their own     * reference if they might use the buffer after queueing or canceling it.     * Holding a reference to a buffer after queueing or canceling it is only     * allowed if a specific buffer count has been set.     */    int     (*cancelBuffer)(struct ANativeWindow* window,                struct ANativeWindowBuffer* buffer);    void* reserved_proc[2];};

      以下摘自网络:

              1)Surface类继承了ANativeWindow类。ANativeWindow类是连接OpenGL和Android窗口系统的桥梁,即OpenGL需要通过ANativeWindow类来间接地操作Android窗口系统。这种桥梁关系是通过EGL库来建立的,所有以egl为前缀的函数名均为EGL库提供的接口。

                2)FramebufferNativeWindow的父类ANativeWindow的成员变量flags、xdpi、ydpi、minSwapInternal和maxSwapInterval的值,以便OpenGL库可以知道系统当前所使用的硬件帧缓冲区的一些属性,例如,点密度、缓冲区数据交换时间间隔等信息。这些成员变量的具体含义可以参考前面Android应用程序请求SurfaceFlinger服务创建Surface的过程分析一文所提到的Surface类的初始化过程。
                
 

原创粉丝点击