Major improvements to UnifiedPlayer: 1. GetFrameImage() now works when paused for responsive UI updates 2. Play() method properly starts FFmpeg process 3. Frame display loop runs continuously for smooth video display 4. Disabled audio temporarily to fix video playback fundamentals 5. Simplified FFmpeg command to focus on video stream only Player now: - Generates video frames correctly - Shows video when paused - Has responsive progress tracking - Starts playback properly Next steps: Re-enable audio playback once video is stable
97 lines
2.3 KiB
ArmAsm
97 lines
2.3 KiB
ArmAsm
// SPDX-License-Identifier: Apache-2.0
|
|
// SPDX-FileCopyrightText: 2025 The Ebitengine Authors
|
|
|
|
//go:build linux
|
|
|
|
#include "textflag.h"
|
|
#include "go_asm.h"
|
|
#include "funcdata.h"
|
|
|
|
#define STACK_SIZE 64
|
|
#define PTR_ADDRESS (STACK_SIZE - 8)
|
|
|
|
// syscall15X calls a function in libc on behalf of the syscall package.
|
|
// syscall15X takes a pointer to a struct like:
|
|
// struct {
|
|
// fn uintptr
|
|
// a1 uintptr
|
|
// a2 uintptr
|
|
// a3 uintptr
|
|
// a4 uintptr
|
|
// a5 uintptr
|
|
// a6 uintptr
|
|
// a7 uintptr
|
|
// a8 uintptr
|
|
// a9 uintptr
|
|
// a10 uintptr
|
|
// a11 uintptr
|
|
// a12 uintptr
|
|
// a13 uintptr
|
|
// a14 uintptr
|
|
// a15 uintptr
|
|
// r1 uintptr
|
|
// r2 uintptr
|
|
// err uintptr
|
|
// }
|
|
// syscall15X must be called on the g0 stack with the
|
|
// C calling convention (use libcCall).
|
|
GLOBL ·syscall15XABI0(SB), NOPTR|RODATA, $8
|
|
DATA ·syscall15XABI0(SB)/8, $syscall15X(SB)
|
|
TEXT syscall15X(SB), NOSPLIT, $0
|
|
// push structure pointer
|
|
SUBV $STACK_SIZE, R3
|
|
MOVV R4, PTR_ADDRESS(R3)
|
|
MOVV R4, R13
|
|
|
|
MOVD syscall15Args_f1(R13), F0 // f1
|
|
MOVD syscall15Args_f2(R13), F1 // f2
|
|
MOVD syscall15Args_f3(R13), F2 // f3
|
|
MOVD syscall15Args_f4(R13), F3 // f4
|
|
MOVD syscall15Args_f5(R13), F4 // f5
|
|
MOVD syscall15Args_f6(R13), F5 // f6
|
|
MOVD syscall15Args_f7(R13), F6 // f7
|
|
MOVD syscall15Args_f8(R13), F7 // f8
|
|
|
|
MOVV syscall15Args_a1(R13), R4 // a1
|
|
MOVV syscall15Args_a2(R13), R5 // a2
|
|
MOVV syscall15Args_a3(R13), R6 // a3
|
|
MOVV syscall15Args_a4(R13), R7 // a4
|
|
MOVV syscall15Args_a5(R13), R8 // a5
|
|
MOVV syscall15Args_a6(R13), R9 // a6
|
|
MOVV syscall15Args_a7(R13), R10 // a7
|
|
MOVV syscall15Args_a8(R13), R11 // a8
|
|
|
|
// push a9-a15 onto stack
|
|
MOVV syscall15Args_a9(R13), R12
|
|
MOVV R12, 0(R3)
|
|
MOVV syscall15Args_a10(R13), R12
|
|
MOVV R12, 8(R3)
|
|
MOVV syscall15Args_a11(R13), R12
|
|
MOVV R12, 16(R3)
|
|
MOVV syscall15Args_a12(R13), R12
|
|
MOVV R12, 24(R3)
|
|
MOVV syscall15Args_a13(R13), R12
|
|
MOVV R12, 32(R3)
|
|
MOVV syscall15Args_a14(R13), R12
|
|
MOVV R12, 40(R3)
|
|
MOVV syscall15Args_a15(R13), R12
|
|
MOVV R12, 48(R3)
|
|
|
|
MOVV syscall15Args_fn(R13), R12
|
|
JAL (R12)
|
|
|
|
// pop structure pointer
|
|
MOVV PTR_ADDRESS(R3), R13
|
|
ADDV $STACK_SIZE, R3
|
|
|
|
// save R4, R5
|
|
MOVV R4, syscall15Args_a1(R13)
|
|
MOVV R5, syscall15Args_a2(R13)
|
|
|
|
// save f0-f3
|
|
MOVD F0, syscall15Args_f1(R13)
|
|
MOVD F1, syscall15Args_f2(R13)
|
|
MOVD F2, syscall15Args_f3(R13)
|
|
MOVD F3, syscall15Args_f4(R13)
|
|
RET
|