houxiao
2017-08-16 a188ad2e23ef190c8a044b17bc467fa3e2ae0ca5
VisitFace/RtspNativeCodec/app/src/main/cpp/FaceCache.h
@@ -2,24 +2,77 @@
#define __FaceCache_H__
#include <PipeLine.h>
#include <vector>
#define FACECACHEFORPLBG_RESULT_BUFFSIZE (1920 * 1080 * 2)
struct NativeImgIdx
{
   int st_track_id;
   int offset;
   int size;
   int type;
   int width;
   int height;
   NativeImgIdx() : st_track_id(-1), offset(0), size(0), type(0), width(0), height(0)
   {}
   operator std::string() const;
};
class FaceCache
{
public:
#ifdef USE_ST_SDK
   FaceCache();
   ~FaceCache();
#else
   FaceCache() : _ctx(nullptr) {}
   ~FaceCache() {}
#endif
   
   // returns count of face
   int cachePm(const PipeMaterial& pm);
   size_t getFaceCount(const PipeMaterial& pm) const;
   bool getFaceListPb(uint8_t* buffer, size_t& buffMaxSize);
   
   bool getFaceListPb(uint8_t* buffer, size_t& buffSize);
   bool getFaceListImage(int* buffIdx, size_t& count, uint8_t* buffImg, size_t& buffImgSize);
   bool getFaceListImage(std::vector<NativeImgIdx>& imgIdxes, uint8_t* buffImg, size_t& buffImgMaxSize);
   
private:
   bool extractFace();
   void* _ctx;
};
class FaceCacheForPLBG
{
public:
   FaceCacheForPLBG();
   ~FaceCacheForPLBG();
   // returns count of face
   int cachePm(const PipeMaterial& pm);
   size_t getFaceCount(const PipeMaterial& pm) const;
   bool getFaceListPb(uint8_t* buffer, size_t& buffMaxSize);
   uint8_t* getFaceListPb(size_t& buffSize)
   {
      buffSize = FACECACHEFORPLBG_RESULT_BUFFSIZE;
      if (!getFaceListPb(resultBuffer, buffSize))
         return nullptr;
      return resultBuffer;//#todo to cpp
   }
   bool getFaceListImage(std::vector<NativeImgIdx>& imgIdxes, uint8_t* buffImg, size_t& buffImgMaxSize);
   uint8_t* getFaceListImage(size_t& buffSize);
private:
   void* _ctx;
   uint8_t* resultBuffer;
};
#endif