Trouble with VirtualHere on Shield TV passing through GameCube adapter

Hey there, forgive the (kinda) repost, I'm at my wits' end here trying to figure out a solution to this.

My goal: Passthrough an official GameCube controller adapter through my Shield TV via VirtualHere to my local PC to be used in Dolphin (and then streamed back to the Shield TV via Parsec/Moonlight/Gamestream).

This mostly works! However, at seemingly random intervals, Dolphin will report that the controller adapter has been detached and then reattach almost instantly. This causes sudden random analog stick inputs, rendering games practically unplayable. There's an extremely similar issue that was reported on the Steam forums a few years ago. However, it looks like that was chalked up to powerline adapter latency, which isn't a problem here at all.

Here's a screenshot showing both the active Dolphin console log and VirtualHere's latency statistics window.

There is also a known Dolphin issue with similar symptoms, however I have only been able to reproduce this when VirtualHere is passing through the signal.

In trying to diagnosis this, I narrowed it down to VirtualHere by...
- plugging the adapter directly into my PC (no issues)
- running Dolphin locally on the Shield TV (no issues)
- running through VirtualHere and unplugging any other physical USB devices from both my local PC and Shield TV (issue persisted)
- running through VirtualHere and using Parsec instead of Nvidia Gamestream/Moonlight (issue persisted)
- running through VirtualHere and reinstalling the GameCube adapter driver via Zadig as recommended here (issue persisted)

I was ready to chalk this up to being a Windows or Dolphin issue until I found that I couldn't reproduce the problem with the adapter plugged directly into my PC, with all my other USB peripherals still plugged in on top of that.

I wouldn't blame you if you just called this a Windows or Dolphin problem and moved on, but I was hoping at the least that you might be able to share some insight on why this could be happening and possibly point me in the right direction. Right now my alternate solution is just building a living room PC and running everything locally, but I'm crossing my fingers for a less expensive solution.

Thanks for your time.

#3

Hey Michael, thanks for the response!

Unfortunately, changing that setting in my power plan properties doesn't seem to have done anything. This did however give me the idea to play around with the Shield/Android TV's power settings, and I think I made some progress.

VirtualHere passes through the GameCube adapter flawlessly... if my living room TV is off and the Shield isn't doing anything else. I played around with the USB compatibility modes, power options, and a few other things in Android TV's settings and couldn't get it working without the hiccups. As soon as I powered on my TV and the Shield had to output a signal, I could see the adapter disconnect from Dolphin. It even happens with the Shield idling on its home screen, but becomes much more apparent when something like Moonlight or Parsec is decoding and outputting the video stream from my PC as well. I tried disabling power optimization on VirtualHere Server, but this didn't seem to do anything either.

So it seems this is either an issue with how the Shield/Android TV handles USB devices -or- that the Tegra chip in the Shield is just not powerful enough to decode the video stream and steadily passthrough the adapter simultaneously (which would be surprising).

If you have any other insight or ideas, let me know, but in the meantime I think I'm going to look into finding a cheap Steam Link or a Pi and offload VirtualHere to that. Thanks for your help!

#4

I would have thought the Tegra would be powerful enough because i thought the gpu on the shield would do most of the graphics processing but im not sure...

But anyway on normal Linux i would have suggested using the renice command but i dont think that is there/would not work anyway on android without root. It would be good to try something like renice -19 $(pidof vhusbd) to force priority and see if that helps.

Yes pi4 is definitely a good option. You've got full access to the machine (without android in the way) so lots of settings could be tweaked if needed (but its probably not needed)