video analysis2.0拆分,ffmpeg封装go接口库
zhangmeng
2019-11-12 c5a01eed95f1837e93fee27bce4da78c79f4ed10
goconv.go
@@ -35,21 +35,26 @@
)
// SrcFormat format
const srcFormat = 23
const SrcFormat = 23
// DstFormat format
const DstFormat = 3
// GoConv conv
type GoConv struct {
   srcW int
   srcH int
   dstW int
   dstH int
   SrcW int
   SrcH int
   DstW int
   DstH int
   size int
   conv C.cconv
}
// NewConv new conv
func NewConv(srcW, srcH, dstW, dstH, scaleFlag int) *GoConv {
   c := C.wrap_fn_create_conv(C.int(srcW), C.int(srcH), C.int(srcFormat), C.int(dstW), C.int(dstH), C.int(scaleFlag))
   c := C.wrap_fn_create_conv(unsafe.Pointer(libcffmpeg), C.int(srcW), C.int(srcH), C.int(SrcFormat),
      C.int(dstW), C.int(dstH), C.int(DstFormat), C.int(scaleFlag))
   if c == nil {
      return nil
@@ -60,6 +65,30 @@
      srcH,
      dstW,
      dstH,
      dstW * dstH * 3,
      c,
   }
}
// NewResizer resize
func NewResizer(srcW, srcH, format, dstW, dstH, scaleFlag int) *GoConv {
   c := C.wrap_fn_create_conv(unsafe.Pointer(libcffmpeg), C.int(srcW), C.int(srcH), C.int(format),
      C.int(dstW), C.int(dstH), C.int(format), C.int(scaleFlag))
   if c == nil {
      return nil
   }
   size := dstW * dstH * 3
   if format == SrcFormat {
      size /= 2
   }
   return &GoConv{
      srcW,
      srcH,
      dstW,
      dstH,
      size,
      c,
   }
}
@@ -67,7 +96,7 @@
// Free free
func (c *GoConv) Free() {
   if c.conv != nil {
      C.wrap_fn_destroy_conv(c.conv)
      C.wrap_fn_destroy_conv(unsafe.Pointer(libcffmpeg), c.conv)
   }
}
@@ -77,24 +106,22 @@
      return nil
   }
   cin := C.CBytes(src)
   defer C.free(cin)
   bgr := C.wrap_fn_conv(c.conv, (*C.uchar)(cin))
   bgr := C.wrap_fn_conv(unsafe.Pointer(libcffmpeg), c.conv, (*C.uchar)(unsafe.Pointer(&src[0])))
   defer C.free(unsafe.Pointer(bgr))
   if bgr != nil {
      return C.GoBytes(bgr, C.int(c.dstW*c.dstH*3))
      return C.GoBytes(bgr, C.int(c.size))
   }
   return nil
}
/////////////// for conv
// ConvGPU conv gpu resize
func ConvGPU(in []byte, w, h, dstW, dstH int) []byte {
   return nil
// Resize resize
func (c *GoConv) Resize(src []byte) []byte {
   if c.SrcW == c.DstW && c.SrcH == c.DstH {
      return src
   }
   return c.ConvToPicture(src)
}
/////////////// for conv