mod_CameraConfigManage.h 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. #pragma once
  2. #include "SpBase.h"
  3. #include "SpIni.h"
  4. #include "libvideoecho.h"
  5. #include "EventCode.h"
  6. #include "Capture.h"
  7. #include "CameraConfigManage_server_g.h"
  8. #include "CameraConfigManage_def_g.h"
  9. #include "CameraConfigManage_msg_g.h"
  10. namespace CameraConfigManage {
  11. enum CapTypeEnum {
  12. CAMTYPE_UNKNOWN = 0,
  13. CAMTYPE_ENV,
  14. CAMTYPE_OPT,
  15. CAMTYPE_EWS,
  16. CAMTYPE_HSPS,
  17. CAMTYPE_CIRCLE,
  18. CAMTYPE_MAX
  19. };
  20. typedef struct
  21. {
  22. CSimpleStringA strEnvCamera;
  23. CSimpleStringA strOptCamera;
  24. CSimpleStringA strEwsCamera;
  25. } VideoConfig;
  26. typedef struct
  27. {
  28. CSimpleStringA strEnvCamera;
  29. CSimpleStringA strOptCamera;
  30. CSimpleStringA strEwsCamera;
  31. //detail
  32. capture_camera_t envCamera;
  33. capture_camera_t optCamera;
  34. capture_camera_t ewsCamera;
  35. } VideoConfigDetail;
  36. // 修改实体配置文件
  37. typedef struct
  38. {
  39. char EditType; // "A"增加;"U"修改;“D" 删除
  40. char EntityName[32]; // 配置文件名
  41. char Section[32]; // 配置节
  42. char Key[32]; // 配置项
  43. char Value[256]; // 值
  44. } CEditConfigReq;
  45. class CCameraConfigManageEntity;
  46. class CameraConfigManageServiceSession : public CameraConfigManageService_ServerSessionBase
  47. {
  48. public:
  49. explicit CameraConfigManageServiceSession(CCameraConfigManageEntity *pEntity) : m_pEntity(pEntity){}
  50. void Handle_BeginCameraConfigManage(
  51. SpOnewayCallContext<CameraConfigManageService_BeginCameraConfigManage_Info>::Pointer ctx);
  52. void Handle_EndCameraConfigManage(
  53. SpOnewayCallContext<CameraConfigManageService_EndCameraConfigManage_Info>::Pointer ctx);
  54. void Handle_GetCameraList(
  55. SpReqAnsContext<CameraConfigManageService_GetCameraList_Req,
  56. CameraConfigManageService_GetCameraList_Ans>::Pointer ctx);
  57. void Handle_EchoSomeCamera(
  58. SpReqAnsContext<CameraConfigManageService_EchoSomeCamera_Req,
  59. CameraConfigManageService_EchoSomeCamera_Ans>::Pointer ctx);
  60. void Handle_SaveCameraConfig(
  61. SpReqAnsContext<CameraConfigManageService_SaveCameraConfig_Req,
  62. CameraConfigManageService_SaveCameraConfig_Ans>::Pointer ctx);
  63. void Handle_StopEchoSomeCamera(
  64. SpReqAnsContext<CameraConfigManageService_StopEchoSomeCamera_Req,
  65. CameraConfigManageService_StopEchoSomeCamera_Ans>::Pointer ctx);
  66. void Handle_QueryCallState(
  67. SpReqAnsContext<CameraConfigManageService_QueryCallState_Req,
  68. CameraConfigManageService_QueryCallState_Ans>::Pointer ctx);
  69. void Handle_QueryUIState(
  70. SpReqAnsContext<CameraConfigManageService_QueryUIState_Req,
  71. CameraConfigManageService_QueryUIState_Ans>::Pointer ctx);
  72. void Handle_AutoCorrectCameraConfig(
  73. SpReqAnsContext<CameraConfigManageService_AutoCorrectCameraConfig_Req,
  74. CameraConfigManageService_AutoCorrectCameraConfig_Ans>::Pointer ctx);
  75. private:
  76. CCameraConfigManageEntity *m_pEntity;
  77. };
  78. class CCameraConfigManageEntity: public CEntityBase, public ISysVarListener,
  79. public ILogListener, public ITimerListener, public LibVideoEcho::CVideoEchoHostApi
  80. {
  81. public:
  82. CCameraConfigManageEntity(): m_capture(NULL), m_iCameraState('N'),
  83. m_nActiveCamera(0), m_pSession(NULL), m_bStartCamera(FALSE),
  84. m_bEchoVideo(FALSE), m_lCaptureCount(0) {}
  85. virtual ~CCameraConfigManageEntity() { /*nothing to implement*/ }
  86. virtual const char *GetEntityName() const { return "CameraConfigManage"; }
  87. virtual bool IsService() const{ return true; }
  88. virtual CServerSessionBase *OnNewSession(const char* pszRemoteEntityName, const char * pszClass)
  89. {
  90. LOG_FUNCTION();
  91. LOG_TRACE("%s connected class = %s!", pszRemoteEntityName, pszClass);
  92. return new CameraConfigManageServiceSession(this);
  93. }
  94. virtual void OnPreStart(
  95. CAutoArray<CSimpleStringA> strArgs,
  96. CSmartPointer<ITransactionContext> pTransactionContext);
  97. virtual void OnStarted();
  98. virtual void OnPreClose(
  99. EntityCloseCauseEnum eCloseCause,
  100. CSmartPointer<ITransactionContext> pTransactionContext);
  101. virtual void OnSysVarEvent(
  102. const char *pszKey,
  103. const char *pszValue,
  104. const char *pszOldValue,
  105. const char *pszEntityName);
  106. virtual void OnLog(
  107. const CAutoArray<CUUID> &SubIDs,
  108. const CUUID nLogID,
  109. const LogTypeEnum eLogType,
  110. const SeverityLevelEnum eLevel,
  111. const DWORD dwSysError,
  112. const DWORD dwUserCode,
  113. const DWORD dwEntityInstanceID,
  114. const WORD wEntityDevelID,
  115. const CAutoArray<DWORD> &Param,
  116. const char *pszEntityName,
  117. const char *pszModuleName,
  118. const char *pszMessage);
  119. virtual void OnTimeout(DWORD dwTimerID);
  120. virtual void Debug(const char *fmt, ...);
  121. virtual int GetActiveCamera();
  122. virtual HINSTANCE GetEntityHinstance();
  123. ErrorCodeEnum GetHSPCameras(CAutoArray<CSimpleStringA> &HSPCameras);
  124. void GetAvailableCameras(std::vector<capture_camera_t> &cams);
  125. ErrorCodeEnum LoadConfig(capture_config_t *conf);
  126. ErrorCodeEnum LoadConfig(VideoConfig *conf);
  127. // 编辑配置文件 add by ly@2019/03/18
  128. ErrorCodeEnum HandleEditConfigReq(const CAutoArray<CEditConfigReq> &reqs);
  129. void SetCameraName(CSimpleStringA camName);
  130. CSimpleStringA GetCameraName();
  131. BOOL IsCameraStart();
  132. ErrorCodeEnum StartCamera();
  133. void StopCamera();
  134. void StartEchoVideo( int x, int y, int w, int h );
  135. void StopEchoVideo();
  136. // direct show name -> device instance path
  137. bool ConvertEwsCameraName(CSimpleStringA& strRetrievedName, const CSimpleStringA& strDirectShowName);
  138. // get dev type
  139. DeviceTypeEnum GetDeviceType() const { return m_eDeviceType; }
  140. bool AutoCorrectCameraConfig(VideoConfig *config);
  141. private:
  142. void SyncVideoConfig();
  143. void RefreshCameras();
  144. bool AutoCorrectCameraByOnlyFriendlyName(capture_camera_t &correct_camera,
  145. bool camera1_can_open, bool camera2_can_open,
  146. const capture_camera_t &exclude_camera1, const capture_camera_t &exclude_camera2,
  147. const CAutoArray<CSimpleStringA> &hspCams);
  148. bool AutoCorrectCameraByOnlyOne(capture_camera_t &correct_camera,
  149. const capture_camera_t &exclude_camera1, const capture_camera_t &exclude_camera2,
  150. const CAutoArray<CSimpleStringA> &hspCams);
  151. private:
  152. capture_t *m_capture;
  153. std::vector<capture_camera_t> m_cameras;
  154. int m_iCameraState;
  155. int m_nActiveCamera;
  156. DeviceTypeEnum m_eDeviceType;
  157. capture_config_t m_conf;
  158. LibVideoEcho::videoplay_session_t *m_pSession;
  159. BOOL m_bStartCamera;
  160. BOOL m_bEchoVideo;
  161. //huchen add for autocorrect
  162. VideoConfig m_originConfig;
  163. VideoConfigDetail m_camerasConfig;
  164. private:
  165. LONG m_lCaptureCount;
  166. CAutoArray<CUUID> m_arrListener;
  167. };
  168. }