From afcb649c8a2785c6095be5762c6077f9e15afd1a Mon Sep 17 00:00:00 2001
From: houxiao <houxiao@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期三, 02 八月 2017 10:33:31 +0800
Subject: [PATCH] c++ dupl image

---
 VisitFace/RtspNativeCodec/app/src/main/cpp/FaceCacheForPLBG.cpp |   48 ++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 46 insertions(+), 2 deletions(-)

diff --git a/VisitFace/RtspNativeCodec/app/src/main/cpp/FaceCacheForPLBG.cpp b/VisitFace/RtspNativeCodec/app/src/main/cpp/FaceCacheForPLBG.cpp
index 9c1fc23..7a82720 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()
@@ -178,8 +182,48 @@
 
 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;
 }
 
 

--
Gitblit v1.8.0