| | |
| | | #include "libcffmpeg.h" |
| | | */ |
| | | import "C" |
| | | import "unsafe" |
| | | |
| | | ///////////////for encoder |
| | | |
| | |
| | | } |
| | | |
| | | 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) |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | 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) |
| | |
| | | } |
| | | 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 |
| | | } |