mod_mediacontroller.h 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  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 "ModuleMix.h"
  10. #include "EventCode.h"
  11. // id:0x208
  12. #include "../mod_assistantchannel/AssistantChannel_client_g.h"
  13. #include "../mod_assistantchannel/chan_protocol.h"
  14. using namespace AssistantChannel;
  15. using namespace SelfChecker;
  16. using namespace MediaController;
  17. class CMediaControllerEntity;
  18. struct CCameraBrightValue
  19. {
  20. int nValue;
  21. void Serialize(SpBuffer &Buf)
  22. {
  23. Buf & nValue;
  24. }
  25. };
  26. class SelfChekerClient:public SelfCheckerService_ClientBase
  27. {
  28. public:
  29. SelfChekerClient(CMediaControllerEntity*pEntity);
  30. };
  31. class ChannelMediaControllerClient : public ChannelService_ClientBase
  32. {
  33. public:
  34. ChannelMediaControllerClient(CMediaControllerEntity *pEntity);
  35. virtual void OnMessage(ErrorCodeEnum Error, ChannelService_State_Info &Msg, CSmartPointer<IReleasable> pData);
  36. virtual void OnMessage(ErrorCodeEnum Error, ChannelService_Packet_Info &Msg, CSmartPointer<IReleasable> pData);
  37. };
  38. class MediaServiceSession : public MediaService_ServerSessionBase
  39. {
  40. public:
  41. MediaServiceSession(CMediaControllerEntity *pEntity) : m_pEntity(pEntity){}
  42. virtual void Handle_GetVideoDeviceName(SpReqAnsContext<MediaService_GetVideoDeviceName_Req, MediaService_GetVideoDeviceName_Ans>::Pointer ctx);
  43. virtual void Handle_StartCamera(SpOnewayCallContext<MediaService_StartCamera_Info>::Pointer ctx);
  44. virtual void Handle_StopCamera(SpOnewayCallContext<MediaService_StopCamera_Info>::Pointer ctx);
  45. virtual void Handle_StartEnvCamera(SpReqAnsContext<MediaService_StartEnvCamera_Req, MediaService_StartEnvCamera_Ans>::Pointer ctx);
  46. virtual void Handle_StopEnvCamera(SpOnewayCallContext<MediaService_StopEnvCamera_Info>::Pointer ctx);
  47. virtual void Handle_StartSpeakerRender(SpOnewayCallContext<MediaService_StartSpeakerRender_Info>::Pointer ctx);
  48. virtual void Handle_StopSpeakerRender(SpOnewayCallContext<MediaService_StopSpeakerRender_Info>::Pointer ctx);
  49. virtual void Handle_ManipulateMediaDevice(SpReqAnsContext<MediaService_ManipulateMediaDevice_Req, MediaService_ManipulateMediaDevice_Ans>::Pointer ctx);
  50. virtual void Handle_GetAudioDevices(SpReqAnsContext<MediaService_GetAudioDevices_Req, MediaService_GetAudioDevices_Ans>::Pointer ctx);
  51. virtual void Handle_GetVideoDevices(SpReqAnsContext<MediaService_GetVideoDevices_Req, MediaService_GetVideoDevices_Ans>::Pointer ctx);
  52. virtual void Handle_GetCameraInfos(SpReqAnsContext<MediaService_GetCameraInfos_Req, MediaService_GetCameraInfos_Ans>::Pointer ctx);
  53. virtual void Handle_ManipulateCameras(SpReqAnsContext<MediaService_ManipulateCameras_Req, MediaService_ManipulateCameras_Ans>::Pointer ctx);
  54. private:
  55. CMediaControllerEntity *m_pEntity;
  56. };
  57. class CMediaControllerEntity : public CEntityBase, public ILogListener, public ITimerListener,public ISysVarListener
  58. {
  59. public:
  60. CMediaControllerEntity();
  61. virtual ~CMediaControllerEntity() {}
  62. virtual const char* GetEntityName() const { return "MediaController"; }
  63. virtual bool IsService()const { return true; }
  64. virtual void OnSysVarEvent(const char* pszKey, const char* pszValue, const char* pszOldValue, const char* pszEntityName);
  65. virtual void OnPreStart(CAutoArray<CSimpleStringA> strArgs, CSmartPointer<ITransactionContext> pTransactionContext);
  66. virtual void OnStarted();
  67. DeviceTypeEnum RvcGetDeviceType();
  68. void SetCameraSysVar(int n);
  69. ErrorCodeEnum GetSalesRecordAudioParam();
  70. ErrorCodeEnum SetEnvCameraOnSysVar(const CSimpleStringA strOnState);
  71. ErrorCodeEnum SetCameraSysVar(const CSimpleStringA &newVal);
  72. virtual void OnPreClose(EntityCloseCauseEnum eCloseCause,CSmartPointer<ITransactionContext> pTransactionContext);
  73. virtual void OnTimeout(DWORD dwTimerID);
  74. bool SetAutoBright(ErrorCodeEnum nCode);
  75. void OnReceivePkt(int sub_type, const char *buffer, int size);
  76. ErrorCodeEnum RealSelfCheck();
  77. void SendCameraBright();
  78. ErrorCodeEnum StartCameras();
  79. ErrorCodeEnum StopCameras();
  80. ErrorCodeEnum ExternStartCamera();
  81. ErrorCodeEnum ExternStopCamera();
  82. ErrorCodeEnum HandleSalesRecordPCMAudio(bool bRemoteRecord, const char* pszMessage, audio_frame* pFrame = NULL);
  83. void HandleRemoteRecord(const char* pszMessage);
  84. ErrorCodeEnum StartSpeakerAudioRender(int iQueue, audio_frame* pFrame, const char* strName);
  85. ErrorCodeEnum StopSpeakerAudioRender();
  86. ErrorCodeEnum SetSalesRecordAudioCaptureTransActionData(eRvcPCMTransType eType, void* pData);
  87. ErrorCodeEnum StopCamerasAndRecord();
  88. ErrorCodeEnum StartCamerasAndRecord();
  89. DeviceTypeEnum RvcDeviceType();
  90. ErrorCodeEnum GetMediaConfig();
  91. #if defined(RVC_OS_WIN)
  92. ErrorCodeEnum GetAudioDevicePriorityName();
  93. ErrorCodeEnum SaveInnerCamera();
  94. ErrorCodeEnum GetHSPCameras(CAutoArray<CSimpleStringA>& HSPCameras);
  95. ErrorCodeEnum StopSingleCameraAndRecord();
  96. ErrorCodeEnum StartSingleCameraAndRecord();
  97. void UpdateMediaConfig();
  98. ErrorCodeEnum AutoCorrectAudioConfig();
  99. #endif
  100. ErrorCodeEnum GetAudioDevices(int& iAudioCount, CSimpleStringA& strAudioDev, int iAudioType);
  101. ErrorCodeEnum GetVideoDevices(int& iVideoCount, CSimpleStringA& strVideoDev);
  102. private:
  103. ErrorCodeEnum LoadRunConfig(CSimpleStringA& frontcam, CSimpleStringA& rearcam);
  104. #if defined(RVC_OS_WIN)
  105. ErrorCodeEnum CheckConfigCameraName(capture_config_t* conf);
  106. bool IsNamedDeviceHasInserted(const char* strDeviceName);
  107. bool IsMatchSpecifyedAudioDevice(CSimpleStringA strAudioIn, CSimpleStringA strAudioOut);
  108. int UpdateAudioDeviceConfig(capture_config_t* conf);
  109. bool CheckAudioDeviceConfigure(capture_config_t* conf);
  110. int CheckAndUpdateAudioConfigures(capture_config_t* conf);
  111. double GetSystemCpuUsage();
  112. #else
  113. ErrorCodeEnum CheckConfigCameraName(capture_config_t* conf, DeviceTypeEnum eType);
  114. ErrorCodeEnum AutoGetVideoDeviceName(capture_config_t* conf);
  115. ErrorCodeEnum RvcGetAudioDevice();
  116. void CheckAutoVideoConfig(capture_config_t* conf);
  117. #endif //RVC_OS_WIN
  118. void OnCameraStarted();
  119. void OnCameraStopped();
  120. ErrorCodeEnum GetSalesAudioConfig(rvc_audio_capture_config_t *conf, bool bRemoteRecord);
  121. ErrorCodeEnum LoadConfig(capture_config_t* conf);
  122. void OnExternalCameraSwitchFailed(const char* pszFailedMsg);
  123. virtual void OnLog(const CAutoArray<CUUID>& SubIDs, const CUUID nLogID, const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
  124. const DWORD dwSysError, const DWORD dwUserCode, const DWORD dwEntityInstanceID, const WORD wEntityDevelID,
  125. const CAutoArray<DWORD>& Param, const char* pszEntityName, const char* pszModuleName, const char* pszMessage, const linkContext& pLinkInfo);
  126. virtual void OnSelfTest(EntityTestEnum eTestType, CSmartPointer<ITransactionContext> pTransactionContext);
  127. int GetActiveCamera();
  128. ErrorCodeEnum ChangeSysvar(ErrorCodeEnum op);
  129. ErrorCodeEnum StartSalesRecordAudioCapture(bool bRemoteRecord = false, eRvcPCMTransType eType = eUnKnown, void* pData = NULL);
  130. ErrorCodeEnum StopSalesRecordAudioCapture();
  131. ErrorCodeEnum StartCamera();
  132. void StartCameraAndSetSysVar();
  133. ErrorCodeEnum ReStartCamera(int nCamera);
  134. virtual CServerSessionBase* OnNewSession(const char* pszRemoteEntityName, const char* pszClass);
  135. void OnTimeCameraStatusCheck();
  136. ErrorCodeEnum ConnectAssistChannel();
  137. public:
  138. bool m_bSendCameraError;
  139. int m_iEnvEmptyTimes;
  140. int m_iOptEmptyTimes;
  141. int m_nEnvCameraRestartNum;
  142. int m_nOptCameraRestartNum;
  143. DeviceTypeEnum m_eDeviceType;
  144. BOOL m_bStartCamera;
  145. BOOL m_bExternControlCam;
  146. capture_config_t conf;
  147. rvc_audio_capture_config_s m_sales_audio_conf;
  148. ErrorCodeEnum m_nCameraErrorCode;
  149. int m_nCurActiveCamera;
  150. CSimpleStringA strFrontCam;
  151. CSimpleStringA strRearCam;
  152. CSimpleStringA strEnvCam;
  153. CSimpleStringA strUSBCam;
  154. int m_nCameraCount;
  155. int m_nSysCallType;
  156. capture_t* m_capture;
  157. rvc_sales_audio_capture_t* m_salesaudio_capture;
  158. BOOL m_bCustomerwareBegin;
  159. bool m_bHasStartSpeakerRender;
  160. #if defined(RVC_OS_WIN)
  161. CSimpleStringA m_strAudioPriority;
  162. int m_VideoCapType;
  163. bool m_bSpeakerCap;
  164. #endif //RVC_OS_WIN
  165. private:
  166. LONG m_lCaptureEnvCount;
  167. LONG m_lCaptureOptCount;
  168. LONG m_lCaptureEnvOptCount;
  169. CAutoArray<CUUID> m_arrListener;
  170. ChannelMediaControllerClient* m_pMediaControllerChannel;
  171. SelfChekerClient* m_pSelfcheckClient;
  172. bool m_bRecordPCM;
  173. bool m_bIsRemoteRecord;
  174. BOOL m_bConnectedAssist;
  175. int m_iCamTimeout;
  176. #ifdef RVC_OS_WIN
  177. IAudioRender* m_pAudioRenderObj;
  178. bool m_bNeedPost;
  179. bool m_bDeskToPadFlag;
  180. unsigned int m_uLastOpenTime;
  181. __int64 m_xIdlePre, m_xKernelPre, m_xUserPre;
  182. CSimpleStringA m_strEnvCam;
  183. CSimpleStringA m_strOptCam;
  184. CSimpleStringA m_strHandfreeIn;
  185. CSimpleStringA m_strHandfreeOut;
  186. int m_iAudioInCount;
  187. int m_iAudioOutCount;
  188. CSimpleStringA m_strAudioIn;
  189. CSimpleStringA m_strAudioOut;
  190. #else
  191. int m_nSalesAudioSmpPsec;
  192. pthread_mutex_t m_env_mutex;
  193. pthread_mutex_t m_opt_mutex;
  194. pthread_mutex_t m_envopt_mutex;
  195. IAudioMgr* m_pAudioCap;
  196. #endif
  197. int m_iCamOnMode;
  198. int m_iDelayTime;
  199. };