Vlad Pomogaev

Home

Recording "1440x1080" HDMI Output on Canon 1200D/T5 with Macrosilicon HDMI Dongle

Jan 1st 2025

Happy New Year! I started off the year strong by soldering some BrightBoard panel lights. Then, I prototyped the lights, microphone, and camera setup. I want to get back into YouTube; probably educational content. My setup consisted of a three-point lighting setup with my panels, an audio-technica ATR2100x-USB (works absolutely wonders when it comes to noisy backgrounds), and an old Canon T5 with a kit lens.

My plan with the Canon was to record it's HDMI output using a ~$15 USB 2.0 HDMI capture dongle, the one based on the MS2109 Macrosilicon chip. The plan wasn't 100% successful. Unfortunately, it seems as though this dongle either does not send, or sends an improper EDID HDMI handshake, which causes the camera to drop the resolution down to around ~480p? Not sure. Some people online say that this problem is solvable with a passthrough HDMI dongle that negotiates a 1080p EDID for you. They are a bit more expensive at $20 CAD, so I thought I would try something else.

BTW, as an aside, all of these HDMI capture cards off Aliexpress are frustratingly, scams. They advertize 4K, 1080P, 60 fps, etc etc... but stream USB 2.0, even if they say they are USB 3.0 and/or have a blue USB port. I'll repeat the somewhat common knowledge about this particular dondle, and that's that it can take inputs up to 4K it seems, but compresses the video down to 720p, before possibly upscaling it back up to 1080p. It also plays around with color modes, and can lose up to 50% of the color info? I'm not sure, but all I need is something that works more or less and can negotiate 720p or the advertized 1080p.

Anyways, I run Magic Lantern on my Canon T5. An awesome software that can expand the settings of the camera and make it slightly more professional. Basically, I noticed that there was a mode for forcing VGA output on the HDMI in the ML menus. So I thought I would try to extend the firmware to possibly force 1080P output on the HDMI instead.

The hardest part is getting the source code. It seems like the 1200D code was lost in a branch on bitbucket, and then development moved to Heptapod, and then progress slowed down, and now progress is restarted by a few brave FOSS developers (standing on the shoulders of giants) on GitHub. Unfortunately, the 1200D branch wasn't there. I tried building the old branch, but I noticed that the build system has been changed a bit (for the seemingly better) on the git project, so I thought I would try to integrate the old 1200D code into the git repo.

Starting by looking at each of the 1200D platform files and comparing them to the git's 1100D files, here were the differences:

Okay, so at this point I think I need to go back into the (ML-SETUP.FIR??) to confirm that the changes I made to the Makefile point to the correct addresses, and also if the FPS counter is in the right place in the Canon firmware (???).

Okay nvm, I found the TODO list and a bunch of errors in the build proccess. There's a lot of structural TODO's that make me regret trying to port over to the new git version of this project.

Change of plans. The build system for ML is way too complex for the time I want to spend on this project. Instead, I found this github which links to this github. It seems as though we can just force the sink (the MS2109 chip) to give out a preset EDID if we flash it with the appropriate tools!

At first I tried the example EDID that was given on the latter github link; but that unfortunately didn't work. It was the EDID from a DELL S2421HN, and unfortunately, according to a EDID decoder, the DELL actually provided an invalid EDID... Weird. I tried using a generator from here, but it didn't work as this one didn't generate EDIDs with a second block (so the EDID was only 128 bytes), and the flashing program expected the EDID to be 256. I didn't want to edit the program in a brute-force way to accept the shorter EDID, so I kept looking.

Next, I tried hooking up the Canon T5 to various screens I had around the house. Interestingly, the only monitor with the camara; ie gave the full ~1080p output (sans side bars) was my Sony TV. I used the Monitor Asset Manager to steal its EDID, used ms21xx-firmware to generate firmware, flashed the HDMI dongle.. and.... nothing...

I was kind of stumped, but then I noticed in the flashing software there was greyed out checkboxes for additional HDMI handshake settings. I couldn't get to those settings via ms21xx-firmware, but I did notice that they were probably between bytes 0x04 and 0x05 in the file. So after some trial and error, I found that setting bit 0 of byte 0x05 allowed the proper handshake to occur, and my HDMI capture system was now working!

If you are a wandering Googler who happened to have exactly the same problem, you can find the patched firmware here:

patched.bin (1.8 kB)

I had to use a Windows VM with VirtualBox because my OS is Ubuntu. The highlighted setting is the one I needed to enable to get this thing to work.

This capture system actually isn't much better than what is offered by the EOS utility. And you also need Magic Lantern to remove the canvas overlays and set the mode to 16x9 in the advanced setting's menu. But it does allow me to use OBS really easily to capture footage, which automatically syncs it with my microphone. All in all, this was almost an entire days worth of fiddling. Happy New Year!

Here's a sample taken from a video taken from the HDMI capture dongle. It's not the greatest in terms of resolution and clearness, but it's still much better than a webcam I would have otherwise used.

Here's some of the settings you need to set on the camera to make the black bars go away as much as possible: