hyperion.ng grabber for webOS.
This piece of software does high-framerate/low-latency capture of contents displayed directly on webOS TVs and transmits these frames to hyperion.ng over the network.
Based on reverse-engineered internal system APIs. Still highly experimental.
If you are looking for a user-friendly UI that ships this piece of software check PicCap. This application mainly is the underlaying service for this software.
- Everything is based on highly platform-specific reverse-engineered internal system APIs. Standard no-warranty clauses apply.
This software uses multiple capture backends, that may work differently on some webOS versions/hardware platforms.
Now, with unicapture, video and ui backends are seperated and only blended together if desired.
This means, UI or video capture can be turned on/off individually.
Backend | Description | webOS |
---|---|---|
libdile_vt |
Low-level library used internally by libvt | 3.x+ |
libvtcapture |
High-level video capture library | 5.x+ |
Backend | Description | webOS |
---|---|---|
libgm |
UI capture library for older TVs | 3.x+ |
libhalgal |
UI capture library for newer TVs | 5.x+ |
Some TV models generally are comptabile with a specific backend, but require a slightly different routine to work reliably.
In this case, to not need totally different binaries, we implemented quirks, which can be toggled on if needed.
Currently the following ones exist:
Backend | Quirk | Description | Flag |
---|---|---|---|
DILE_VT | QUIRK_DILE_VT_CREATE_EX | Use DILE_VT_CreateEx instead of DILE_VT_Create |
0x1 |
DILE_VT | QUIRK_DILE_VT_NO_FREEZE_CAPTURE | Do not freeze frame before capturing (higher fps) | 0x2 |
DILE_VT | QUIRK_DILE_VT_DUMP_LOCATION_2 | (webOS 3.4) Use undocumented dump location 2 | 0x4 |
VTCAPTURE | QUIRK_VTCAPTURE_FORCE_CAPTURE | Use of a custom kernel module for reenable capture in special situation | 0x100 |
They can be provided in config.json
via the {"quirks": 0}
field or on commandline via --quirks
.
Easiest way though -> Use PicCap GUI!
You can assemble the final quirks value by using a bitwise-OR,
e.g. quirks_value = (quirk_val | quirk_val2 | quirk_val3)
.
The calculator is your friend ;)
You can find them defined here: Source code file
hyperion-webos
together with *_backend.so
libraries need to be copied onto
the TV, eg. into /tmp
directory.
cd /tmp
./hyperion-webos --help
./hyperion-webos -b libdile_vt -a 10.0.0.1
When reporting issues please include result of the following command:
grep -h -E '"(hardware_id|core_os_release|product_id|webos_manufacturing_version|board_type)"' /var/run/nyx/*
This contains model/hardware/region/software version, without any uniquely identifiable information.
If a segfault/crash occurs, a crashlog file will be generated in /var/log/reports/librdx
or /tmp/faultmanager/crash/
. This contains process memory dump and backtrace,
but should not contain any uniquely identifiable information. (though, this is not guaranteed)
To ensure a common codestyle on contributions, please ensure your submission is linted. The linting script depends on python3 / clang-format to be installed.
Run the linting / formatter script like this:
python lint/run-clang-format.py --extensions "c,h,cpp" --color auto --recursive --inplace true ./src
To make a dry-run (and not auto-fix), omit the --inplace true
parameter.