mirror of
https://github.com/ayka-667/SysDVRClient-PS4.git
synced 2026-10-28 18:00:25 +01:00
- Translate the whole app (UI, logs, config comments, tests) to English - Split video into a network thread and a decoder thread joined by a queue; when the queue gets older than max_delay_ms, drop to the next keyframe instead of letting latency build up in the TCP buffer - Skip the deblocking filter automatically while the decoder catches up - Triple buffering so a new frame never waits for the previous vsync - Lower-latency defaults (2 decoder threads, audio batch 0, 60 ms audio buffer) with automatic upgrade of 1.0 config files - Audio: buffer target/headroom based on packet size, underrun counter - New settings: smooth scaling, max video delay; detailed stats overlay - Native test now also checks a decoder too slow for the stream Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
82 lines
4.0 KiB
Makefile
82 lines
4.0 KiB
Makefile
# SysDVR-PS4 - build under Linux / WSL with the OpenOrbis toolchain.
|
|
# make -> builds the .pkg (on Windows use build.ps1 instead)
|
|
# make clean
|
|
# Variables: OO_PS4_TOOLCHAIN (OpenOrbis toolchain), FFMPEG (PS4 FFmpeg build, see toolchain/build_ffmpeg.sh)
|
|
|
|
TITLE := SysDVR PS4
|
|
VERSION := 1.10
|
|
TITLE_ID := SDVR00001
|
|
CONTENT_ID := IV0000-SDVR00001_00-SYSDVRPS4CLIENT0
|
|
|
|
TOOLCHAIN ?= $(if $(OO_PS4_TOOLCHAIN),$(OO_PS4_TOOLCHAIN),$(HOME)/ps4build/oo)
|
|
FFMPEG ?= $(HOME)/ps4build/ffmpeg-ps4
|
|
BUILD ?= build
|
|
TOOLS := $(TOOLCHAIN)/bin/linux
|
|
export OO_PS4_TOOLCHAIN := $(TOOLCHAIN)
|
|
# PkgTool.Core (.NET) crashes without libicu otherwise
|
|
export DOTNET_SYSTEM_GLOBALIZATION_INVARIANT := 1
|
|
|
|
CC := clang
|
|
LD := ld.lld
|
|
|
|
SRCS := $(wildcard src/*.c)
|
|
OBJS := $(patsubst src/%.c,$(BUILD)/%.o,$(SRCS))
|
|
|
|
CFLAGS := --target=x86_64-pc-freebsd12-elf -fPIC -funwind-tables -O2 -Wall -Wno-unused-function \
|
|
-isysroot $(TOOLCHAIN) -isystem $(TOOLCHAIN)/include -I$(FFMPEG)/include
|
|
LIBS := $(FFMPEG)/lib/libavcodec.a $(FFMPEG)/lib/libswscale.a $(FFMPEG)/lib/libavutil.a \
|
|
-lc -lkernel -lSceVideoOut -lSceAudioOut -lScePad -lSceUserService -lSceSystemService -lSceSysmodule
|
|
LDFLAGS := -m elf_x86_64 -pie --script $(TOOLCHAIN)/link.x --eh-frame-hdr -L$(TOOLCHAIN)/lib
|
|
|
|
PKG_FILES := eboot.bin sce_sys/about/right.sprx sce_sys/param.sfo sce_sys/icon0.png sce_sys/pic1.png sce_module/libc.prx sce_module/libSceFios2.prx
|
|
|
|
all: $(CONTENT_ID).pkg
|
|
|
|
$(CONTENT_ID).pkg: pkg.gp4
|
|
$(TOOLS)/PkgTool.Core pkg_build $< .
|
|
@echo "==> Package built: $@"
|
|
|
|
pkg.gp4: $(PKG_FILES)
|
|
$(TOOLS)/create-gp4 -out $@ --content-id=$(CONTENT_ID) --files "$(PKG_FILES)"
|
|
|
|
sce_sys/param.sfo: Makefile
|
|
$(TOOLS)/PkgTool.Core sfo_new $@
|
|
$(TOOLS)/PkgTool.Core sfo_setentry $@ APP_TYPE --type Integer --maxsize 4 --value 1
|
|
$(TOOLS)/PkgTool.Core sfo_setentry $@ APP_VER --type Utf8 --maxsize 8 --value '$(VERSION)'
|
|
$(TOOLS)/PkgTool.Core sfo_setentry $@ ATTRIBUTE --type Integer --maxsize 4 --value 0
|
|
$(TOOLS)/PkgTool.Core sfo_setentry $@ CATEGORY --type Utf8 --maxsize 4 --value 'gd'
|
|
$(TOOLS)/PkgTool.Core sfo_setentry $@ CONTENT_ID --type Utf8 --maxsize 48 --value '$(CONTENT_ID)'
|
|
$(TOOLS)/PkgTool.Core sfo_setentry $@ DOWNLOAD_DATA_SIZE --type Integer --maxsize 4 --value 0
|
|
$(TOOLS)/PkgTool.Core sfo_setentry $@ SYSTEM_VER --type Integer --maxsize 4 --value 0
|
|
$(TOOLS)/PkgTool.Core sfo_setentry $@ TITLE --type Utf8 --maxsize 128 --value '$(TITLE)'
|
|
$(TOOLS)/PkgTool.Core sfo_setentry $@ TITLE_ID --type Utf8 --maxsize 12 --value '$(TITLE_ID)'
|
|
$(TOOLS)/PkgTool.Core sfo_setentry $@ VERSION --type Utf8 --maxsize 8 --value '$(VERSION)'
|
|
|
|
eboot.bin: $(BUILD)/sysdvr.elf
|
|
$(TOOLS)/create-fself -in=$< -out=$(BUILD)/sysdvr.oelf --eboot "eboot.bin" --paid 0x3800000000000011
|
|
|
|
$(BUILD)/sysdvr.elf: $(OBJS)
|
|
$(LD) $(OBJS) -o $@ $(LDFLAGS) $(LIBS) $(TOOLCHAIN)/lib/crt1.o
|
|
|
|
$(BUILD)/%.o: src/%.c src/*.h | $(BUILD)
|
|
$(CC) $(CFLAGS) -c -o $@ $<
|
|
|
|
$(BUILD):
|
|
mkdir -p $@
|
|
|
|
# Native test: runs the real video/audio/protocol code against tests/fake_switch.py (needs libavcodec-dev, libswscale-dev, python3)
|
|
TEST_H264 ?= $(BUILD)/test.h264
|
|
test:
|
|
mkdir -p $(BUILD)
|
|
gcc -O1 -g -Wall -Wno-unused-function -DSYSDVR_TEST -Itests/stubs -o $(BUILD)/harness tests/harness.c src/video.c src/audio.c src/sysdvr_proto.c -lavcodec -lswscale -lavutil -lpthread
|
|
[ -f $(TEST_H264) ] || ffmpeg -loglevel error -y -f lavfi -i testsrc2=size=1280x720:rate=30 -t 8 -c:v libx264 -profile:v high -bf 0 -g 30 -b:v 5M -f h264 $(TEST_H264)
|
|
@echo "==> Real-time decoder"
|
|
python3 tests/fake_switch.py $(TEST_H264) & PID=$$!; sleep 1; cd $(BUILD) && ./harness; RC=$$?; kill $$PID; exit $$RC
|
|
@echo "==> Decoder too slow for the stream (must skip frames, not build up latency)"
|
|
python3 tests/fake_switch.py $(TEST_H264) & PID=$$!; sleep 1; cd $(BUILD) && SYSDVR_TEST_DECODE_DELAY_MS=45 ./harness; RC=$$?; kill $$PID; exit $$RC
|
|
|
|
clean:
|
|
rm -rf $(BUILD) eboot.bin pkg.gp4 sce_sys/param.sfo $(CONTENT_ID).pkg
|
|
|
|
.PHONY: all clean test
|