Steam Link

Steam Link

PyroWave is excluded from 32-bit (armeabi-v7a) Android builds, greying it out on modern Sony Bravia Google TVs (Vulkan 1.3.247)
Modern Sony Google TVs, specifically the Sony Bravia 7 (BRAVIA_AE2 / MediaTek Pentonic 1000 mt5897, 5GB RAM) running Android 14, ship with a 64-bit ARMv8 Cortex-A73 CPU running in 32-bit OS mode (armeabi-v7a).

However, the Mali-G57 GPU driver on Android 14 (v1.r44p1, Driver 44.1.0) fully supports Vulkan 1.3.247 along with all required PyroWave extensions:
- VK_EXT_subgroup_size_control
- VK_KHR_shader_float16_int8 / VK_KHR_16bit_storage / VK_KHR_8bit_storage
- VK_KHR_shader_subgroup_extended_types / VK_EXT_shader_subgroup_ballot
- VK_KHR_synchronization2 / VK_KHR_maintenance4

Inspecting /lib/arm/libmain.so and libshell_armeabi-v7a.so in the current Steam Link APK shows that only the protobuf definitions and UI strings (CPanelStreaming -> Not available) are present in the armeabi-v7a build, while the actual PyroWave Vulkan decoder implementation is compiled out on 32-bit ARM targets.

Could PyroWave be enabled for armeabi-v7a builds in the Android build config so modern Android 14 Smart TVs with Vulkan 1.3 drivers can use it?
< >
Showing 1-6 of 6 comments
Okay, I've added it in a temporary 32-bit build. Can you try it out there and see how it works for you?
https://www.libsdl.org/tmp/android-steamlink-release.apk
Update: Tested the new 32-bit (armeabi-v7a) build on Sony Bravia 7 (Mali-G57)

Summary: PyroWave now enables, but has a rendering issue and crashes after ~2 minutes.

Links:
  1. https://pastebin.com/3BDFg3Ns (
    logcat -d -s DEBUG:V Granite:V libc:V SDL/APP:V > full_crash_backtrace.txt
    )
  2. https://pastebin.com/dE71nkke (
    logcat -d | grep -i -a -E "pyrowave|vulkan|remoteplay|sdl|steamlink|mali|buffer|surface|swapchain" > pyrowave_bug_log.txt
    )
  3. https://imgur.com/a/BboMyQC

Thank you for pushing the 32-bit build so quickly! The PyroWave toggle is now available and selectable on my Sony Bravia 7 (BRAVIA 4K AE2, MediaTek Pentonic 1000 / Mali-G57, Android 14 32-bit armeabi-v7a, Vulkan 1.3.247). However, when streaming at 1920x1080 with PyroWave enabled, two issues occur:

1. Corrupted Video Output (Top 50% Black, Bottom 50% Vertically Squished):
As shown in the attached photo, the top half of the screen is completely black and the video output is vertically compressed into the bottom half of the screen. Here are the relevant initialization lines from logcat when the stream starts:
I SDL/APP : Video initialized: android I SDL/APP : CPyrowaveVulkanAccel: Not using a Vulkan renderer I SDL/APP : Pyrowave YUV decoding I Granite : Using Vulkan GPU: Mali-G57 W Granite : Workaround applied: Emulating events as pipeline barriers. I Granite : Selection precision level: 1 I Granite : Using texel buffers instead of SSBO. I Granite : Using linear textures instead of texel buffers.

2. Crash after ~2 Minutes of Streaming (std::bad_alloc / Out of Memory):
After streaming for about 2 minutes (with the target framerate fluctuating between 29.95 FPS and 59.90 FPS), the Steam Link app crashes with SIGABRT (std::bad_alloc) right after malloc(3110400) fails:
10-15 00:09:01.695 7274 7274 I tware.steamlink: Waiting for a blocking GC NativeAlloc 10-15 00:09:49.155 7274 7492 W libc : malloc(3110400) failed: returning null pointer 10-15 00:09:49.446 7274 7492 F libc : Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 7492 (SDLThread), pid 7274 (MainThrd) 10-15 00:09:49.929 7274 7451 W libc : pthread_create failed: couldn't allocate 1052672-bytes mapped space: Out of memory ... 10-15 00:10:33.038 7721 7721 F DEBUG : Abort message: 'terminating due to uncaught exception of type std::bad_alloc: std::bad_alloc' 10-15 00:10:33.038 7721 7721 F DEBUG : #00 pc 0003b5f6 /apex/com.android.runtime/lib/bionic/libc.so (abort+138) 10-15 00:10:33.038 7721 7721 F DEBUG : #01 pc 0006aaab /data/app/~~yXRrUr-JZ_hNnlORoZJVhQ==/com.valvesoftware.steamlink-dX-W4jp2cssh7FU6th9_6Q==/lib/arm/libc++_shared.so

I have attached the photo of the screen along with the full logcat logs from the TV for reference. Please let me know if there are any other logs or tests I can run to help!
Okay, I think I know what’s going on here, thanks!
Okay, try this:
https://www.libsdl.org/tmp/steamlink-1.4.2-androidtv-pyrowave.apk

Just to set expectations, Android TVs are designed for media playback, not heavy GPU performance, so it's very likely that HEVC will be a better option for you.
Thanks for the experimental build! I can confirm that the changes you made completely resolved the display output issues with Pyrowave.

Screenshot of Stream [imgur.com]

I spent a good amount of time testing the Steam Link app on my TV today, and overall the experience was quite playable. I noticed some minor packet loss here and there (around 0.1%–0.5%), though that’s most likely just variance on my local network.

As you mentioned earlier, the main bottleneck right now is definitely the TV's hardware. As shown in the overlay stats in the attached photo, the display time sits around ~61 ms (compared to <1 ms input latency and ~2.4 ms ping), which seems to be the limit of what this TV's SoC/GPU can handle.

A couple of quick questions:
  1. Do you have a rough timeline for when the Pyrowave fixes from this experimental build might make their way into the official public Android release?
  2. While testing, I attempted to set the client resolution to 4K, but the stream remained at 1080p (Capture 1920x1080). Is this expected behavior because my host monitor only natively outputs up to 1080p, or should the client override be able to request a higher render target regardless of the host display?

Thanks again for looking into this and pushing the fix!
Originally posted by Yuma3015:
As you mentioned earlier, the main bottleneck right now is definitely the TV's hardware. As shown in the overlay stats in the attached photo, the display time sits around ~61 ms (compared to <1 ms input latency and ~2.4 ms ping), which seems to be the limit of what this TV's SoC/GPU can handle.

Yep, and notice you're losing about 14% of frames, just because your TV isn't fast enough to decode and display them all.

Originally posted by Yuma3015:
Do you have a rough timeline for when the Pyrowave fixes from this experimental build might make their way into the official public Android release?

No, but we have some Android mouse fixes coming, so I don't imagine it'll be too long.

Originally posted by Yuma3015:
While testing, I attempted to set the client resolution to 4K, but the stream remained at 1080p (Capture 1920x1080). Is this expected behavior because my host monitor only natively outputs up to 1080p, or should the client override be able to request a higher render target regardless of the host display?

Did you click on the enhanced 4K preset or go into the streaming settings and unlock higher resolutions?

Originally posted by Yuma3015:
Thanks again for looking into this and pushing the fix!

You're welcome! :)
< >
Showing 1-6 of 6 comments
Per page: 1530 50