mod_mediacontroller.h 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. #pragma once
  2. #include "SpBase.h"
  3. #include "SpIni.h"
  4. #include "MediaController_server_g.h"
  5. #include "MediaController_msg_g.h"
  6. #include "ExternalCameraMsg.h"
  7. #include "../mod_selfchecker/SelfChecker_client_g.h"
  8. #include "../mod_selfchecker/SelfChecker_def_g.h"
  9. #include "../include/ModuleMix.h"
  10. #include "../include/EventCode.h"
  11. // id:0x208
  12. #include "../mod_assistantchannel/AssistantChannel_client_g.h"
  13. #include "../mod_assistantchannel/chan_protocol.h"
  14. #include "../mod_ScannerSet/ScannerSet_client_g.h"
  15. #include "../mod_ScannerSet/ScannerSet_def_g.h"
  16. using namespace ScannerSet;
  17. using namespace AssistantChannel;
  18. using namespace SelfChecker;
  19. using namespace MediaController;
  20. struct CCameraBrightValue
  21. {
  22. int nValue;
  23. void Serialize(SpBuffer& Buf)
  24. {
  25. Buf& nValue;
  26. }
  27. };
  28. class CMediaControllerEntity;
  29. class SelfChekerClient :public SelfCheckerService_ClientBase
  30. {
  31. public:
  32. SelfChekerClient(CMediaControllerEntity* pEntity);
  33. };
  34. class ChannelMediaControllerClient : public ChannelService_ClientBase
  35. {
  36. public:
  37. ChannelMediaControllerClient(CMediaControllerEntity* pEntity);
  38. virtual void OnMessage(ErrorCodeEnum Error, ChannelService_State_Info& Msg, CSmartPointer<IReleasable> pData);
  39. virtual void OnMessage(ErrorCodeEnum Error, ChannelService_Packet_Info& Msg, CSmartPointer<IReleasable> pData);
  40. };
  41. class MediaServiceSession : public MediaService_ServerSessionBase
  42. {
  43. public:
  44. MediaServiceSession(CMediaControllerEntity* pEntity) : m_pEntity(pEntity) {}
  45. virtual void Handle_GetVideoDeviceName(SpReqAnsContext<MediaService_GetVideoDeviceName_Req, MediaService_GetVideoDeviceName_Ans>::Pointer ctx);
  46. virtual void Handle_StartCamera(SpOnewayCallContext<MediaService_StartCamera_Info>::Pointer ctx);
  47. virtual void Handle_StopCamera(SpOnewayCallContext<MediaService_StopCamera_Info>::Pointer ctx);
  48. virtual void Handle_StartEnvCamera(SpReqAnsContext<MediaService_StartEnvCamera_Req, MediaService_StartEnvCamera_Ans>::Pointer ctx);
  49. virtual void Handle_StopEnvCamera(SpOnewayCallContext<MediaService_StopEnvCamera_Info>::Pointer ctx);
  50. //add by clp 20200319
  51. virtual void Handle_StartSpeakerRender(SpOnewayCallContext<MediaService_StartSpeakerRender_Info>::Pointer ctx);
  52. virtual void Handle_StopSpeakerRender(SpOnewayCallContext<MediaService_StopSpeakerRender_Info>::Pointer ctx);
  53. private:
  54. CMediaControllerEntity* m_pEntity;
  55. };
  56. class CMediaControllerEntity : public CEntityBase, public ILogListener, public ITimerListener, public ISysVarListener
  57. {
  58. public:
  59. CMediaControllerEntity() : m_capture(NULL), m_salesaudio_capture(NULL), m_lCaptureEnvCount(0), m_nCameraErrorCode(Error_Succeed),
  60. m_lCaptureEnvOptCount(0), m_lCaptureOptCount(0), m_iEnvEmptyTimes(0), m_iOptEmptyTimes(0), m_bSendCameraError(false),
  61. m_nEnvCameraRestartNum(0), m_nOptCameraRestartNum(0), m_nCameraCount(2), m_pSelfcheckClient(NULL),
  62. strFrontCam("$"), strRearCam("$"), strEnvCam("$"), strUSBCam("$"), strEwsCam("$"), m_bCustomerwareBegin(false),
  63. m_pAudioRenderObj(NULL), m_bRecordPCM(false), m_bIsRemoteRecord(false), m_bHasStartSpeakerRender(false), m_bConnectedAssist(FALSE){
  64. #ifdef RVC_OS_LINUX
  65. m_env_mutex = PTHREAD_MUTEX_INITIALIZER;
  66. m_opt_mutex = PTHREAD_MUTEX_INITIALIZER;
  67. m_envopt_mutex = PTHREAD_MUTEX_INITIALIZER;
  68. m_pAudioCap = NULL;
  69. #endif
  70. }
  71. virtual ~CMediaControllerEntity() {}
  72. virtual const char* GetEntityName() const { return "MediaController"; }
  73. virtual bool IsService()const { return true; }
  74. virtual void OnSysVarEvent(const char* pszKey, const char* pszValue, const char* pszOldValue, const char* pszEntityName);
  75. virtual void OnPreStart(CAutoArray<CSimpleStringA> strArgs, CSmartPointer<ITransactionContext> pTransactionContext);
  76. virtual void OnStarted();
  77. DeviceTypeEnum RvcGetDeviceType();
  78. void SetCameraSysVar(int n);
  79. ErrorCodeEnum GetSalesRecordAudioParam();
  80. ErrorCodeEnum SetEnvCameraOnSysVar(const CSimpleStringA strOnState);
  81. ErrorCodeEnum SetCameraSysVar(const CSimpleStringA& newVal);
  82. virtual void OnPreClose(EntityCloseCauseEnum eCloseCause, CSmartPointer<ITransactionContext> pTransactionContext);
  83. virtual void OnTimeout(DWORD dwTimerID);
  84. bool SetAutoBright(ErrorCodeEnum nCode);
  85. //camera gain adjust
  86. void OnReceivePkt(int sub_type, const char* buffer, int size);
  87. ErrorCodeEnum RealSelfCheck();
  88. void SendCameraBright();
  89. ErrorCodeEnum StartEnvCamera();
  90. ErrorCodeEnum StopEnvCamera();
  91. ErrorCodeEnum ExternStartCamera();
  92. ErrorCodeEnum ExternStopCamera();
  93. ErrorCodeEnum SaveInnerCamera();
  94. ErrorCodeEnum GetHSPCameras(CAutoArray<CSimpleStringA>& HSPCameras);
  95. ErrorCodeEnum HandleSalesRecordPCMAudio(bool bRemoteRecord, const char* pszMessage, audio_frame* pFrame = NULL);
  96. void HandleRemoteRecord(const char* pszMessage);
  97. ErrorCodeEnum StartSpeakerAudioRender(int iQueue, audio_frame* pFrame, const char* strName);
  98. ErrorCodeEnum StopSpeakerAudioRender();
  99. ErrorCodeEnum SetSalesRecordAudioCaptureTransActionData(eRvcPCMTransType eType, void* pData);
  100. public:
  101. bool m_bSendCameraError;
  102. int m_iEnvEmptyTimes;
  103. int m_iOptEmptyTimes;
  104. int m_nEnvCameraRestartNum;
  105. int m_nOptCameraRestartNum;
  106. DeviceTypeEnum m_eDeviceType;
  107. BOOL m_bStartCamera;
  108. BOOL m_bExternControlCam;
  109. capture_config_t conf;
  110. rvc_audio_capture_config_s m_sales_audio_conf; //销售双录音频配置
  111. ErrorCodeEnum m_nCameraErrorCode; //摄像头故障码,0:无故障,1:env摄像头故障,2:opt摄像头故障,3:双摄像头故障
  112. int m_nCurActiveCamera; //当前正在使用的摄像头
  113. CSimpleStringA strFrontCam;
  114. CSimpleStringA strRearCam;
  115. CSimpleStringA strEnvCam; //Env摄像头 add by ly 20160331
  116. CSimpleStringA strUSBCam; //外接摄像头 add by ly 20160329
  117. CSimpleStringA strEwsCam; //外部广角摄像头路径名(全程录像用,通常不配置)
  118. int m_nCameraCount; //当前摄像头数量 add by ly 20160531
  119. int m_nSysCallType; //0:普通模式,1:p2p模式
  120. capture_t* m_capture;
  121. rvc_sales_audio_capture_t* m_salesaudio_capture;
  122. BOOL m_bCustomerwareBegin;
  123. bool m_bHasStartSpeakerRender; //add by clp 20200416 是否已开启扬声器音频采集
  124. private:
  125. ErrorCodeEnum LoadRunConfig(CSimpleStringA& frontcam, CSimpleStringA& rearcam);
  126. ErrorCodeEnum CheckConfigCameraName(capture_config_t* conf);
  127. ErrorCodeEnum GetSalesAudioConfig(rvc_audio_capture_config_t* conf, bool bRemoteRecord);
  128. ErrorCodeEnum AutoGetVideoDeviceName(capture_config_t* conf);
  129. ErrorCodeEnum LoadConfig(capture_config_t* conf);
  130. void OnExternalCameraSwitchFailed(const char* pszFailedMsg);
  131. virtual void OnLog(const CAutoArray<CUUID>& SubIDs, const CUUID nLogID, const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
  132. const DWORD dwSysError, const DWORD dwUserCode, const DWORD dwEntityInstanceID, const WORD wEntityDevelID,
  133. const CAutoArray<DWORD>& Param, const char* pszEntityName, const char* pszModuleName, const char* pszMessage, const linkContext& pLinkInfo);
  134. virtual void OnSelfTest(EntityTestEnum eTestType, CSmartPointer<ITransactionContext> pTransactionContext);
  135. //获取当前使用摄像头,30分钟轮休一次
  136. int GetActiveCamera();
  137. ErrorCodeEnum ChangeSysvar(ErrorCodeEnum op);
  138. void AutoCorrectCameraConfigName(long wait_time);
  139. //开始销售双录音频采集函数
  140. ErrorCodeEnum StartSalesRecordAudioCapture(bool bRemoteRecord = false, eRvcPCMTransType eType = eUnKnown, void* pData = NULL);
  141. //停止销售双录音频采集函数
  142. ErrorCodeEnum StopSalesRecordAudioCapture();
  143. ErrorCodeEnum StartCamera();
  144. ErrorCodeEnum StartCamera(int nCamera);
  145. void StartCameraAndTiggerRecord(const char* strSessionId);
  146. ErrorCodeEnum ReStartCamera(int nCamera);
  147. virtual CServerSessionBase* OnNewSession(const char* pszRemoteEntityName, const char* pszClass);
  148. ErrorCodeEnum RvcGetAudioDevice();
  149. ErrorCodeEnum ConnectAssistChannel();
  150. void OnTimeCameraStatusCheck();
  151. private:
  152. LONG m_lCaptureEnvCount;
  153. LONG m_lCaptureOptCount;
  154. LONG m_lCaptureEnvOptCount;
  155. CAutoArray<CUUID> m_arrListener;
  156. ChannelMediaControllerClient* m_pMediaControllerChannel;
  157. SelfChekerClient* m_pSelfcheckClient;
  158. IAudioRender* m_pAudioRenderObj;
  159. bool m_bRecordPCM;
  160. int m_nSalesAudioSmpPsec;
  161. bool m_bIsRemoteRecord;
  162. BOOL m_bConnectedAssist;
  163. #ifdef RVC_OS_WIN
  164. #else
  165. pthread_mutex_t m_env_mutex;
  166. pthread_mutex_t m_opt_mutex;
  167. pthread_mutex_t m_envopt_mutex;
  168. IAudioMgr* m_pAudioCap;
  169. #endif
  170. };