From c5a01eed95f1837e93fee27bce4da78c79f4ed10 Mon Sep 17 00:00:00 2001 From: zhangmeng <775834166@qq.com> Date: 星期二, 12 十一月 2019 17:41:43 +0800 Subject: [PATCH] update --- goconv.go | 65 +++++++++++++++++++++++--------- 1 files changed, 46 insertions(+), 19 deletions(-) diff --git a/goconv.go b/goconv.go index 459b3dd..eb4aac0 100644 --- a/goconv.go +++ b/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 -- Gitblit v1.8.0