chenke
2017-08-09 784f977cc7f9b9aad8cc3528a4f2026c1f686a0a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#ifndef __FaceCache_H__
#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 getFaceListImage(std::vector<NativeImgIdx>& imgIdxes, uint8_t* buffImg, size_t& buffImgMaxSize);
    
private:
    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