Fix black frames on Tizen 9/10 (2025+ / Micro RGB): renamed ppi_ve_* capture symbols - #14
Fix black frames on Tizen 9/10 (2025+ / Micro RGB): renamed ppi_ve_* capture symbols#14bashctrl wants to merge 2 commits into
Conversation
Samsung renamed the libvideoenhance.so RGB-measure entry points with a ppi_ prefix on newer firmware (confirmed on a 2026 R95H Micro RGB, Tizen 10). The un-prefixed ve_* names no longer resolve, so GetCondition() threw EntryPointNotFoundException (silently caught) and the capturer streamed all-black frames while appearing to work. Add DllImports for ppi_ve_get_rgb_measure_condition / ppi_ve_set_rgb_measure_position / ppi_ve_get_rgb_measure_pixel and a runtime DetectApi() using NativeLibrary.TryGetExport that selects between the legacy cs_ve_*, ve_*, and new ppi_ve_* entry points, so older TVs keep their existing behavior. Verified on MRA65R95HAWXXY (65" Micro RGB, Tizen 10): measure condition reports 3840x2160 and pixel reads return live color; end-to-end HyperHDR -> Hue Entertainment sync works.
64e8ee7 to
63597e8
Compare
DetectApi() now probes all three RGB-measure symbol sets (ppi_ve_/ve_/cs_ve_) and returns an explicit Unsupported result when none of them are exported, instead of silently falling back to the legacy symbols and throwing an EntryPointNotFoundException at measure time. GetCondition() short-circuits on Unsupported with a clear notification, and on success posts a one-time notification and writes a "detectedApi" preference (readable over the config websocket) recording which symbol set resolved plus the dimensions the panel reported. This makes a "stream healthy but frames are black" case diagnosable without attaching a debugger.
|
Yeah, I reckon the branch is worth a shot. The release build picks the capture symbols purely off the Tizen version number. Anything 7 or higher calls the The branch stops guessing from the version and probes the library at runtime instead, so it picks whichever set the panel really exports ( Roughly three things it could be:
I've added a bit more to the branch to tell you which of those you're in. On startup it pops a notification with the API it resolved to and the dimensions it read, and it writes the same string to a If you'd rather go straight to the root of it, I've also got a diagnostic build that dumps the exported symbol names out of One catch on handing you a ready-to-run file. Samsung packages are author and distributor signed and the signature is tied to the cert, so a tpk I sign won't install on your monitor. You'd need to re-sign it with your own Samsung cert profile, or just build it yourself since you're already set up for that. Happy to drop the diagnostic as a patch and a re-signable tpk if you want it. So if you can build the branch, install it and tell me which API it resolved to and the dimensions it reports, that'll narrow it down quick. My money's on the first one. |
|
@eraylmz pushed the update, see above whenever you get a chance. |
Problem
On newer Samsung firmware (confirmed: 2026 R95H 65" Micro RGB, model
MRA65R95HAWXXY, Tizen 10 / One UI Tizen), HyperTizen connects to Hyperion/HyperHDR and streams at full rate — but every frame is pure black.Root cause: Samsung renamed the
libvideoenhance.soRGB-measure entry points with appi_prefix. The library on Tizen 10 exports:The existing
ve_*imports no longer resolve, soGetCondition()hitsEntryPointNotFoundException, the catch block swallows it, andGetColors()returns zero-filled arrays forever — black frames that look like a working stream. (This may also explain reports like #13 where newer TVs "connect but nothing happens".)Fix
DllImports for the threeppi_ve_*entry points.DetectApi()usingNativeLibrary.TryGetExportthat probes the library once and selects betweencs_ve_*(legacy),ve_*(Tizen 7+), andppi_ve_*(Tizen 9/10, 2025+). Falls back to the previous version-based heuristic if probing fails, so behavior on older TVs is unchanged.IsTizen7OrHigherbranches inGetCondition()/GetColors()with the dispatchers.Verification (on the R95H, Tizen 10)
DetectApi()→Ppi; measure condition returns0with3840x2160, 2 capture slots, 16x16 density, 20ms sleep.(236,163,116),(502,519,585)), where the un-prefixed imports previously threw.As far as I know this is the first confirmed working HyperTizen setup on a 2026 Micro RGB / Tizen 10 panel — happy to test follow-ups on this hardware.