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