Most Efficient Method to Collapse(Merge) Multiple 3D LUTs Into One

Hi Folks,

We are using GStreamer to create a player and create a plugin that will do 3D LUT processing of image data. We may have up to 4 different 3D LUTs in use at the same time. I’m looking at using Cuda to perform parallel processing to merge the multiple 3D tables into one when appropriate so we are only using one 3D LUT for all the image processing. Is there any preferred way to do this? I’m also concerning about not using too much GPU resources that may cause a negative impact on the 3D LUT processing by causing fps to slow down, etc… Looking forward to your ideas.

Photoshop will do it. Open any image, add adjustment layers with the luts in the order you want to apply them. Then there is an option under the file menu somewhere I believe to make a look up table from your adjustment layers stack in a variety of formats. Here is a guide:

https://digital-photography-school.com/create-your-own-style-using-luts-photoshop/

Edit: I missed the part where you wanted to make a new lut on the fly. I don’t have any suggestions for that other than the ask if your plugin is capable of loading one from disk dynamically. If it is, you could use some existing open source software to merge the luts in a separate process and then load it into your plugin. It doesn’t have to use the gpu. It could run on lower priority on the cpu. You would have to know a fair amount about gtk, glib and friends to pull it off (launch the process when a user changes the lut stack, monitor it, load the lut when done, and display progress of all of it).

As I wrote this is a GStreamer plugin not a photo shop plugin.

I wasn’t suggesting it was, however if your plugin uses .cube format (or pretty much any other), you could use Photoshop or any other open source lut combining software to combine your lut stack in the background and then have your plugin load the finished product. If you don’t mind Python, there is this:

https://github.com/gregcotten/pylut

I have no idea what the speed is like. At quick glance it appears to be a pure Python implementation.

Hi,
Please check our suggestion of using tegra_multimedia_api:
https://devtalk.nvidia.com/default/topic/1067094/jetson-nano/possible-to-use-3d-textures-for-3d-lut-implementation-or-/post/5405064/#5405064

For using CUDA in gstreamer pipeline, you can try nvivafilter plugin. Below is a sample:
https://devtalk.nvidia.com/default/topic/1046218/jetson-tx2/unable-to-overlay-text-when-using-udpsrc-/post/5310313/#5310313