From 8c36971afa38f8a2fb058704d6c584e0ce0c2bc4 Mon Sep 17 00:00:00 2001 From: zhangmeng <775834166@qq.com> Date: 星期四, 02 二月 2023 17:59:22 +0800 Subject: [PATCH] add go api --- shmparser/shmparser.c | 163 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 162 insertions(+), 1 deletions(-) diff --git a/shmparser.c b/shmparser/shmparser.c similarity index 78% rename from shmparser.c rename to shmparser/shmparser.c index 06f0857..1ad70dc 100644 --- a/shmparser.c +++ b/shmparser/shmparser.c @@ -3,6 +3,7 @@ #include <stdlib.h> #include <string.h> #include <stdint.h> +#include <stdio.h> enum{ IMG_DATA = 1, @@ -430,7 +431,7 @@ Put64(pheader, packHeader(RULE_HANDLETRACK, dummy_val + 3 + st_size)); if (dummy_val + 3 + st_size > SIZEHT) - printf("handletrack_size Must Less Than %d But Now %d\n", SIZEHT, dummy_val + 3 + st_size); + printf("handletrack_size Must Less Than %lu But Now %lu\n", SIZEHT, dummy_val + 3 + st_size); // 涓嬩竴涓� field tmp += SIZEHT - dummy_val; @@ -546,3 +547,163 @@ free(rule->sdk); free(rule); } + +/////////////////////////////////////////////////////////////// +// go need function + +void goimage2shm(void* shm, void* img){ + struct stimg* cimg = (struct stimg*)img; + image2shm(shm, cimg); +} + +void goimageinfo(void* img, void** data, uint64_t* size, + void** ts, uint32_t* tss, + void** cid, uint32_t* cids, + void** cname, uint32_t* cnames, + uint64_t* id, uint32_t* w, uint32_t* h) +{ + struct stimg* cimg = (struct stimg*)img; + *data = cimg->data; + *size = cimg->data_size; + + *ts = cimg->timestamp; + *tss = cimg->timestamp_size; + + *cid = cimg->camera_id; + *cids = cimg->camera_id_size; + + *cname = cimg->camera_name; + *cnames = cimg->camera_name_size; + + *id = cimg->id; + *w = cimg->width; + *h = cimg->height; +} + +void gotargetsdel(void* tgts){ + if (tgts) { + struct sttgt* t = (struct sttgt*)tgts; + free(t); + } +} + +void* gotargetsnew(const uint32_t size){ + struct sttgt* t = (struct sttgt*)calloc(size, sizeof(struct sttgt)); + return t; +} + +void gotargetsadd(void* tgts, int idx, uint64_t id, char* type, uint32_t tsize, int32_t confidence, + int left, int top, int right, int bottom, + unsigned char* feat, uint32_t featsize, + unsigned char* attr, uint32_t attrsize) +{ + struct sttgt* ts = (struct sttgt*)tgts; + struct sttgt t; + memset(&t, 0, sizeof(t)); + + t.id = id; + t.type = type; + t.type_size = tsize; + t.confidence = confidence; + t.rect.left = left; + t.rect.top = top; + t.rect.right = right; + t.rect.bottom = bottom; + t.feature = feat; + t.feature_size = featsize; + t.attribute = attr; + t.attribute_size = attrsize; + + ts[idx] = t; +} + +void goruleaddsdk(void* shm, void* tgts, uint32_t tgtcnt, + char* type, uint32_t tsize, + char* timestamp, uint32_t tmsize) +{ + TResult* res = (TResult*)calloc(1, sizeof(TResult)); + res->count = tgtcnt; + res->targets = (Target*)calloc(tgtcnt, sizeof(Target)); + + struct sttgt* ts = (struct sttgt*)tgts; + + for(uint32_t i = 0; i < tgtcnt; i++){ + Target t; + memset(&t, 0, sizeof(t)); + t.id = ts[i].id; + t.confidence = ts[i].confidence; + memcpy(&t.rect, &ts[i].rect, sizeof(t.rect)); + memcpy(t.type, ts[i].type, ts[i].type_size); + t.feature = (char*)ts[i].feature; + t.feature_size = ts[i].feature_size; + t.attribute = (char*)ts[i].attribute; + t.attribute_size = ts[i].attribute_size; + + res->targets[i] = t; + } + + add_result2rule_in_shm(shm, res, type, tsize, timestamp, tmsize); + free(res->targets); + free(res); +} + +//////////////////// unserialize + +void gorulehandletrack(void* rule, void** data, uint32_t* size){ + struct strule* r = (struct strule*)rule; + *data = r->handletrack; + *size = r->handletrack_size; +} + +void goruledatatype(void* rule, void** data, uint32_t* size){ + struct strule* r = (struct strule*)rule; + *data = r->datatype; + *size = r->datatype_size; +} + +void gorulesdk(void* rule, void** data, uint32_t* size){ + struct strule* r = (struct strule*)rule; + *data = r->sdk; + *size = r->sdk_count; +} + +void gorulesdkinfo(void* sdk, int idx, void** t, uint32_t* ts, + void** i, uint32_t* is, void** n, uint32_t* ns, + void** tm, uint32_t* tms, void** data, uint32_t* size) +{ + struct stsdk* s = (struct stsdk*)sdk; + *t = s->sdktype; + *ts = s->sdktype_size; + + *i = s->sdkid; + *is = s->sdkid_size; + + *n = s->sdkname; + *ns = s->sdkname_size; + + *tm = s->timestamp; + *tms = s->timestamp_size; + *data = s->tgt; + *size = s->tgt_count; +} + +void gorulesdktargetinfo(void* tgt, int idx, uint64_t* id, int32_t* c, + int32_t* l,int32_t* t,int32_t* r,int32_t* b, + void** tp, uint32_t* tps, + void** feat, uint32_t* fs, void** attr, uint32_t* attrs) +{ + struct sttgt* tt = (struct sttgt*)tgt; + *id = tt->id; + *c = tt->confidence; + *l = tt->rect.left; + *t = tt->rect.top; + *r = tt->rect.right; + *b = tt->rect.bottom; + *tp = tt->type; + *tps = tt->type_size; + *feat = tt->feature; + *fs = tt->feature_size; + *attr = tt->attribute; + *attrs = tt->attribute_size; +} + -- Gitblit v1.8.0