From dc65b072a13994ff02cc7b54f3b00ba087e7f86a Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期三, 20 十一月 2019 14:05:52 +0800
Subject: [PATCH] add zerocopy

---
 goenc.go |   26 +++++++++++++++++++++++---
 1 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/goenc.go b/goenc.go
index d7a6b43..858ed98 100644
--- a/goenc.go
+++ b/goenc.go
@@ -37,10 +37,8 @@
 
 	var size C.int
 	var key C.int
-	cin := C.CBytes(in)
-	defer C.free(cin)
 
-	p := C.wrap_fn_encode(unsafe.Pointer(libcffmpeg), e.enc, cin, C.int(w), C.int(h), &size, &key)
+	p := C.wrap_fn_encode(unsafe.Pointer(libcffmpeg), e.enc, unsafe.Pointer(&in[0]), C.int(w), C.int(h), &size, &key)
 	defer C.free(p)
 	if p != nil && size > 0 {
 		b := C.GoBytes(p, size)
@@ -53,3 +51,25 @@
 	}
 	return nil, 0, false
 }
+
+// Encode2 pic
+func (e *GoEncoder) Encode2(in []byte, w, h int) (unsafe.Pointer, []byte, int, bool) {
+
+	var size C.int
+	var key C.int
+
+	p := C.wrap_fn_encode(unsafe.Pointer(libcffmpeg), e.enc, unsafe.Pointer(&in[0]), C.int(w), C.int(h), &size, &key)
+	if p != nil && size > 0 {
+
+		isKey := false
+		if key > 0 {
+			isKey = true
+		}
+		const maxLen = 0x7fffffff
+		length := int(size)
+		data := (*[maxLen]byte)(unsafe.Pointer(p))[:length:length]
+
+		return p, data, length, isKey
+	}
+	return nil, nil, 0, false
+}

--
Gitblit v1.8.0