package goffmpeg /* #cgo LDFLAGS: -ldl #include #include "libcffmpeg.h" */ import "C" import ( "errors" "fmt" "unsafe" ) var libcffmpeg C.libcffmpeg // InitFFmpeg init ffmepg func InitFFmpeg(soFileGo string) error { soFile := C.CString(soFileGo) defer C.free(unsafe.Pointer(soFile)) lib := C.init_libcffmpeg(soFile) if lib == nil { fmt.Println("open error: ", soFileGo) return errors.New("init ffmpeg error") } libcffmpeg = lib return nil } // FreeFFmpeg free ffmpeg func FreeFFmpeg() { if libcffmpeg != nil { C.release_libcffmpeg(libcffmpeg) } } // GoFFMPEG handle for c type GoFFMPEG struct { ffmpeg C.cffmpeg } // New 2nd new func New(GB, CPU bool) *GoFFMPEG { f := C.wrap_fn_create(unsafe.Pointer(libcffmpeg)) if f == nil { return nil } if GB { C.wrap_fn_run_gb28181(unsafe.Pointer(libcffmpeg), f) } if CPU { C.wrap_fn_use_cpu(unsafe.Pointer(libcffmpeg), f) } return &GoFFMPEG{ ffmpeg: f, } } // NewWithLog log func NewWithLog(GB, CPU bool, ffmpegLog string) *GoFFMPEG { lf := C.CString(ffmpegLog) defer C.free(unsafe.Pointer(lf)) f := C.wrap_fn_create2(unsafe.Pointer(libcffmpeg), lf) if f == nil { return nil } if GB { C.wrap_fn_run_gb28181(unsafe.Pointer(libcffmpeg), f) } if CPU { C.wrap_fn_use_cpu(unsafe.Pointer(libcffmpeg), f) } return &GoFFMPEG{ ffmpeg: f, } } // Free free handle func (h *GoFFMPEG) Free() { if h.ffmpeg != nil { C.wrap_fn_destroy(unsafe.Pointer(libcffmpeg), h.ffmpeg) } } // Run ffmpeg func (h *GoFFMPEG) Run(input string) { in := C.CString(input) defer C.free(unsafe.Pointer(in)) C.wrap_fn_run(unsafe.Pointer(libcffmpeg), h.ffmpeg, in) } // FPS fps func (h *GoFFMPEG) FPS() int { return int(C.wrap_fn_fps(unsafe.Pointer(libcffmpeg), h.ffmpeg)) }