From 18a05d269516a5e33d8460291c2f93e73d95adce Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期二, 26 十二月 2023 10:45:31 +0800
Subject: [PATCH] GetYUV format is NV12
---
goenc.go | 39 +++++++++++++++++++++++++++++++++++----
1 files changed, 35 insertions(+), 4 deletions(-)
diff --git a/goenc.go b/goenc.go
index d7a6b43..69aa3e4 100644
--- a/goenc.go
+++ b/goenc.go
@@ -21,7 +21,18 @@
}
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(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)),
}
}
@@ -37,10 +48,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 +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