公共成员函数 | |
virtual Status | getAcquireSync (EGLDisplay eglDisplay, EGLSyncKHR *eglSync)=0 |
创建并返回一个新的 EGLSync 对象,该对象在先前 libargus 捕获请求中对 Buffer 的所有操作完成后发出信号。更多... | |
virtual Status | setReleaseSync (EGLDisplay eglDisplay, EGLSyncKHR eglSync)=0 |
在 Buffer 释放之前,为其设置客户端提供的 EGLSync。更多... | |
静态公共成员函数 | |
static const InterfaceID & | id () |
保护成员函数 | |
~IEGLSync () | |
|
pure virtual |
创建并返回一个新的 EGLSync 对象,该对象在先前 libargus 捕获请求中对 Buffer 的所有操作完成后发出信号。
当为 Stream 启用同步支持时,即使硬件操作仍在 Buffer 的图像数据上挂起,libargus 也可以将 Buffer 输出到该流。在这种情况下,当客户端获取 Buffer 时,libargus 会将同步信息附加到 Buffer,客户端必须使用该同步信息来阻止对图像数据执行任何客户端操作,直到所有先前的 libargus 操作完成。未能阻止此同步信息可能会导致未定义的缓冲区内容。
此方法将创建并输出一个新的 EGLSync 对象,一旦 libargus 对 Buffer 的所有操作完成,该对象将发出信号。此 EGLSync 对象的所有权将赋予调用者,调用者必须根据需要等待同步对象,然后再使用 eglDestroySyncKHR 销毁它。允许多次调用此方法,并且每次调用都将创建并返回一个新的 EGLSync 对象。
此方法应仅在 Buffer 处于 acquired 状态时调用;即,在 Buffer 被 IBufferOutputStream::acquireBuffer 获取和被 IBufferOutputStream::releaseBuffer 释放之间的时间。如果在 acquired 状态之外调用,将返回 STATUS_UNAVAILABLE。
成功时,将返回 STATUS_OK,并且 'eglSync' 将写入新的 EGLSync 对象。请注意,即使返回 STATUS_OK,EGL_NO_SYNC_KHR 仍然是 'eglSync' 的有效输出;这表示 libargus 没有对 Buffer 执行任何挂起的操作,因此客户端在访问图像数据之前无需采取任何同步预防措施。因此,返回的 Status 代码应用于检测故障,而不是检查 EGL_NO_SYNC_KHR 输出。
[in] | eglDisplay | 将拥有返回的 EGLSync 对象的 EGLDisplay。 |
[out] | eglSync | 新创建的 EGLSync 对象的输出。此对象的所有权赋予客户端。 |
|
inlinestatic |
|
pure virtual |
在 Buffer 释放之前,为其设置客户端提供的 EGLSync。
当为 Stream 启用同步支持时,即使客户端在 Buffer 的图像数据上挂起了硬件操作,客户端也可以将 Buffer 释放回 libargus 以供将来捕获使用。在这种情况下,客户端必须向 libargus 提供一个 EGLSync 对象,该对象将在客户端的挂起操作完成时发出信号。然后,libargus 将等待此同步对象,以防止在客户端同步信号发出之前发生任何缓冲区操作。
此方法应仅在 Buffer 处于 acquired 状态时调用;即,在 Buffer 被 IBufferOutputStream::acquireBuffer 获取和被 IBufferOutputStream::releaseBuffer 释放之间的时间。如果在此期间之外调用,将返回 STATUS_UNAVAILBLE 且不会进行对象更新。否则,在 acquired 状态下调用时,此方法将设置将在 Buffer 被 IBufferOutputStream::releaseBuffer 释放时提供给 libargus 的 EGLSync,并将返回 STATUS_OK。成功后,EGLSync 对象的所有权将传递给 libargus;此后客户端对此 EGLSync 的进一步使用可能会导致未定义的结果或异常终止。如果在 acquired 状态下多次调用,则将替换任何先前设置的 EGLSync;libargus 将仅等待调用 releaseBuffer 之前最后设置的 EGLSync。
如果客户端在调用 releaseBuffer 时在 Buffer 上没有任何挂起的操作,则允许客户端跳过调用此方法,或者使用 EGL_NO_DISPLAY 和 EGL_NO_SYNC_KHR 调用它,以便 libargus 不必考虑任何同步要求,并且可以立即使用 Buffer。
[in] | eglDisplay | 创建所提供 EGLSync 对象的 EGLDisplay。 |
[in] | eglSync | libargus 在访问缓冲区之前必须等待的 EGLSync。 |