The only HDMI encoder I have seen so far with easily accessible (i.e. leaked) documentation is the CAT6613/IT6613 from ITE, which also happens to be available for purchase in single quantities from a number of Chinese retailers. It seems to be used in the OSSC and several FPGA development boards, so it's about as close to being an unofficial standard for open source projects as it could be.
FWIW, yes HDMI is still pretty simple, but not as simple as you describe it. Even though there are 3 pairs of data it's not one pair R, one pair G, one pair B (highest-bandwidth HDMI uses 4 pairs), it's just one data bus. The data pairs aren't only used for data colors, but also conveys audio, and info frames (which will include various stuff like HDR or VRR metadata). Of course there is the matter of DRM: the content will often be encrypted (but negotiation of that encryption happen separately, over I2C)
I did a tiny HDMI implementation in an FPGA for a project, the TMDS implementation was what took the longest.
You are correct. Though as part of my studies (and curiosity, of course) I did end up analyzing the signalling protocol. The side-effect of standardizing line protocols is that it offers an abstraction for the engineers working with it. I didn't have to understand the signalling methods per se to use HDMI in my project.
> FWIW, yes HDMI is still pretty simple, but not as simple as you describe it.
I should have added that at the time I used it, HDMI was still in the 1.0 spec (1080i, 60Hz max), which was effectively DVI. Much has changed since then.
Next in line is BPF, which is also unclear.
BPF is anything but simple.
Another use case for I2C is device identification: since I2C-interfaced ROMs are so cheap, it's common to embed them in various types of peripherals and have the host read them out to retrieve information about the peripheral. This is how your PC gets to know which resolutions are supported by your monitor [2] (VGA, DVI and HDMI all have dedicated I2C pins for this purpose) and which type of RAM you have installed [3], for instance.
[1] https://en.wikipedia.org/wiki/I%C2%B2C
[2] https://en.wikipedia.org/wiki/Extended_Display_Identificatio...
HDMI keeps normal analog video timing with blank/hblank, etc. Stuffing anything other than video is pretty complex and a mish mash of finding weird gaps in the video data.
DisplayPort is it's own packet based protocol. Sending things other than video are just other packet types over the same link.