mod_mediacontroller.cpp 68 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345
  1. #include "stdafx.h"
  2. #include "y2k_time.h"
  3. #include "capture.h"
  4. #include "Event.h"
  5. #include "iaudiorenderinterface.h"
  6. #include "EventCode.h"
  7. #include "../mod_snapshot/Event.h"
  8. #include "mod_mediacontroller.h"
  9. #include "../mod_interactivecontrol/Event.h"
  10. #include "../mod_recorder/Event.h"
  11. #include "../mod_ScannerSet/ScannerSet_client_g.h"
  12. #include "../mod_ScannerSet/ScannerSet_def_g.h"
  13. using namespace ScannerSet;
  14. static void __audio_render_log(void* user_data, const char* fmt, va_list arg)
  15. {
  16. int n = _vscprintf(fmt, arg);
  17. if (n >= MAX_PATH) {
  18. char* buf = (char*)malloc((size_t)(n + 1));
  19. _vsnprintf(buf, n + 1, fmt, arg);
  20. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("%s", buf);
  21. free(buf);
  22. }
  23. else{
  24. char strlog[MAX_PATH] = {0};
  25. _vsnprintf(strlog, MAX_PATH, fmt, arg);
  26. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("%s", strlog);
  27. }
  28. }
  29. CMediaControllerEntity::CMediaControllerEntity() : m_capture(NULL), m_salesaudio_capture(NULL), m_lCaptureEnvCount(0), m_nCameraErrorCode(Error_Succeed),
  30. m_lCaptureEnvOptCount(0), m_lCaptureOptCount(0), m_iEnvEmptyTimes(0), m_iOptEmptyTimes(0), m_bSendCameraError(false),
  31. m_nEnvCameraRestartNum(0), m_nOptCameraRestartNum(0), m_nCameraCount(2), m_pSelfcheckClient(NULL),
  32. strFrontCam("$"), strRearCam("$"), strEnvCam("$"), strUSBCam("$"), m_bCustomerwareBegin(false),
  33. m_pAudioRenderObj(NULL), m_bRecordPCM(false), m_bIsRemoteRecord(false), m_bHasStartSpeakerRender(false), m_strAudioPriority(""), m_bDeskToPadFlag(true)
  34. {
  35. m_bNeedPost = false;
  36. m_VideoCapType = 1;
  37. m_bSpeakerCap = true;
  38. m_strEnvCam = "$";
  39. m_strOptCam = "$";
  40. m_strHandfreeIn = "$";
  41. m_strHandfreeOut = "$";
  42. m_pMediaControllerChannel = NULL;
  43. m_bConnectedAssist = FALSE;
  44. m_iCamTimeout = CAMERA_TIMEOUT;
  45. m_iCamOnMode = 0;
  46. m_iDelayTime = RVC_MAX_DELAY_TIME;
  47. }
  48. void CMediaControllerEntity::OnSysVarEvent(const char *pszKey, const char *pszValue,const char *pszOldValue,const char *pszEntityName)
  49. {
  50. if (_stricmp(pszKey, SYSVAR_CALLTYPE) == 0)
  51. {
  52. if(pszValue[0] == CALLTYPE_NORMAL)
  53. {
  54. m_nSysCallType = 0;
  55. }
  56. else if(pszValue[0] == CALLTYPE_MOBILE)
  57. {
  58. m_nSysCallType = 1;
  59. }
  60. else
  61. {
  62. m_nSysCallType = -1;
  63. }
  64. }
  65. else if (_stricmp(pszKey, SYSVAR_CALLSTATE) == 0)
  66. {
  67. CSimpleStringA strState;
  68. GetFunction()->GetSysVar("UIState", strState);
  69. if ('C' == pszValue[0]) {
  70. if (1 == m_iCamOnMode) {
  71. if (!m_bStartCamera) {
  72. StartCameraAndSetSysVar();
  73. if (m_bStartCamera) {
  74. OnCameraStarted();
  75. }
  76. }
  77. else {
  78. if (strState.GetLength() > 0 && strState[0] == 'M') {
  79. if (Error_Succeed != GetFunction()->KillTimer(3)) {
  80. LogWarn(Severity_Low, Error_Debug, LOG_EVT_MEDIACONTROLLER_KILLTIMER_ERROR, "Call State is Connecting, and UIState is M, KillTimer 3 failed.");
  81. }
  82. }
  83. }
  84. }
  85. }
  86. else if ('O' == pszValue[0]){
  87. if (1 == m_iCamOnMode) {
  88. if (strState.GetLength() > 0 && strState[0] == 'M') {
  89. if (m_bStartCamera) {
  90. if (Error_Succeed != GetFunction()->SetTimer(3, this, m_iDelayTime * 1000)) {
  91. LogWarn(Severity_Low, Error_Debug, LOG_EVT_MEDIACONTROLLER_SETTIMER_ERROR, "Call State is OffLine, and UIState is M, SetTimer 3 failed.");
  92. }
  93. }
  94. }
  95. }
  96. }
  97. }
  98. }
  99. void CMediaControllerEntity::OnPreStart(CAutoArray<CSimpleStringA> strArgs,CSmartPointer<ITransactionContext> pTransactionContext)
  100. {
  101. m_eDeviceType = eStand2sType;
  102. g_eDeviceType = eStand2sType;
  103. //is Pad Version
  104. m_eDeviceType = RvcGetDeviceType();
  105. g_eDeviceType = m_eDeviceType;
  106. CSmartPointer<IEntityFunction> Func = GetFunction();
  107. CSimpleStringA strValue;
  108. Func->RegistSysVarEvent(SYSVAR_CALLTYPE, this);
  109. Func->GetSysVar(SYSVAR_CALLTYPE, strValue);
  110. if (strValue[0] == CALLTYPE_NORMAL) {
  111. m_nSysCallType = 0;
  112. }
  113. else if (strValue[0] == CALLTYPE_MOBILE) {
  114. m_nSysCallType = 1;
  115. }
  116. else {
  117. assert(0);
  118. }
  119. if (GetFunction()->RegistSysVarEvent("SessionID", this) != Error_Succeed){
  120. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("register sysvar %s failed!", "SessionID");
  121. }
  122. if (GetFunction()->RegistSysVarEvent(SYSVAR_CALLSTATE, this) != Error_Succeed) {
  123. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("register sysvar %s failed!", SYSVAR_CALLSTATE);
  124. }
  125. int i = 0;
  126. m_arrListener.Init(16);
  127. GetFunction()->SubscribeLog(m_arrListener[i++], this, Log_Event, Severity_None, Error_IgnoreAll, MOD_EVENT_SNAPSHOT_START_CAPTURE_ENV);
  128. GetFunction()->SubscribeLog(m_arrListener[i++], this, Log_Event, Severity_None, Error_IgnoreAll, MOD_EVENT_SNAPSHOT_START_CAPTURE_OPT);
  129. GetFunction()->SubscribeLog(m_arrListener[i++], this, Log_Event, Severity_None, Error_IgnoreAll, MOD_EVENT_SNAPSHOT_START_CAPTURE_ENVOPT);
  130. GetFunction()->SubscribeLog(m_arrListener[i++], this, Log_Event, Severity_None, Error_IgnoreAll, LOG_EVT_MOD_ASSISCHAN_STARTED_SUCCESS,NULL,false);
  131. GetFunction()->SubscribeLog(m_arrListener[i++], this, Log_Event, Severity_Middle, Error_IgnoreAll, EVENT_MOD_CUSTOMERAWARE_BEGIN, NULL, false);
  132. GetFunction()->SubscribeLog(m_arrListener[i++], this, Log_Event, Severity_Middle, Error_IgnoreAll, EVENT_MOD_CUSTOMERAWARE_END, NULL, false);
  133. GetFunction()->SubscribeLog(m_arrListener[i++], this, Log_Event, Severity_None, Error_IgnoreAll, LOG_EVT_RECORDFAILED,NULL,false);
  134. GetFunction()->SubscribeLog(m_arrListener[i++], this, Log_Event, Severity_None, Error_IgnoreAll, LOG_EVT_UI_RECORDFAILED,NULL,false);
  135. GetFunction()->SubscribeLog(m_arrListener[i++], this, Log_Event, Severity_None, Error_IgnoreAll, LOG_EVT_UI_STARTREMOTERECORD,NULL,false);
  136. GetFunction()->SubscribeLog(m_arrListener[i++], this, Log_Event, Severity_None, Error_IgnoreAll, LOG_EVT_UI_STOPREMOTERECORD,NULL,false);
  137. GetFunction()->SubscribeLog(m_arrListener[i++], this, Log_Event, Severity_None, Error_IgnoreAll, LOG_EVT_UI_STARTRECORD,NULL,false);
  138. GetFunction()->SubscribeLog(m_arrListener[i++], this, Log_Event, Severity_None, Error_IgnoreAll, LOG_EVT_UI_STOPRECORD,NULL,false);
  139. GetFunction()->SubscribeLog(m_arrListener[i++], this, Log_Event, Severity_None, Error_IgnoreAll, LOG_EVT_UI_STARTRECORDPREVIEW,NULL,false);
  140. GetFunction()->SubscribeLog(m_arrListener[i++], this, Log_Event, Severity_None, Error_IgnoreAll, LOG_EVT_MOD_SALESRECORDER_STARTED_SUCCESS, NULL, false);
  141. GetFunction()->SubscribeLog(m_arrListener[i++], this, Log_Event, Severity_Middle, Error_IgnoreAll, LOG_EVT_BEGIN_HANDLE_BUSINESS, NULL, false);
  142. GetFunction()->SubscribeLog(m_arrListener[i++], this, Log_Event, Severity_Middle, Error_IgnoreAll, LOG_EVT_END_HANDLE_BUSINESS, NULL, false);
  143. pTransactionContext->SendAnswer(Error_Succeed);
  144. }
  145. void CMediaControllerEntity::OnStarted()
  146. {
  147. m_bStartCamera = FALSE;
  148. m_bExternControlCam = FALSE;
  149. m_nSysCallType =0;
  150. m_xIdlePre = m_xKernelPre = m_xUserPre = 0;
  151. ErrorCodeEnum Error = Error_Succeed;
  152. //MessageBoxA(0,0,0,0);
  153. m_pMediaControllerChannel = new ChannelMediaControllerClient(this);
  154. if (Error_Succeed == ConnectAssistChannel()) {
  155. m_bConnectedAssist = TRUE;
  156. }
  157. m_pSelfcheckClient = new SelfChekerClient(this);
  158. Error = m_pSelfcheckClient->Connect();
  159. if (Error != Error_Succeed){
  160. m_pSelfcheckClient->SafeDelete();
  161. m_pSelfcheckClient = NULL;
  162. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("SelfcheckClient connect fail!");
  163. }
  164. if (Error_Succeed == GetMediaConfig()) {
  165. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("get video capture frame type (%d) success.", m_VideoCapType);
  166. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_strEnvCam = %s, m_strOptCam = %s.", m_strEnvCam.GetData(), m_strOptCam.GetData());
  167. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("cam timeout time is %d.", m_iCamTimeout);
  168. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("CamOnMode is %d, and max delay time is %d.", m_iCamOnMode, m_iDelayTime);
  169. }
  170. if (Error_Succeed == GetSalesRecordAudioParam()) {
  171. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("get sales record audio param success, record local PCM flag is %s.", m_bRecordPCM ? "true" : "false");
  172. }
  173. audiorender_callback_t t_callback = { 0 };
  174. t_callback.debug = &__audio_render_log;
  175. t_callback.user_data = this;
  176. m_pAudioRenderObj = CreateIAudioRenderObj(&t_callback);
  177. if (NULL == m_pAudioRenderObj){
  178. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("create audio render failed.");
  179. }
  180. memset(&conf,0,sizeof(capture_config_t));
  181. memset(&m_sales_audio_conf, 0, sizeof(rvc_audio_capture_config_t));
  182. Error = (ErrorCodeEnum)capture_lib_init(&m_iAudioInCount, &m_iAudioOutCount, m_strAudioIn, m_strAudioOut);
  183. if (Error == Error_Succeed)
  184. {
  185. Error = LoadConfig(&conf);
  186. conf.video_cap_type = m_VideoCapType; //video capture type 0 RGB24, 1 YUY2
  187. if (Error!=Error_Succeed)
  188. {
  189. if((Error == Error_OptCamera)||(Error == Error_EnvCamera))
  190. {
  191. if (Error == Error_EnvCamera)
  192. {
  193. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Load EnvCamera Config failed!");
  194. SetCameraSysVar(CAMERA_ENV_ERROR);
  195. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Camera State to CAMERA_ENV_ERROR");
  196. m_nCameraErrorCode = Error_EnvCamera;
  197. GetFunction()->SetUserDefineState(USER_MEDIA_ENVERRROR);
  198. }
  199. else if (Error == Error_OptCamera)
  200. {
  201. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Load OptCamera Config failed!");
  202. SetCameraSysVar(CAMERA_OPT_ERROR);
  203. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Camera State to CAMERA_OPT_ERROR");
  204. m_nCameraErrorCode = Error_OptCamera;
  205. GetFunction()->SetUserDefineState(USER_MEDIA_OPTERROR);
  206. }
  207. }
  208. else
  209. {
  210. if (Error == Error_AllCamera)
  211. {
  212. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Load all camera Config failed!");
  213. SetCameraSysVar(CAMERA_BOTH_ERROR);
  214. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Camera State to CAMERA_BOTH_ERROR");
  215. m_nCameraErrorCode = Error_AllCamera;
  216. GetFunction()->SetUserDefineState(USER_MEDIA_ALLERROR);
  217. }
  218. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Load Config failed!");
  219. }
  220. }
  221. }
  222. else{
  223. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("capture_lib_init failed!");
  224. }
  225. //PAD版获取客户感知状态
  226. CSimpleStringA strCustomerAware;
  227. if (Error != Error_AllCamera)
  228. {
  229. CSmartPointer<IEntityFunction> Func = GetFunction();
  230. if (Func->RegistSysVarEvent("CustomerHandle", this) != Error_Succeed) {
  231. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("register sys var %s failed!", "CustomerHandle");
  232. }
  233. else{
  234. Func->GetSysVar("CustomerHandle", strCustomerAware);
  235. }
  236. }
  237. //启动摄像头
  238. if ((Error!=Error_AllCamera)&&(strCustomerAware.GetLength()>0)&&(strCustomerAware[0] != 'N')&&(1 != m_iCamOnMode))
  239. {
  240. Error = StartCamera();
  241. if (Error == Error_Succeed)
  242. {
  243. m_bStartCamera = TRUE;
  244. SetCameraSysVar(CAMERA_NO_ERROR);
  245. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Camera State to CAMERA_NO_ERROR");
  246. m_nCameraErrorCode = Error_Succeed;
  247. GetFunction()->SetUserDefineState(USER_MEDIA_IDLE);
  248. }
  249. else
  250. {
  251. if((Error == Error_EnvCamera)||(Error == Error_OptCamera))
  252. {
  253. m_bStartCamera = TRUE;
  254. if (Error == Error_EnvCamera)
  255. {
  256. SetCameraSysVar(CAMERA_ENV_ERROR);
  257. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Camera State to CAMERA_ENV_ERROR");
  258. m_nCameraErrorCode = Error_EnvCamera;
  259. GetFunction()->SetUserDefineState(USER_MEDIA_ENVERRROR);
  260. Error = Error_Succeed;
  261. }
  262. else if (Error == Error_OptCamera)
  263. {
  264. SetCameraSysVar(CAMERA_OPT_ERROR);
  265. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("StartCamera = Error_OptCamera");
  266. m_nCameraErrorCode = Error_OptCamera;
  267. GetFunction()->SetUserDefineState(USER_MEDIA_OPTERROR);
  268. Error = Error_Succeed;
  269. }
  270. }
  271. else if(Error == Error_AllCamera)
  272. {
  273. SetCameraSysVar(CAMERA_BOTH_ERROR);
  274. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Camera State to CAMERA_BOTH_ERROR");
  275. m_nCameraErrorCode = Error_AllCamera;
  276. m_bStartCamera = FALSE;
  277. GetFunction()->SetUserDefineState(USER_MEDIA_ALLERROR);
  278. }
  279. else
  280. {
  281. SetCameraSysVar(Error);
  282. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Camera State to Other Error");
  283. m_nCameraErrorCode = Error;
  284. m_bStartCamera = FALSE;
  285. }
  286. }
  287. if (m_bStartCamera) {
  288. CSimpleStringA strSessionId;
  289. CSmartPointer<IEntityFunction> Func = GetFunction();
  290. Func->GetSysVar("SessionID", strSessionId);
  291. LogEvent(Severity_Middle, EVENT_MOD_BEGIN_RECORD, strSessionId);
  292. OnCameraStarted();
  293. }
  294. }
  295. LogEvent(Severity_Middle, LOG_EVT_MOD_MEDIACONTROLLER_STARTED_SUCCESS, "mediacontroller entity started successfully.");
  296. }
  297. DeviceTypeEnum CMediaControllerEntity::RvcGetDeviceType()
  298. {
  299. DeviceTypeEnum eType = eStand2sType;
  300. CSmartPointer<IEntityFunction> spFunction = GetFunction();
  301. CSystemStaticInfo stStaticinfo;
  302. spFunction->GetSystemStaticInfo(stStaticinfo);
  303. if (_stricmp(stStaticinfo.strMachineType, "RVC.Stand1SPlus") == 0) {
  304. eType = eStand1SPlusType;
  305. }
  306. else if (_stricmp(stStaticinfo.strMachineType, "RVC.PAD") == 0) {
  307. if (_stricmp(stStaticinfo.strSite, "CMB.FLB") == 0) {
  308. eType = eMobilePadType;
  309. }
  310. }
  311. else if (_stricmp(stStaticinfo.strMachineType, "RPM.Stand1S") == 0) {
  312. eType = eRpm1sType;
  313. }
  314. else if (stricmp(stStaticinfo.strMachineType, "RVC.CardStore") == 0 || stricmp(stStaticinfo.strMachineType, "RVC.CardPrinter") == 0) {
  315. eType = eCardStore;
  316. }
  317. else {
  318. eType = eStand2sType;
  319. }
  320. if (eType >= 0 && eType < sizeof(Device_Type_Table) / sizeof(char*)) {
  321. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("device type is %s.", Device_Type_Table[eType]);
  322. }
  323. return eType;
  324. }
  325. DeviceTypeEnum CMediaControllerEntity::RvcDeviceType()
  326. {
  327. return m_eDeviceType;
  328. }
  329. void CMediaControllerEntity::SetCameraSysVar(int n)
  330. {
  331. if (n==0){
  332. SetCameraSysVar(CAMERA_OPT_ERROR);
  333. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Camera State to CAMERA_OPT_ERROR");
  334. }
  335. else if (n==1){
  336. SetCameraSysVar(CAMERA_ENV_ERROR);
  337. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Camera State to CAMERA_ENV_ERROR");
  338. }
  339. else if (n==-1){
  340. SetCameraSysVar(CAMERA_BOTH_ERROR);
  341. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Camera State to CAMERA_BOTH_ERROR");
  342. }
  343. else if (n==3){
  344. SetCameraSysVar(CAMERA_NO_ERROR);
  345. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Camera State to CAMERA_NO_ERROR");
  346. }
  347. }
  348. ErrorCodeEnum CMediaControllerEntity::GetSalesRecordAudioParam()
  349. {
  350. CSmartPointer<IConfigInfo> spConfig;
  351. SpIniMappingTable table;
  352. int iPlayType = 0;
  353. ErrorCodeEnum Error = GetFunction()->OpenConfig(Config_CenterSetting, spConfig);
  354. if (Error == Error_Succeed){
  355. table.AddEntryBoolean("SalesRecorder", "IsRecordPCM", m_bRecordPCM, false);
  356. table.AddEntryInt("LocalMediaPlay", "PlayType", iPlayType, 0);
  357. Error= table.Load(spConfig);
  358. }
  359. if (0 != iPlayType){
  360. m_bSpeakerCap = false;
  361. }
  362. return Error;
  363. }
  364. void CMediaControllerEntity::UpdateMediaConfig()
  365. {
  366. if (m_strEnvCam.GetLength() > 1) {
  367. conf.strVideoEnv = m_strEnvCam;
  368. LogWarn(Severity_Low, Error_Debug, LOG_EVT_MEDIACONTROLLER_AUTO_MODIFY_ENV, CSimpleStringA::Format("use center setting env camera [%s].", m_strEnvCam.GetData()).GetData());
  369. }
  370. if (m_strOptCam.GetLength() > 1) {
  371. conf.strVideoOpt = m_strOptCam;
  372. LogWarn(Severity_Low, Error_Debug, LOG_EVT_MEDIACONTROLLER_AUTO_MODIFY_OPT, CSimpleStringA::Format("use center setting opt camera [%s].", m_strOptCam.GetData()).GetData());
  373. }
  374. if (m_strHandfreeIn.GetLength() > 1) {
  375. conf.strAudioIn = m_strHandfreeIn;
  376. }
  377. if (m_strHandfreeOut.GetLength() > 1) {
  378. conf.strAudioOut = m_strHandfreeOut;
  379. }
  380. }
  381. ErrorCodeEnum CMediaControllerEntity::AutoCorrectAudioConfig()
  382. {
  383. ErrorCodeEnum Error = Error_Param;
  384. if (eStand2sType != m_eDeviceType) {
  385. if (2 == m_iAudioInCount && 2 == m_iAudioOutCount) {
  386. if (NULL == strstr(m_strAudioIn.GetData(), conf.strAudioIn.GetData()) || NULL == strstr(m_strAudioOut.GetData(), conf.strAudioOut.GetData())) {
  387. conf.strAudioIn = m_strAudioIn;
  388. conf.strAudioOut = m_strAudioOut;
  389. LogWarn(Severity_Low, Error_Debug, LOG_EVT_MEDIACONTROLLER_AUDIO_CONFIG_AUTO_CORRECT, CSimpleStringA::Format("auto correct audio in(%s), audio out(%s).", conf.strAudioIn.GetData(), conf.strAudioOut.GetData()).GetData());
  390. }
  391. Error = Error_Succeed;
  392. }
  393. }
  394. return Error;
  395. }
  396. ErrorCodeEnum CMediaControllerEntity::GetMediaConfig()
  397. {
  398. ErrorCodeEnum Error = Error_Succeed;
  399. CSmartPointer<IConfigInfo> spConfig;
  400. SpIniMappingTable table;
  401. CSimpleStringA strEnv;
  402. CSimpleStringA strOpt;
  403. CSimpleStringA strHandfreeIn;
  404. CSimpleStringA strHandfreeOut;
  405. int itimeout = CAMERA_TIMEOUT;
  406. int iAudioLibType = 0;
  407. int iCamOnMode = 0;
  408. int iDelayTime = RVC_MAX_DELAY_TIME;
  409. int iRecordMode = 0;
  410. Error = GetFunction()->OpenConfig(Config_CenterSetting, spConfig);
  411. if (Error == Error_Succeed)
  412. {
  413. table.AddEntryString("MediaController", "EnvCam", strEnv, "$");
  414. table.AddEntryString("MediaController", "OptCam", strOpt, "$");
  415. table.AddEntryInt("MediaController", "CamTimeOut", itimeout, CAMERA_TIMEOUT);
  416. table.AddEntryString("SipPhone", "HandfreeIn", strHandfreeIn, "$");
  417. table.AddEntryString("SipPhone", "HandfreeOut", strHandfreeOut, "$");
  418. table.AddEntryInt("MediaController", "AudioLibType", iAudioLibType, 0);
  419. table.AddEntryInt("MediaController", "CamOnMode", iCamOnMode, 0);
  420. table.AddEntryInt("MediaController", "MaxDelayTime", iDelayTime, RVC_MAX_DELAY_TIME);
  421. table.AddEntryInt("InteractiveControl", "RecordMode", iRecordMode, 0);
  422. Error= table.Load(spConfig);
  423. }
  424. if (Error_Succeed != Error){
  425. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("get entity config from config failed!");
  426. }
  427. else{
  428. if (strEnv.GetLength() > 1){
  429. m_strEnvCam = strEnv;
  430. }
  431. if (strOpt.GetLength() > 1){
  432. m_strOptCam = strOpt;
  433. }
  434. if (itimeout >= CAMERA_MIN_TIMEOUT && itimeout <= CAMERA_TIMEOUT) {
  435. m_iCamTimeout = itimeout;
  436. }
  437. if (strHandfreeIn.GetLength() > 1) {
  438. m_strHandfreeIn = strHandfreeIn;
  439. }
  440. if (strHandfreeOut.GetLength() > 1) {
  441. m_strHandfreeOut = strHandfreeOut;
  442. }
  443. if (1 == iCamOnMode && 1 == iRecordMode) {
  444. m_iCamOnMode = 1;
  445. }
  446. if (iDelayTime > 0) {
  447. m_iDelayTime = iDelayTime;
  448. }
  449. }
  450. return Error;
  451. }
  452. ErrorCodeEnum CMediaControllerEntity::SetEnvCameraOnSysVar(const CSimpleStringA strOnState)
  453. {
  454. ErrorCodeEnum Error = Error_Succeed;
  455. CSmartPointer<IEntityFunction> spFunction = this->GetFunction();
  456. Error = spFunction->SetSysVar(SYSVAR_ENVCAMERAON, strOnState.GetData());
  457. return Error;
  458. }
  459. ErrorCodeEnum CMediaControllerEntity::SetCameraSysVar(const CSimpleStringA &newVal)
  460. {
  461. CSmartPointer<IEntityFunction> spFunction = this->GetFunction();
  462. CSimpleStringA val = newVal;
  463. if('B' == val[0]){
  464. LogWarn(Severity_Middle, Error_Debug, ERROR_MOD_MEDIACONTROLLER_CONFIG_ALLERROR, "all config cameras error");
  465. }
  466. if (eStand2sType == m_eDeviceType)
  467. {
  468. return spFunction->SetSysVar(SYSVAR_CAMERASTATE, (LPCTSTR)newVal);
  469. }
  470. switch (val[0])
  471. {
  472. case 'E':
  473. {
  474. if (!strstr((LPCTSTR)strFrontCam,";"))
  475. {
  476. val = val.Append((LPCTSTR)strFrontCam);
  477. }
  478. else
  479. {
  480. val = val.Append((LPCTSTR)strFrontCam.SubString(0,strFrontCam.IndexOf(";")));
  481. }
  482. }
  483. break;
  484. case 'O':
  485. if (!strstr((LPCTSTR)strRearCam,";"))
  486. {
  487. val = val.Append((LPCTSTR)strRearCam);
  488. }
  489. else
  490. {
  491. val = val.Append((LPCTSTR)strRearCam.SubString(0,strRearCam.IndexOf(";")));
  492. }
  493. break;
  494. case 'B':
  495. val = val.Append("内置前、后");
  496. break;
  497. case 'N':
  498. case 'I':
  499. default:
  500. break;
  501. }
  502. return spFunction->SetSysVar(SYSVAR_CAMERASTATE, (LPCTSTR)val);
  503. }
  504. void CMediaControllerEntity::OnPreClose(EntityCloseCauseEnum eCloseCause,CSmartPointer<ITransactionContext> pTransactionContext)
  505. {
  506. CSmartPointer<IEntityFunction> spFunction = GetFunction();
  507. for (int i = 0; i < m_arrListener.GetCount(); ++i) {
  508. spFunction->UnsubscribeLog(m_arrListener[i]);
  509. }
  510. spFunction->UnregistSysVarEvent(SYSVAR_CALLTYPE);
  511. spFunction->UnregistSysVarEvent(SYSVAR_CALLSTATE);
  512. if (m_capture) {
  513. capture_stop(m_capture);
  514. capture_destroy(m_capture);
  515. m_capture = NULL;
  516. }
  517. if (m_salesaudio_capture){
  518. salesrecord_audio_capture_stop(m_salesaudio_capture);
  519. salesaudio_capture_destroy(m_salesaudio_capture);
  520. m_salesaudio_capture = NULL;
  521. }
  522. if (NULL != m_pAudioRenderObj){
  523. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("destroy audio render obj,and it's addr is 0x%08x.", m_pAudioRenderObj);
  524. DestroyIAudioRenderObj(m_pAudioRenderObj);
  525. }
  526. capture_lib_term();
  527. pTransactionContext->SendAnswer(Error_Succeed);
  528. }
  529. void CMediaControllerEntity::OnTimeout(DWORD dwTimerID)
  530. {
  531. if (dwTimerID == 1) {
  532. if (!m_capture) {
  533. return;
  534. }
  535. if (!m_bStartCamera) {
  536. return;
  537. }
  538. OnTimeCameraStatusCheck();
  539. }
  540. else if (2 == dwTimerID) {
  541. if (FALSE == m_bConnectedAssist) {
  542. if (Error_Succeed == ConnectAssistChannel()) {
  543. m_bConnectedAssist = TRUE;
  544. }
  545. }
  546. if (TRUE == m_bConnectedAssist) {
  547. GetFunction()->KillTimer(2);
  548. }
  549. }
  550. else if (3 == dwTimerID) {
  551. if (m_bStartCamera) {
  552. CSimpleStringA strCallState("");
  553. if (Error_Succeed == GetFunction()->GetSysVar(SYSVAR_CALLSTATE, strCallState)) {
  554. if (strCallState.Compare("O") == 0) {
  555. OnCameraStopped();
  556. if (m_capture) {
  557. GetFunction()->KillTimer(1);
  558. capture_stop(m_capture);
  559. capture_destroy(m_capture);
  560. m_capture = NULL;
  561. }
  562. m_bStartCamera = FALSE;
  563. if (Error_Succeed != GetFunction()->KillTimer(3)) {
  564. LogWarn(Severity_Low, Error_Debug, LOG_EVT_MEDIACONTROLLER_KILLTIMER_ERROR, "Stop Camera, KillTimer 3 failed.");
  565. }
  566. }
  567. }
  568. }
  569. }
  570. }
  571. void CMediaControllerEntity::OnTimeCameraStatusCheck()
  572. {
  573. int env_n = -1, opt_n = -1;
  574. unsigned int nLastEnvTime = 0, nLastOptTime = 0;
  575. bool bEnvTimeout = false;
  576. bool bOptTimeout = false;
  577. BOOL bIsPadType = FALSE;
  578. if (eMobilePadType == m_eDeviceType){
  579. bIsPadType = TRUE;
  580. }
  581. capture_detect_camera_bug(m_capture, &env_n, &opt_n, bIsPadType);
  582. capture_get_last_frametime(m_capture, &nLastEnvTime, &nLastOptTime, bIsPadType);
  583. if (env_n == 0) {
  584. if (m_iEnvEmptyTimes < CAMERA_BUG_THRESHOLD){
  585. m_iEnvEmptyTimes++;
  586. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("get env camera picture fail,Times=%d",m_iEnvEmptyTimes);
  587. }
  588. }
  589. else if (env_n == -1){
  590. m_iEnvEmptyTimes = CAMERA_BUG_THRESHOLD;
  591. }
  592. else {
  593. if (m_iEnvEmptyTimes == CAMERA_BUG_THRESHOLD){
  594. }
  595. m_iEnvEmptyTimes = 0;
  596. }
  597. //env图像是否超时
  598. if(nLastEnvTime > 0)
  599. {
  600. if(((y2k_time_now()-nLastEnvTime) > m_iCamTimeout)&&!bEnvTimeout)
  601. {
  602. bEnvTimeout = true;
  603. }
  604. else if (((y2k_time_now()-nLastEnvTime) < m_iCamTimeout)&&bEnvTimeout)
  605. {
  606. bEnvTimeout = false;
  607. }
  608. }
  609. //env是否30S没有图像或者图像20秒没有更新
  610. if(((m_iEnvEmptyTimes == CAMERA_BUG_THRESHOLD)||bEnvTimeout)&&(m_nCameraErrorCode!=Error_EnvCamera)&&(m_nCameraErrorCode!=Error_AllCamera))
  611. {
  612. char strMessage[MAX_PATH*2] = {0};
  613. get_camera_exception_message(strMessage, MAX_PATH*2, conf.strVideoEnv, "Env camera bug detected!");
  614. char strInfo[MAX_PATH*2] = {0};
  615. if (NULL != m_capture && NULL != m_capture->env_video) {
  616. _snprintf(strInfo, MAX_PATH * 2, "%s and cpu usage is %f, and current time = %u, env last capture time = %u, video queue LastEnvTime = %u.", strMessage, GetSystemCpuUsage(), y2k_time_now(), m_capture->env_video->ulastcaptime, nLastEnvTime);
  617. }
  618. else {
  619. _snprintf(strInfo, MAX_PATH * 2, "%s and cpu usage is %f.", strMessage, GetSystemCpuUsage());
  620. }
  621. LogWarn(Severity_Middle, Error_Hardware, ERROR_MOD_MEDIACONTROLLER_ENVCAMERA_BUG, strInfo);
  622. if (eStand2sType != m_eDeviceType){
  623. if (m_bNeedPost){
  624. LogWarn(Severity_Middle, Error_Debug, ERROR_MOD_MEDIACONTROLLER_CONFIG_ALLERROR, "device type is pad, camera error for can't get video from it.");
  625. m_bNeedPost = false;
  626. }
  627. }
  628. if ((ePadtype == m_eDeviceType)||(eMobilePadType == m_eDeviceType)||(eDesk2SType == m_eDeviceType)||(eDesk1SType == m_eDeviceType)||(eDesk2SIntegratedType == m_eDeviceType))
  629. {
  630. m_nCameraErrorCode = Error_AllCamera;
  631. ChangeSysvar(Error_EnvCamera);
  632. if (!m_bIsRemoteRecord) {
  633. RealSelfCheck();
  634. }
  635. return;
  636. }
  637. else{
  638. if (m_nCameraErrorCode == Error_Succeed){
  639. m_nCameraErrorCode = Error_EnvCamera;
  640. ChangeSysvar(m_nCameraErrorCode);
  641. }
  642. else if (m_nCameraErrorCode == Error_OptCamera){
  643. m_nCameraErrorCode = Error_AllCamera;
  644. ChangeSysvar(m_nCameraErrorCode);
  645. if (!m_bIsRemoteRecord) {
  646. RealSelfCheck();
  647. }
  648. return;
  649. }
  650. }
  651. }
  652. else if((m_iEnvEmptyTimes != CAMERA_BUG_THRESHOLD)&&!bEnvTimeout&&((m_nCameraErrorCode == Error_EnvCamera)||(m_nCameraErrorCode == Error_AllCamera)))
  653. {
  654. if ((ePadtype == m_eDeviceType)||(eMobilePadType == m_eDeviceType)||(eDesk2SType == m_eDeviceType)||(eDesk1SType == m_eDeviceType)||(eDesk2SIntegratedType == m_eDeviceType))
  655. {
  656. m_nCameraErrorCode = Error_Succeed;
  657. ChangeSysvar(m_nCameraErrorCode);
  658. }
  659. else{
  660. if (m_nCameraErrorCode == Error_EnvCamera){
  661. m_nCameraErrorCode = Error_Succeed;
  662. ChangeSysvar(m_nCameraErrorCode);
  663. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("changeSysvar to No_Error");
  664. }
  665. else if (m_nCameraErrorCode == Error_AllCamera){
  666. m_nCameraErrorCode = Error_OptCamera;
  667. ChangeSysvar(m_nCameraErrorCode);
  668. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("changeSysvar to Opt_Error");
  669. }
  670. }
  671. }
  672. //opt是否没有图像
  673. if (eStand2sType == m_eDeviceType)
  674. {
  675. if (opt_n == 0)
  676. {
  677. if (m_iOptEmptyTimes < CAMERA_BUG_THRESHOLD)
  678. {
  679. m_iOptEmptyTimes++;
  680. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("get opt camera picture fail, Times=%d",m_iOptEmptyTimes);
  681. }
  682. }
  683. else if (opt_n == -1)
  684. {
  685. m_iOptEmptyTimes = CAMERA_BUG_THRESHOLD;
  686. }
  687. else
  688. {
  689. if (m_iOptEmptyTimes == CAMERA_BUG_THRESHOLD)
  690. {
  691. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("opt camera get right!");
  692. }
  693. m_iOptEmptyTimes = 0;
  694. }
  695. }
  696. //opt图像是否超时
  697. if((nLastOptTime > 0)&&(eStand2sType == m_eDeviceType))
  698. {
  699. if(((y2k_time_now()-nLastOptTime) > m_iCamTimeout)&&!bOptTimeout)
  700. {
  701. bOptTimeout = true;
  702. }
  703. else if (((y2k_time_now()-nLastOptTime) < m_iCamTimeout)&&bOptTimeout)
  704. {
  705. bOptTimeout = false;
  706. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("change opt camera from bOptTimeout to OK");
  707. }
  708. }
  709. //opt是否100S没有图像或者图像20秒没有更新
  710. if(((m_iOptEmptyTimes == CAMERA_BUG_THRESHOLD)||bOptTimeout)&&(m_nCameraErrorCode!=Error_OptCamera)&&(m_nCameraErrorCode!=Error_AllCamera)&&(eStand2sType == m_eDeviceType))
  711. {
  712. char strMessage[MAX_PATH*2] = {0};
  713. get_camera_exception_message(strMessage, MAX_PATH*2, conf.strVideoOpt, "Opt camera bug detected!");
  714. char strInfo[MAX_PATH*2] = {0};
  715. if (NULL != m_capture && NULL != m_capture->opt_video) {
  716. _snprintf(strInfo, MAX_PATH * 2, "%s and cpu usage is %f, and current time = %u, opt last capture time = %u, video queue LastOptTime = %u.", strMessage, GetSystemCpuUsage(), y2k_time_now(), m_capture->opt_video->ulastcaptime, nLastOptTime);
  717. }
  718. else {
  719. _snprintf(strInfo, MAX_PATH * 2, "%s and cpu usage is %f.", strMessage, GetSystemCpuUsage());
  720. }
  721. LogWarn(Severity_Middle, Error_Hardware, ERROR_MOD_MEDIACONTROLLER_OPECAMERA_BUG, strInfo);
  722. if (m_nCameraErrorCode == Error_Succeed)
  723. {
  724. m_nCameraErrorCode = Error_OptCamera;
  725. ChangeSysvar(m_nCameraErrorCode);
  726. }
  727. else if (m_nCameraErrorCode == Error_EnvCamera)
  728. {
  729. m_nCameraErrorCode = Error_AllCamera;
  730. ChangeSysvar(m_nCameraErrorCode);
  731. if (!m_bIsRemoteRecord) {
  732. RealSelfCheck();
  733. }
  734. return;
  735. }
  736. }
  737. else if((m_iOptEmptyTimes != CAMERA_BUG_THRESHOLD)&&!bOptTimeout&&((m_nCameraErrorCode == Error_OptCamera)||(m_nCameraErrorCode == Error_AllCamera))&&(eStand2sType == m_eDeviceType))
  738. {
  739. if (m_nCameraErrorCode == Error_OptCamera)
  740. {
  741. m_nCameraErrorCode = Error_Succeed;
  742. ChangeSysvar(m_nCameraErrorCode);
  743. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("changeSysvar to No_Error");
  744. }
  745. else if (m_nCameraErrorCode == Error_AllCamera)
  746. {
  747. m_nCameraErrorCode = Error_EnvCamera;
  748. ChangeSysvar(m_nCameraErrorCode);
  749. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("changeSysvar to Env_Error");
  750. }
  751. }
  752. //重启摄像头
  753. if((m_nCameraErrorCode == Error_EnvCamera)&&(m_nEnvCameraRestartNum<CAMERA_RESTARTNUM))
  754. {
  755. if (ReStartCamera(ENVCAMERA) != Error_Succeed){
  756. m_nEnvCameraRestartNum++;
  757. }
  758. else
  759. {
  760. m_nEnvCameraRestartNum = 0;
  761. m_nCameraErrorCode = Error_Succeed;
  762. ChangeSysvar(m_nCameraErrorCode);
  763. m_iEnvEmptyTimes = 0;
  764. bEnvTimeout = false;
  765. //重置上次取图像时间,防止出现重启摄像头5s内取不到图像不断重启摄像头问题
  766. nLastEnvTime = y2k_time_now();
  767. }
  768. }
  769. else if((m_nCameraErrorCode == Error_OptCamera)&&(m_nOptCameraRestartNum<CAMERA_RESTARTNUM)&&(eStand2sType == m_eDeviceType))
  770. {
  771. if (ReStartCamera(OPTCAMERA) != Error_Succeed) {
  772. m_nOptCameraRestartNum++;
  773. }
  774. else
  775. {
  776. m_nOptCameraRestartNum = 0;
  777. m_nCameraErrorCode = Error_Succeed;
  778. ChangeSysvar(m_nCameraErrorCode);
  779. m_iOptEmptyTimes = 0;
  780. bOptTimeout = false;
  781. //重置上次取图像时间,防止出现重启摄像头5s内取不到图像不断重启摄像头问题
  782. nLastOptTime = y2k_time_now();
  783. }
  784. }
  785. else if (m_nCameraErrorCode == Error_AllCamera)
  786. {
  787. if (m_nEnvCameraRestartNum<CAMERA_RESTARTNUM)
  788. {
  789. if (ReStartCamera(ENVCAMERA) != Error_Succeed)
  790. m_nEnvCameraRestartNum++;
  791. else
  792. {
  793. m_nEnvCameraRestartNum = 0;
  794. m_nCameraErrorCode = Error_OptCamera;
  795. ChangeSysvar(m_nCameraErrorCode);
  796. m_iEnvEmptyTimes = 0;
  797. bEnvTimeout = false;
  798. }
  799. }
  800. if((m_nOptCameraRestartNum<CAMERA_RESTARTNUM)&&(eStand2sType == m_eDeviceType))
  801. {
  802. if (ReStartCamera(OPTCAMERA) != Error_Succeed)
  803. m_nOptCameraRestartNum++;
  804. else
  805. {
  806. m_nOptCameraRestartNum = 0;
  807. m_iOptEmptyTimes = 0;
  808. bOptTimeout = false;
  809. if (m_nCameraErrorCode == Error_AllCamera)
  810. {
  811. m_nCameraErrorCode = Error_EnvCamera;
  812. ChangeSysvar(m_nCameraErrorCode);
  813. }
  814. else
  815. {
  816. m_nCameraErrorCode = Error_Succeed;
  817. ChangeSysvar(m_nCameraErrorCode);
  818. }
  819. }
  820. }
  821. }
  822. }
  823. bool CMediaControllerEntity::SetAutoBright(ErrorCodeEnum nCode)
  824. {
  825. return capture_set_autobrightness(m_capture,nCode);
  826. }
  827. //camera gain adjust
  828. void CMediaControllerEntity::OnReceivePkt(int sub_type, const char *buffer, int size)
  829. {
  830. if (sub_type == ACM_SET_CAMERABRIGHT)
  831. {
  832. if (m_bStartCamera)
  833. {
  834. if (eStand2sType == m_eDeviceType)
  835. {
  836. //vamera bright adj
  837. CCameraBrightValue num;
  838. SpBuffer buf;
  839. buf.OpenRead(buffer,size);
  840. num.Serialize(buf);
  841. if (capture_adj_brightness(m_capture,num.nValue,m_nCameraErrorCode) == true)
  842. {
  843. SendCameraBright();
  844. }
  845. else
  846. {
  847. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("ACM_SET_CAMERABRIGHT fail!");
  848. }
  849. }
  850. else
  851. {
  852. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("pad type cannot adj brightness");
  853. }
  854. }
  855. else
  856. {
  857. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("the camera not start!");
  858. }
  859. }
  860. }
  861. ErrorCodeEnum CMediaControllerEntity::RealSelfCheck()
  862. {
  863. ErrorCodeEnum Error = Error_Succeed;
  864. if (m_pSelfcheckClient)
  865. {
  866. SelfCheckerService_RealCheck_Req req;
  867. req.name = GetEntityName();
  868. SelfCheckerService_RealCheck_Ans ans;
  869. DWORD Timeout = 500;
  870. Error = (*m_pSelfcheckClient)(EntityResource::getLink().upgradeLink())->RealCheck(req,ans,Timeout);
  871. if (Error!=Error_Succeed)
  872. {
  873. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("RealSelfcheck fail!");
  874. }
  875. else
  876. {
  877. LogWarn(Severity_Low, Error_Debug, LOG_EVT_MEDIACONTROLLER_REAL_SELF_CHECK, "media controller entity auto restart.");
  878. }
  879. }
  880. return Error;
  881. }
  882. void CMediaControllerEntity::SendCameraBright()
  883. {
  884. if (m_nSysCallType == 0)
  885. {
  886. ChannelService_Send_Info Info;
  887. Info.compress = false;
  888. Info.encrypt = false;
  889. Info.type = ACM_TYPE_DEVICE;
  890. Info.id = 0;
  891. Info.sub_type = ACM_CAMERA_BRIGHT;
  892. Info.data.Alloc(sizeof(int));
  893. SpBuffer buf;
  894. buf.OpenWrite();
  895. int nValue = 0;
  896. bool rslt = true;
  897. nValue = capture_get_brightness(m_capture,m_nCameraErrorCode);
  898. if (nValue >= 0)
  899. {
  900. buf & nValue;
  901. Info.data = buf.ToBlob();
  902. m_pMediaControllerChannel->Send(Info);
  903. }
  904. else
  905. {
  906. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("send cur camera bright value Fail!");
  907. }
  908. }
  909. else
  910. {
  911. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("cur call type cannot send pkt");
  912. }
  913. }
  914. ErrorCodeEnum CMediaControllerEntity::StartCameras()
  915. {
  916. ErrorCodeEnum Error = Error_Succeed;
  917. if (FALSE == m_bStartCamera){
  918. Error = StartCamera();
  919. if (Error_Succeed == Error){
  920. SetCameraSysVar(CAMERA_NO_ERROR);
  921. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Camera State to CAMERA_NO_ERROR");
  922. m_bStartCamera = TRUE;
  923. }
  924. }
  925. else{
  926. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("camera already start.");
  927. }
  928. return Error;
  929. }
  930. ErrorCodeEnum CMediaControllerEntity::StopCameras()
  931. {
  932. if (m_capture){
  933. GetFunction()->KillTimer(1);
  934. capture_stop(m_capture);
  935. capture_destroy(m_capture);
  936. m_capture = NULL;
  937. }
  938. m_bStartCamera = FALSE;
  939. return Error_Succeed;
  940. }
  941. ErrorCodeEnum CMediaControllerEntity::StopCamerasAndRecord()
  942. {
  943. LogEvent(Severity_Middle, EVENT_MOD_PAUSE_RECORD, "pause record.");
  944. ErrorCodeEnum CamRet = StopCameras();
  945. return CamRet;
  946. }
  947. ErrorCodeEnum CMediaControllerEntity::StartCamerasAndRecord()
  948. {
  949. ErrorCodeEnum CamRet = StartCameras();
  950. LogEvent(Severity_Middle, EVENT_MOD_CONTINUE_RECORD, "continue record.");
  951. return CamRet;
  952. }
  953. ErrorCodeEnum CMediaControllerEntity::LoadRunConfig(CSimpleStringA& frontcam, CSimpleStringA& rearcam)
  954. {
  955. CSmartPointer<IEntityFunction> spFunction = GetFunction();
  956. CSmartPointer<IConfigInfo> spConfig;
  957. ErrorCodeEnum Error = spFunction->OpenConfig(Config_Run, spConfig);
  958. if (Error == Error_Succeed) {
  959. SpIniMappingTable table;
  960. table.AddEntryString("Video", "FrontCamera", frontcam, "$");
  961. table.AddEntryString("Video", "RearCamera", rearcam, "$");
  962. Error = table.Load(spConfig);
  963. if (Error != Error_Succeed)
  964. {
  965. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("[dbg] failed to load run config.");
  966. }
  967. }
  968. else {
  969. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("[dbg] failed to open run config.");
  970. }
  971. return Error;
  972. }
  973. ErrorCodeEnum CMediaControllerEntity::CheckConfigCameraName(capture_config_t *conf)
  974. {
  975. ErrorCodeEnum Error = Error_Succeed;
  976. int EnvConfigNameError = 0; //0:环境摄像头配置名能成功打开 -1:环境摄像头配置名不能打开 1:未配置环境摄像头名字
  977. int OptConfigNameError = 0; //0:操作摄像头配置名能成功打开 -1:操作摄像头配置名不能打开 1:未配置操作摄像头名字
  978. //check env device
  979. if (conf->strVideoEnv.GetLength() > 1)
  980. { // is not "$"
  981. conf->video_env_dev = capture_get_video_device_id(conf->strVideoEnv.GetData());
  982. if (conf->video_env_dev == -1)
  983. {
  984. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("find strVideoEnv:%s(-1)",(LPCTSTR)conf->strVideoEnv);
  985. EnvConfigNameError = -1;
  986. }
  987. }
  988. else {
  989. conf->video_env_dev = -1;
  990. EnvConfigNameError = 1;
  991. }
  992. //check opt device
  993. if (conf->strVideoOpt.GetLength() > 1)
  994. { // is not "$"
  995. conf->video_opt_dev = capture_get_video_device_id(conf->strVideoOpt.GetData());
  996. if (conf->video_opt_dev == -1)
  997. {
  998. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("find strVideoOpt:%s(-1)",(LPCTSTR)conf->strVideoOpt);
  999. OptConfigNameError = -1;
  1000. }
  1001. }
  1002. else
  1003. {
  1004. conf->video_opt_dev = -1;
  1005. OptConfigNameError = 1;
  1006. }
  1007. //环境摄像头配置名不能打开
  1008. if (EnvConfigNameError == -1){
  1009. //操作摄像头配置名不能打开,此时表明摄像头都不可用
  1010. if(OptConfigNameError == -1){
  1011. Error = Error_AllCamera;
  1012. }
  1013. //未配置操作摄像头名字or操作摄像头配置名能打开,此时表明只有操作摄像头OK
  1014. else{
  1015. Error = Error_EnvCamera;
  1016. }
  1017. }
  1018. //环境摄像头配置名能打开
  1019. else if (EnvConfigNameError == 0){
  1020. //操作摄像头配置名不能打开,此时表明只有环境摄像头OK
  1021. if (OptConfigNameError == -1){
  1022. Error = Error_OptCamera;
  1023. }
  1024. //环境摄像头配置名能打开,未配置操作摄像头名字,此时也认为摄像头都OK(无操作摄像头场景)
  1025. }
  1026. //环境摄像头未配置
  1027. else {
  1028. //操作摄像头配置名不能打开,此时表明只有操作摄像头OK
  1029. if(OptConfigNameError == -1){
  1030. Error = Error_OptCamera;
  1031. }
  1032. //操作摄像头未配置,此时表明摄像头都不可用
  1033. else if (OptConfigNameError == 1){
  1034. Error = Error_AllCamera;
  1035. }
  1036. //操作摄像头名字能打开,此时也认为摄像头都OK(无环境摄像头场景)
  1037. }
  1038. return Error;
  1039. }
  1040. bool CMediaControllerEntity::IsNamedDeviceHasInserted(const char* strDeviceName)
  1041. {
  1042. LOG_FUNCTION();
  1043. bool bRet = false;
  1044. if (NULL == strDeviceName){
  1045. return bRet;
  1046. }
  1047. if (capture_get_audio_device_id(true , strDeviceName) >= 0){
  1048. if (capture_get_audio_device_id(false, strDeviceName) >= 0){
  1049. bRet = true;
  1050. }
  1051. }
  1052. return bRet;
  1053. }
  1054. bool CMediaControllerEntity::IsMatchSpecifyedAudioDevice(CSimpleStringA strAudioIn, CSimpleStringA strAudioOut)
  1055. {
  1056. bool bRet = false;
  1057. if (m_strAudioPriority.GetLength() > 0){
  1058. CAutoArray<CSimpleStringA> strArr = m_strAudioPriority.Split('|');
  1059. int iCount = strArr.GetCount();
  1060. for (int i = 0; i < iCount; i++){
  1061. if (strAudioIn.IndexOf(strArr[i].GetData()) >= 0){
  1062. if (strAudioOut.IndexOf(strArr[i].GetData()) >= 0){
  1063. bRet = true;
  1064. break;
  1065. }
  1066. }
  1067. }
  1068. }
  1069. return bRet;
  1070. }
  1071. int CMediaControllerEntity::UpdateAudioDeviceConfig(capture_config_t *conf)
  1072. {
  1073. int iCode = -1;
  1074. if (m_strAudioPriority.GetLength() > 0){
  1075. CAutoArray<CSimpleStringA> strArr = m_strAudioPriority.Split('|');
  1076. int iCount = strArr.GetCount();
  1077. for (int i = 0; i < iCount; i++){
  1078. if (IsNamedDeviceHasInserted(strArr[i].GetData())){
  1079. conf->strAudioOut = strArr[i];
  1080. conf->strAudioIn = strArr[i];
  1081. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("success reset audio in device to %s.", strArr[i].GetData());
  1082. iCode = 0;
  1083. break;
  1084. }
  1085. }
  1086. }
  1087. return iCode;
  1088. }
  1089. bool CMediaControllerEntity::CheckAudioDeviceConfigure(capture_config_t *conf)
  1090. {
  1091. bool bRet = false;
  1092. if (NULL == conf){
  1093. return bRet;
  1094. }
  1095. if (capture_get_audio_device_id(true, conf->strAudioIn) >= 0){
  1096. if (capture_get_audio_device_id(false, conf->strAudioOut) >= 0){
  1097. bRet = true;
  1098. }
  1099. }
  1100. return bRet;
  1101. }
  1102. ErrorCodeEnum CMediaControllerEntity::GetSalesAudioConfig(rvc_audio_capture_config_t *conf, bool bRemoteRecord)
  1103. {
  1104. CSmartPointer<IEntityFunction> spFunction = GetFunction();
  1105. CSmartPointer<IConfigInfo> spConfig;
  1106. SpIniMappingTable table;
  1107. ErrorCodeEnum Error = spFunction->OpenConfig(Config_Root, spConfig);
  1108. if (Error == Error_Succeed) {
  1109. CSimpleStringA strAudioInDevice;
  1110. table.AddEntryString("Audio", "sales_record_in_dev", strAudioInDevice, "$");
  1111. Error = table.Load(spConfig);
  1112. if (Error == Error_Succeed) {
  1113. conf->audio_capture_period = CAPTURE_FRAME_TIME;
  1114. conf->audio_capture_samplerate = CAPTURE_CLOCK;
  1115. conf->strAudioIn = this->conf.strAudioIn;
  1116. conf->strAudioOut = this->conf.strAudioOut;
  1117. if (strAudioInDevice.GetLength() > 0) {
  1118. conf->strAudioIn = strAudioInDevice;
  1119. }
  1120. }
  1121. else {
  1122. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("load sales audio device config failed!");
  1123. }
  1124. }
  1125. else {
  1126. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("open sales audio device config failed!");
  1127. }
  1128. if (Error_Succeed != Error) {
  1129. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("get sales audio device info failed, now get from default value.");
  1130. conf->strAudioIn = this->conf.strAudioIn;
  1131. conf->audio_capture_period = CAPTURE_FRAME_TIME;
  1132. conf->audio_capture_samplerate = CAPTURE_CLOCK;
  1133. Error = Error_Succeed;
  1134. }
  1135. if (true == bRemoteRecord) {
  1136. conf->audio_capture_samplerate = CAPTURE_CLOCK;
  1137. }
  1138. return Error;
  1139. }
  1140. static CSimpleStringA generateCameraInfosJson(CSimpleStringA strEnv, CSimpleStringA strOpt, int iEnv, int iOpt, int iMtu)
  1141. {
  1142. return CSimpleStringA::Format("{\"EnvCamera\":\"%s\",\"OptCamera\":\"%s\",\"EnvRotate\":\"%d\",\"OptRotate\":\"%d\",\"mtu\":\"%d\"}",
  1143. strEnv.GetData(), strOpt.GetData(), iEnv, iOpt, iMtu);
  1144. }
  1145. ErrorCodeEnum CMediaControllerEntity::LoadConfig(capture_config_t *conf)
  1146. {
  1147. CSmartPointer<IEntityFunction> spFunction = GetFunction();
  1148. CSmartPointer<IConfigInfo> spConfig;
  1149. SpIniMappingTable table;
  1150. ErrorCodeEnum Error = spFunction->OpenConfig(Config_Root, spConfig);
  1151. if (Error == Error_Succeed) {
  1152. int imtu = 0;
  1153. table.AddEntryString("Audio", "handfree_in_dev", conf->strAudioIn, "$");
  1154. table.AddEntryString("Audio", "handfree_out_dev", conf->strAudioOut, "$");
  1155. table.AddEntryString("Video", "EnvCamera", conf->strVideoEnv, "$");
  1156. table.AddEntryString("Video", "OptCamera", conf->strVideoOpt, "$");
  1157. table.AddEntryInt("Video", "EnvRotate", conf->video_env_rotate, 0);
  1158. table.AddEntryInt("Video", "OptRotate", conf->video_opt_rotate, 0);
  1159. table.AddEntryInt("Video", "mtu", imtu, 0);
  1160. Error = table.Load(spConfig);
  1161. if (Error == Error_Succeed)
  1162. {
  1163. //进行Camera路径名自纠正后再检查
  1164. if (m_strEnvCam.GetLength() > 1 || m_strOptCam.GetLength() > 1 || m_strHandfreeIn.GetLength() > 1 || m_strHandfreeOut.GetLength() > 1){
  1165. UpdateMediaConfig();
  1166. }
  1167. AutoCorrectAudioConfig();
  1168. LogWarn(Severity_Low, Error_Debug, ERROR_MOD_MEDIACONTROLLER_ENV_CAMERA_INFO, conf->strVideoEnv.GetData());
  1169. LogWarn(Severity_Low, Error_Debug, ERROR_MOD_MEDIACONTROLLER_OPT_CAMERA_INFO, conf->strVideoOpt.GetData());
  1170. LogWarn(Severity_Low, Error_Debug, LOG_EVT_MEDIACONTROLLER_CAMERA_INFOS, generateCameraInfosJson(conf->strVideoEnv, conf->strVideoOpt, conf->video_env_rotate, conf->video_opt_rotate, imtu).GetData());
  1171. Error = CheckConfigCameraName(conf);
  1172. if (Error == Error_EnvCamera || Error == Error_AllCamera){
  1173. char strMessage[MAX_PATH*2] = {0};
  1174. get_camera_exception_message(strMessage, MAX_PATH*2, conf->strVideoEnv ,"env camera start error,please check config file or device.");
  1175. LogWarn(Severity_Middle,Error_DevMedia,ERROR_MOD_MEDIACONTROLLER_ENVCAM_INITFAIL,strMessage);
  1176. } else if (Error == Error_OptCamera){
  1177. char strMessage[MAX_PATH*2] = {0};
  1178. get_camera_exception_message(strMessage, MAX_PATH*2, conf->strVideoOpt, "operation camera start error,please check config file or device.");
  1179. LogWarn(Severity_Middle,Error_DevMedia,ERROR_MOD_MEDIACONTROLLER_OPTCAM_INITFAIL, strMessage);
  1180. }
  1181. }
  1182. else
  1183. {
  1184. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("load config failed!");
  1185. }
  1186. }
  1187. else
  1188. {
  1189. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("open config failed!");
  1190. }
  1191. return Error;
  1192. }
  1193. void CMediaControllerEntity::OnExternalCameraSwitchFailed(const char* pszFailedMsg)
  1194. {
  1195. // 广播给业务系统
  1196. //ExternalCameraSwitchFailed evt;
  1197. //evt.failedmsg = CSimpleStringA2W(pszFailedMsg);
  1198. //SpSendBroadcast(GetFunction(), SP_MSG_OF(ExternalCameraSwitchFailed), SP_MSG_SIG_OF(ExternalCameraSwitchFailed), evt);
  1199. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("[dbg] ExternalCameraSwitchFailed broadcast sent!");
  1200. CSmartPointer<IEntityFunction> Func = GetFunction();
  1201. CSimpleStringA strValue;
  1202. Func->GetSysVar("DesktopType", strValue);
  1203. if (strValue == CSimpleStringA("U")) {
  1204. #ifdef RVC_OS_WIN
  1205. MessageBoxA(NULL, pszFailedMsg, NULL, MB_SYSTEMMODAL);
  1206. #else
  1207. #endif // RVC_OS_WIN
  1208. }
  1209. }
  1210. void CMediaControllerEntity::OnLog( const CAutoArray<CUUID> &SubIDs, const CUUID nLogID,const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
  1211. const DWORD dwSysError,const DWORD dwUserCode,const DWORD dwEntityInstanceID, const WORD wEntityDevelID,
  1212. const CAutoArray<DWORD> &Param, const char *pszEntityName, const char *pszModuleName,const char *pszMessage, const linkContext& pLinkInfo)
  1213. {
  1214. switch (dwUserCode)
  1215. {
  1216. case MOD_EVENT_SNAPSHOT_START_CAPTURE_ENVOPT:
  1217. {
  1218. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("recv MOD_EVENT_SNAPSHOT_START_CAPTURE_ENVOPT");
  1219. InterlockedCompareExchange(&m_lCaptureEnvOptCount, 3, 0);
  1220. }
  1221. break;
  1222. case MOD_EVENT_SNAPSHOT_START_CAPTURE_ENV:
  1223. {
  1224. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("recv MOD_EVENT_SNAPSHOT_START_CAPTURE_ENV");
  1225. InterlockedCompareExchange(&m_lCaptureEnvCount, 1, 0);
  1226. }
  1227. break;
  1228. case MOD_EVENT_SNAPSHOT_START_CAPTURE_OPT:
  1229. {
  1230. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("recv MOD_EVENT_SNAPSHOT_START_CAPTURE_OPT");
  1231. InterlockedCompareExchange(&m_lCaptureOptCount, 1, 0);
  1232. }
  1233. break;
  1234. case LOG_EVT_MOD_ASSISCHAN_STARTED_SUCCESS:
  1235. {
  1236. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("recv LOG_EVT_MOD_ASSISCHAN_STARTED_SUCCESS");
  1237. Sleep(800);
  1238. if (m_pMediaControllerChannel != NULL){
  1239. m_pMediaControllerChannel->GetFunction()->CloseSession();
  1240. m_pMediaControllerChannel->SafeDelete();
  1241. m_pMediaControllerChannel = NULL;
  1242. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Close AssistChannel Session ");
  1243. m_bConnectedAssist = FALSE;
  1244. }
  1245. if (Error_Succeed == ConnectAssistChannel()){
  1246. m_bConnectedAssist = TRUE;
  1247. }
  1248. else {
  1249. GetFunction()->SetTimer(2, this, 3350);
  1250. }
  1251. }
  1252. break;
  1253. case EVENT_MOD_CUSTOMERAWARE_BEGIN:
  1254. {
  1255. m_bCustomerwareBegin = true;
  1256. if (1 != m_iCamOnMode)
  1257. {
  1258. if (!m_bStartCamera && !m_bExternControlCam)
  1259. {
  1260. if (eDesk2SIntegratedType != m_eDeviceType) {
  1261. StartCameraAndSetSysVar();
  1262. }
  1263. else {
  1264. CSimpleStringA strOccupy;
  1265. if (Error_Succeed == GetFunction()->GetSysVar(SYSVAR_CAMERAOCCUPY, strOccupy)) {
  1266. if (strOccupy.IsNullOrEmpty()) {
  1267. StartCameraAndSetSysVar();
  1268. }
  1269. else {
  1270. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Camera is Occupying by Entity[%s].", strOccupy.GetData());
  1271. }
  1272. }
  1273. }
  1274. if (m_bStartCamera) {
  1275. LogEvent(Severity_Middle, EVENT_MOD_BEGIN_RECORD, pszMessage);
  1276. OnCameraStarted();
  1277. }
  1278. }
  1279. }
  1280. }
  1281. break;
  1282. case LOG_EVT_BEGIN_HANDLE_BUSINESS:
  1283. if (1 == m_iCamOnMode){
  1284. if (!m_bStartCamera){
  1285. StartCameraAndSetSysVar();
  1286. if (m_bStartCamera) {
  1287. OnCameraStarted();
  1288. }
  1289. }
  1290. else {
  1291. if (Error_Succeed != GetFunction()->KillTimer(3)) {
  1292. LogWarn(Severity_Low, Error_Debug, LOG_EVT_MEDIACONTROLLER_KILLTIMER_ERROR, "begin handle business, and camera is already on, KillTimer 3 failed.");
  1293. }
  1294. }
  1295. }
  1296. break;
  1297. case LOG_EVT_END_HANDLE_BUSINESS:
  1298. if (1 == m_iCamOnMode) {
  1299. if (m_bStartCamera) {
  1300. if (Error_Succeed != GetFunction()->SetTimer(3, this, m_iDelayTime * 1000)) {
  1301. LogWarn(Severity_Low, Error_Debug, LOG_EVT_MEDIACONTROLLER_SETTIMER_ERROR, "end handle business, SetTimer 3 failed.");
  1302. }
  1303. }
  1304. else {
  1305. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("end handle business, and camera is not on.");
  1306. }
  1307. }
  1308. break;
  1309. case EVENT_MOD_CUSTOMERAWARE_END:
  1310. {
  1311. m_bCustomerwareBegin = false;
  1312. if (1 != m_iCamOnMode) {
  1313. if (m_bStartCamera && !m_bExternControlCam)
  1314. {
  1315. if (m_capture)
  1316. {
  1317. OnCameraStopped();
  1318. LogEvent(Severity_Middle, EVENT_MOD_END_RECORD, pszMessage);
  1319. GetFunction()->KillTimer(1);
  1320. capture_stop(m_capture);
  1321. capture_destroy(m_capture);
  1322. m_capture = NULL;
  1323. }
  1324. m_bStartCamera = FALSE;
  1325. m_bNeedPost = true;
  1326. }
  1327. }
  1328. }
  1329. break;
  1330. case LOG_EVT_RECORDFAILED:
  1331. {
  1332. GetFunction()->KillTimer(1);
  1333. LogEvent(Severity_Middle, EVENT_MOD_END_RECORD, NULL);
  1334. char FaildFlag = pszMessage[0];
  1335. if (FaildFlag == '0')
  1336. {
  1337. GetFunction()->SetTimer(1, this, 5000);
  1338. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("本地录音录像失败,已停止!");
  1339. }
  1340. else //if (FaildFlag == '1')
  1341. {
  1342. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("本地录音录像设备故障,尝试恢复中(预计10s内),请稍等");
  1343. if (false == m_bIsRemoteRecord) {
  1344. m_nCameraErrorCode = Error_AllCamera;
  1345. }
  1346. //RealSelfCheck(); // 录音录像失败,强行kill实体
  1347. }
  1348. }
  1349. break;
  1350. case LOG_EVT_UI_RECORDFAILED:
  1351. {
  1352. OnExternalCameraSwitchFailed(pszMessage);
  1353. GetFunction()->KillTimer(1);
  1354. if (m_bIsRemoteRecord){
  1355. LogEvent(Severity_Middle, LOG_EVT_UI_STOPREMOTERECORD, NULL);
  1356. }
  1357. else{
  1358. LogEvent(Severity_Middle, LOG_EVT_UI_STOPRECORD, NULL);
  1359. }
  1360. GetFunction()->SetTimer(1, this, 5000);
  1361. }
  1362. break;
  1363. case LOG_EVT_MOD_SALESRECORDER_STARTED_SUCCESS:
  1364. m_bIsRemoteRecord = false;
  1365. break;
  1366. case LOG_EVT_UI_STARTREMOTERECORD:
  1367. {
  1368. m_bIsRemoteRecord = true;
  1369. HandleRemoteRecord(pszMessage);
  1370. }
  1371. break;
  1372. case LOG_EVT_UI_STOPREMOTERECORD:
  1373. {
  1374. m_bIsRemoteRecord = false;
  1375. if (Error_Succeed == StopSalesRecordAudioCapture()){
  1376. }
  1377. if (true == m_bHasStartSpeakerRender){
  1378. StopSpeakerAudioRender();
  1379. }
  1380. }
  1381. break;
  1382. default:
  1383. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("unknown event.");
  1384. break;
  1385. }
  1386. }
  1387. void CMediaControllerEntity::OnSelfTest(EntityTestEnum eTestType,CSmartPointer<ITransactionContext> pTransactionContext)
  1388. {
  1389. if (Test_ShakeHand == eTestType)
  1390. {
  1391. if (m_nCameraErrorCode == Error_AllCamera)
  1392. {
  1393. pTransactionContext->SendAnswer(Error_DevMedia);
  1394. }
  1395. else
  1396. {
  1397. pTransactionContext->SendAnswer(Error_Succeed);
  1398. }
  1399. }
  1400. }
  1401. //获取当前使用摄像头,30分钟轮休一次
  1402. int CMediaControllerEntity::GetActiveCamera()
  1403. {
  1404. SYSTEMTIME st;
  1405. GetLocalTime(&st);
  1406. if (st.wMinute<=CAMERA_CHANGE_TIMER){
  1407. return ENVCAMERA;
  1408. }
  1409. else{
  1410. return OPTCAMERA;
  1411. }
  1412. }
  1413. ErrorCodeEnum CMediaControllerEntity::ChangeSysvar(ErrorCodeEnum op)
  1414. {
  1415. switch (op)
  1416. {
  1417. case Error_Succeed:
  1418. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Camera State to No_Error");
  1419. SetCameraSysVar(CAMERA_NO_ERROR);
  1420. GetFunction()->SetUserDefineState(USER_MEDIA_IDLE);
  1421. break;
  1422. case Error_EnvCamera:
  1423. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Camera State to Env_Error");
  1424. SetCameraSysVar(CAMERA_ENV_ERROR);
  1425. GetFunction()->SetUserDefineState(USER_MEDIA_ENVERRROR);
  1426. capture_clearsnapshotvideo(m_capture,ENVCAMERA);
  1427. break;
  1428. case Error_OptCamera:
  1429. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Camera State to Opt_Error");
  1430. SetCameraSysVar(CAMERA_OPT_ERROR);
  1431. GetFunction()->SetUserDefineState(USER_MEDIA_OPTERROR);
  1432. capture_clearsnapshotvideo(m_capture,OPTCAMERA);
  1433. break;
  1434. case Error_AllCamera:
  1435. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Camera State to Both_Error");
  1436. SetCameraSysVar(CAMERA_BOTH_ERROR);
  1437. GetFunction()->SetUserDefineState(USER_MEDIA_ALLERROR);
  1438. capture_clearsnapshotvideo(m_capture,AlLCAMERA);
  1439. break;
  1440. default:
  1441. break;
  1442. }
  1443. return Error_Succeed;
  1444. }
  1445. //开始销售双录音频采集函数
  1446. ErrorCodeEnum CMediaControllerEntity::StartSalesRecordAudioCapture(bool bRemoteRecord, eRvcPCMTransType eType, void* pData)
  1447. {
  1448. ErrorCodeEnum Error = Error_Succeed;
  1449. if (NULL == m_salesaudio_capture){
  1450. memset(&m_sales_audio_conf, 0, sizeof(m_sales_audio_conf));
  1451. GetSalesAudioConfig(&m_sales_audio_conf, bRemoteRecord);
  1452. Error = (ErrorCodeEnum)salesaudio_capture_create(&m_sales_audio_conf, &m_salesaudio_capture);
  1453. if (Error_Succeed == Error){
  1454. Error = SetSalesRecordAudioCaptureTransActionData(eType, pData);
  1455. }
  1456. }
  1457. if (Error_Succeed == Error){
  1458. Error = salesrecord_audio_capture_start(m_salesaudio_capture);
  1459. if (Error_Succeed != Error){
  1460. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("sales record audio capture start failed for param error.");
  1461. }
  1462. }
  1463. return Error;
  1464. }
  1465. //停止销售双录音频采集函数
  1466. ErrorCodeEnum CMediaControllerEntity::StopSalesRecordAudioCapture()
  1467. {
  1468. salesrecord_audio_capture_stop(m_salesaudio_capture);
  1469. salesaudio_capture_destroy(m_salesaudio_capture);
  1470. m_salesaudio_capture = NULL;
  1471. return Error_Succeed;
  1472. }
  1473. ErrorCodeEnum CMediaControllerEntity::StartCamera()
  1474. {
  1475. if (m_capture == NULL)
  1476. {
  1477. ErrorCodeEnum Error = Error_Succeed;
  1478. conf.ref_env_capture_count = &m_lCaptureEnvCount;
  1479. conf.ref_opt_capture_count = &m_lCaptureOptCount;
  1480. conf.ref_envopt_capture_count = &m_lCaptureEnvOptCount;
  1481. Error = (ErrorCodeEnum)capture_create(&conf, &m_capture);
  1482. if (Error == Error_Succeed)
  1483. {
  1484. Error = capture_start(m_capture);
  1485. if (Error != Error_Succeed)
  1486. {
  1487. if((Error == Error_AudioIN)||(Error == Error_AudioOut))
  1488. {
  1489. return Error;
  1490. }
  1491. else if (Error == Error_AllCamera)
  1492. {
  1493. capture_stop(m_capture);
  1494. capture_destroy(m_capture);
  1495. m_capture = NULL;
  1496. return Error;
  1497. }
  1498. else
  1499. {
  1500. SetAutoBright(Error);
  1501. GetFunction()->SetTimer(1, this, 5000);
  1502. if((Error == Error_OptCamera)&&((ePadtype == m_eDeviceType)||(eStand1SPlusType == m_eDeviceType)))
  1503. {
  1504. return Error_Succeed;
  1505. }
  1506. else
  1507. {
  1508. return Error;
  1509. }
  1510. }
  1511. }
  1512. else
  1513. {
  1514. SetAutoBright(Error);
  1515. GetFunction()->SetTimer(1, this, 5000);
  1516. return Error_Succeed;
  1517. }
  1518. }
  1519. else
  1520. {
  1521. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("create capture failed! 0x%08x", Error);
  1522. m_capture = NULL;
  1523. return Error_Unexpect;
  1524. }
  1525. return Error;
  1526. }
  1527. else
  1528. {
  1529. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_capture == NULL");
  1530. return Error_Unexpect;
  1531. }
  1532. }
  1533. void CMediaControllerEntity::StartCameraAndSetSysVar()
  1534. {
  1535. ErrorCodeEnum Error = StartCamera();
  1536. if (Error == Error_Succeed){
  1537. SetCameraSysVar(CAMERA_NO_ERROR);
  1538. m_bStartCamera = TRUE;
  1539. m_bNeedPost = true;
  1540. }
  1541. else{
  1542. if (Error == Error_EnvCamera){
  1543. SetCameraSysVar(CAMERA_ENV_ERROR);
  1544. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Camera State to CAMERA_ENV_ERROR");
  1545. m_bStartCamera = TRUE;
  1546. }
  1547. else if (Error == Error_OptCamera){
  1548. SetCameraSysVar(CAMERA_OPT_ERROR);
  1549. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Camera State to CAMERA_OPT_ERROR");
  1550. m_bStartCamera = TRUE;
  1551. }
  1552. else if (Error == Error_AllCamera){
  1553. SetCameraSysVar(CAMERA_BOTH_ERROR);
  1554. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Camera State to CAMERA_BOTH_ERROR");
  1555. m_nCameraErrorCode = Error_AllCamera;
  1556. m_bStartCamera = FALSE;
  1557. GetFunction()->SetUserDefineState(USER_MEDIA_ALLERROR);
  1558. }
  1559. else{
  1560. SetCameraSysVar(Error);
  1561. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Camera State to Other Error");
  1562. m_nCameraErrorCode = Error;
  1563. m_bStartCamera = FALSE;
  1564. }
  1565. }
  1566. }
  1567. ErrorCodeEnum CMediaControllerEntity::ReStartCamera(int nCamera)
  1568. {
  1569. if (m_capture != NULL)
  1570. {
  1571. if((StopCamera(m_capture,nCamera)==-1)){
  1572. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("ReStartCamera %d,stop camera fail!", nCamera);
  1573. }
  1574. Sleep(2000);
  1575. ErrorCodeEnum Error = Error_Succeed;
  1576. Error = capture_create(&conf, m_capture,nCamera);
  1577. if (Error == Error_Succeed)
  1578. {
  1579. Error = capture_start(m_capture,nCamera);
  1580. if (Error != Error_Succeed)
  1581. {
  1582. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("ReStartCamera %d,capture_start fail!", nCamera);
  1583. capture_destroy(m_capture,nCamera);
  1584. return Error;
  1585. }
  1586. else
  1587. {
  1588. return Error_Succeed;
  1589. }
  1590. }
  1591. else
  1592. {
  1593. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("ReStartCamera %d,capture_create fail!", nCamera);
  1594. capture_destroy(m_capture,nCamera);
  1595. return Error;
  1596. }
  1597. }
  1598. else
  1599. {
  1600. return Error_Unexpect;
  1601. }
  1602. }
  1603. CServerSessionBase *CMediaControllerEntity::OnNewSession(const char* pszRemoteEntityName, const char * pszClass)
  1604. {
  1605. return new MediaServiceSession(this);
  1606. }
  1607. ErrorCodeEnum CMediaControllerEntity::ExternStartCamera()
  1608. {
  1609. CSimpleStringA strSessionId;
  1610. CSmartPointer<IEntityFunction> Func = GetFunction();
  1611. Func->GetSysVar("SessionID", strSessionId);
  1612. if (!m_bStartCamera){
  1613. StartCameraAndSetSysVar();
  1614. if (m_bStartCamera) {
  1615. LogEvent(Severity_Middle, EVENT_MOD_BEGIN_RECORD, strSessionId);
  1616. OnCameraStarted();
  1617. }
  1618. }
  1619. m_bExternControlCam = FALSE;
  1620. return Error_Succeed;
  1621. }
  1622. ErrorCodeEnum CMediaControllerEntity::ExternStopCamera()
  1623. {
  1624. if (m_capture) {
  1625. OnCameraStopped();
  1626. LogEvent(Severity_Middle, EVENT_MOD_END_RECORD,NULL);
  1627. GetFunction()->KillTimer(1);
  1628. capture_stop(m_capture);
  1629. capture_destroy(m_capture);
  1630. m_capture = NULL;
  1631. }
  1632. m_bStartCamera = FALSE;
  1633. m_bExternControlCam = TRUE;
  1634. return Error_Succeed;
  1635. }
  1636. ErrorCodeEnum CMediaControllerEntity::SaveInnerCamera()
  1637. {
  1638. if (strFrontCam.GetLength() <= 1) {
  1639. return Error_Resource;
  1640. }
  1641. if (strstr((LPCTSTR)conf.strVideoEnv,(LPCTSTR)strFrontCam)==NULL)
  1642. {
  1643. CSimpleStringA tmp = strRearCam;
  1644. strRearCam = strFrontCam;
  1645. strFrontCam = tmp;
  1646. }
  1647. //DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("[dbg] strFrontCam: %s, strRearCam: %s", (LPCSTR)strFrontCam, (LPCSTR)strRearCam);
  1648. CSmartPointer<IEntityFunction> spFunction = GetFunction();
  1649. CSmartPointer<IConfigInfo> spConfig;
  1650. ErrorCodeEnum Error = spFunction->OpenConfig(Config_Run, spConfig);
  1651. if (Error == Error_Succeed) {
  1652. SpIniMappingTable table;
  1653. table.AddEntryString("Video", "FrontCamera", strFrontCam, "$");
  1654. table.AddEntryString("Video", "RearCamera", strRearCam, "$");
  1655. Error = table.Save(spConfig);
  1656. if (Error != Error_Succeed)
  1657. {
  1658. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("[dbg] failed to save run config.");
  1659. }
  1660. }
  1661. else {
  1662. DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("[dbg] failed to open run config.");
  1663. }
  1664. return Error;
  1665. }
  1666. ErrorCodeEnum CMediaControllerEntity::GetHSPCameras(CAutoArray<CSimpleStringA> &HSPCameras)
  1667. {
  1668. enum CapTypeEnum {
  1669. CAMTYPE_UNKNOWN = 0,
  1670. CAMTYPE_ENV,
  1671. CAMTYPE_OPT,
  1672. CAMTYPE_EWS,
  1673. CAMTYPE_HSPS,
  1674. CAMTYPE_CIRCLE,
  1675. CAMTYPE_MAX
  1676. };
  1677. auto rc = Error_Succeed;
  1678. auto pScannerSetClient = new ScannerService_ClientBase(this);
  1679. if (pScannerSetClient->Connect() != Error_Succeed){
  1680. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("连接ScannerSet实体失败");
  1681. pScannerSetClient->SafeDelete();
  1682. pScannerSetClient = NULL;
  1683. rc = Error_DevConnFailed;
  1684. }
  1685. else
  1686. {
  1687. ScannerService_GetOnlineCameras_Req req = {};
  1688. ScannerService_GetOnlineCameras_Ans ans = {};
  1689. rc = (*pScannerSetClient)(EntityResource::getLink().upgradeLink())->GetOnlineCameras(req, ans, 10000);
  1690. if (rc != Error_Succeed){
  1691. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("ScannerSet 调用 GetOnlineCameras 失败: 0x%x", rc);
  1692. }
  1693. else{
  1694. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("ScannerSet invokes GetOnlineCameras suc.");
  1695. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Count: %d", ans.devCount);
  1696. if (ans.devCount > 0) {
  1697. for (int i = 0; i < ans.devFriendlyNames.GetCount(); ++i) {
  1698. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("[%d]%s(%d)", i, (LPCTSTR)ans.devFriendlyNames[i],
  1699. ans.devType[i]);
  1700. CapTypeEnum devType = (CapTypeEnum)ans.devType[i];
  1701. if (devType == CAMTYPE_HSPS)
  1702. {
  1703. HSPCameras.Append(ans.devFriendlyNames, i, 1);
  1704. }
  1705. }
  1706. }
  1707. }
  1708. pScannerSetClient->GetFunction()->CloseSession();
  1709. pScannerSetClient->SafeDelete();
  1710. pScannerSetClient = NULL;
  1711. }
  1712. return rc;
  1713. }
  1714. ErrorCodeEnum CMediaControllerEntity::HandleSalesRecordPCMAudio(bool bRemoteRecord, const char *pszMessage, audio_frame* pFrame)
  1715. {
  1716. ErrorCodeEnum Error = Error_Succeed;
  1717. char strSwiftName[MAX_PATH] = {0};
  1718. if (NULL != pszMessage){
  1719. size_t ulen = strlen(pszMessage);
  1720. char *tmp = new char[ulen+1];
  1721. memset(tmp, 0, ulen + 1);
  1722. memcpy(tmp, pszMessage, ulen);
  1723. char *result[16] = {0};
  1724. auto arr1 = CSimpleStringA2W(tmp).Split('@');
  1725. auto arr2 = CAutoArray<CSimpleStringA>(arr1.GetCount());
  1726. for (int i = 0; i < arr1.GetCount(); ++i){
  1727. arr2[i] = CSimpleStringW2A(arr1[i]);
  1728. result[i] = const_cast<LPSTR>(arr2[i].GetData());
  1729. }
  1730. if (arr1.GetCount() > 4){
  1731. _snprintf(strSwiftName, MAX_PATH, "%s", result[4]);
  1732. }
  1733. delete tmp;
  1734. tmp = NULL;
  1735. }
  1736. char strMicroName[MAX_PATH] = {0};
  1737. CSimpleStringA strTempDir;
  1738. if (Error_Succeed == GetFunction()->GetPath("Temp", strTempDir)){
  1739. _snprintf(strMicroName, MAX_PATH, "%s\\local_micro_%s.pcm", strTempDir.GetData(), strSwiftName);
  1740. }
  1741. else{
  1742. _snprintf(strMicroName, MAX_PATH, "local_micro_%s.pcm", strSwiftName);
  1743. }
  1744. FILE *pRecord = fopen(strMicroName, "wb+");
  1745. if (NULL != pRecord){
  1746. if (Error_Succeed == StartSalesRecordAudioCapture(bRemoteRecord, eSingleWriteLocal, pRecord)){
  1747. }
  1748. }
  1749. else{
  1750. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("fopen %s failed.",strMicroName);
  1751. }
  1752. if (true == bRemoteRecord){
  1753. char strSpeakerName[MAX_PATH] = {0};
  1754. if ("" != strTempDir){
  1755. _snprintf(strSpeakerName, MAX_PATH, "%s\\remote_speaker_%s.pcm", strTempDir.GetData(), strSwiftName);
  1756. }
  1757. else{
  1758. _snprintf(strSpeakerName, MAX_PATH, "remote_speaker_%s.pcm", strSwiftName);
  1759. }
  1760. StartSpeakerAudioRender(0, pFrame, strSpeakerName);
  1761. }
  1762. return Error;
  1763. }
  1764. void CMediaControllerEntity::HandleRemoteRecord(const char *pszMessage)
  1765. {
  1766. audio_frame frame;
  1767. frame.bitspersample = 16;
  1768. frame.format = 1;
  1769. frame.framesize = 320;
  1770. frame.nchannels = 1;
  1771. frame.samplespersec = 8000;
  1772. if (true == m_bRecordPCM){
  1773. HandleSalesRecordPCMAudio(true, pszMessage, &frame);
  1774. }
  1775. else{
  1776. if (Error_Succeed == StartSalesRecordAudioCapture(true)){
  1777. }
  1778. StartSpeakerAudioRender(0, &frame, NULL);
  1779. }
  1780. }
  1781. ErrorCodeEnum CMediaControllerEntity::StartSpeakerAudioRender(int iQueue, audio_frame* pFrame, const char* strName)
  1782. {
  1783. auto rc = Error_Succeed;
  1784. if (m_bSpeakerCap){
  1785. DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("start speak audio render.");
  1786. if (NULL != m_pAudioRenderObj){
  1787. if(0 == m_pAudioRenderObj->StartRender(0, pFrame, strName)){
  1788. m_bHasStartSpeakerRender = true;
  1789. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("start speak audio render success.");
  1790. }
  1791. }
  1792. }
  1793. return rc;
  1794. }
  1795. ErrorCodeEnum CMediaControllerEntity::StopSpeakerAudioRender()
  1796. {
  1797. auto rc = Error_Succeed;
  1798. if (m_bSpeakerCap){
  1799. if (NULL != m_pAudioRenderObj){
  1800. m_pAudioRenderObj->StopRender();
  1801. m_bHasStartSpeakerRender = false;
  1802. }
  1803. }
  1804. return rc;
  1805. }
  1806. ErrorCodeEnum CMediaControllerEntity::SetSalesRecordAudioCaptureTransActionData(eRvcPCMTransType eType, void* pData)
  1807. {
  1808. auto rc = Error_Param;
  1809. if (NULL != m_salesaudio_capture){
  1810. if (NULL != m_salesaudio_capture->rvc_audio){
  1811. m_salesaudio_capture->rvc_audio->eType = eType;
  1812. m_salesaudio_capture->rvc_audio->pdata = pData;
  1813. rc = Error_Succeed;
  1814. }
  1815. }
  1816. return rc;
  1817. }
  1818. ErrorCodeEnum CMediaControllerEntity::ConnectAssistChannel()
  1819. {
  1820. if (NULL == m_pMediaControllerChannel) {
  1821. m_pMediaControllerChannel = new ChannelMediaControllerClient(this);
  1822. }
  1823. ErrorCodeEnum Error = m_pMediaControllerChannel->Connect();
  1824. if (Error != Error_Succeed) {
  1825. m_pMediaControllerChannel->SafeDelete();
  1826. m_pMediaControllerChannel = NULL;
  1827. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("ChannelMediaControllerClient connect fail!");
  1828. return Error;
  1829. }
  1830. if (Error_Succeed == Error)
  1831. {
  1832. ChannelService_BeginState_Sub Sub;
  1833. Error = (*m_pMediaControllerChannel)(EntityResource::getLink().upgradeLink())->BeginState(Sub);
  1834. if (Error != Error_Succeed) {
  1835. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("BeginState biz channel failed!");
  1836. m_pMediaControllerChannel->GetFunction()->CloseSession();
  1837. m_pMediaControllerChannel->SafeDelete();
  1838. m_pMediaControllerChannel = NULL;
  1839. return Error;
  1840. }
  1841. }
  1842. if (Error_Succeed == Error)
  1843. {
  1844. ChannelService_BeginRecv_Sub Sub;
  1845. Sub.type = ACM_TYPE_DEVICE;
  1846. Error = (*m_pMediaControllerChannel)(EntityResource::getLink().upgradeLink())->BeginRecv(Sub);
  1847. if (Error != Error_Succeed) {
  1848. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Begin BeginRecv ACM_TYPE_DEVICE failed!");
  1849. m_pMediaControllerChannel->GetFunction()->CloseSession();
  1850. m_pMediaControllerChannel->SafeDelete();
  1851. m_pMediaControllerChannel = NULL;
  1852. return Error;
  1853. }
  1854. }
  1855. return Error;
  1856. }
  1857. ErrorCodeEnum CMediaControllerEntity::GetAudioDevices(int& iAudioCount, CSimpleStringA& strAudioDev, int iAudioType)
  1858. {
  1859. ErrorCodeEnum Error = Error_Succeed;
  1860. if (0 == iAudioType) {
  1861. iAudioCount = capture_get_audio_device_list(0, strAudioDev);
  1862. }
  1863. else {
  1864. iAudioCount = capture_get_audio_device_list(1, strAudioDev);
  1865. }
  1866. return Error;
  1867. }
  1868. ErrorCodeEnum CMediaControllerEntity::GetVideoDevices(int& iVideoCount, CSimpleStringA& strVideoDev)
  1869. {
  1870. ErrorCodeEnum Error = Error_Succeed;
  1871. iVideoCount = capture_get_video_device_list(strVideoDev);
  1872. return Error;
  1873. }
  1874. double CMediaControllerEntity::GetSystemCpuUsage()
  1875. {
  1876. double ratio = 0;
  1877. #define _WIN32_WINNT 0x0601
  1878. FILETIME idleTime,kernelTime,userTime;
  1879. BOOL ret = GetSystemTimes(&idleTime,&kernelTime,&userTime);
  1880. if (ret == 0){
  1881. return 80.0;
  1882. }
  1883. __int64 xIdle,xKernel,xUser;
  1884. xIdle = idleTime.dwHighDateTime;
  1885. xIdle <<= 32;
  1886. xIdle |= idleTime.dwLowDateTime;
  1887. xKernel = kernelTime.dwHighDateTime;
  1888. xKernel <<= 32;
  1889. xKernel |= kernelTime.dwLowDateTime;
  1890. xUser = userTime.dwHighDateTime;
  1891. xUser <<= 32;
  1892. xUser |= userTime.dwLowDateTime;
  1893. if (m_xIdlePre != 0)
  1894. {
  1895. __int64 xI,xK,xU;
  1896. xI = xIdle - m_xIdlePre;
  1897. xK = xKernel - m_xKernelPre;
  1898. xU = xUser - m_xUserPre;
  1899. if ((xK +xU) != 0)
  1900. ratio = (xK - xI + xU) * 100 / (xK + xU);
  1901. }
  1902. m_xIdlePre = xIdle;
  1903. m_xKernelPre = xKernel;
  1904. m_xUserPre = xUser;
  1905. return ratio;
  1906. }
  1907. void CMediaControllerEntity::OnCameraStarted()
  1908. {
  1909. LogEvent(Severity_Middle, LOG_EVT_MEDIACONTROLLER_CAMERA_STARTED, "camera started.");
  1910. }
  1911. void CMediaControllerEntity::OnCameraStopped()
  1912. {
  1913. LogEvent(Severity_Middle, LOG_EVT_MEDIACONTROLLER_CAMERA_STOPPED, "camera stopped.");
  1914. }
  1915. SelfChekerClient::SelfChekerClient( CMediaControllerEntity *pEntity ) : SelfCheckerService_ClientBase(pEntity)
  1916. {
  1917. }
  1918. ChannelMediaControllerClient::ChannelMediaControllerClient( CMediaControllerEntity *pEntity ) : ChannelService_ClientBase(pEntity)
  1919. {
  1920. }
  1921. void ChannelMediaControllerClient::OnMessage(ErrorCodeEnum Error, ChannelService_State_Info &Msg, CSmartPointer<IReleasable> pData)
  1922. {
  1923. if (Error == Error_Succeed)
  1924. {
  1925. CMediaControllerEntity *pEntity = static_cast<CMediaControllerEntity*>(m_pEntityBase);
  1926. if (Msg.state == eChannelState_Idle)
  1927. {
  1928. if (pEntity->m_bStartCamera)
  1929. {
  1930. if (pEntity->SetAutoBright(pEntity->m_nCameraErrorCode)==false)
  1931. {
  1932. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("SetAutoBright Fail!");
  1933. }
  1934. }
  1935. }
  1936. else if (Msg.state == eChannelState_Connected)
  1937. {
  1938. if (pEntity->m_bStartCamera)
  1939. {
  1940. pEntity->SendCameraBright();
  1941. }
  1942. }
  1943. }
  1944. }
  1945. void ChannelMediaControllerClient::OnMessage( ErrorCodeEnum Error, ChannelService_Packet_Info &Msg, CSmartPointer<IReleasable> pData )
  1946. {
  1947. LOG_FUNCTION();
  1948. if (Error == Error_Succeed)
  1949. {
  1950. CMediaControllerEntity *pEntity = static_cast<CMediaControllerEntity*>(m_pEntityBase);
  1951. pEntity->OnReceivePkt(Msg.sub_type, (const char*)Msg.data.m_pData, Msg.data.m_iLength);
  1952. }
  1953. }
  1954. void MediaServiceSession::Handle_GetVideoDeviceName(SpReqAnsContext<MediaService_GetVideoDeviceName_Req, MediaService_GetVideoDeviceName_Ans>::Pointer ctx)
  1955. {
  1956. DbgToBeidou(ctx->link, __FUNCTION__)();
  1957. CSimpleStringA frontcam = m_pEntity->strFrontCam;
  1958. CSimpleStringA rearcam = m_pEntity->strRearCam;
  1959. if (frontcam.GetLength() > 1 && rearcam.GetLength() > 1)
  1960. {
  1961. ctx->Ans.frontcam = frontcam;
  1962. if (strstr((LPCTSTR)frontcam,";"))
  1963. {
  1964. ctx->Ans.frontcam = frontcam.SubString(0, frontcam.IndexOf(";"));
  1965. }
  1966. ctx->Ans.rearcam = rearcam;
  1967. if (strstr((LPCTSTR)rearcam,";"))
  1968. {
  1969. ctx->Ans.rearcam = rearcam.SubString(0, rearcam.IndexOf(";"));
  1970. }
  1971. }
  1972. ctx->Answer(Error_Succeed);
  1973. }
  1974. void MediaServiceSession::Handle_StartCamera(SpOnewayCallContext<MediaService_StartCamera_Info>::Pointer ctx)
  1975. {
  1976. DbgToBeidou(ctx->link, __FUNCTION__)();
  1977. m_pEntity->ExternStartCamera();
  1978. }
  1979. void MediaServiceSession::Handle_StopCamera(SpOnewayCallContext<MediaService_StopCamera_Info>::Pointer ctx)
  1980. {
  1981. DbgToBeidou(ctx->link, __FUNCTION__)();
  1982. m_pEntity->ExternStopCamera();
  1983. }
  1984. void MediaServiceSession::Handle_StartEnvCamera(SpReqAnsContext<MediaService_StartEnvCamera_Req, MediaService_StartEnvCamera_Ans>::Pointer ctx)
  1985. {
  1986. DbgToBeidou(ctx->link, __FUNCTION__)();
  1987. ctx->Answer(Error_Succeed);
  1988. }
  1989. void MediaServiceSession::Handle_StopEnvCamera(SpOnewayCallContext<MediaService_StopEnvCamera_Info>::Pointer ctx)
  1990. {
  1991. DbgToBeidou(ctx->link, __FUNCTION__)();
  1992. }
  1993. void MediaServiceSession::Handle_StartSpeakerRender(SpOnewayCallContext<MediaService_StartSpeakerRender_Info>::Pointer ctx)
  1994. {
  1995. DbgToBeidou(ctx->link, __FUNCTION__)();
  1996. }
  1997. void MediaServiceSession::Handle_StopSpeakerRender(SpOnewayCallContext<MediaService_StopSpeakerRender_Info>::Pointer ctx)
  1998. {
  1999. DbgToBeidou(ctx->link, __FUNCTION__)();
  2000. if (true == m_pEntity->m_bHasStartSpeakerRender){
  2001. m_pEntity->StopSpeakerAudioRender();
  2002. }
  2003. }
  2004. void MediaServiceSession::Handle_ManipulateMediaDevice(SpReqAnsContext<MediaService_ManipulateMediaDevice_Req, MediaService_ManipulateMediaDevice_Ans>::Pointer ctx)
  2005. {
  2006. DbgToBeidou(ctx->link, __FUNCTION__)();
  2007. ErrorCodeEnum Error = Error_NotImpl;
  2008. ctx->Ans.retCode = (int)Error;
  2009. ctx->Answer(Error_Succeed);
  2010. }
  2011. void MediaServiceSession::Handle_GetAudioDevices(SpReqAnsContext<MediaService_GetAudioDevices_Req, MediaService_GetAudioDevices_Ans>::Pointer ctx)
  2012. {
  2013. DbgToBeidou(ctx->link, __FUNCTION__)();
  2014. ErrorCodeEnum Error = Error_NotImpl;
  2015. Error = m_pEntity->GetAudioDevices(ctx->Ans.deviceCount, ctx->Ans.strNames, ctx->Req.audioType);
  2016. ctx->Ans.retCode = (int)Error;
  2017. ctx->Answer(Error_Succeed);
  2018. }
  2019. void MediaServiceSession::Handle_GetVideoDevices(SpReqAnsContext<MediaService_GetVideoDevices_Req, MediaService_GetVideoDevices_Ans>::Pointer ctx)
  2020. {
  2021. DbgToBeidou(ctx->link, __FUNCTION__)();
  2022. ErrorCodeEnum Error = Error_NotImpl;
  2023. Error = m_pEntity->GetVideoDevices(ctx->Ans.deviceCount, ctx->Ans.strNames);
  2024. ctx->Ans.retCode = (int)Error;
  2025. ctx->Answer(Error_Succeed);
  2026. }
  2027. void MediaServiceSession::Handle_GetCameraInfos(SpReqAnsContext<MediaService_GetCameraInfos_Req, MediaService_GetCameraInfos_Ans>::Pointer ctx)
  2028. {
  2029. DbgToBeidou(ctx->link, __FUNCTION__)();
  2030. ErrorCodeEnum Error = Error_Succeed;
  2031. ctx->Ans.strEnvCamera = m_pEntity->conf.strVideoEnv;
  2032. ctx->Ans.strOptCamera = m_pEntity->conf.strVideoOpt;
  2033. ctx->Ans.retCode = (int)Error;
  2034. ctx->Answer(Error_Succeed);
  2035. }
  2036. void MediaServiceSession::Handle_ManipulateCameras(SpReqAnsContext<MediaService_ManipulateCameras_Req, MediaService_ManipulateCameras_Ans>::Pointer ctx)
  2037. {
  2038. DbgToBeidou(ctx->link, __FUNCTION__)();
  2039. ErrorCodeEnum Error = Error_NotImpl;
  2040. DeviceTypeEnum eType = m_pEntity->RvcDeviceType();
  2041. DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("rvc Device Type is %s, and cmdType is %d.", Device_Type_Table[eType], ctx->Req.cmdType);
  2042. if (ctx->Req.cmdType == 0) {
  2043. Error = m_pEntity->StopCamerasAndRecord();
  2044. Sleep(50);
  2045. }
  2046. else {
  2047. Sleep(100);
  2048. Error = m_pEntity->StartCamerasAndRecord();
  2049. }
  2050. ctx->Ans.retCode = (int)Error;
  2051. ctx->Answer(Error_Succeed);
  2052. }
  2053. SP_BEGIN_ENTITY_MAP()
  2054. SP_ENTITY(CMediaControllerEntity)
  2055. SP_END_ENTITY_MAP()