webosbrew/hyperion-webos

Known quirks for various TV models/WebOS versions

tuxuser opened this issue · 1 comments

[DILE_VT] TVs of C9 series: If DILE_VT_Create function is called first, initialization of DILE_VT will fail most of the cases.

Solution: Call DILE_VT_CreateEx before DILE_VT_Create

vth = DILE_VT_Create(0);
if (vth == NULL && &DILE_VT_CreateEx != 0) {
WARN("DILE_VT_Create failed, attempting DILE_VT_CreateEx...");
vth = DILE_VT_CreateEx(0, 1);
}

(Reported via Discord)

Test branch that implements this workaround: https://github.com/webosbrew/hyperion-webos/tree/try/c9_createex_first

[DILE_VT] 4k content on some webOS 4.3.0 devices will be cropped to 1/4 of the picture when captured from VT.

Solution: Use (not-named) value 2 to pass as dump_location to DILE_VT_SetVideoFrameOutputDeviceDumpLocation

DILE_VT_DUMP_LOCATION_TYPE_T dump_location = DILE_VT_DISPLAY_OUTPUT;
if (DILE_VT_SetVideoFrameOutputDeviceDumpLocation(vth, dump_location) != 0) {
WARN("[DILE_VT] DISPLAY dump location failed, attempting SCALER...");
dump_location = DILE_VT_SCALER_OUTPUT;
if (DILE_VT_SetVideoFrameOutputDeviceDumpLocation(vth, dump_location) != 0) {
ERR("[DILE_VT] SetVideoFrameOutputDeviceDumpLocation failed!");
ret = -2;
goto err_destroy;
}
}
DILE_VT_RECT region = { 0, 0, config->resolution_width, config->resolution_height };
if (region.width < limitation.scaleDownLimitWidth || region.height < limitation.scaleDownLimitHeight) {
WARN("scaledown is limited to %dx%d while %dx%d has been chosen - there's a chance this will crash!", limitation.scaleDownLimitWidth, limitation.scaleDownLimitHeight, region.width, region.height);
}
if (DILE_VT_SetVideoFrameOutputDeviceOutputRegion(vth, dump_location, &region) != 0) {
ERR("[DILE_VT] SetVideoFrameOutputDeviceOutputRegion failed!");
ret = -3;
goto err_destroy;
}

Reference: #45 (comment)

[General] Some (newer?) TVs: Checking the power state via luna://com.webos.service.tvpower/power/getPowerState and evaluating "state" for "Active"/"processing" and pausing capturing due to that criteria, to detect power state, causes flickering each 2 minutes.

chrischan — 02/28/2022
This shows up randomly and leads to hyperion-webos switch off/on:
{ "returnValue": true, "state": "Active", "processing": "Request Screen Saver" }
{ "returnValue": true, "state": "Active", "processing": "Screen On" }
{ "returnValue": true, "state": "Active" }

PowerOff:
{ "returnValue": true, "state": "Active", "processing": "Request Power Off", "onOff": "off", "reason": "remoteKey" }
{ "returnValue": true, "state": "Active", "processing": "Request Active Standby", "onOff": "off", "reason": "remoteKey" }
{ "returnValue": true, "state": "Active", "processing": "Prepare Active Standby", "onOff": "off", "reason": "remoteKey" }
{ "returnValue": true, "state": "Active Standby" }
{ "returnValue": true, "state": "Active Standby", "processing": "Request Suspend", "onOff": "off", "reason": "homekit" }
{ "returnValue": true, "state": "Active Standby", "processing": "Prepare Suspend", "onOff": "off", "reason": "homekit" }
{ "returnValue": true, "state": "Suspend" }

PowerOn:
{ "returnValue": true, "state": "Suspend", "processing": "Prepare Resume", "onOff": "on", "reason": "remoteKey" }
{ "returnValue": true, "state": "Suspend", "processing": "LastInput Ready", "onOff": "on", "reason": "remoteKey" }
{ "returnValue": true, "state": "Suspend", "processing": "Screen On", "onOff": "on", "reason": "remoteKey" }
{ "returnValue": true, "state": "Active" }

Reference:

bool target_state = strcmp(state_str, "Active") == 0 && !jobject_containskey(parsed, j_cstr_to_buffer("processing"));
if (!service->running && target_state && service->power_paused) {
INFO("Resuming after power pause...");
service->power_paused = false;
service_start(service);
}
if (service->running && !target_state && !service->power_paused) {
INFO("Pausing due to power event...");
service->power_paused = true;
service_stop(service);
}

Issue #54

(Reported via Discord)

I have a C7 device and when the TV goes into screensaver the screen grabber does not work afterwards.
Stopping and restarting the service is not working and a full tv reboot is needed.