Unable to use .icc profile on dual-monitor display

------------------------------ ------------------------------ ------------------------------ ------------------------------ ----------

Hello,


Our lab is running PTB3 on Ubuntu 16.04 with an NVIDIA GeForce GTX 750 Ti card, using the latest NVIDIA graphics driver for Linux (370). 

We use a dual X-screen setup for running experiment scripts in PTB, with both monitors connected to the same GPU. Recently, we have been calibrating several of the monitors our lab uses for experiments in order to standardize color output, and to that end have been using an X-Rite i1 Display Pro calibration system to generate .icc profiles to port calibration settings across machines that will use the same monitor as a second display.

Unfortunately, in dual X-screen mode, NVIDIA hides the second monitor from Ubuntu's built-in settings manager, and that settings manager seems to be the only way to manually apply new .icc profiles to displays; Nvidia's X Server Settings tool provides no such functionality, and doesn't seem likely to support it anytime soon. In fact, if the Nvidia tool is opened at all, the color calibration settings are reset to default.

Looking through forums and documentation, I came across a mention of the IccProfile function here: http://docs. psychtoolbox.org/IccProfile; it appears to have been included in PTB2, but is not yet implemented in PTB3. It seems like this function, were it implemented, would precisely solve our problem, allowing us to apply specified .icc profiles to specified displays during runtime; is there any alternative function in PTB3 that allows you to apply .icc profiles in this way? Or would we need to find another way of calibrating monitors?

We very much appreciate any advice you might have.

Thanks very much,

Austin/John @ Tarrlab (Carnegie Mellon University)

------------------------------ ------------------------------ ------------------------------ ------------------------------ ----------


------------------------------ ------------------------------ ------------------------------ ------------------------------ --------

Hello,


--> Hi

Our lab is running PTB3 on Ubuntu 16.04 with an NVIDIA GeForce GTX 750 Ti card, using the latest NVIDIA graphics driver for Linux (370). 

We use a dual X-screen setup for running experiment scripts in PTB, with both monitors connected to the same GPU. Recently, we have been calibrating several of the monitors our lab uses for experiments in order to standardize color output, and to that end have been using an X-Rite i1 Display Pro calibration system to generate .icc profiles to port calibration settings across machines that will use the same monitor as a second display.

Unfortunately, in dual X-screen mode, NVIDIA hides the second monitor from Ubuntu's built-in settings manager, and that settings manager seems to be the only way to manually apply new .icc profiles to displays; Nvidia's X Server Settings tool provides no such functionality, and doesn't seem likely to support it anytime soon. In fact, if the Nvidia tool is opened at all, the color calibration settings are reset to default.

--> It's probably more that most GUI environments by default only run on X-Screen 0 and ignore other X-Screens, unless the system is specifically configured for that.

--> Try if this works for <CalibrationFile>

dispwin -v -display :0.1 <CalibrationFile>

I never had the need to set or use a ICC profile, but that should hopefully do the trick. The 1 is the X-Screen number. dispcal and dispread might be other interesting commandline tools wrt. color profiles and calibration.

Many tools and applications which are not prepared for multi-x-screen operation can be configured to address a different X-Screen by setting the DISPLAY environment variable accordingly, e.g.,

export DISPLAY=:0.1 ; command

to run "command" operating on X-Screen 1.

Looking through forums and documentation, I came across a mention of the IccProfile function here: http://docs. psychtoolbox.org/IccProfile; it appears to have been included in PTB2, but is not yet implemented in PTB3. It seems like this function, were it implemented, would precisely solve our problem, allowing us to apply specified .icc profiles to specified displays during runtime; is there any alternative function in PTB3 that allows you to apply .icc profiles in this way? Or would we need to find another way of calibrating monitors?

--> It never got ported from the old MacOS9, apparently nobody ever missed it.

best,
-mario

We very much appreciate any advice you might have.

Thanks very much,

Austin/John @ Tarrlab (Carnegie Mellon University)

------------------------------ ------------------------------ ------------------------------ ------------------------------ ----------




------------------------------------------------------------------------------------------------------------------------------------------------

---In PSYCHTOOLBOX@yahoogroups.com, <mario.kleiner@...> wrote :

What was its output when you tried? I tested it here, and it couldn't read the .icc profiles i had around - or complained it couldn't find the "vcgt" tag for gamma tables, probably because they are just random color profile stuff ending in .icc, probably for printers and cameras, not anything created from an actual display calibration. But using its test modes it did control the gamma tables on the open-source display drivers, e.g., dispwin -r -display :0.1 worked to first load a darker lut, then a brighter lut, then restoring to original lut.

--> The output from running dispwin -v -display :0.1 <calibration_file> was as follows:

                    $dispwin -v -display :0.1 ~/.local/share/icc/LA2405.icc
                    About to open dispwin object on the display
                    Argyll 'V1.8.3' Build 'Linux 64 bit' System 'Linux #57-Ubuntu SMP Tue Sep 6 15:42:33 UTC 2016                     4.4.0-38-generic x86_64'
                    Dispwin: Error - We don't have access to the VideoLUT for loading

--> Running dispwin -r display :0.1 resulted in the same error message: "We don't have access to the VideoLUT."

Running "xtrace dispwin -r" shows it uses the same gamma table loading calls as Psychtoolbox does, so i'd expect it to be able to control the lut's. Does PTB's Screen('LoadNormalizedgammatable' ,...) stuff, e.g., ClutAnimDemo(0), work?

--> ClutAnimDemo(0) does work in Psychtoolbox, only because I found a lengthy workaround involving        resetting X server config and loading the .icc profile manually through the OS. Something I'm finding odd (and forgive me if this seems naive, but I'm fairly new to the back-end of graphics processing) is that based on the output of dispwin with xtrace, the gamma loading table call is querying RandR directly, and is actually receiving the table of gamma values, but then complaining that it can't access the LUT.

--> I found a post on the Nvidia forums that seems to discuss this same issue, here: 364.12 - GTX 660 - Can't access videolut to load display profile - NVIDIA Developer Forums

--> From your experience, is it possible that some internal gamma settings used by the driver as a protocol for communicating with RandR are just not lining up properly? The above forum posting involves an older driver & card, but the problem seems similar.



Best,
Austin @ Tarrlab




Updating ArgyllCMS to 1.9.1 did the trick! VideoLUTs can be accessed properly for both monitors now - everything seems to work fine. The only remaining issue (a non-issue, really) is that .icc profiles need to be v2, not v4, in order to be recognized by dispwin (there's some slight difference in the formatting for v4 that seems to make ArgyllCMS unhappy). I only mention this in the event that others have the same issue and land on this thread; several hardware/software monitor calibration packages (including the X-Rite i1 Display Pro with i1 Profiler software that we're using) default to v4, but allow you to opt for v2 during .icc profile generation.

Thanks for your help!

Best,
Austin @ Tarrlab