Video grabber MS2130: the good old MS2109 on steroids. At least it was... 😕 #499
Replies: 79 comments 343 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.
-
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.
-
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.
-
A side question about the MS2130 is about its audio. Is it stable, without glitches and in sync with the video stream? |
Beta Was this translation helpful? Give feedback.
-
Will a USB-C 3.1 port suffice for 1600p50 YUV? Thanks for the help. I'm trying to figure out if an MS2130 will work or not. |
Beta Was this translation helpful? Give feedback.
-
@frofro64546 wrote:
f3 firmware is based on the oldest firmware with just replaced EDID. I did not test whether anything changed during calibration, but there was no visible changes (besides fixing the lower brightness issue) during my Dolby Vision test: #729 (comment) |
Beta Was this translation helpful? Give feedback.
-
Novice here. Most of what is being talked about is going right over my head currently cause I am still learning. With that in mind, my question is since the MS2130 is having LUT issues (hopefully I said that right) is it still the recommended capture hardware? Can I use it to capture content being played by Netflix and Disney+ on my 2019 Nvidia Shield Pro? My current set up is Nvidia Shield Pro 2019 running Hyperion Grabber playing to a Samsung Q990b connected to my Samsung S95B over EARC. Hyperion Grabber is streaming color data to a HyperHDR docker container on my Unraid server. Is using a MS2130 my best choice for the capturing ALL video content being played by my Shield? |
Beta Was this translation helpful? Give feedback.
-
Oh boy, the Elgato HD60X says it supports 10 bit do you know about if it does 12 bit? I have been using the MS2130 since August and it works perfectly for most things. It is missing 10-12 bit, HDR, and VRR though. I am willing to upgrade to a more expensive one if it can support that. Any issues with it? |
Beta Was this translation helpful? Give feedback.
-
Weird, Dolby vision was being capture just fine for days now it looks like this all of the sudden. Any ideas why? @NatyaSadella |
Beta Was this translation helpful? Give feedback.
-
Hi @awawa-dev, Have an issue with HyperHDR v20 receiving no signal from Apple TV 4k after ATV goes into standby. If I wake it up, HyperHDR reports "No Signal" if I stay in the same app, but if I switch apps HyperHDR picks up the signal after a few seconds. Wondering if this is an issue with HyperHDR or something else? The TV picks up on the signal fine and the light on HDMI2 on the splitter is lit. My setup: Also, is there any custom firmware that you know of for the SP12H21 splitter? I wasn't able to find any. |
Beta Was this translation helpful? Give feedback.
-
Correct, switching the app in ATV makes the grabber work again. I'll disable signal loss detection, as the ATV signal is black when it's sleeping, and see if that helps. Will also keep an eye on the logs |
Beta Was this translation helpful? Give feedback.
-
@jpleasants I have an Apple TV 4k 2nd generation, the grabber and the splitter are the same but the TV I use is an LG with DV. Using HyperHDRv20 with no problems at all. |
Beta Was this translation helpful? Give feedback.
-
Do you happen to use CEC on your Apple TV? Also do you use the custom firmware on your MS2130?
Get Outlook for iOS<https://aka.ms/o0ukef>
…________________________________
From: appleimperio ***@***.***>
Sent: Wednesday, April 10, 2024 10:27:52 AM
To: awawa-dev/HyperHDR ***@***.***>
Cc: jpleasants ***@***.***>; Mention ***@***.***>
Subject: Re: [awawa-dev/HyperHDR] Video grabber MS2130: the good old MS2109 on steroids. At least it was... :confused: (Discussion #499)
@jpleasants<https://github.com/jpleasants> I have an Apple TV 4k 2nd generation, the grabber and the splitter are the same but the TV I use is an LG with DV. Using HyperHDRv20 with no problems at all.
—
Reply to this email directly, view it on GitHub<#499 (comment)>, or unsubscribe<https://github.com/notifications/unsubscribe-auth/AEPC4PLVXIYIDYNWRYXTSJTY4VD6RAVCNFSM6AAAAAAUW245BGVHI2DSMVQWIX3LMV43SRDJONRXK43TNFXW4Q3PNVWWK3TUHM4TANZSGIZTA>.
You are receiving this because you were mentioned.Message ID: ***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
No CEC on the Apple TV and yes custom firmware on the MS2130 |
Beta Was this translation helpful? Give feedback.
-
@awawa-dev So with the new exploit on LG TVs that lets you install homebrew on even the newest versions https://github.com/throwaway96/dejavuln-autoroot I can now run PicCap on my LG TV and capture everything straight from the TV. This should theoretically let me be able to capture anything. I can now capture TV Led Dolby Vision instead of just LLDV which is probably the best advantage. Are there any disadvantages of this method vs the Elgato HD60X w/ splitter? I think I could save quite a bit of power without running the splitter, capture device, and HPTC. |
Beta Was this translation helpful? Give feedback.
-
Received my Grabber today. has firmware (3rd/4th byte) FB A0. I have backed it up if its of any use ill upload it |
Beta Was this translation helpful? Give feedback.
-
Hi, I'm hoping someone can help my figure out which part of my setup isn't working correctly, as I bought hardware that it seemed like worked for multiple other users without any issue. Here is the setup: Nvidia Shield TV Pro -> EZCOO EZ-SP12HAS splitter The issue is the live video preview is just a black screen under most conditions. By changing the display mode on the Shield TV I can get it to work, but never at the right setting. SEE BELOW COMMENT FOR UPDATED INFORMATION ON MODES THAT WORK If I connect HDMI 2 on the splitter to a 1080p60 computer monitor and turn the scaler on, the monitor displays the image just fine. I'm at a complete loss why the splitter seems to output 1080p60 just fine but the grabber can't see it, even though the grabber can see a native 1080p60 image just fine. I would be very grateful for any help someone can provide; I've already sunk a decent amount of money into this setup with confidence that it would work but I'm now at my wits' end. Cheers. |
Beta Was this translation helpful? Give feedback.
-
Does the MS2130 support interlaced video? |
Beta Was this translation helpful? Give feedback.
-
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:
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
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
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
Beta Was this translation helpful? Give feedback.
All reactions