package goffmpeg /* #include #include "libcffmpeg.h" */ import "C" import "unsafe" /////////////// for decoder // Decode decode jpeg file // return val: -1 open error; -2, find stream error; -3, converter create error func Decode(input string, gb bool) ([]byte, int, int) { in := C.CString(input) defer C.free(unsafe.Pointer(in)) withGB := 0 if gb { withGB = 1 } var width C.int var height C.int p := C.wrap_fn_decode(unsafe.Pointer(libcffmpeg), in, C.int(withGB), &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, int(width), int(height) } // Decode2 decode jpeg file // return val: -1 open error; -2, find stream error; -3, converter create error func Decode2(input string, gb bool) (unsafe.Pointer, []byte, int, int) { in := C.CString(input) defer C.free(unsafe.Pointer(in)) withGB := 0 if gb { withGB = 1 } var width C.int var height C.int p := C.wrap_fn_decode(unsafe.Pointer(libcffmpeg), in, C.int(withGB), &width, &height) if width > 0 && height > 0 { wid := int(width) hei := int(height) const maxLen = 0x7fffffff size := int(width * height * 3) data := (*[maxLen]byte)(unsafe.Pointer(p))[:size:size] return p, data, wid, hei } return nil, nil, 0, 0 }