package goffmpeg /* #cgo LDFLAGS: -ldl #include #include "libcffmpeg.h" */ import "C" import ( "fmt" "unsafe" ) // GoFFMPEG handle for c type GoFFMPEG struct { lib C.libcffmpeg ffmpeg C.cffmpeg } // New create handle func New() *GoFFMPEG { soFile := C.CString("./runtime/libcffmpeg.so") defer C.free(unsafe.Pointer(soFile)) lib := C.init_libcffmpeg(soFile) if lib == nil { fmt.Println("open libcffmpeg.so error") return nil } return &GoFFMPEG{ lib: lib, ffmpeg: C.wrap_fn_create(), } } // Free free handle func (h *GoFFMPEG) Free() { C.wrap_fn_destroy(h.ffmpeg) C.release_libcffmpeg(h.lib) } // Run ffmpeg func (h *GoFFMPEG) Run(input string) { in := C.CString(input) defer C.free(unsafe.Pointer(in)) C.wrap_fn_run(h.ffmpeg, in) } // DecodeJPEG decode jpeg file func (h *GoFFMPEG) DecodeJPEG(input string) ([]byte, int, int) { in := C.CString(input) defer C.free(unsafe.Pointer(in)) var width C.int var height C.int p := C.wrap_fn_decode_jpeg(h.ffmpeg, in, &width, &height) defer C.free(p) if width > 0 && height > 0 { data := C.GoBytes(p, width*height*3) wid := int(width) hei := int(height) return data, wid, hei } return nil, 0, 0 }