| | |
| | | return *(*string)(unsafe.Pointer(&d)) |
| | | } |
| | | |
| | | // Image2shm fill image to shm |
| | | func Image2shm(shm []byte, cid, cname string, data []byte, w, h int, fid int64) { |
| | | // Image2Shm fill image to shm |
| | | func Image2Shm(shm []byte, cid, cname string, data []byte, w, h int, fid int64) { |
| | | timestamp := strings.Replace(time.Now().Format("2006-01-02 15:04:05.000"), ".", ":", -1) |
| | | |
| | | dataptr := (*C.uchar)(unsafe.Pointer(&data[0])) |
| | |
| | | ) |
| | | |
| | | shmptr := unsafe.Pointer(&shm[0]) |
| | | C.goimage2shm(shmptr, unsafe.Pointer(&cimg)) |
| | | C.goImage2Shm(shmptr, unsafe.Pointer(cimg)) |
| | | C.free_stimg(cimg) |
| | | } |
| | | |
| | | // ImageShm Image struct in Shm |
| | |
| | | Cname string |
| | | } |
| | | |
| | | func uintptr2byte(p unsafe.Pointer, size uint64) []byte { |
| | | if (^uint(0) >> 63) == 0 { |
| | | const maxLen = 0x7fffffff |
| | | return (*(*[maxLen]byte)(p))[:size:size] |
| | | } else { |
| | | const maxLen = 0xffffffffffff |
| | | return (*(*[maxLen]byte)(p))[:size:size] |
| | | } |
| | | } |
| | | |
| | | func Shm2Image(shm []byte) ImageShm { |
| | | cimg := C.shm2image(unsafe.Pointer(&shm[0])) |
| | | |
| | | var goimg ImageShm |
| | | const maxLen = 0xffffffffffff |
| | | |
| | | var data, ts, cid, cname unsafe.Pointer |
| | | var sd, id C.ulong |
| | |
| | | |
| | | p := unsafe.Pointer(cimg) |
| | | |
| | | C.goimageinfo(p, &data, &sd, &ts, &sts, &cid, &scid, &cname, &scname, &id, &w, &h) |
| | | goimg.Data = (*[maxLen]byte)(data)[:uint64(sd):uint64(sd)] |
| | | C.goImageGet(p, &data, &sd, &ts, &sts, &cid, &scid, &cname, &scname, &id, &w, &h) |
| | | goimg.Data = uintptr2byte(data, uint64(sd)) |
| | | |
| | | tmp := (*[maxLen]byte)(ts)[:int(sts):int(sts)] |
| | | tmp := uintptr2byte(ts, uint64(sts)) |
| | | goimg.Timestamp = byte2str(tmp) |
| | | |
| | | tmp = (*[maxLen]byte)(cid)[:int(scid):int(scid)] |
| | | tmp = uintptr2byte(cid, uint64(scid)) |
| | | goimg.Cid = byte2str(tmp) |
| | | |
| | | tmp = (*[maxLen]byte)(cname)[:int(scname):int(scname)] |
| | | tmp = uintptr2byte(cname, uint64(scname)) |
| | | goimg.Cname = byte2str(tmp) |
| | | |
| | | goimg.Width = int(w) |
| | |
| | | // AddResSdk2RuleInShm add sdk message to rule in shm |
| | | func AddResSdk2RuleInShm(shm []byte, sdk Resdk) { |
| | | |
| | | ctgts := C.gotargetsnew(C.uint(len(sdk.Targets))) |
| | | ctgts := C.goTargetsNew(C.uint(len(sdk.Targets))) |
| | | for k, v := range sdk.Targets { |
| | | tpbyte := str2byte(v.Type) |
| | | tptr := (*C.char)(unsafe.Pointer(&tpbyte[0])) |
| | | featptr := (*C.uchar)(unsafe.Pointer(&v.Feat[0])) |
| | | attrptr := (*C.uchar)(unsafe.Pointer(&v.Attr[0])) |
| | | |
| | | C.gotargetsadd(ctgts, C.int(k), C.ulong(v.Id), tptr, C.uint(len(v.Type)), |
| | | C.goTargetAdd(ctgts, C.int(k), C.ulong(v.Id), tptr, C.uint(len(v.Type)), |
| | | C.int(v.Confidence), |
| | | C.int(v.Rc.Left), C.int(v.Rc.Top), C.int(v.Rc.Right), C.int(v.Rc.Bottom), |
| | | featptr, C.uint(len(v.Feat)), attrptr, C.uint(len(v.Attr))) |
| | |
| | | tp := str2byte(sdk.Type) |
| | | tpstr := (*C.char)(unsafe.Pointer(&tp[0])) |
| | | |
| | | C.goruleaddsdk(shmptr, ctgts, C.uint(len(sdk.Targets)), |
| | | C.goSdkPut(shmptr, ctgts, C.uint(len(sdk.Targets)), |
| | | tpstr, C.uint(len(sdk.Type)), |
| | | tsptr, C.uint(len(sdk.Timestamp))) |
| | | |
| | | C.gotargetsdel(ctgts) |
| | | C.goTargetsDel(ctgts) |
| | | } |
| | | |
| | | // Shm2Rule get Rule from shm |
| | |
| | | |
| | | crule := C.shm2rule(unsafe.Pointer(&shm[0])) |
| | | |
| | | const maxLen = 0xffffffffffff |
| | | |
| | | var data unsafe.Pointer |
| | | var s32 C.uint |
| | | var ht unsafe.Pointer |
| | | var sht C.uint |
| | | |
| | | p := unsafe.Pointer(crule) |
| | | C.gorulehandletrack(p, &data, &s32) |
| | | tmp := (*[maxLen]byte)(data)[:int(s32):int(s32)] |
| | | C.goHandletrackGet(p, &ht, &sht) |
| | | tmp := uintptr2byte(ht, uint64(sht)) |
| | | rule.Handletrack = byte2str(tmp) |
| | | |
| | | C.goruledatatype(p, &data, &s32) |
| | | tmp = (*[maxLen]byte)(data)[:int(s32):int(s32)] |
| | | var dt unsafe.Pointer |
| | | var sdt C.uint |
| | | C.goDatatypeGet(p, &dt, &sdt) |
| | | tmp = uintptr2byte(dt, uint64(sdt)) |
| | | rule.Datatype = byte2str(tmp) |
| | | |
| | | //////////////////////////////////////////////// |
| | | |
| | | var csdk unsafe.Pointer |
| | | var s32 C.uint |
| | | C.goSdkArrayGet(p, &csdk, &s32) |
| | | |
| | | for i := 0; i < int(s32); i++ { |
| | | var ctype, cid, cname, cts, ctgt unsafe.Pointer |
| | | var st, si, sn, sts, stgt C.uint |
| | | var sdk Resdk |
| | | |
| | | C.goSdkGet(csdk, C.int(i), &ctype, &st, &cid, &si, |
| | | &cname, &sn, &cts, &sts, &ctgt, &stgt) |
| | | tmp = uintptr2byte(ctype, uint64(st)) |
| | | sdk.Type = byte2str(tmp) |
| | | |
| | | tmp = uintptr2byte(cid, uint64(si)) |
| | | sdk.Id = byte2str(tmp) |
| | | |
| | | tmp = uintptr2byte(cname, uint64(sn)) |
| | | sdk.Name = byte2str(tmp) |
| | | tmp = uintptr2byte(cts, uint64(sts)) |
| | | sdk.Timestamp = byte2str(tmp) |
| | | |
| | | for j := 0; j < int(stgt); j++ { |
| | | var tid C.ulong |
| | | var tc, tl, tt, tr, tb C.int |
| | | var tp, tfeat, tattr unsafe.Pointer |
| | | var stp, stf, sta C.uint |
| | | |
| | | var tgt Target |
| | | |
| | | C.goTargetGet(ctgt, C.int(j), &tid, &tc, &tl, &tt, &tr, &tb, |
| | | &tp, &stp, &tfeat, &stf, &tattr, &sta) |
| | | |
| | | tgt.Id = uint64(tid) |
| | | tgt.Confidence = int(tc) |
| | | tgt.Rc.Left = int(tl) |
| | | tgt.Rc.Top = int(tt) |
| | | tgt.Rc.Right = int(tr) |
| | | tgt.Rc.Bottom = int(tb) |
| | | |
| | | tmp = uintptr2byte(tp, uint64(stp)) |
| | | tgt.Type = byte2str(tmp) |
| | | |
| | | tmp = uintptr2byte(tfeat, uint64(stf)) |
| | | tgt.Feat = tmp |
| | | |
| | | tmp = uintptr2byte(tattr, uint64(sta)) |
| | | tgt.Attr = tmp |
| | | |
| | | sdk.Targets = append(sdk.Targets, tgt) |
| | | } |
| | | |
| | | rule.Sdks = append(rule.Sdks, sdk) |
| | | } |
| | | |
| | | C.free_strule(crule) |
| | | |
| | | return rule |