| | |
| | | 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()
|
| | |
| | | }
|
| | | };
|
| | |
|
| | | 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;
|
| | | }
|
| | |
|
| | |
|
| | |
| | |
|
| | | 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)
|
| | | {
|
| | |
| | | return buffMaxSize > 0;
|
| | | }
|
| | |
|
| | |
|
| | | bool FaceCacheForPLBG::getFaceListImage(std::vector<NativeImgIdx>& imgIdxes, uint8_t* buffImg, size_t& buffImgMaxSize)
|
| | | {
|
| | | FcPmBreackerContextPLBG& ctx(*(FcPmBreackerContextPLBG*)_ctx);
|
| | |
| | |
|
| | | return true;
|
| | | }
|
| | |
|