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