RvcFaceCapturer.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #ifndef RVC_FACE_CAPTURER_H_
  2. #define RVC_FACE_CAPTURER_H_
  3. #pragma once
  4. #include "RvcFaceCapture.h"
  5. #include "SpBase.h"
  6. #include "SingleTimer.h"
  7. #include "../../Other/libvideoqueue/libvideoqueue.h"
  8. namespace RvcFaceCapture
  9. {
  10. typedef int (*tPfnInit)(IFaceCapCallback*, const char *szDevType);
  11. typedef int (*tPfnStartCapture)();
  12. typedef int (*tPfnFeedFrame)(RVC_ImageData*);
  13. typedef int (*tPfnStopCapture)();
  14. typedef int (*tPfnGetImage)(BITMAP*, RVC_FaceRect*);
  15. typedef int (*tPfnUnInit)();
  16. typedef int (*tPfnGetTrackData)(int nCameraID, RVC_TrackData*);
  17. class RvcFaceCapturer: IFaceCapCallback
  18. {
  19. friend UINT WINAPI FaceCaptureThread(LPVOID pM);
  20. friend class StopFaceCaptureTask;
  21. public:
  22. RvcFaceCapturer(LPCTSTR videoqueue0name,LPCTSTR videoqueue1name,int videowidth,int videoheight);
  23. virtual ~RvcFaceCapturer();
  24. ErrorCodeEnum Init(CEntityBase* pDetection);
  25. ErrorCodeEnum UnInit();
  26. virtual void OnFaceCapImgInfo(const char* msg);
  27. virtual void OnEchoCamera(int cameraID);
  28. virtual void OnFaceCapDone();
  29. // 获取当前是否有捕获任务
  30. bool GetHasCapTask() const {return m_hCaptureThread != NULL;}
  31. BOOL StartFaceCapture();
  32. BOOL StopFaceCapture();
  33. // 报摄像头故障
  34. void NotifyCameraFault();
  35. //上报抓拍耗时信息
  36. std::string formatTime(SYSTEMTIME time);
  37. CSimpleString generateAlarmJson(CSimpleString entityName, CSimpleString startTime, int cost);
  38. private:
  39. CEntityBase* m_pDetection;
  40. SingleTimer m_timer; //单定时器
  41. BITMAP m_bitmap0;
  42. BITMAP m_bitmap1;
  43. int m_nImageSize;
  44. volatile BOOL m_bCaptured;
  45. HINSTANCE m_hInstance;
  46. tPfnInit RvcFaceCapInit;
  47. tPfnStartCapture RvcFaceCapStartCapture;
  48. tPfnFeedFrame RvcFaceCapFeedFrame;
  49. tPfnStopCapture RvcFaceCapStopCapture;
  50. tPfnGetImage RvcFaceCapGetImage;
  51. tPfnUnInit RvcFaceCapUnInit;
  52. tPfnGetTrackData RvcFaceCapGetTrackData;
  53. HANDLE m_hCaptureThread;
  54. HANDLE m_hFaceRectThread;
  55. // 回显摄像头编号
  56. int m_nEchoCamera;
  57. // 当前回显提示消息
  58. CSimpleStringA m_strStatus;
  59. // 历史回显提示消息
  60. CSimpleStringA m_strLastStatus;
  61. // 历史回显摄像头编号
  62. int m_nLastEchoCamera;
  63. videoq_frame *videoframe0;
  64. videoq_frame *videoframe1;
  65. Clibvideoqueue *m_videoqueue0;
  66. Clibvideoqueue *m_videoqueue1;
  67. std::string m_VideoQueue0Name;
  68. std::string m_VideoQueue1Name;
  69. HANDLE m_hEventWait; // CreateEvent
  70. bool m_bThreadRun;
  71. // 是否保存每次的抓拍结果
  72. BOOL m_bSaveCaptureResult;
  73. // 抓拍结果路径
  74. CSimpleStringA m_CaptureResultPath;
  75. // 回显窗位置
  76. RECT m_EchoWinRect;
  77. private:
  78. BOOL GetVideoFrameByCameraID( int CameraID, videoq_frame* Video, int flags );
  79. void FSleep(int ms);
  80. UINT StartCapture();
  81. public:
  82. CSimpleStringA m_ActionID;
  83. protected:
  84. int m_nActiveTimeLimit;
  85. int m_nLeastActiveShowTime;
  86. int m_nSendInfoIntervalTime;
  87. bool IsTimeOut();
  88. bool m_bTimeout;
  89. int m_nSeconds;
  90. };
  91. struct StopFaceCaptureTask : public ITaskSp
  92. {
  93. RvcFaceCapturer *m_pCapture;
  94. StopFaceCaptureTask(RvcFaceCapturer *f) : m_pCapture(f) {}
  95. void Process();
  96. };
  97. }
  98. #endif