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