How would I go about implementing custom color management on the Xavier? In the SoC reference manual, I see that I could do this via the display controller, but I do not know how to access that. Or, if there are other provisions for hardware-accelerated color space conversions (look-up tables, color correction matrices, etc.) those would also work. Finally, if there is a way to apply ICC profiles via command line, that would also be useful.
The color management is implemented in the display kernel.
Please download the src from our download center and
-> kernel/nvidia/drivers/video/tegra/dc/ should have the LUT info.
Thanks–I have a few follow-up questions.
- Does this mean if I want to modify the LUT that I have to recompile the full kernel?
- To confirm, does this mean there is no way to apply ICC profiles from user space?
- Is there another provision to perform accelerated color space manipulations from user space, say by tapping into the ISP via gstreamer or some other approach?
AFAIK, currently there is no interface for ICC profile.
I don’t understand. Do you mean you want to change it through input buffer now instead of the output rendered on display?
Regarding (3), I want to perform color transformations on a video stream. The video stream will eventually be output to the display. I read the stream in from a camera using a driver from the camera company. Because the image is in memory, I was hoping there would be some built-in (in hardware, for lowest latency) way that I can perform color transformations. If there is an easy way to send images from memory through the ISP (as if they were coming in from a different camera), I would do that. Otherwise, I could write GPU kernels to do it, but I’m not sure if that’s easier than recompiling the kernel.
By the way, I haven’t yet found the LUT in the kernel source. Can you point to which file it’s in? And where would I find instructions to compile the kernel?
Thanks for the help.
Please refer to the lut array default_srgb_regamma_lut in nvdisplay/nvdisplay.c