From 7572cd33f27b512691b6acf39cd0d78d35017a46 Mon Sep 17 00:00:00 2001
From: pans <pans@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期五, 18 八月 2017 13:34:18 +0800
Subject: [PATCH] capnp fix bug

---
 VisitFace/RtspNativeCodec/app/src/main/cpp/FaceCacheForPLBG.cpp |   57 ++++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 50 insertions(+), 7 deletions(-)

diff --git a/VisitFace/RtspNativeCodec/app/src/main/cpp/FaceCacheForPLBG.cpp b/VisitFace/RtspNativeCodec/app/src/main/cpp/FaceCacheForPLBG.cpp
index 9c1fc23..b7502eb 100644
--- a/VisitFace/RtspNativeCodec/app/src/main/cpp/FaceCacheForPLBG.cpp
+++ b/VisitFace/RtspNativeCodec/app/src/main/cpp/FaceCacheForPLBG.cpp
@@ -39,9 +39,13 @@
 	size_t frameRGBSize;
 	bool frameTruncated;
 
+	typedef std::map<int, float> block_score_filter_map_t;
+	block_score_filter_map_t blockScoreFilter;
+
 	FcPmBreackerContextPLBG() :
 			lastOutputs(), lastOutputsRGBBufs(), frameYUV(), frameYUVSize(0), frameRGB(),frameRGBSize(0),
-			frameTruncated(false)
+			frameTruncated(false),
+			blockScoreFilter()
 	{}
 
 	void reset()
@@ -148,14 +152,16 @@
 	}
 };
 
-FaceCacheForPLBG::FaceCacheForPLBG() : _ctx(new FcPmBreackerContextPLBG)
+FaceCacheForPLBG::FaceCacheForPLBG() : _ctx(new FcPmBreackerContextPLBG), resultBuffer(nullptr)
 {
-
+	resultBuffer = new uint8_t[FACECACHEFORPLBG_RESULT_BUFFSIZE];
 }
 
 FaceCacheForPLBG::~FaceCacheForPLBG()
 {
 	delete (FcPmBreackerContextPLBG*)_ctx;
+	delete resultBuffer;
+	resultBuffer = nullptr;
 }
 
 
@@ -178,10 +184,49 @@
 
 size_t FaceCacheForPLBG::getFaceCount(const PipeMaterial& pm) const
 {
+	FcPmBreackerContextPLBG& ctx(*(FcPmBreackerContextPLBG*)_ctx);
 	plbg_output_vec_t* plbgOut = (plbg_output_vec_t*)pm.buffer;
-	return plbgOut->size();
-}
 
+	bool hasFiltedBlock = false;
+	int min_st_track_id = 0;
+
+	for (plbg_output_vec_t::iterator iterBGOut = plbgOut->begin(); iterBGOut != plbgOut->end(); ++iterBGOut)
+	{
+		int st_track_id = (int)(int64_t)(iterBGOut->rectInOriginFrame.userData);
+		float score = iterBGOut->score;
+
+		FcPmBreackerContextPLBG::block_score_filter_map_t::iterator iterFilter = ctx.blockScoreFilter.find(st_track_id);
+		if (iterFilter == ctx.blockScoreFilter.end())
+		{
+			ctx.blockScoreFilter.insert(std::make_pair(st_track_id, score));
+			hasFiltedBlock = true;
+		}
+		else
+		{
+			if (iterFilter->second < score)
+			{
+				iterFilter->second = score;
+				hasFiltedBlock = true;
+			}
+		}
+
+		if (min_st_track_id > st_track_id)
+			min_st_track_id = st_track_id;
+	}
+
+	for(FcPmBreackerContextPLBG::block_score_filter_map_t::iterator iterFilter = ctx.blockScoreFilter.begin(); iterFilter != ctx.blockScoreFilter.end(); )
+	{
+		if (iterFilter->first < min_st_track_id)
+			iterFilter = ctx.blockScoreFilter.erase(iterFilter);
+		else
+			++iterFilter;
+	}
+
+	if (hasFiltedBlock)
+		return plbgOut->size();
+	else
+		return 0;
+}
 
 bool FaceCacheForPLBG::getFaceListPb(uint8_t* buffer, size_t& buffMaxSize)
 {
@@ -232,7 +277,6 @@
 	return buffMaxSize > 0;
 }
 
-
 bool FaceCacheForPLBG::getFaceListImage(std::vector<NativeImgIdx>& imgIdxes, uint8_t* buffImg, size_t& buffImgMaxSize)
 {
 	FcPmBreackerContextPLBG& ctx(*(FcPmBreackerContextPLBG*)_ctx);
@@ -269,4 +313,3 @@
 
 	return  true;
 }
-

--
Gitblit v1.8.0