The thoughts, opinions, happenings, and just plain ramblings of a seemingly boring person.

Monitor Colour Problems Over HDMI

colortestAlthough I've studied and worked in technology for over 15 years, every now and then an issue comes up which totally baffles me. Yesterday was one of those times.

The new monitor that I bought back in January started stuffing up a few weeks ago (weird lines, tint shifts), and I took it in for repair. Since then I've been using a borrowed monitor from work, and yesterday I got the repaired monitor back up and running again.

Ever since I got the new monitor back in January, the colours weren't quite right. They were generally dull, and I had to do a lot of tweaking in the monitor settings to get them looking ok, which was pretty disappointing for a supposedly factory colour-calibrated IPS panel.

After the panel was replaced during the repair, things were still the same, but this timeย before mounting it I noticed that when I had tested the monitor using my laptop with a VGA connection, the colours looked great. I started doing some searching of colour problems over HDMI, and stumbled upon this wonderfully explained article describing what had been the problem the whole time: Correcting HDMI Colour on Nvidia and AMD GPUs.

To summarise the article: most TVs require a different colour signal compared to computer monitors in order to look good, and most graphics drivers when connected to a display that is Full HD (1920x1080) over a HDMI connection, will assume that the display is a TV. However if the display is actually a computer monitor, this will mean that the monitor will be sent a wrong colour signal.

I've only experienced this issue now because this monitor is the first one that I've owned that only has HDMI ports for digital input; previously I've always used a DVI connection.

For my own record, below is how to fix the issue in my AMD graphics card driver in Windows, and on my work Lenovo T450s running Fedora.

Edit July 2017, new AMD driver: For Windows AMD driver 17.7.2 and later:

  1. Open the AMD Crimson Radeon settings, and click Display in the menu bar.
  2. For the Pixel Format setting, change it from YCbCr 4:4:4 Pixel Formatย  to RGB 4:4:4 Pixel Format PC Standard (Full RGB).

For Windows AMD driver pre-17.7.2:

  1. Open the AMD Crimson Radeon settings, and click Preferences in the bottom bar.
  2. Click Radeon Additional Settings.
  3. In the window that opens, under My Digital Flat-Panels, select Pixel Format.
  4. For the Color Pixel Format setting, change it from YCbCr 4:4:4ย  to RGB 4:4:4 Pixel Format PC Standard (Full RGB).
    Radeon Pixel Format

For my T450s' second display on Fedora (and probably any Linux running the X Window System (X11)):

  1. In a terminal, find your external monitor's output name by executing xrandr.
  2. Change the colour signal with the following command, using the output name from the previous step. In my case, it was HDMI1:
    xrandr --output HDMI1 --set "Broadcast RGB" "Full"

    For my T450s, although it says that HDMI1 is the display, sometimes I have to use DP1 as the output name instead in order to have an effect.

  3. You will have to run the above command at every login. I've created a script that gets executed on each login to do it for me only if my specific home monitor is connected to the particular laptop port. (It took me ages to figure out a reliable method of detecting only the home monitor!).

This kind of thing is exactly the type of usability problem that makes me feel sorry for 'regular' consumers who wouldn't even know where to start troubleshooting something like this (heck, after 8 months I barely did).

IMO, it could be simply prevented: At least for AMD on Windows, how about a simple prompt asking if the display is a TV or a monitor, and change the setting accordingly?

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.