From b7c7b479c278e74955a1a0a6c949a4d3cf32903a Mon Sep 17 00:00:00 2001 From: zhangmeng <775834166@qq.com> Date: 星期二, 16 七月 2019 17:32:07 +0800 Subject: [PATCH] add encoder --- goffmpeg.go | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 45 insertions(+), 0 deletions(-) diff --git a/goffmpeg.go b/goffmpeg.go index e33de3c..33869c0 100644 --- a/goffmpeg.go +++ b/goffmpeg.go @@ -113,3 +113,48 @@ } return nil, 0, 0 } + +///////////////for encoder + +// GoEncoder encoder +type GoEncoder struct { + enc C.cencoder +} + +// NewEncoder encoder +func NewEncoder(w, h, fps, br, sFlag, gi int) *GoEncoder { + if w <= 0 || h <= 0 { + return nil + } + + 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)), + } +} + +// Free free +func (e *GoEncoder) Free() { + C.wrap_fn_destroy_encoder(e.enc) +} + +// Encode pic +func (e *GoEncoder) Encode(in []byte, w, h int) ([]byte, int, bool) { + + 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) + defer C.free(p) + if p != nil && size > 0 { + b := C.GoBytes(p, size) + + isKey := false + if key > 0 { + isKey = true + } + return b, int(size), isKey + } + return nil, 0, false +} -- Gitblit v1.8.0