Video grabber MS2130: the good old MS2109 on steroids. At least it was... 😕 #499
Replies: 93 comments 376 replies
-
|
Hi Awawa, Awesome work on the above, I've just got one of these on order now, I was wondering if you use a HDMI splitter and if so which one? Im not sure if they have limiting factors or if its legit just an in and out so thought I'd ask. Thanks :) |
Beta Was this translation helpful? Give feedback.
-
|
Cool thanks for the review. Nice work 👍 Does it do 1080p@120hz ? 😄 |
Beta Was this translation helpful? Give feedback.
-
|
Updated preview with a LUT calibration done for MJPEG, when MS2130 is connected to USB2.0 port. There are some minor differences and as could be expected quality for MJPEG is a bit worse than YUV. |
Beta Was this translation helpful? Give feedback.
-
|
Tested latency. It's good, much better than old MS2109 despite using uncompressed YUV format. Tested under Windows 10 using Chrome. |
Beta Was this translation helpful? Give feedback.
-
|
Sound effects also work with MS2130. Proper |
Beta Was this translation helpful? Give feedback.
-
|
Hi awawa-dev what about usb drop? Is SPI necessary for led driver? |
Beta Was this translation helpful? Give feedback.
-
|
Got mine! Looks really good, but the Pi 3B+ only has usb 2.0 so that means no YUV? |
Beta Was this translation helpful? Give feedback.
-
|
Hey awawa I bought the MS2130 and wanted to try it out. I have the grabber running through a VERTEX2. The Grabber is recognized but it gets no signal from the VERTEX2. According to HDFURY it is because the grabber can not HDR? |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
|
Hi, I just received the new MS2130 and I place you LUT table in the .hyperhdr folder where the db is. How do I know is loading the LUT of that folder. I verified the logs but can't find nothing about the LUT table. |
Beta Was this translation helpful? Give feedback.
-
|
awawa-dev rocks! |
Beta Was this translation helpful? Give feedback.
-
|
Honestly I don't see why people use hperion. It just works. awawa-dev we might need to have a chat |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
|
After reading your posts, I'm pretty sure you have a bad unit. When you order another one make SURE you order from the same seller as awawa-dev specified(I asked in a above post.) I've learnt the hard way to use the same equipment from same sellers as maintainers/creators 🤣 I can confirm I replaced my 2109 with a 2130 as a "drop in replacement" and it worked without issue. I didn't change the LUT table or any settings like saturation(left it at 128) etc as recommended from when I setup the 2109. HTH I have changed contrast/brightness/saturation/hue back to 0 now as recommended. I am using this splitter: https://www.tesmart.com/products/tesmart-hdmi-splitter-1-in-2-out-support-4k-60hz-hdr-10-hdcp-2-2?variant=43617192116436 and this matrix: https://www.aliexpress.com/item/1005004685856434.html?spm=a2g0o.order_list.order_list_main.11.26a11802T6lGsn |
Beta Was this translation helpful? Give feedback.
-
|
Does the MS2130 support interlaced video? |
Beta Was this translation helpful? Give feedback.
-
|
If anyone wants to give my patched firmware a try, it should improve things significantly: https://github.com/steve-m/ms2130_patcher No idea about HDR though, I don't have an HDR source. |
Beta Was this translation helpful? Give feedback.
-
|
I tested the 4K2 firmware and seems stable without HDR support. I tested working HDR with #729 [Map HyperHDR_F3] |
Beta Was this translation helpful? Give feedback.
-
|
The main problems with 4K2 firmware is beside the issue with ex. captured text (contrast/sharpenning settings) is terrible color reproduction #729 (comment) |
Beta Was this translation helpful? Give feedback.
-
|
Hi @awawa-dev. Thank you so much for your amazing hard work on this project. I've been using your solution with the recommended EZCOO splitter and the 2109 for several months. It works well, but there is sometimes a small delay (barely noticeable) between the time the picture changes and the LED's change color. Would this be improved using the 2130? If I wanted to upgrade to the 2130, what steps would I need to take with regards to firmware updates, etc. I do use HDR10 and Dolby Vision. Thank you in advance for your help... I'm running HyperHDR v20. |
Beta Was this translation helpful? Give feedback.
-
|
The photo's showing the differences between the MS2130 Patched V1 firmware without HDR recognation and the latest firmware from awawa-dev with HDR support. The input is 4k@p60 with HDR signal that only works with the HDR firmware. The Patched V1 firmware shows the picture without HDR recognation. It seems that the HDR firmware shows a better natural face colors. |
Beta Was this translation helpful? Give feedback.
-
|
Weird thing happened to me lately. My MS2130 stick stopped working on a Windows 11 N100 minipc a few days ago. I'm not sure when it actually broke, but it was running fine earlier this month. Device Manager shows a pretty generic error (device cannot start due to error 10) but the fun thing is that it still works just fine on a MacOS MacBook M1 and even on a Linux VM running on the same W11 box with USB passthrough when the controller is set in USB 3.1 (tested on a recent version of VMware Workstation Player). |
Beta Was this translation helpful? Give feedback.
-
|
@awawa-dev Is there a working firmware for the ms2130 that eliminates the need for the ezcoo? I have the same issue as others with having to power cycle it every time. Would love to get the ezcoo(it gets hot and glitches often) out of the equation and just use a simple copy splitter. |
Beta Was this translation helpful? Give feedback.
-
|
I just learned about the MS2130 after having had a MS2109 before, looking for better compatibility with different non-standard resolutions. My MS2130 solution is named "Guermok Video Capture Card" and also advertised as being a MS2130 card. However, only the alternative firmware by @awawa-dev works here, not the 4k2.bin or the firmware by @steve-m - Windows says "device could not be initialized". The firmware starts with 3C C3 FB A0: Original Firmware Guermok Video Capture Card However, even if being slightly off-topic, my hope after installing the hyperhdr_f3 firmware was to also get perfect 50Hz recordings. While capturing 1920x1080@50Hz also worked with the original firmware, I was not able to change the device´s recording rate from 60Hz to 50Hz in VirtualDub, and setting the "fps" of the MS2130 to 50Hz in OBS also just showed me stutter / non-fluent scrolling (I took care that the monitor refresh rate also is temporarily set to 50Hz, and I also checked the recording). So,
What is the reason of the judder, limitations in the input or the output rates or still some firmware issues? EDIT: Got it finally working with the original firmware. It might have had to do with the selected compression - apparently, it did not work when MJPG was selected. |
Beta Was this translation helpful? Give feedback.
-
|
I took the HyperHDR_F3 firmware and disabled the sharpening filter by modifying @steve-m's https://github.com/steve-m/ms2130_patcher. I used a disassembler to find the new location of the patched routine. I didn't disable anything else besides the sharpening filter. I hope it's useful for someone else. HyperHDR_F3_ms2130_no_sharpening.zip Here are zoomed-in before and after captures of my MiSTer output at 1080p: HyperHDR_F3 firmware:
Patched firmware:
|
Beta Was this translation helpful? Give feedback.
-
|
I wrote a new flashing tool that supports both the old MS2130 and new MS2130S, and is running on Windows/Linux/OS X: https://github.com/steve-m/ms213x_flash It verifies the checksums before flashing (so no bricking possible, like with the 4K.bin), does an automatic backup of the currently installed firmware, and verifies after flashing. There is a pre-built Windows release available - you can drag-and-drop your firmware *.bin file you want to flash to ms213x_flash.exe and it will perform the steps mentioned above. Feedback welcome. |
Beta Was this translation helpful? Give feedback.
-
|
Can I flash the #729 firmware to a ms2130s dongle? |
Beta Was this translation helpful? Give feedback.
-
Interested in what we can do with this one also |
Beta Was this translation helpful? Give feedback.
-
I'd like to know this too. @steve-m's ms213x_flash explicitly lists MS2130S as a supported chip for the flashing tool itself, and correctly identifies my device: So I'm running an MS2130S with firmware dated The tool handles MS2130S fine, but I'm not sure the F3 firmware (or the separate sharpening patch from ms2130_patcher) was ever
@awawa-dev, given you did the original color/brightness testing any insight on whether MS2130S behaves the same as the units you tested? |
Beta Was this translation helpful? Give feedback.
-
|
Hi Awawa, I recently purchased the EZCOO EZ-SP12H28S HDMI 2.1 Splitter (1x2, 8K60 / 4K120) for use in a HyperHDR ambient lighting project. Unfortunately, I have been unable to get the splitter to output video to a standard USB HDMI capture device, despite extensive troubleshooting. I would appreciate your technical assistance in determining whether this is a firmware issue, a compatibility issue, or a hardware fault. My Setup Source Devices NVIDIA Shield TV Pro Windows Laptop Display 4K HDR Television Capture Device USB HDMI Video Capture (UVC compliant, 4K input / 1080p capture) Software HyperHDR running on Raspberry Pi QuickTime Player on macOS (used to verify the capture signal) HDMI Connections Source Device → EZCOO Splitter HDMI Input Output 1 → Television Output 2 (1080p downscale) → USB HDMI Capture Device → Raspberry Pi / MacBook Troubleshooting Already Performed I have tested all of the following: Connected the USB capture device directly to the NVIDIA Shield. Result: Video displays correctly on QuickTime and HyperHDR. Connected the USB capture device directly to a Windows laptop. Result: Video displays correctly. Inserted the EZCOO splitter between the source and the capture device. Result: No video is received by the capture device. Swapped Output 1 and Output 2. TV always works. Capture device never receives video. Swapped multiple HDMI cables. Rebooted: NVIDIA Shield Splitter Raspberry Pi MacBook Changed NVIDIA Shield output resolution: 4K60 4K59.94 1080p59.94 SDR HDR10 Dolby Vision On/Off Tested different EDID modes: 4K120 7.1CH 4K120 5.1CH 4K120 2.1CH COPY mode Used the 1080p scaler switch on Output 2. Tested with both the NVIDIA Shield and a Windows laptop as HDMI sources. Important Observations The television always receives video correctly through the splitter. The USB capture device always works correctly when connected directly to the source. As soon as the EZCOO splitter is inserted, the capture device receives no video signal. Even the NVIDIA Shield boot logo is not detected by the capture device when routed through the splitter. The problem occurs before any streaming application is opened, so this does not appear to be an HDCP-protected content issue. HyperHDR detects the USB capture device correctly, but there is simply no video arriving from the splitter. QuickTime Player detects the USB capture device as a valid camera, but the image remains black whenever the splitter is in the signal path. My Conclusion Based on the testing above, I believe one of the following may be occurring: a firmware issue, an HDMI handshake problem, an incompatibility between the EZ-SP12H28S output and standard UVC HDMI capture devices, or a hardware fault with my unit. My Questions Is the EZ-SP12H28S officially compatible with standard USB UVC HDMI capture devices used for HyperHDR or Ambilight systems? Is there a firmware update that addresses compatibility with HDMI capture devices? Are there recommended EDID settings specifically for use with USB HDMI capture devices? Does the splitter output any HDMI format that certain capture devices cannot synchronize with? Based on my testing, do you believe my unit may be defective? I would greatly appreciate any firmware, configuration recommendations, or additional troubleshooting steps you can provide. Thank you for your assistance. I look forward to your response. Kind regards, John M. |
Beta Was this translation helpful? Give feedback.














Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Preview of new MS2130 true USB3.0 grabber. Full review will be posted later on my blog after more testing, including various OS.
Purchased here: link (model B). It's amazing cheap... still under $10 like the old MS2109.
Caution
There is an important update #499 (comment) 😡
You can't use our LUTs for MS2130 grabber using newer firmware and you need to calibrate LUT yourself.
You can recognize the old firmware by the modes offered: when connected to USB2.0 → only MJPEG (and NV12 under Windows), USB3.0 → only YUV.
Note
Our small firmware reasearch project: #499 (comment)
The HDR LUT calibration result is excellent: 352, even better than old MS2109: 566 (the lower score is better). BTW, this shows that USB grabbers are in a completely different league than, for example, LG webos capturing after rooting, for which even after calibration the error is huge and oscillates around 24000-26000. Without using calibration or using Oklab hocus-pocus instead, which is not it was intended for HDR correction or even that color-space, the color reproduction is definitely even worse.
You need to use HyperHDR in order to fully utilize its capabilities even for SDR because of quite rare full YUV range and FCC YUV coef. And of course for HDR using calibrated & dedicated LUT table.
Recommended & the easiest way to install LUTs for MS2130 (need latest HyperHDR v20beta, otherwise install it manually)

