[Issue]: Hwcomposer deliberately dropping 1/2 of all frames on new TVs with Mediatek Pentonic socs
Describe the bug
When running Moonlight on a TV with a Mediatek Pentonic soc, the output video stream is displayed at half the refresh from what is intended. With Moonlights refresh rate set to 60/90/120, since Moonlights rendering framerate is capped at 60FPS on Google TV, this results in the video stream never outputting over 30Hz. On 30Hz refresh rate it outputs 15Hz. Note this issue only happens with Moonlight, other apps including Steam Link work fine.
These socs are the next generation soc introduced this year, and above is the only major issue experienced. All rendering stats are perfect, including latency and rendering frame rate. The decoding time is very low on this new soc (for a TV). But the actual video stream presented to the TV screen is only half the refresh rate of what is logged in the stat window.
Using the testufo frame skipping checker we can confirm the problem.
Photo of the host machine:
Photo of another Android client without any problems:
Photo of client affected by this issue:
As you can see on the last photo exactly half of the frames is skipped, resulting in the alternating pattern of the grey boxes.
Looking in the ADB logs, the issue is also revealed with this log:
I PqLink : frameRateControl : PqId[0] out_frame_rate 60000, in_frame_rate 120000, gcd 60000 => 1/2
And then a variation of the following outputted every other frame:
E PqLink : frameRateControl : PqId[0] Drop input index 4 with frm_idx 42003 by factor (1/2)
The offending process turns out to be:
system 578 1 226592 73676 0 0 S [email protected]
The full ADB log of this process has been pasted in the relevant log output section of this issue.
My own understanding: it seems like there is a configuration mismatch or incorrect logic in determining input/output frame rates in the communication between Moonlight and the OS, resulting in the OS incorrectly thinking it needs to drop half of all frames to reach 60Hz.
Steps to reproduce
Run Moonlight on a recent Google TV that is equipped with a new generation Mediatek Pentonic soc.
It is highely likely a problem on all 2024 lineup Sony TVs + the Sony Bravia A95L (all Sonys with the Pentonic). There have also been reports on bad perceived performance on TVs from other brands running the Pentonic, this pertains to some Hisense, Philips, and TCL TVs.
Confirmed affected devices: (my own TV + reports I have received from other users having the same issue confirmed with logs) Sony Bravia 7 (Mediatek Pentonic 1000) TCL C805/C755 (Mediatek Pentonic 700)
Affected games
Any game
Other Moonlight clients
PC
Moonlight adjusted settings
Yes
Moonlight adjusted settings (please complete the following information)
This problem persists through any possible permutation of all possible Moonlight settings, even all the frame/refresh related settings.
Moonlight default settings
Yes
Gamepad-related connection issue
Yes
Gamepad-related input issue
Yes
Gamepad-related streaming issue
Yes
Android version
Google TV 12
Device model
Sony Bravia 7 K85XR70PAEP
Server PC OS version
Windows 10 Pro 22H2
Server PC GeForce Experience version
3.28.0.417
Server PC Nvidia GPU driver version
560.70
Server PC antivirus and firewall software
Windows Security
Screenshots
No response
Relevant log output
I PqLink : frameRateControl : PqId[0] out_frame_rate 60000, in_frame_rate 120000, gcd 60000 => 1/2
D DispLink: [PERF][DISPLINK][225] [flipToPq] [0][performance] flip to PQ done fid 10 +0 (idx 8, PTS 519453113000 +0 cost 0, PqIn_AtPq_Cnt 1, cnt(1), interval 0)
I DispLink: [225] [checkFlipLogo] First 1, SDR -> SDR
E DispService: [logoThread][L1498] no DispServiceLogoListener
I DispLink: [225] [stepGetLatency] doConfig done
V <MI_PQ> : [mi_pq_cfd][error] [MI_PQ_ColorFormatDecision:4314] u8PreHdrType = 0, stInput.hdr_mode = 0,
I PQ_HIDL : PerStreamCallbackToRenderService
W DispLink: [225] [sendEventToRenderService] No callback to send event(0) to RenderService
I <MI_RENDER>: [INFO ]MI_RENDER_SetWindowPq_Sony[5909] [MI_RENDER_SetWindowPq_Sony:5909] hController: 0x0 pszWindowPqSetting:{
I <MI_RENDER>: "HDR_type" : "SDR",
I <MI_RENDER>: "Content_Sync_Frame_ID" : 0,
I <MI_RENDER>: "Cine_Motion" : "Off"
I <MI_RENDER>: }
I <MI_RENDER>:
I <MI_RENDER>: [INFO ]MI_RENDER_SetWindowPq_Sony[5914] MI_RENDER_SetWindowPq_Sony Start
I <MI_RENDER>: [INFO ]MI_RENDER_SetWindowPq_Sony[5931] VideoNum:1
I <MI_RENDER>: [INFO ]MI_RENDER_SetWindowPq_Sony[5958] Registered success HDR Type: SDR
I <MI_RENDER>: [INFO ]MI_RENDER_SetContentSyncFrameId[9200] [DolbyMute]Found Content_Sync_Frame_ID in WindowPq
I <MI_RENDER>: [INFO ]MI_RENDER_SetContentSyncFrameId[9203] [DolbyMute]Conent_Sync_Frame_ID value = : 0,
I <MI_RENDER>: "Cine_Motion" : "Off"
I <MI_RENDER>: }
I <MI_RENDER>:
I <MI_RENDER>: [INFO ]MI_RENDER_SetContentSyncFrameId[9215] [DolbyMute]WindowId:0 Receive New Content_Sync_Frame_ID:0 -> 0
I <MI_RENDER>: [INFO ]MI_RENDER_SetContentSyncFrameId[9221] [DolbyMute]WindowId:0 Set 1st Content_Sync_Frame_ID = 0 from MI_RENDER_Open
I <MI_RENDER>: [INFO ]MI_RENDER_SetWindowPq_Sony[5964] MI_RENDER_SetWindowPq_Sony End
I <MI_RENDER>: [INFO ]MI_RENDER_SetWindowPq_Sony[5909] [MI_RENDER_SetWindowPq_Sony:5909] hController: 0x0 pszWindowPqSetting:MJC_Demo:Off;MJC_Demo_Partition:Right;Gaming_MJC_Lvl:0;MJC_Deblur:0;MJC_Dejudder:0;Real_Cinema:Off;Cadence:Off;Cadence_Data1:0;Cadence_Data2:0;Cadence_Data3:0;MEMC_ONOFF:Off;MEMC_Level:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
I <MI_RENDER>: [INFO ]MI_RENDER_SetWindowPq_Sony[5914] MI_RENDER_SetWindowPq_Sony Start
I <MI_RENDER>: [INFO ]MI_RENDER_SetWindowPq_Sony[5931] VideoNum:1
I <MI_RENDER>: [INFO ]MI_RENDER_SetWindowPq_Sony[5947] Not found HDR Type
I <MI_RENDER>: [INFO ]MI_RENDER_SetContentSyncFrameId[9197] [DolbyMute]WindowId:0 Not found Content_Frame_Sync_ID
I <MI_RENDER>: [INFO ]MI_RENDER_SetWindowPq_Sony[5964] MI_RENDER_SetWindowPq_Sony End
I <MI_RENDER>: [INFO ]MI_RENDER_MEMC_WindowPq[10349] Error before: MJC_Demo:Off;MJC_Demo_Partition:Right;Gaming_MJC_Lvl:0;MJC_Deblur:0;MJC_Dejudder:0;Real_Cinema:Off;Cadence:Off;Cadence_Data1:0;Cadence_Data2:0;Cadence_Data3:0;MEMC_ONOFF:Off;MEMC_Level:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
I DispLink: [225] [cbPqCommonEvent] PQ_SETTING_TS_DOMAIN_GLOBAL
E <MI_PQ> : <ERR>MI_PQ_ApplyParams_WriteParamMeta[8968]: tag:327694, ver:0, size:4100, s32SMetaFd[0]
E <MI_PQ> : <ERR>MI_PQ_ApplyParams_WriteParamMeta[8968]: tag:327693, ver:1, size:3072, s32SMetaFd[0]
E PqLink : frameRateControl : PqId[0] Drop input index 0 with frm_idx 11 by factor (1/2)
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
E PqLink : frameRateControl : PqId[0] Drop input index 1 with frm_idx 13 by factor (1/2)
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
D DispLink: [PERF][DISPLINK][225] [cbHandleOutBuf] [0][performance] PQ flip to syncQ fid 10 (idx: 0xb00000, pts 519453113000 sid 225, eos 0, byPassAv 0 PqIn_AtPq_Cnt 2, PqOut_AtPq_Cnt 2, interval: 0)
D DispLink: [PERF][DISPLINK][225] [flipToRender_internal][0][performance] flip to render done fid 10 pts 519453113000 (cost 0), frames to unmute/unfreeze 0 (Mute 1, UserMute 0, C2Mute 0, unstable 0, layer 0, PTC 0, TpcMute 0, dvrm 0, Freeze 0, UserFreeze 0, TpcFreeze 0, Ctrl NONE), RepeatCnt 0, FlipToRenderCnt : 1
I DispLink: [225] [flipToRender] SETMUTE false
I DispLink: [225] [renderSetMute] internal 0, user 0, C2 0, unstable 0, layer 0, PTC 0, tpc 0, ctrl NONE, dvrm 0
I DispLinkRender: [225] [setMute] 1 -> 0
I <MI_RENDER>: API trigger, no meta mute info
I <MI_RENDER>: [Win 0][CurTime:519453209559735][UserM:Un:Cur]=[257:129:0], [C2M:Un:Cur]=[0:2755430:0], [PqM:Un:Cur]=[0:2755430:0], [GlobalM:Un]=[2:2], [TxM:Un]=[2:2]
I DispLinkRender: [PERF][DISPLINK][225] [setMute] MI_RENDER_UnMuteWindow ok
I <MI_RENDER>: [Win 0][CurTime:519453211801152][UserM:Un:Cur]=[257:129:0], [C2M:Un:Cur]=[0:2755431:0], [PqM:Un:Cur]=[0:2755431:0], [GlobalM:Un]=[2:2], [TxM:Un]=[2:2]
V <MI3> : <INFO>[PERF][MI_RENDER][DRM_Setting][PLAYBACK] Mute Status: pre_mute(0) -> current_mute(1), FREEZE(0), HW_FREEZE(0), Fake_Mute(0)
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
I <MI_RENDER>: eFrameSyncMode=1
E PqLink : frameRateControl : PqId[0] Drop input index 10 with frm_idx 15 by factor (1/2)
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
V <MI3> : <INFO>[PERF][MI_RENDER][DRM_Setting][PLAYBACK] Mute Status: pre_mute(1) -> current_mute(0), FREEZE(0), HW_FREEZE(0), Fake_Mute(0)
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
E PqLink : frameRateControl : PqId[0] Drop input index 4 with frm_idx 17 by factor (1/2)
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
E PqLink : frameRateControl : PqId[0] Drop input index 6 with frm_idx 19 by factor (1/2)
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
E PqLink : frameRateControl : PqId[0] Drop input index 0 with frm_idx 21 by factor (1/2)
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
E PqLink : frameRateControl : PqId[0] Drop input index 9 with frm_idx 23 by factor (1/2)
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
E PqLink : frameRateControl : PqId[0] Drop input index 2 with frm_idx 25 by factor (1/2)
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
E PqLink : frameRateControl : PqId[0] Drop input index 3 with frm_idx 27 by factor (1/2)
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
E PqLink : frameRateControl : PqId[0] Drop input index 5 with frm_idx 29 by factor (1/2)
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
E PqLink : frameRateControl : PqId[0] Drop input index 7 with frm_idx 31 by factor (1/2)
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
E PqLink : frameRateControl : PqId[0] Drop input index 8 with frm_idx 33 by factor (1/2)
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
E PqLink : frameRateControl : PqId[0] Drop input index 1 with frm_idx 35 by factor (1/2)
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
E PqLink : frameRateControl : PqId[0] Drop input index 10 with frm_idx 37 by factor (1/2)
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
E PqLink : frameRateControl : PqId[0] Drop input index 4 with frm_idx 39 by factor (1/2)
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
E PqLink : frameRateControl : PqId[0] Drop input index 6 with frm_idx 41 by factor (1/2)
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
E PqLink : frameRateControl : PqId[0] Drop input index 0 with frm_idx 43 by factor (1/2)
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
E PqLink : frameRateControl : PqId[0] Drop input index 9 with frm_idx 45 by factor (1/2)
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
E PqLink : frameRateControl : PqId[0] Drop input index 2 with frm_idx 47 by factor (1/2)
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
E PqLink : frameRateControl : PqId[0] Drop input index 3 with frm_idx 49 by factor (1/2)
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
E PqLink : frameRateControl : PqId[0] Drop input index 5 with frm_idx 51 by factor (1/2)
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
E PqLink : frameRateControl : PqId[0] Drop input index 7 with frm_idx 53 by factor (1/2)
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
E PqLink : frameRateControl : PqId[0] Drop input index 8 with frm_idx 55 by factor (1/2)
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
D hwcomposer: HWCDisplayDevicePrimary::getRefreshPeriod: set output fps(60).
E PqLink : frameRateControl : PqId[0] Drop input index 1 with frm_idx 57 by factor (1/2)
I <MI_RENDER>: MI_RENDER_Open[25916][Output] Window ID = 0xf1000000
D hwcomposer: HWComposerDisplayHalMiRender::setShowFrameInfo: Plane[0]: Show!!!!
E PqLink : frameRateControl : PqId[0] Drop input index 3 with frm_idx 60 by factor (1/2)
E PqLink : frameRateControl : PqId[0] Drop input index 5 with frm_idx 62 by factor (1/2)
E PqLink : frameRateControl : PqId[0] Drop input index 7 with frm_idx 64 by factor (1/2)
E PqLink : frameRateControl : PqId[0] Drop input index 8 with frm_idx 66 by factor (1/2)
E PqLink : frameRateControl : PqId[0] Drop input index 1 with frm_idx 68 by factor (1/2)
E PqLink : frameRateControl : PqId[0] Drop input index 2 with frm_idx 70 by factor (1/2)
E PqLink : frameRateControl : PqId[0] Drop input index 4 with frm_idx 72 by factor (1/2)
E PqLink : frameRateControl : PqId[0] Drop input index 6 with frm_idx 74 by factor (1/2)
E PqLink : frameRateControl : PqId[0] Drop input index 0 with frm_idx 76 by factor (1/2)
E PqLink : frameRateControl : PqId[0] Drop input index 9 with frm_idx 78 by factor (1/2)
E PqLink : frameRateControl : PqId[0] Drop input index 10 with frm_idx 80 by factor (1/2)
E PqLink : frameRateControl : PqId[0] Drop input index 3 with frm_idx 82 by factor (1/2)
E PqLink : frameRateControl : PqId[0] Drop input index 5 with frm_idx 84 by factor (1/2)
E PqLink : frameRateControl : PqId[0] Drop input index 7 with frm_idx 86 by factor (1/2)
E PqLink : frameRateControl : PqId[0] Drop input index 8 with frm_idx 88 by factor (1/2)
I <MI_RENDER>: [Win 0][CurTime:519454539654985]Mute:0, FlipInTime:519453292590819, FlipAvgfps:0, Flip2Atomic:1247
E PqLink : frameRateControl : PqId[0] Drop input index 1 with frm_idx 90 by factor (1/2)
E PqLink : frameRateControl : PqId[0] Drop input index 2 with frm_idx 92 by factor (1/2)
E PqLink : frameRateControl : PqId[0] Drop input index 4 with frm_idx 94 by factor (1/2)
E PqLink : frameRateControl : PqId[0] Drop input index 6 with frm_idx 96 by factor (1/2)
E PqLink : frameRateControl : PqId[0] Drop input index 0 with frm_idx 98 by factor (1/2)
E PqLink : frameRateControl : PqId[0] Drop input index 9 with frm_idx 100 by factor (1/2)
E PqLink : frameRateControl : PqId[0] Drop input index 10 with frm_idx 102 by factor (1/2)
...This pattern then repeats for as long as you run the app
Additional context
No response
Adding a full log of a run of Moonlight, including all logs from all processes at the time to see the interaction between Moonlight and various OS systems logcat.txt
There are coming new socs from mediatek (pentonic) so i hope this will be seen by the developers! I want to by the new Philips TV so i hope this will be fixt.
Great investigation here. Exactly the same issue I'm having with the Mediatek Pentonic 700 - TCL C805 TV. This is the only chipset I have these exact same Moonlight issues.
Any update for this issue?
Same issue on my TCL 65C805
Hi! I have the exact same issue, also with a recent TCL c805. Any advances regarding what can be done?
Thank you very much.
dayum, I just bought the 75c805; it seems like I still need to connect my shield19pro
Hi! I have the exact same issue, also with a recent TCL c805. Any advances regarding what can be done?
Thank you very much.
I’ve found a trick to play smoothly, but it needs to be done manually each time the TV is turned on. Specifically, you just need to toggle off and on two options in the Privacy section of the TV's Settings.
Hi! I have the exact same issue, also with a recent TCL c805. Any advances regarding what can be done? Thank you very much.
I’ve found a trick to play smoothly, but it needs to be done manually each time the TV is turned on. Specifically, you just need to toggle off and on two options in the Privacy section of the TV's Settings.
Hi. Can you detail which options or the procedure? Thank you!
Hi! I have the exact same issue, also with a recent TCL c805. Any advances regarding what can be done? Thank you very much.
I’ve found a trick to play smoothly, but it needs to be done manually each time the TV is turned on. Specifically, you just need to toggle off and on two options in the Privacy section of the TV's Settings.
Hi. Can you detail which options or the procedure? Thank you!
Yes, just disable 2 options in Options - Privacy - Location as picture below. My TCL C755's firmware is v404.
Hi! I have the exact same issue, also with a recent TCL c805. Any advances regarding what can be done? Thank you very much.
I’ve found a trick to play smoothly, but it needs to be done manually each time the TV is turned on. Specifically, you just need to toggle off and on two options in the Privacy section of the TV's Settings.
Hi. Can you detail which options or the procedure? Thank you!
Yes, just disable 2 options in Options - Privacy - Location as picture below. My TCL C755's firmware is v404.
Sorry: I have tried all possible variations with these settings again and I have not been able to successfully replicate it. I have a C805, so that may be the difference.
Hopefully this will be fixed in the future.
has anybody from the development team had a chance to look at this?
I recently re-tested this issue and found out that it was magically fixed. Since there has been 0 Moonlight development since, it has to be fixed by some Sony TV firmware update. Can anybody confirm whether this is still an issue on the TCL TVs? If not I will close this issue.
Hi friends. I am facing the same issue with my Philips OLED809 based Pentonic 1000. Any feedback from the dev team? Just for info, Steam Link works also horribly on my TV. I have the same issue with Amazon Luna.
Any update on this topic ?
Same issue with my TCL 65C755 TV (same as C805 model, Pentonic 1000 SoC), both in h264 and h265. Tested modifying the Privacy options and had no result. My TCL C755 firmware is v400. It works OK on other devices.
Same for me on my new Philips 65OLED810... Mediatek Pentonic 1000... Thought I'd get an android TV device to have steamlink and moonlight right on it. Great results...
Also the same Problem. Philips 50PUS8508/12 with a Mediatek Pentonic 1000. 120 Hz feels like 60 Hz with a noticable delay/lag. 60 Hz or less are unusable. Latency and decoding times are good and below 10 ms.
Update here: For Steam Link the problem is ALWAYS present. On Moonlight I now had some instances where it didn't happen, on Artemis it almost never happens and everything runs right. I'm confused...
@Nikita42 you say 120 "feels" like 60... For me moonlight even showed the halfed rendering frame rate explicitly, not the same for you?
Update: When I switched to an ethernet connection with 1Gbps RJ45 to usb 3.0 dongle to TV, the network packets no longer dropped and the frame rate became smoother. It seems that the Wi-Fi connection on my TCL C755 is unstable.
Update: When I switched to an ethernet connection with 1Gbps RJ45 to usb 3.0 dongle to TV, the network packets no longer dropped and the frame rate became smoother. It seems that the Wi-Fi connection on my TCL C755 is unstable.
But then that's a different story than for the rest of us. The TV really halfs the rendering framerate explicitly
This Moonlight/Artemis Build fixed the Issue for me. (Philips 65OLED888, MediaTek Pentonic 1000)
https://github.com/derflacco/moonlight-android
Release: Experimental_6.1
I'm having the same exact issue with my TCL C6K. The toggling of location service works for me but only with Artemis + Ultra Low Latency mode. You also have to do it everytime the tv is turned on.
After some tinkering with the Artemide build https://github.com/derflacco/moonlight-android, I think I managed to fix the half framerate issue (at least for my TCL C6K) by setting the following vendor parameters:
vendor.mtk-codec2.game-mode
vendor.mtk-codec2.low-latency-mode
The decoder for these MTK Pentonic SoC does not seem to play well with Android 11's standard low latency hint.
I got the best result from the following setup:
- Remove the Android 11's standard low latency hint (
low-latencykey) (Requires code change) - Set the 2 mtk params above to
1(Requires code change) - Set
MediaFormat.KEY_OPERATING_RATEwith the selected video framerate from settings - Enable ultra low latency in advanced settings (Available only in Artemis-based builds)
- Set Bitrate to 80mbps or above (this oddly improves/stabilize the wifi latency)
If anyone is willing to try, here's my sample build: https://drive.google.com/file/d/1iwMd7q_QXFYdFhZSOHRUcWVwufXKksPI/view?usp=sharing