I need some guidance concerning the behavior of our 3D LUT image processing GStreamer plugin when real time mode changes occur. Lets say I have a processing mode and pass through mode. Should I reroute the plugins’ in/out pads to bypass the plugin or have the plugin just do no processing and the image data comes in and goes right back out and leave the routing of the pads alone?
Second question is if another process is creating the 3D LUT for the plugin to use what is the best way to have the plugin aware that the new 3D LUT is available. Can I have a custom property where I set the cuda memory location where the new 3D LUT is stored or ?
We are using the GStreamer media framework for our player and we using plugin(i.e. elements) to extend GStreamer to perform 3D LUT processing in the image chain. Unfortunate GStreamer does support OpenGL 3D textures for OpenGL ES versions. So this question is geared toward a GStreamer expert that can help get 3D textures implemented some other way.
When we get NvBuffer fd, we can call below APIs to get EGLImage:
/**
* Creates an `EGLImage` instance from `dmabuf-fd`.
*
* @param[in] display `EGLDisplay` object used during the creation of `EGLImage`.
* If NULL, the nvbuf_utils API uses its own EGLDisplay instance.
* @param[in] dmabuf_fd `DMABUF FD` of buffer from which `EGLImage` to be created.
*
* @returns `EGLImageKHR` for success, `NULL` for failure
*/
EGLImageKHR NvEGLImageFromFd (EGLDisplay display, int dmabuf_fd);
/**
* Destroys an `EGLImage` object.
* @param[in] display `EGLDisplay` object used to destroy `EGLImage`.
* If NULL, the nvbuf_utils API uses its own EGLDisplay instance.
* @param[in] eglImage `EGLImageKHR` object to be destroyed.
*
* @returns 0 for success, -1 for failure
*/
int NvDestroyEGLImage (EGLDisplay display, EGLImageKHR eglImage);
If it is possible to perform OpenGL 3D texture on EGLmage, this sample should be a good reference. FYR.