Dedicated LUT table for SDR & HDR (beta version, YUV calibration)
Contrary to the old MS2109, you don't need to modify contrast, brightness or saturation. Just leave it on defaults which means 0 for contrast/brightness/saturation/hue in HyperHDR grabber configuration. If there were other values set before, you need to restart Raspberry Pi/PC afterwards to apply new settings.
If you use USB2.0 port and MJPEG choose the LUT for MJPEG that can be found at the bottom of the page
Download it here (use 7-zip): ms2130.tar.zip
The calibration was done using Windows 10, 1080p24, HDR 12 bit RGB, grabber: PC USB3.0 port YUV at 1080p30
2023-02-09T17:28:21.092Z [CALIBRATOR] (LutCalibrator.cpp:896) Mean error for FCC is: 352.185489
2023-02-09T17:28:21.092Z [CALIBRATOR] (LutCalibrator.cpp:896) Mean error for REC.709 is: 5587.897734
2023-02-09T17:28:21.092Z [CALIBRATOR] (LutCalibrator.cpp:896) Mean error for REC.601 is: 561.666046
Full detailed calibration log is below:
Details
2023-02-09T17:28:21.092Z [CALIBRATOR] Best coef is: FCC
2023-02-09T17:28:21.092Z [CALIBRATOR] Requesting next coef for switching: FCC
2023-02-09T17:28:22.119Z [CALIBRATOR] (LutCalibrator.cpp:1217) ----------------- Preparing and saving LUT table --------------------
2023-02-09T17:28:22.119Z [CALIBRATOR] (LutCalibrator.cpp:1218) Initial mode: YES
2023-02-09T17:28:22.120Z [CALIBRATOR] (LutCalibrator.cpp:1219) Using YUV coefs: FCC
2023-02-09T17:28:22.120Z [CALIBRATOR] (LutCalibrator.cpp:1220) YUV table range: FULL
2023-02-09T17:28:22.138Z [CALIBRATOR] (LutCalibrator.cpp:1231) LUT RGB HDR table (1/3) is ready
2023-02-09T17:28:22.157Z [CALIBRATOR] (LutCalibrator.cpp:1269) LUT YUV HDR table (2/3) is ready
2023-02-09T17:28:22.550Z [CALIBRATOR] (LutCalibrator.cpp:1300) LUT YUV table (3/3) is ready
2023-02-09T17:28:22.550Z [CALIBRATOR] (LutCalibrator.cpp:1305) ---------------------- LUT table is saved -----------------------
2023-02-09T17:28:34.488Z [CALIBRATOR] (LutCalibrator.cpp:789) --------------------- Captured colors starts ---------------------
2023-02-09T17:28:34.488Z [CALIBRATOR] (LutCalibrator.cpp:790) Red: (255,0,0) => (135, 86, 54)
2023-02-09T17:28:34.488Z [CALIBRATOR] (LutCalibrator.cpp:791) Green: (0,255,0) => (119, 148, 89)
2023-02-09T17:28:34.488Z [CALIBRATOR] (LutCalibrator.cpp:792) Blue: (0,0,255) => (72, 54, 144)
2023-02-09T17:28:34.488Z [CALIBRATOR] (LutCalibrator.cpp:793) Yellow: (255,255,0) => (146, 151, 91)
2023-02-09T17:28:34.488Z [CALIBRATOR] (LutCalibrator.cpp:794) Magenta: (255,0,255) => (136, 89, 143)
2023-02-09T17:28:34.488Z [CALIBRATOR] (LutCalibrator.cpp:795) Cyan: (0,255,255) => (122, 148, 145)
2023-02-09T17:28:34.488Z [CALIBRATOR] (LutCalibrator.cpp:796) Orange: (255,128,0) => (138, 117, 70)
2023-02-09T17:28:34.489Z [CALIBRATOR] (LutCalibrator.cpp:797) Pink: (255,0,128) => (135, 86, 107)
2023-02-09T17:28:34.489Z [CALIBRATOR] (LutCalibrator.cpp:798) Azure: (0,128,255) => (94, 111, 143)
2023-02-09T17:28:34.489Z [CALIBRATOR] (LutCalibrator.cpp:799) Brown: (128,64,0) => (100, 82, 44)
2023-02-09T17:28:34.489Z [CALIBRATOR] (LutCalibrator.cpp:800) Purple: (128,0,64) => (96, 58, 75)
2023-02-09T17:28:34.489Z [CALIBRATOR] (LutCalibrator.cpp:801) Low red: (128,0,0) => (96, 55, 33)
2023-02-09T17:28:34.489Z [CALIBRATOR] (LutCalibrator.cpp:802) Low green: (0,128,0) => (82, 108, 58)
2023-02-09T17:28:34.489Z [CALIBRATOR] (LutCalibrator.cpp:803) Low blue: (0,0,128) => (44, 33, 105)
2023-02-09T17:28:34.489Z [CALIBRATOR] (LutCalibrator.cpp:804) LowestGray: (16,16,16) => (39, 39, 39)
2023-02-09T17:28:34.489Z [CALIBRATOR] (LutCalibrator.cpp:805) Gray1: (32,32,32) => (53, 55, 52)
2023-02-09T17:28:34.489Z [CALIBRATOR] (LutCalibrator.cpp:806) Gray2: (48,48,48) => (66, 68, 65)
2023-02-09T17:28:34.490Z [CALIBRATOR] (LutCalibrator.cpp:807) Gray3: (64,64,64) => (78, 78, 78)
2023-02-09T17:28:34.490Z [CALIBRATOR] (LutCalibrator.cpp:808) Gray4: (96,96,96) => (94, 96, 93)
2023-02-09T17:28:34.490Z [CALIBRATOR] (LutCalibrator.cpp:809) Gray5: (120,120,120) => (105, 107, 104)
2023-02-09T17:28:34.490Z [CALIBRATOR] (LutCalibrator.cpp:810) Gray6: (144,144,144) => (115, 117, 114)
2023-02-09T17:28:34.490Z [CALIBRATOR] (LutCalibrator.cpp:811) Gray7: (172,172,172) => (125, 127, 124)
2023-02-09T17:28:34.490Z [CALIBRATOR] (LutCalibrator.cpp:812) Gray8: (196,196,196) => (132, 134, 131)
2023-02-09T17:28:34.490Z [CALIBRATOR] (LutCalibrator.cpp:813) HighestGray: (220,220,220) => (139, 141, 138)
2023-02-09T17:28:34.490Z [CALIBRATOR] (LutCalibrator.cpp:814) White: (255,255,255) => (148, 150, 147)
2023-02-09T17:28:34.490Z [CALIBRATOR] (LutCalibrator.cpp:815) ------------------------------------------------------------------
2023-02-09T17:28:34.490Z [CALIBRATOR] (LutCalibrator.cpp:816)
2023-02-09T17:28:34.491Z [CALIBRATOR] (LutCalibrator.cpp:931) Optimal PQ multi => 33.000000, strategy => 0, white index => 21
2023-02-09T17:28:34.491Z [CALIBRATOR] (LutCalibrator.cpp:932) White correction: (1.016000, 1.000000, 1.024194)
2023-02-09T17:28:34.491Z [CALIBRATOR] (LutCalibrator.cpp:933) Min RGB floor: 0.000000, max RGB ceiling: 147.000000, scale: 240.000000
2023-02-09T17:28:34.491Z [CALIBRATOR] (LutCalibrator.cpp:934) Min RGB range => (0,0,0)
2023-02-09T17:28:34.491Z [CALIBRATOR] (LutCalibrator.cpp:935) Max RGB range => (148,150,147)
2023-02-09T17:28:34.491Z [CALIBRATOR] (LutCalibrator.cpp:936) YUV range: FULL
2023-02-09T17:28:34.491Z [CALIBRATOR] (LutCalibrator.cpp:937) YUV coefs: FCC
2023-02-09T17:28:40.274Z [CALIBRATOR] (LutCalibrator.cpp:821)
2023-02-09T17:28:40.274Z [CALIBRATOR] (LutCalibrator.cpp:822) -------------------- Calibrated colors starts --------------------
2023-02-09T17:28:40.274Z [CALIBRATOR] (LutCalibrator.cpp:823) Red: (255,0,0) => (253,0,0)
2023-02-09T17:28:40.275Z [CALIBRATOR] (LutCalibrator.cpp:824) Green: (0,255,0) => (0,255,0)
2023-02-09T17:28:40.275Z [CALIBRATOR] (LutCalibrator.cpp:825) Blue: (0,0,255) => (0,4,255)
2023-02-09T17:28:40.275Z [CALIBRATOR] (LutCalibrator.cpp:826) Yellow: (255,255,0) => (250,255,0)
2023-02-09T17:28:40.275Z [CALIBRATOR] (LutCalibrator.cpp:827) Magenta: (255,0,255) => (249,2,252)
2023-02-09T17:28:40.275Z [CALIBRATOR] (LutCalibrator.cpp:828) Cyan: (0,255,255) => (0,255,252)
2023-02-09T17:28:40.275Z [CALIBRATOR] (LutCalibrator.cpp:829) Orange: (255,128,0) => (254,128,0)
2023-02-09T17:28:40.275Z [CALIBRATOR] (LutCalibrator.cpp:830) Pink: (255,0,128) => (251,0,124)
2023-02-09T17:28:40.275Z [CALIBRATOR] (LutCalibrator.cpp:831) Azure: (0,128,255) => (0,128,252)
2023-02-09T17:28:40.275Z [CALIBRATOR] (LutCalibrator.cpp:832) Brown: (128,64,0) => (122,60,0)
2023-02-09T17:28:40.275Z [CALIBRATOR] (LutCalibrator.cpp:833) Purple: (128,0,64) => (117,8,59)
2023-02-09T17:28:40.276Z [CALIBRATOR] (LutCalibrator.cpp:834) Low red: (128,0,0) => (119,0,0)
2023-02-09T17:28:40.276Z [CALIBRATOR] (LutCalibrator.cpp:835) Low green: (0,128,0) => (0,123,0)
2023-02-09T17:28:40.276Z [CALIBRATOR] (LutCalibrator.cpp:836) Low blue: (0,0,128) => (0,2,124)
2023-02-09T17:28:40.276Z [CALIBRATOR] (LutCalibrator.cpp:837) LowestGray: (16,16,16) => (14,14,14)
2023-02-09T17:28:40.276Z [CALIBRATOR] (LutCalibrator.cpp:838) Gray1: (32,32,32) => (28,28,28)
2023-02-09T17:28:40.276Z [CALIBRATOR] (LutCalibrator.cpp:839) Gray2: (48,48,48) => (44,44,44)
2023-02-09T17:28:40.276Z [CALIBRATOR] (LutCalibrator.cpp:840) Gray3: (64,64,64) => (62,62,62)
2023-02-09T17:28:40.276Z [CALIBRATOR] (LutCalibrator.cpp:841) Gray4: (96,96,96) => (91,91,91)
2023-02-09T17:28:40.276Z [CALIBRATOR] (LutCalibrator.cpp:842) Gray5: (120,120,120) => (115,115,115)
2023-02-09T17:28:40.276Z [CALIBRATOR] (LutCalibrator.cpp:843) Gray6: (144,144,144) => (141,141,141)
2023-02-09T17:28:40.277Z [CALIBRATOR] (LutCalibrator.cpp:844) Gray7: (172,172,172) => (171,171,171)
2023-02-09T17:28:40.277Z [CALIBRATOR] (LutCalibrator.cpp:845) Gray8: (196,196,196) => (195,195,195)
2023-02-09T17:28:40.277Z [CALIBRATOR] (LutCalibrator.cpp:846) HighestGray: (220,220,220) => (221,221,221)
2023-02-09T17:28:40.277Z [CALIBRATOR] (LutCalibrator.cpp:847) White: (255,255,255) => (255,255,255)
2023-02-09T17:28:40.277Z [CALIBRATOR] (LutCalibrator.cpp:848) ------------------------------------------------------------------
2023-02-09T17:28:40.277Z [CALIBRATOR] (LutCalibrator.cpp:849)
2023-02-09T17:28:40.285Z [CALIBRATOR] (LutCalibrator.cpp:1217) ----------------- Preparing and saving LUT table --------------------
2023-02-09T17:28:40.285Z [CALIBRATOR] (LutCalibrator.cpp:1218) Initial mode: NO
2023-02-09T17:28:40.285Z [CALIBRATOR] (LutCalibrator.cpp:1219) Using YUV coefs: FCC
2023-02-09T17:28:40.285Z [CALIBRATOR] (LutCalibrator.cpp:1220) YUV table range: FULL
2023-02-09T17:28:40.285Z [CALIBRATOR] (LutCalibrator.cpp:1224) Min RGB floor: 0.000000, max RGB ceiling: 147.000000
2023-02-09T17:28:40.285Z [CALIBRATOR] (LutCalibrator.cpp:1225) Delta RGB range => 147.000000
2023-02-09T17:28:40.285Z [CALIBRATOR] (LutCalibrator.cpp:1226) Min RGB range => (0,0,0)
2023-02-09T17:28:40.285Z [CALIBRATOR] (LutCalibrator.cpp:1227) Max RGB range => (148,150,147)
2023-02-09T17:28:40.304Z [CALIBRATOR] (LutCalibrator.cpp:1231) LUT RGB HDR table (1/3) is ready
2023-02-09T17:28:40.763Z [CALIBRATOR] (LutCalibrator.cpp:1269) LUT YUV HDR table (2/3) is ready
2023-02-09T17:28:41.144Z [CALIBRATOR] (LutCalibrator.cpp:1300) LUT YUV table (3/3) is ready
2023-02-09T17:28:41.145Z [CALIBRATOR] (LutCalibrator.cpp:1305) ---------------------- LUT table is saved -----------------------
Model A from the same seller. Exactly the same result, which wasn't so obvious before.
2023-02-13T18:40:34.767Z [CALIBRATOR] (LutCalibrator.cpp:896) Mean error for FCC is: 352.185489
2023-02-13T18:40:34.767Z [CALIBRATOR] (LutCalibrator.cpp:896) Mean error for REC.709 is: 5587.897734
2023-02-13T18:40:34.767Z [CALIBRATOR] (LutCalibrator.cpp:896) Mean error for REC.601 is: 561.666046
Details
2023-02-13T18:40:34.767Z [CALIBRATOR] Best coef is: FCC
2023-02-13T18:40:34.767Z [CALIBRATOR] Requesting next coef for switching: FCC
2023-02-13T18:40:48.109Z [CALIBRATOR] (LutCalibrator.cpp:789) --------------------- Captured colors starts ---------------------
2023-02-13T18:40:48.109Z [CALIBRATOR] (LutCalibrator.cpp:790) Red: (255,0,0) => (135, 86, 54)
2023-02-13T18:40:48.109Z [CALIBRATOR] (LutCalibrator.cpp:791) Green: (0,255,0) => (119, 148, 89)
2023-02-13T18:40:48.109Z [CALIBRATOR] (LutCalibrator.cpp:792) Blue: (0,0,255) => (72, 54, 144)
2023-02-13T18:40:48.109Z [CALIBRATOR] (LutCalibrator.cpp:793) Yellow: (255,255,0) => (146, 151, 91)
2023-02-13T18:40:48.109Z [CALIBRATOR] (LutCalibrator.cpp:794) Magenta: (255,0,255) => (136, 89, 143)
2023-02-13T18:40:48.109Z [CALIBRATOR] (LutCalibrator.cpp:795) Cyan: (0,255,255) => (122, 148, 145)
2023-02-13T18:40:48.109Z [CALIBRATOR] (LutCalibrator.cpp:796) Orange: (255,128,0) => (138, 117, 70)
2023-02-13T18:40:48.109Z [CALIBRATOR] (LutCalibrator.cpp:797) Pink: (255,0,128) => (135, 86, 107)
2023-02-13T18:40:48.110Z [CALIBRATOR] (LutCalibrator.cpp:798) Azure: (0,128,255) => (94, 111, 143)
2023-02-13T18:40:48.110Z [CALIBRATOR] (LutCalibrator.cpp:799) Brown: (128,64,0) => (100, 82, 44)
2023-02-13T18:40:48.110Z [CALIBRATOR] (LutCalibrator.cpp:800) Purple: (128,0,64) => (96, 58, 75)
2023-02-13T18:40:48.110Z [CALIBRATOR] (LutCalibrator.cpp:801) Low red: (128,0,0) => (96, 55, 33)
2023-02-13T18:40:48.110Z [CALIBRATOR] (LutCalibrator.cpp:802) Low green: (0,128,0) => (82, 108, 58)
2023-02-13T18:40:48.110Z [CALIBRATOR] (LutCalibrator.cpp:803) Low blue: (0,0,128) => (44, 33, 105)
2023-02-13T18:40:48.110Z [CALIBRATOR] (LutCalibrator.cpp:804) LowestGray: (16,16,16) => (39, 39, 39)
2023-02-13T18:40:48.110Z [CALIBRATOR] (LutCalibrator.cpp:805) Gray1: (32,32,32) => (53, 55, 52)
2023-02-13T18:40:48.110Z [CALIBRATOR] (LutCalibrator.cpp:806) Gray2: (48,48,48) => (66, 68, 65)
2023-02-13T18:40:48.110Z [CALIBRATOR] (LutCalibrator.cpp:807) Gray3: (64,64,64) => (78, 78, 78)
2023-02-13T18:40:48.111Z [CALIBRATOR] (LutCalibrator.cpp:808) Gray4: (96,96,96) => (94, 96, 93)
2023-02-13T18:40:48.111Z [CALIBRATOR] (LutCalibrator.cpp:809) Gray5: (120,120,120) => (105, 107, 104)
2023-02-13T18:40:48.111Z [CALIBRATOR] (LutCalibrator.cpp:810) Gray6: (144,144,144) => (115, 117, 114)
2023-02-13T18:40:48.111Z [CALIBRATOR] (LutCalibrator.cpp:811) Gray7: (172,172,172) => (125, 127, 124)
2023-02-13T18:40:48.111Z [CALIBRATOR] (LutCalibrator.cpp:812) Gray8: (196,196,196) => (132, 134, 131)
2023-02-13T18:40:48.111Z [CALIBRATOR] (LutCalibrator.cpp:813) HighestGray: (220,220,220) => (139, 141, 138)
2023-02-13T18:40:48.111Z [CALIBRATOR] (LutCalibrator.cpp:814) White: (255,255,255) => (148, 150, 147)
2023-02-13T18:40:48.111Z [CALIBRATOR] (LutCalibrator.cpp:815) ------------------------------------------------------------------
2023-02-13T18:40:48.111Z [CALIBRATOR] (LutCalibrator.cpp:816)
2023-02-13T18:40:48.111Z [CALIBRATOR] (LutCalibrator.cpp:931) Optimal PQ multi => 33.000000, strategy => 0, white index => 21
2023-02-13T18:40:48.112Z [CALIBRATOR] (LutCalibrator.cpp:932) White correction: (1.016000, 1.000000, 1.024194)
2023-02-13T18:40:48.112Z [CALIBRATOR] (LutCalibrator.cpp:933) Min RGB floor: 0.000000, max RGB ceiling: 147.000000, scale: 240.000000
2023-02-13T18:40:48.112Z [CALIBRATOR] (LutCalibrator.cpp:934) Min RGB range => (0,0,0)
2023-02-13T18:40:48.112Z [CALIBRATOR] (LutCalibrator.cpp:935) Max RGB range => (148,150,147)
2023-02-13T18:40:48.112Z [CALIBRATOR] (LutCalibrator.cpp:936) YUV range: FULL
2023-02-13T18:40:48.112Z [CALIBRATOR] (LutCalibrator.cpp:937) YUV coefs: FCC
2023-02-13T18:40:54.080Z [CALIBRATOR] (LutCalibrator.cpp:821)
2023-02-13T18:40:54.080Z [CALIBRATOR] (LutCalibrator.cpp:822) -------------------- Calibrated colors starts --------------------
2023-02-13T18:40:54.080Z [CALIBRATOR] (LutCalibrator.cpp:823) Red: (255,0,0) => (253,0,0)
2023-02-13T18:40:54.080Z [CALIBRATOR] (LutCalibrator.cpp:824) Green: (0,255,0) => (0,255,0)
2023-02-13T18:40:54.080Z [CALIBRATOR] (LutCalibrator.cpp:825) Blue: (0,0,255) => (0,4,255)
2023-02-13T18:40:54.080Z [CALIBRATOR] (LutCalibrator.cpp:826) Yellow: (255,255,0) => (250,255,0)
2023-02-13T18:40:54.080Z [CALIBRATOR] (LutCalibrator.cpp:827) Magenta: (255,0,255) => (249,2,252)
2023-02-13T18:40:54.080Z [CALIBRATOR] (LutCalibrator.cpp:828) Cyan: (0,255,255) => (0,255,252)
2023-02-13T18:40:54.080Z [CALIBRATOR] (LutCalibrator.cpp:829) Orange: (255,128,0) => (254,128,0)
2023-02-13T18:40:54.080Z [CALIBRATOR] (LutCalibrator.cpp:830) Pink: (255,0,128) => (251,0,124)
2023-02-13T18:40:54.081Z [CALIBRATOR] (LutCalibrator.cpp:831) Azure: (0,128,255) => (0,128,252)
2023-02-13T18:40:54.081Z [CALIBRATOR] (LutCalibrator.cpp:832) Brown: (128,64,0) => (122,60,0)
2023-02-13T18:40:54.081Z [CALIBRATOR] (LutCalibrator.cpp:833) Purple: (128,0,64) => (117,8,59)
2023-02-13T18:40:54.081Z [CALIBRATOR] (LutCalibrator.cpp:834) Low red: (128,0,0) => (119,0,0)
2023-02-13T18:40:54.081Z [CALIBRATOR] (LutCalibrator.cpp:835) Low green: (0,128,0) => (0,123,0)
2023-02-13T18:40:54.081Z [CALIBRATOR] (LutCalibrator.cpp:836) Low blue: (0,0,128) => (0,2,124)
2023-02-13T18:40:54.081Z [CALIBRATOR] (LutCalibrator.cpp:837) LowestGray: (16,16,16) => (14,14,14)
2023-02-13T18:40:54.081Z [CALIBRATOR] (LutCalibrator.cpp:838) Gray1: (32,32,32) => (28,28,28)
2023-02-13T18:40:54.081Z [CALIBRATOR] (LutCalibrator.cpp:839) Gray2: (48,48,48) => (44,44,44)
2023-02-13T18:40:54.081Z [CALIBRATOR] (LutCalibrator.cpp:840) Gray3: (64,64,64) => (62,62,62)
2023-02-13T18:40:54.081Z [CALIBRATOR] (LutCalibrator.cpp:841) Gray4: (96,96,96) => (91,91,91)
2023-02-13T18:40:54.082Z [CALIBRATOR] (LutCalibrator.cpp:842) Gray5: (120,120,120) => (115,115,115)
2023-02-13T18:40:54.082Z [CALIBRATOR] (LutCalibrator.cpp:843) Gray6: (144,144,144) => (141,141,141)
2023-02-13T18:40:54.082Z [CALIBRATOR] (LutCalibrator.cpp:844) Gray7: (172,172,172) => (171,171,171)
2023-02-13T18:40:54.082Z [CALIBRATOR] (LutCalibrator.cpp:845) Gray8: (196,196,196) => (195,195,195)
2023-02-13T18:40:54.082Z [CALIBRATOR] (LutCalibrator.cpp:846) HighestGray: (220,220,220) => (221,221,221)
2023-02-13T18:40:54.082Z [CALIBRATOR] (LutCalibrator.cpp:847) White: (255,255,255) => (255,255,255)
2023-02-13T18:40:54.082Z [CALIBRATOR] (LutCalibrator.cpp:848) ------------------------------------------------------------------
2023-02-13T18:40:54.082Z [CALIBRATOR] (LutCalibrator.cpp:849)
2023-02-13T18:40:54.089Z [CALIBRATOR] (LutCalibrator.cpp:1217) ----------------- Preparing and saving LUT table --------------------
2023-02-13T18:40:54.090Z [CALIBRATOR] (LutCalibrator.cpp:1218) Initial mode: NO
2023-02-13T18:40:54.090Z [CALIBRATOR] (LutCalibrator.cpp:1219) Using YUV coefs: FCC
2023-02-13T18:40:54.090Z [CALIBRATOR] (LutCalibrator.cpp:1220) YUV table range: FULL
2023-02-13T18:40:54.090Z [CALIBRATOR] (LutCalibrator.cpp:1224) Min RGB floor: 0.000000, max RGB ceiling: 147.000000
2023-02-13T18:40:54.090Z [CALIBRATOR] (LutCalibrator.cpp:1225) Delta RGB range => 147.000000
2023-02-13T18:40:54.090Z [CALIBRATOR] (LutCalibrator.cpp:1226) Min RGB range => (0,0,0)
2023-02-13T18:40:54.090Z [CALIBRATOR] (LutCalibrator.cpp:1227) Max RGB range => (148,150,147)
2023-02-13T18:40:54.113Z [CALIBRATOR] (LutCalibrator.cpp:1231) LUT RGB HDR table (1/3) is ready
2023-02-13T18:40:54.577Z [CALIBRATOR] (LutCalibrator.cpp:1269) LUT YUV HDR table (2/3) is ready
2023-02-13T18:40:54.968Z [CALIBRATOR] (LutCalibrator.cpp:1300) LUT YUV table (3/3) is ready
2023-02-13T18:40:54.968Z [CALIBRATOR] (LutCalibrator.cpp:1305) ---------------------- LUT table is saved -----------------------
Dedicated LUT table for SDR & HDR (beta version, MJPEG calibration)
The grabber is detected also on Raspberry Pi (Zero 2W) USB2.0. But it offers only MJPEG encoding on USB2.0 (old MS2109 has some YUV modes even then which is suitable for the calibration procedure). Because we can't control coefs for MJPEG the calibration result is worse around around 2000 for MJPEG. Use YUV LUT.Submitted PR #508 to overcome the problem. The strategy for MJPEG seems a bit different than for YUV format. When MS2130 is connected using USB2.0 port: Windows offers MJPEG & NV12, Linux(Rpi) only MJPEG.Contrary to the old MS2109, you don't need to modify contrast, brightness or saturation. Just leave it on defaults which means 0 for contrast/brightness/saturation/hue in HyperHDR grabber configuration. If there were other values set before, you need to restart Raspberry Pi/PC afterwards to apply new settings.
Download it here (use 7-zip): ms2130_mjpeg.tar.zip
The calibration was done using Windows 10, 1080p24, HDR 12 bit RGB, grabber: Raspberry Pi Zero 2W USB2.0 port MJPEG at 1080p30
2023-02-14T19:06:23.312Z [CALIBRATOR] (LutCalibrator.cpp:908) Mean error for FCC is: 1035.874299
2023-02-14T19:06:23.312Z [CALIBRATOR] (LutCalibrator.cpp:908) Mean error for REC.709 is: 5403.073143
2023-02-14T19:06:23.312Z [CALIBRATOR] (LutCalibrator.cpp:908) Mean error for REC.601 is: 1060.410922
Details
2023-02-14T19:06:23.312Z [CALIBRATOR] Best coef is: FCC
2023-02-14T19:06:23.312Z [CALIBRATOR] Requesting next coef for switching: FCC
2023-02-14T19:06:36.829Z [CALIBRATOR] (LutCalibrator.cpp:801) --------------------- Captured colors starts ---------------------
2023-02-14T19:06:36.830Z [CALIBRATOR] (LutCalibrator.cpp:802) Red: (255,0,0) => (133, 87, 53)
2023-02-14T19:06:36.830Z [CALIBRATOR] (LutCalibrator.cpp:803) Green: (0,255,0) => (119, 149, 87)
2023-02-14T19:06:36.830Z [CALIBRATOR] (LutCalibrator.cpp:804) Blue: (0,0,255) => (71, 54, 142)
2023-02-14T19:06:36.830Z [CALIBRATOR] (LutCalibrator.cpp:805) Yellow: (255,255,0) => (145, 152, 89)
2023-02-14T19:06:36.830Z [CALIBRATOR] (LutCalibrator.cpp:806) Magenta: (255,0,255) => (135, 90, 141)
2023-02-14T19:06:36.830Z [CALIBRATOR] (LutCalibrator.cpp:807) Cyan: (0,255,255) => (121, 149, 144)
2023-02-14T19:06:36.830Z [CALIBRATOR] (LutCalibrator.cpp:808) Orange: (255,128,0) => (136, 117, 71)
2023-02-14T19:06:36.830Z [CALIBRATOR] (LutCalibrator.cpp:809) Pink: (255,0,128) => (134, 87, 105)
2023-02-14T19:06:36.830Z [CALIBRATOR] (LutCalibrator.cpp:810) Azure: (0,128,255) => (94, 110, 141)
2023-02-14T19:06:36.830Z [CALIBRATOR] (LutCalibrator.cpp:811) Brown: (128,64,0) => (99, 82, 44)
2023-02-14T19:06:36.831Z [CALIBRATOR] (LutCalibrator.cpp:812) Purple: (128,0,64) => (96, 58, 74)
2023-02-14T19:06:36.831Z [CALIBRATOR] (LutCalibrator.cpp:813) Low red: (128,0,0) => (95, 56, 32)
2023-02-14T19:06:36.831Z [CALIBRATOR] (LutCalibrator.cpp:814) Low green: (0,128,0) => (82, 108, 57)
2023-02-14T19:06:36.831Z [CALIBRATOR] (LutCalibrator.cpp:815) Low blue: (0,0,128) => (44, 33, 102)
2023-02-14T19:06:36.831Z [CALIBRATOR] (LutCalibrator.cpp:816) LowestGray: (16,16,16) => (38, 39, 39)
2023-02-14T19:06:36.831Z [CALIBRATOR] (LutCalibrator.cpp:817) Gray1: (32,32,32) => (53, 55, 52)
2023-02-14T19:06:36.831Z [CALIBRATOR] (LutCalibrator.cpp:818) Gray2: (48,48,48) => (66, 68, 65)
2023-02-14T19:06:36.831Z [CALIBRATOR] (LutCalibrator.cpp:819) Gray3: (64,64,64) => (77, 79, 76)
2023-02-14T19:06:36.831Z [CALIBRATOR] (LutCalibrator.cpp:820) Gray4: (96,96,96) => (94, 96, 93)
2023-02-14T19:06:36.831Z [CALIBRATOR] (LutCalibrator.cpp:821) Gray5: (120,120,120) => (105, 107, 104)
2023-02-14T19:06:36.832Z [CALIBRATOR] (LutCalibrator.cpp:822) Gray6: (144,144,144) => (115, 117, 114)
2023-02-14T19:06:36.832Z [CALIBRATOR] (LutCalibrator.cpp:823) Gray7: (172,172,172) => (125, 127, 124)
2023-02-14T19:06:36.832Z [CALIBRATOR] (LutCalibrator.cpp:824) Gray8: (196,196,196) => (132, 134, 131)
2023-02-14T19:06:36.832Z [CALIBRATOR] (LutCalibrator.cpp:825) HighestGray: (220,220,220) => (139, 141, 138)
2023-02-14T19:06:36.832Z [CALIBRATOR] (LutCalibrator.cpp:826) White: (255,255,255) => (148, 150, 147)
2023-02-14T19:06:36.832Z [CALIBRATOR] (LutCalibrator.cpp:827) ------------------------------------------------------------------
2023-02-14T19:06:36.833Z [CALIBRATOR] (LutCalibrator.cpp:828)
2023-02-14T19:06:36.833Z [CALIBRATOR] (LutCalibrator.cpp:943) Optimal PQ multi => 24.500000, strategy => 0, white index => 19
2023-02-14T19:06:36.833Z [CALIBRATOR] (LutCalibrator.cpp:944) White correction: (1.019068, 1.000000, 1.028886)
2023-02-14T19:06:36.833Z [CALIBRATOR] (LutCalibrator.cpp:945) Min RGB floor: 0.000000, max RGB ceiling: 149.000000, scale: 224.000000
2023-02-14T19:06:36.833Z [CALIBRATOR] (LutCalibrator.cpp:946) Min RGB range => (0,0,0)
2023-02-14T19:06:36.833Z [CALIBRATOR] (LutCalibrator.cpp:947) Max RGB range => (149,151,150)
2023-02-14T19:06:36.833Z [CALIBRATOR] (LutCalibrator.cpp:948) YUV range: FULL
2023-02-14T19:06:36.833Z [CALIBRATOR] (LutCalibrator.cpp:949) YUV coefs: FCC
2023-02-14T19:06:42.402Z [CALIBRATOR] (LutCalibrator.cpp:833)
2023-02-14T19:06:42.402Z [CALIBRATOR] (LutCalibrator.cpp:834) -------------------- Calibrated colors starts --------------------
2023-02-14T19:06:42.402Z [CALIBRATOR] (LutCalibrator.cpp:835) Red: (255,0,0) => (255,3,0)
2023-02-14T19:06:42.402Z [CALIBRATOR] (LutCalibrator.cpp:836) Green: (0,255,0) => (0,255,0)
2023-02-14T19:06:42.403Z [CALIBRATOR] (LutCalibrator.cpp:837) Blue: (0,0,255) => (0,1,255)
2023-02-14T19:06:42.403Z [CALIBRATOR] (LutCalibrator.cpp:838) Yellow: (255,255,0) => (255,255,0)
2023-02-14T19:06:42.403Z [CALIBRATOR] (LutCalibrator.cpp:839) Magenta: (255,0,255) => (255,0,255)
2023-02-14T19:06:42.403Z [CALIBRATOR] (LutCalibrator.cpp:840) Cyan: (0,255,255) => (0,255,255)
2023-02-14T19:06:42.403Z [CALIBRATOR] (LutCalibrator.cpp:841) Orange: (255,128,0) => (255,132,0)
2023-02-14T19:06:42.403Z [CALIBRATOR] (LutCalibrator.cpp:842) Pink: (255,0,128) => (255,0,121)
2023-02-14T19:06:42.403Z [CALIBRATOR] (LutCalibrator.cpp:843) Azure: (0,128,255) => (0,127,255)
2023-02-14T19:06:42.403Z [CALIBRATOR] (LutCalibrator.cpp:844) Brown: (128,64,0) => (122,60,0)
2023-02-14T19:06:42.403Z [CALIBRATOR] (LutCalibrator.cpp:845) Purple: (128,0,64) => (119,4,57)
2023-02-14T19:06:42.403Z [CALIBRATOR] (LutCalibrator.cpp:846) Low red: (128,0,0) => (117,1,0)
2023-02-14T19:06:42.403Z [CALIBRATOR] (LutCalibrator.cpp:847) Low green: (0,128,0) => (0,125,0)
2023-02-14T19:06:42.404Z [CALIBRATOR] (LutCalibrator.cpp:848) Low blue: (0,0,128) => (0,2,119)
2023-02-14T19:06:42.404Z [CALIBRATOR] (LutCalibrator.cpp:849) LowestGray: (16,16,16) => (13,13,13)
2023-02-14T19:06:42.404Z [CALIBRATOR] (LutCalibrator.cpp:850) Gray1: (32,32,32) => (27,27,27)
2023-02-14T19:06:42.404Z [CALIBRATOR] (LutCalibrator.cpp:851) Gray2: (48,48,48) => (43,43,43)
2023-02-14T19:06:42.404Z [CALIBRATOR] (LutCalibrator.cpp:852) Gray3: (64,64,64) => (60,60,60)
2023-02-14T19:06:42.404Z [CALIBRATOR] (LutCalibrator.cpp:853) Gray4: (96,96,96) => (92,92,92)
2023-02-14T19:06:42.404Z [CALIBRATOR] (LutCalibrator.cpp:854) Gray5: (120,120,120) => (118,118,118)
2023-02-14T19:06:42.404Z [CALIBRATOR] (LutCalibrator.cpp:855) Gray6: (144,144,144) => (145,145,145)
2023-02-14T19:06:42.404Z [CALIBRATOR] (LutCalibrator.cpp:856) Gray7: (172,172,172) => (178,178,178)
2023-02-14T19:06:42.404Z [CALIBRATOR] (LutCalibrator.cpp:857) Gray8: (196,196,196) => (204,204,204)
2023-02-14T19:06:42.404Z [CALIBRATOR] (LutCalibrator.cpp:858) HighestGray: (220,220,220) => (233,233,233)
2023-02-14T19:06:42.405Z [CALIBRATOR] (LutCalibrator.cpp:859) White: (255,255,255) => (255,255,255)
2023-02-14T19:06:42.405Z [CALIBRATOR] (LutCalibrator.cpp:860) ------------------------------------------------------------------
Latency test
1080p120 => ~49ms
Details
Details
Beta Was this translation helpful? Give feedback.
All reactions