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

---
 run.go |  115 +++++++++++++++++++++++++--------------------------------
 1 files changed, 50 insertions(+), 65 deletions(-)

diff --git a/run.go b/run.go
index cc5a50b..8a03e1e 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,13 +193,9 @@
 
 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 {
-			f.fnLogger("######push image")
-			c.msg <- msg
-			f.fnLogger("######push over image")
+			c.msgs.Push(msg)
 		} else {
 
 			nc := f.channelNew(msg.Cid)
@@ -218,77 +215,65 @@
 			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) {
-	tm := time.Now()
-	sc := 0
 
 	dtchn := c.index
-	f.fnLogger("DETECTTRACKONECHN DTCHN: ", dtchn)
 	var curCid string
 
 	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
-			}
-
-			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
-			}
-
-			curCid = i.Cid
-
-			// conv to bgr24 and resize
-			imgW, imgH := int(i.Width), int(i.Height)
-
-			f.fnLogger("######face sdk run")
-			count, data, _ := f.handle.Run(i.Data, imgW, imgH, 3, dtchn)
-			f.fnLogger("######face over sdk run")
-
-			f.fnLogger("######face eject data")
-			sdkhelper.EjectResult(data, rMsg, out)
-			f.fnLogger("######face over eject data")
-
-			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)
-
-			sc++
-			if sc == 25 {
-				f.fnLogger("CHAN:%d, FACE RUN 25 FRAME USE TIME: ", dtchn, time.Since(tm))
-				sc = 0
-				tm = time.Now()
-			}
-
-			if time.Since(tm) > time.Second {
-				f.fnLogger("CHAN: ", dtchn, " FACE RUN ", sc, " FRAME USE TIME: ", time.Since(tm))
-				sc = 0
-				tm = time.Now()
-			}
 		case <-time.After(trackChnTimeout * time.Second):
-			f.fnLogger("Timeout to get image, curCid:", curCid)
+			f.fnLogger("######Timeout to get image, curCid:", curCid, " Chan:", dtchn)
 			if curCid != "" {
 				f.channelRelease(curCid)
 			}
 			return
+		default:
+			// f.fnLogger("DETECTTRACKONECHN DTCHN: ", dtchn)
+
+			elems := c.msgs.Drain()
+			var msgs []protomsg.SdkMessage
+			for _, v := range elems {
+				msgs = append(msgs, v.(protomsg.SdkMessage))
+			}
+			for _, rMsg := range msgs {
+
+				if !sdkhelper.ValidRemoteMessage(rMsg, f.typ, f.fnLogger) {
+					sdkhelper.EjectResult(nil, rMsg, out)
+					f.fnLogger("Face!!!!!!SkdMessage Invalid: ", dtchn)
+
+					continue
+				}
+
+				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: ", dtchn)
+
+					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("Chan: ", dtchn, "CAMERAID: ", rMsg.Cid, " TASKID: ", id, " TASKNAME: ", name, " DETECT ", f.typ, " COUNT: ", count)
+			}
 		}
 	}
 }

--
Gitblit v1.8.0