From a624336de555c4fcdaac56497f3f36ab920df1d5 Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期一, 13 一月 2020 09:15:27 +0800
Subject: [PATCH] debug

---
 run.go |   88 ++++++++++++++++++++++++-------------------
 1 files changed, 49 insertions(+), 39 deletions(-)

diff --git a/run.go b/run.go
index b87525e..06eb86a 100644
--- a/run.go
+++ b/run.go
@@ -14,16 +14,17 @@
 
 type channel struct {
 	index int
-	msg   chan protomsg.SdkMessage
+	msgs  *sdkhelper.LockList
 }
 
 //////////////////////////////////////////////////////////////////
 const (
-	cacheFrameNum   = 3
 	trackChnTimeout = time.Duration(10)
 )
 
 func (f *face) channelAvailable() int {
+	f.mapChanLock.Lock()
+	defer f.mapChanLock.Unlock()
 
 	for i := 0; i < f.maxChannel; i++ {
 		found := false
@@ -56,20 +57,20 @@
 }
 
 func (f *face) channelNew(id string) *channel {
-	f.mapChanLock.Lock()
-	defer f.mapChanLock.Unlock()
 
 	index := f.channelAvailable()
 	if index < 0 {
 		return nil
 	}
 
+	f.mapChanLock.Lock()
 	c := &channel{
 		index: index,
-		msg:   make(chan protomsg.SdkMessage, cacheFrameNum),
+		msgs:  sdkhelper.NewLockList(3),
 	}
-
 	f.mapChan[id] = c
+	f.mapChanLock.Unlock()
+
 	return c
 }
 
@@ -192,11 +193,11 @@
 
 func (f *face) run(msgs []protomsg.SdkMessage, out chan<- sdkstruct.MsgSDK, typ string) {
 
-	f.fnLogger("######run batch images")
-
 	for _, msg := range msgs {
 		if c, ok := f.channelExist(msg.Cid); ok {
-			c.msg <- msg
+			f.fnLogger("######push image: ", c.index)
+			c.msgs.Push(msg)
+			f.fnLogger("######push over image: ", c.index)
 		} else {
 
 			nc := f.channelNew(msg.Cid)
@@ -216,11 +217,9 @@
 			ret := f.handle.TrackerResize(imgW, imgH, nc.index)
 			f.fnLogger("ResizeFaceTracker: cid: ", msg.Cid, " chan: ", nc.index, " wXh: ", imgW, "x", imgH, " result:", ret)
 			go f.detectTrackOneChn(nc, out)
-			nc.msg <- msg
+			nc.msgs.Push(msg)
 		}
 	}
-	f.fnLogger("######run over batch images")
-
 }
 
 func (f *face) detectTrackOneChn(c *channel, out chan<- sdkstruct.MsgSDK) {
@@ -233,36 +232,52 @@
 
 	for {
 		select {
-		case rMsg := <-c.msg:
 
-			if !sdkhelper.ValidRemoteMessage(rMsg, f.typ, f.fnLogger) {
-				sdkhelper.EjectResult(nil, rMsg, out)
-				f.fnLogger("Face!!!!!!SkdMessage Invalid")
-
-				continue
+		case <-time.After(trackChnTimeout * time.Second):
+			f.fnLogger("######Timeout to get image, curCid:", curCid)
+			if curCid != "" {
+				f.channelRelease(curCid)
 			}
+			return
+		default:
 
-			i := sdkhelper.UnpackImage(rMsg, f.typ, f.fnLogger)
-			if i == nil || i.Data == nil || i.Width <= 0 || i.Height <= 0 {
-				sdkhelper.EjectResult(nil, rMsg, out)
-				f.fnLogger("Face!!!!!!Unpack Image From SkdMessage Failed")
-
-				continue
+			elems := c.msgs.Drain()
+			var msgs []protomsg.SdkMessage
+			for _, v := range elems {
+				msgs = append(msgs, v.(protomsg.SdkMessage))
 			}
+			for _, rMsg := range msgs {
 
-			curCid = i.Cid
+				if !sdkhelper.ValidRemoteMessage(rMsg, f.typ, f.fnLogger) {
+					sdkhelper.EjectResult(nil, rMsg, out)
+					f.fnLogger("Face!!!!!!SkdMessage Invalid")
 
-			// conv to bgr24 and resize
-			imgW, imgH := int(i.Width), int(i.Height)
+					continue
+				}
 
-			count, data, _ := f.handle.Run(i.Data, imgW, imgH, 3, dtchn)
+				i := sdkhelper.UnpackImage(rMsg, f.typ, f.fnLogger)
+				if i == nil || i.Data == nil || i.Width <= 0 || i.Height <= 0 {
+					sdkhelper.EjectResult(nil, rMsg, out)
+					f.fnLogger("Face!!!!!!Unpack Image From SkdMessage Failed")
 
-			sdkhelper.EjectResult(data, rMsg, out)
-			var id, name string
-			if rMsg.Tasklab != nil {
-				id, name = rMsg.Tasklab.Taskid, rMsg.Tasklab.Taskname
+					continue
+				}
+
+				curCid = i.Cid
+
+				// conv to bgr24 and resize
+				imgW, imgH := int(i.Width), int(i.Height)
+
+				count, data, _ := f.handle.Run(i.Data, imgW, imgH, 3, dtchn)
+
+				sdkhelper.EjectResult(data, rMsg, out)
+
+				var id, name string
+				if rMsg.Tasklab != nil {
+					id, name = rMsg.Tasklab.Taskid, rMsg.Tasklab.Taskname
+				}
+				f.fnLogger("CAMERAID: ", rMsg.Cid, " TASKID: ", id, " TASKNAME: ", name, " DETECT ", f.typ, " COUNT: ", count)
 			}
-			f.fnLogger("CAMERAID: ", rMsg.Cid, " TASKID: ", id, " TASKNAME: ", name, " DETECT ", f.typ, " COUNT: ", count)
 
 			sc++
 			if sc == 25 {
@@ -276,12 +291,7 @@
 				sc = 0
 				tm = time.Now()
 			}
-		case <-time.After(trackChnTimeout * time.Second):
-			f.fnLogger("Timeout to get image, curCid:", curCid)
-			if curCid != "" {
-				f.channelRelease(curCid)
-			}
-			return
+
 		}
 	}
 }

--
Gitblit v1.8.0