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
47 lines
1.6 KiB
Go
47 lines
1.6 KiB
Go
// SPDX-License-Identifier: Apache-2.0
|
|
// SPDX-FileCopyrightText: 2022 The Ebitengine Authors
|
|
|
|
package purego
|
|
|
|
import (
|
|
"reflect"
|
|
"syscall"
|
|
)
|
|
|
|
var syscall15XABI0 uintptr
|
|
|
|
func syscall_syscall15X(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15 uintptr) (r1, r2, err uintptr) {
|
|
r1, r2, errno := syscall.Syscall15(fn, 15, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
|
|
return r1, r2, uintptr(errno)
|
|
}
|
|
|
|
// NewCallback converts a Go function to a function pointer conforming to the stdcall calling convention.
|
|
// This is useful when interoperating with Windows code requiring callbacks. The argument is expected to be a
|
|
// function with one uintptr-sized result. The function must not have arguments with size larger than the
|
|
// size of uintptr. Only a limited number of callbacks may be created in a single Go process, and any memory
|
|
// allocated for these callbacks is never released. Between NewCallback and NewCallbackCDecl, at least 1024
|
|
// callbacks can always be created. Although this function is similiar to the darwin version it may act
|
|
// differently.
|
|
func NewCallback(fn any) uintptr {
|
|
isCDecl := false
|
|
ty := reflect.TypeOf(fn)
|
|
for i := 0; i < ty.NumIn(); i++ {
|
|
in := ty.In(i)
|
|
if !in.AssignableTo(reflect.TypeOf(CDecl{})) {
|
|
continue
|
|
}
|
|
if i != 0 {
|
|
panic("purego: CDecl must be the first argument")
|
|
}
|
|
isCDecl = true
|
|
}
|
|
if isCDecl {
|
|
return syscall.NewCallbackCDecl(fn)
|
|
}
|
|
return syscall.NewCallback(fn)
|
|
}
|
|
|
|
func loadSymbol(handle uintptr, name string) (uintptr, error) {
|
|
return syscall.GetProcAddress(syscall.Handle(handle), name)
|
|
}
|