From f93ee1a42e8c47e472332287b7350b66a6b0fa11 Mon Sep 17 00:00:00 2001 From: zhangmeng <775834166@qq.com> Date: 星期五, 24 七月 2020 18:28:57 +0800 Subject: [PATCH] 保存触发id之后的视频作为触发视频 --- goenc.go | 42 +++++++++++++++++++++++++++++++++++++----- 1 files changed, 37 insertions(+), 5 deletions(-) diff --git a/goenc.go b/goenc.go index 3d00996..69aa3e4 100644 --- a/goenc.go +++ b/goenc.go @@ -5,6 +5,7 @@ #include "libcffmpeg.h" */ import "C" +import "unsafe" ///////////////for encoder @@ -20,14 +21,25 @@ } return &GoEncoder{ - enc: C.wrap_fn_create_encoder(C.int(w), C.int(h), C.int(fps), C.int(br), C.int(sFlag), C.int(gi)), + enc: C.wrap_fn_create_encoder(unsafe.Pointer(libcffmpeg), C.int(w), C.int(h), C.int(fps), C.int(br), C.int(DstFormat), C.int(sFlag), C.int(gi)), + } +} + +// NewEncoderWithPixFmt origin pix_fmt +func NewEncoderWithPixFmt(w, h, fps, br, pixFmt, sFlag, gi int) *GoEncoder { + if w <= 0 || h <= 0 { + return nil + } + + return &GoEncoder{ + enc: C.wrap_fn_create_encoder(unsafe.Pointer(libcffmpeg), C.int(w), C.int(h), C.int(fps), C.int(br), C.int(pixFmt), C.int(sFlag), C.int(gi)), } } // Free free func (e *GoEncoder) Free() { if e.enc != nil { - C.wrap_fn_destroy_encoder(e.enc) + C.wrap_fn_destroy_encoder(unsafe.Pointer(libcffmpeg), e.enc) } } @@ -36,10 +48,8 @@ var size C.int var key C.int - cin := C.CBytes(in) - defer C.free(cin) - p := C.wrap_fn_encode(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) @@ -52,3 +62,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