浏览代码

Z991239-6451 #comment 调整物理摄像头关闭逻辑,增加虚拟摄像头是否已打开判断

80274480 1 月之前
父节点
当前提交
2b5831e6b4
共有 2 个文件被更改,包括 17 次插入2 次删除
  1. 16 2
      Module/mod_mediacontroller/mod_mediacontroller.cpp
  2. 1 0
      Module/mod_mediacontroller/mod_mediacontroller.h

+ 16 - 2
Module/mod_mediacontroller/mod_mediacontroller.cpp

@@ -184,6 +184,7 @@ CMediaControllerEntity::CMediaControllerEntity(): m_capture(NULL), m_salesaudio_
 	m_bOnBusiness = false;
 	m_bJsOccupyCamera = false;
 	m_bCameraOffTimerOn = false;
+	m_bVirtualCamOpened = false;
 	m_eDeviceType = eStand2sType;
 	m_nCameraErrorCode = Error_Succeed;
 	memset(&conf, 0, sizeof(capture_config_t));
@@ -285,11 +286,13 @@ bool CMediaControllerEntity::HandleVirtucalCamMsg(const char* strMsg)
 
 	if (strstr(strMsg, "Start")) {
 		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Start virtual Camera %s.", strMsg);
+		m_bVirtualCamOpened = true;
 		StartAllCameras();
 		bRet = true;
 	}
 	else if (strstr(strMsg, "Stop")) {
 		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Stop virtual Camera %s.", strMsg);
+		m_bVirtualCamOpened = false;
 		CSimpleStringA strState;
 		GetFunction()->GetSysVar("UIState", strState);
 		if (strState.GetLength() > 0 && strState[0] == 'M') {
@@ -1114,7 +1117,7 @@ ErrorCodeEnum CMediaControllerEntity::GetMediaConfig()
 			m_iDelayTime = iDelayTime;
 		}
 
-		if (intervaltime <= RVC_CAM_INTERVAL_TIME && intervaltime >= RVC_CAM_INTERVAL_TIME / 3) {
+		if (intervaltime <= 10*RVC_CAM_INTERVAL_TIME && intervaltime >= RVC_CAM_INTERVAL_TIME / 3) {
 			m_interValTime = intervaltime;
 		}
 
@@ -1208,7 +1211,7 @@ void CMediaControllerEntity::OnTimeout(DWORD dwTimerID)
 		if (eCameraOpened == m_eCameraState) {
 			CSimpleStringA strCallState("");
 			if (Error_Succeed == GetFunction()->GetSysVar(SYSVAR_CALLSTATE, strCallState)) {
-				if (strCallState.Compare("O") == 0) {
+				if ((strCallState.Compare("O") == 0) && (false == m_bVirtualCamOpened)) {
 					if (m_capture) {
 						GetFunction()->KillTimer(RVC_MEDIADEV_STATUS_CHECK_TIMER);
 						capture_stop(m_capture);
@@ -1227,6 +1230,9 @@ void CMediaControllerEntity::OnTimeout(DWORD dwTimerID)
 						}
 					}
 				}
+				else {
+					DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("CallState is %s, and current virtual camera is %s.", strCallState.GetData(), m_bVirtualCamOpened?"on":"off");
+				}
 			}
 		}
 	}
@@ -1750,6 +1756,14 @@ void CMediaControllerEntity::DelayCloseCameras()
 			m_bCameraOffTimerOn = true;
 		}
 	}
+	else {
+		if (Error_Succeed == GetFunction()->ResetTimer(RVC_CAMERA_OFF_TIMER, m_iDelayTime * 1000)) {
+			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Retset camera off timer success!");
+		}
+		else {
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Retset camera off timer failed!");
+		}
+	}
 }
 
 

+ 1 - 0
Module/mod_mediacontroller/mod_mediacontroller.h

@@ -189,6 +189,7 @@ private:
 	int m_interValTime;
 	bool m_bCameraOffTimerOn;
 	int m_iAudioTimeout;
+	bool m_bVirtualCamOpened;
 
 	CSimpleStringA m_strHttpServerAddr;
 	CSimpleStringA m_strHttpServerAPI;