Skip to content

Commit 1a9ec1d

Browse files
committed
feat(portmaster): package Rockchip MPP support
1 parent 0860320 commit 1a9ec1d

3 files changed

Lines changed: 48 additions & 4 deletions

File tree

README.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
<img width="640" height="480" alt="screenshot" src="https://github.com/user-attachments/assets/4ec93eeb-8795-44e5-9ba8-c6065adf4660" />
44

55
GreenOvercast is a native Xbox Cloud Gaming client for small ARM64 Linux
6-
handhelds. It streams at 720p and uses the H700 video decoder.
6+
handhelds. It streams at 720p and uses hardware video decoding on supported
7+
H700 and Rockchip firmware.
78

89
Built for the Anbernic RG35XX-H (muOS) and validated on the RG40XX-H (Knulli).
910

@@ -24,7 +25,7 @@ The first launch shows a Microsoft device code. Open
2425
[microsoft.com/link](https://www.microsoft.com/link) on another device and enter
2526
the code to sign in. Knulli asks you to sign in again after a reboot.
2627

27-
GreenOvercast is experimental and has only been tested on the devices below.
28+
GreenOvercast is experimental.
2829

2930
## Controls
3031

@@ -54,8 +55,9 @@ support 16:9.
5455
| RG35XX-H | muOS 2508.4 | Tested |
5556
| RG40XX-H | Knulli (Batocera 42) | Tested |
5657

57-
Hardware decoding currently only works on H700 devices. Other devices fall
58-
back to software decoding, which is too slow for normal gameplay.
58+
Rockchip MPP decoding also works on ROCKNIX, but support depends on the device
59+
and firmware. Other devices fall back to software decoding, which is too slow
60+
for normal gameplay.
5961

6062
The release requires glibc 2.38 or newer. ArkOS ships glibc 2.30 and is not
6163
supported.

packaging/portmaster/greenovercast/GreenOvercast.sh

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,26 @@ export GREENOVERCAST_TOKEN_KEY_FILE="$credential_key_file"
5757
export GREENOVERCAST_H264_BOOTSTRAP_FILE="$video_bootstrap_file"
5858
export GREENOVERCAST_CATALOG_FILE="$catalog_file"
5959
export GREENOVERCAST_CEDAR_LIBRARY="$GAMEDIR/libgreenovercast-cedar.so"
60+
export GREENOVERCAST_MPP_LIBRARY="$GAMEDIR/libgreenovercast-mpp.so"
6061
export LD_LIBRARY_PATH="$GAMEDIR:${LD_LIBRARY_PATH:-}"
6162
export SDL_GAMECONTROLLERCONFIG="$sdl_controllerconfig"
6263

64+
if [ -e /dev/vpu_service ] && { [ ! -r /dev/vpu_service ] || [ ! -w /dev/vpu_service ]; }; then
65+
$ESUDO chgrp video /dev/vpu_service && $ESUDO chmod 660 /dev/vpu_service
66+
fi
67+
68+
for compatible_file in /proc/device-tree/compatible /sys/firmware/devicetree/base/compatible; do
69+
if [ -r "$compatible_file" ] && tr '\0' '\n' <"$compatible_file" | grep -q '^rockchip,'; then
70+
$ESUDO chmod +x "$GAMEDIR/rockchip/greenovercast-mpp-probe.aarch64"
71+
if ! GREENOVERCAST_MPP_LIBRARY="$GREENOVERCAST_MPP_LIBRARY" \
72+
LD_LIBRARY_PATH="$LD_LIBRARY_PATH" \
73+
"$GAMEDIR/rockchip/greenovercast-mpp-probe.aarch64" >/dev/null 2>&1; then
74+
export LD_LIBRARY_PATH="$GAMEDIR/rockchip:$LD_LIBRARY_PATH"
75+
fi
76+
break
77+
fi
78+
done
79+
6380
if [ -S /var/run/pipewire-0 ]; then
6481
export XDG_RUNTIME_DIR="${XDG_RUNTIME_DIR:-/var/run}"
6582
export PIPEWIRE_RUNTIME_DIR="${PIPEWIRE_RUNTIME_DIR:-/var/run}"

tools/package-portmaster.sh

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ PORTMASTER_NEW=${PORTMASTER_NEW:-${2:-}}
88
SOURCE="$ROOT/packaging/portmaster/greenovercast"
99
BINARY="$ROOT/zig-out/bin/webrtc_stream"
1010
CEDAR="$ROOT/zig-out/bin/libgreenovercast-cedar.so"
11+
MPP_PLUGIN="$ROOT/zig-out/rockchip/libgreenovercast-mpp.so"
12+
MPP_RUNTIME="$ROOT/zig-out/rockchip/librockchip_mpp.so.1"
13+
MPP_PROBE="$ROOT/zig-out/rockchip/greenovercast-mpp-probe.aarch64"
1114
AVCODEC="$ROOT/zig-out/bin/libavcodec.so.58"
1215
AVUTIL="$ROOT/zig-out/bin/libavutil.so.56"
1316
SWSCALE="$ROOT/zig-out/bin/libswscale.so.5"
@@ -25,6 +28,12 @@ esac
2528
echo "missing Cedar library: $CEDAR" >&2
2629
exit 1
2730
}
31+
for mpp_file in "$MPP_PLUGIN" "$MPP_RUNTIME" "$MPP_PROBE"; do
32+
[ -f "$mpp_file" ] || {
33+
echo "missing Rockchip MPP file: $mpp_file" >&2
34+
exit 1
35+
}
36+
done
2837
for private_library in "$AVCODEC" "$AVUTIL" "$SWSCALE"; do
2938
[ -f "$private_library" ] || {
3039
echo "missing private library: $private_library" >&2
@@ -54,11 +63,22 @@ cp "$PORTMASTER_NEW/SOURCE_SETUP.txt" "$checker/SOURCE_SETUP.txt"
5463
cp -R "$SOURCE" "$port"
5564
cp "$BINARY" "$port/greenovercast/webrtc_stream.aarch64"
5665
cp "$CEDAR" "$port/greenovercast/libgreenovercast-cedar.so"
66+
mkdir -p "$port/greenovercast/rockchip"
67+
cp "$MPP_PLUGIN" "$port/greenovercast/libgreenovercast-mpp.so"
68+
cp "$MPP_RUNTIME" "$port/greenovercast/rockchip/librockchip_mpp.so.1"
69+
cp "$MPP_PROBE" "$port/greenovercast/rockchip/greenovercast-mpp-probe.aarch64"
70+
cp "$ROOT/vendor/mpp/LICENSES/Apache-2.0" \
71+
"$port/greenovercast/licenses/LICENSE.Rockchip-MPP-Apache-2.0.txt"
72+
cp "$ROOT/vendor/mpp/LICENSES/MIT" \
73+
"$port/greenovercast/licenses/LICENSE.Rockchip-MPP-MIT.txt"
5774
cp "$AVCODEC" "$port/greenovercast/libavcodec.so.58"
5875
cp "$AVUTIL" "$port/greenovercast/libavutil.so.56"
5976
cp "$SWSCALE" "$port/greenovercast/libswscale.so.5"
6077
chmod 644 "$port/GreenOvercast.sh" "$port/greenovercast/webrtc_stream.aarch64" \
6178
"$port/greenovercast/libgreenovercast-cedar.so" \
79+
"$port/greenovercast/libgreenovercast-mpp.so" \
80+
"$port/greenovercast/rockchip/librockchip_mpp.so.1" \
81+
"$port/greenovercast/rockchip/greenovercast-mpp-probe.aarch64" \
6282
"$port/greenovercast/libavcodec.so.58" \
6383
"$port/greenovercast/libavutil.so.56" \
6484
"$port/greenovercast/libswscale.so.5"
@@ -92,6 +112,11 @@ required = {
92112
"greenovercast/screenshot.png",
93113
"greenovercast/webrtc_stream.aarch64",
94114
"greenovercast/libgreenovercast-cedar.so",
115+
"greenovercast/libgreenovercast-mpp.so",
116+
"greenovercast/rockchip/librockchip_mpp.so.1",
117+
"greenovercast/rockchip/greenovercast-mpp-probe.aarch64",
118+
"greenovercast/licenses/LICENSE.Rockchip-MPP-Apache-2.0.txt",
119+
"greenovercast/licenses/LICENSE.Rockchip-MPP-MIT.txt",
95120
"greenovercast/libavcodec.so.58",
96121
"greenovercast/libavutil.so.56",
97122
"greenovercast/libswscale.so.5",

0 commit comments

Comments
 (0)