Преглед на файлове

Z991239-1812 #comment other 优化抓拍计数逻辑

陈礼鹏80274480 преди 4 години
родител
ревизия
b91c936d2a
променени са 3 файла, в които са добавени 29 реда и са изтрити 81 реда
  1. 17 0
      Module/mod_mediacontroller/capture.cpp
  2. 1 0
      Module/mod_mediacontroller/capture.h
  3. 11 81
      Module/mod_mediacontroller/mod_mediacontroller.cpp

+ 17 - 0
Module/mod_mediacontroller/capture.cpp

@@ -602,6 +602,10 @@ static void env_cap_on_frame(void *user_data, video_frame *frame)
 			InterlockedDecrement(cap->config.ref_env_capture_count);
 #else
 			//__sync_fetch_and_sub(cap->config.ref_env_capture_count, 1);
+			pthread_mutex_t sub_clock = PTHREAD_MUTEX_INITIALIZER;
+			pthread_mutex_lock(&sub_clock);
+			*(cap->config.ref_env_capture_count) -= 1;
+			pthread_mutex_unlock(&sub_clock);
 #endif
 			LogEvent(Severity_Middle, MOD_EVENT_MEDIACONTROLLER_FINISHED_CAPTURE_ENV, "agent capture env ok, and capture env finished!");
 		} 
@@ -612,6 +616,11 @@ static void env_cap_on_frame(void *user_data, video_frame *frame)
 			_InterlockedAnd(cap->config.ref_envopt_capture_count, 0xfffffffD);
 #else
 			//__sync_fetch_and_add(cap->config.ref_env_capture_count, 0xfffffffD);
+			pthread_mutex_t add_clock = PTHREAD_MUTEX_INITIALIZER;
+			pthread_mutex_lock(&add_clock);
+			LONG lcount = *(cap->config.ref_envopt_capture_count);
+			*(cap->config.ref_envopt_capture_count) = (lcount & 0xfffffffD);
+			pthread_mutex_unlock(&add_clock);
 #endif // RVC_OS_WIN
 
 			if (*cap->config.ref_envopt_capture_count == 0) 
@@ -772,6 +781,10 @@ static void opt_cap_on_frame(void *user_data, video_frame *frame)
 			InterlockedDecrement(cap->config.ref_opt_capture_count);
 #else
 			//__sync_fetch_and_sub(cap->config.ref_opt_capture_count, 1);
+			pthread_mutex_t add_clock = PTHREAD_MUTEX_INITIALIZER;
+			pthread_mutex_lock(&add_clock);;
+			*(cap->config.ref_opt_capture_count) -= 1;
+			pthread_mutex_unlock(&add_clock);
 #endif
 			LogEvent(Severity_Middle, MOD_EVENT_MEDIACONTROLLER_FINISHED_CAPTURE_OPT, "agent capture opt ok, and capture opt finished!");
 		} 
@@ -782,6 +795,10 @@ static void opt_cap_on_frame(void *user_data, video_frame *frame)
 			if (InterlockedDecrement(cap->config.ref_envopt_capture_count) == 0) 
 #else
 			//__sync_fetch_and_sub(cap->config.ref_envopt_capture_count,1);
+			pthread_mutex_t sub_clock = PTHREAD_MUTEX_INITIALIZER;
+			pthread_mutex_lock(&sub_clock);
+			*(cap->config.ref_envopt_capture_count) -= 1;
+			pthread_mutex_unlock(&sub_clock);
 			if (0 == cap->config.ref_envopt_capture_count)
 #endif
 			{

+ 1 - 0
Module/mod_mediacontroller/capture.h

@@ -12,6 +12,7 @@
 #else
 #include "../../Other/libmediadeviceinfo/imediadeviceinfo.h"
 #include "videocapobj.h"
+
 #endif // RVC_OS_WIN
 
 

+ 11 - 81
Module/mod_mediacontroller/mod_mediacontroller.cpp

@@ -1280,7 +1280,7 @@ private:
 		const DWORD dwSysError,const DWORD dwUserCode,const DWORD dwEntityInstanceID, const WORD wEntityDevelID, 
 		const CAutoArray<DWORD> &Param, const char *pszEntityName, const char *pszModuleName,const char *pszMessage)
 	{
-		LOG_TRACE("user_code = %08x", dwUserCode);
+		LOG_TRACE("user_code = 0x%08x", dwUserCode);
 		switch (dwUserCode)
 		{    
 		case MOD_EVENT_SNAPSHOT_START_CAPTURE_ENVOPT:
@@ -1289,10 +1289,13 @@ private:
 #ifdef RVC_OS_WIN
 				InterlockedCompareExchange(&m_lCaptureEnvOptCount, 3, 0);
 #else
+				pthread_mutex_t clock = PTHREAD_MUTEX_INITIALIZER;
+				pthread_mutex_lock(&clock);
 				LONG* plTemp = &m_lCaptureEnvOptCount;
 				if (0 == *plTemp) {
 					*plTemp = 3;
 				}
+				pthread_mutex_unlock(&clock);
 #endif // RVC_OS_WIN
 			}
 			break;
@@ -1302,10 +1305,13 @@ private:
 #ifdef RVC_OS_WIN
 				InterlockedCompareExchange(&m_lCaptureEnvOptCount, 1, 0);
 #else
+				pthread_mutex_t clock = PTHREAD_MUTEX_INITIALIZER;
+				pthread_mutex_lock(&clock);
 				LONG* plTemp = &m_lCaptureEnvOptCount;
 				if (0 == *plTemp) {
 					*plTemp = 1;
 				}
+				pthread_mutex_unlock(&clock);
 #endif // RVC_OS_WIN
 			} 
 			break;
@@ -1315,10 +1321,13 @@ private:
 #ifdef RVC_OS_WIN
 				InterlockedCompareExchange(&m_lCaptureEnvOptCount, 1, 0);
 #else
+				pthread_mutex_t clock = PTHREAD_MUTEX_INITIALIZER;
+				pthread_mutex_lock(&clock);
 				LONG* plTemp = &m_lCaptureEnvOptCount;
 				if (0 == *plTemp) {
 					*plTemp = 1;
 				}
+				pthread_mutex_unlock(&clock);
 #endif // RVC_OS_WIN
 			}
 			break;
@@ -1408,7 +1417,7 @@ private:
 				Dbg("[dbg] usbcam %s inserted.", pszMessage);
 				//huchen add for support usb inout,camera config AutoCorrect 
 				if (m_bCustomerwareBegin){
-					if (/*m_bIsPadType&&*/!m_bStartCamera&&!m_bExternControlCam) {
+					if (!m_bStartCamera&&!m_bExternControlCam) {
 						CSimpleStringA strSessionId;
 						CSmartPointer<IEntityFunction> Func = GetFunction();
 						Func->GetSysVar("SessionID", strSessionId);
@@ -1422,8 +1431,6 @@ private:
 			{
 				Dbg("[dbg] usb cam %s removed.", pszMessage);
 				int nEnv = capture_get_video_device_id((LPCTSTR)conf.strVideoEnv);
-				// comment by ly@2019/03/19
-				//if(strstr((LPCTSTR)conf.strVideoEnv,pszMessage))
 				if(nEnv<0)
 				{
 					// 对低柜双屏版屏蔽外接摄像头拔出事件 edit by ly@2018/10
@@ -1438,21 +1445,6 @@ private:
 						Dbg("[dbg] ExternalCameraRemoved broadcast sent!");
 					}
 
-					// comment by ly@2019/03/19
-					//// add by ly at 20161110
-					//// notify to rvcweb that inner camera is switching
-					//SetCameraSysVar(CAMERA_START_ING);
-					//ExternalCameraStateChanged evt1;
-					//evt1.statemsg = CSimpleStringA2W("内置摄像头启动中,请稍等……");
-					//evt1.camname = CSimpleStringA2W(strEnvCam);
-					//SpSendBroadcast(GetFunction(), SP_MSG_OF(ExternalCameraStateChanged), SP_MSG_SIG_OF(ExternalCameraStateChanged), evt1);
-					//Dbg("[dbg] ExternalCameraStateChanged broadcast sent!");
-					//
-					//::Sleep(1000); // 延迟1s后切换内置
-					//// 如果当前正在使用外接摄像头,则停用之
-					//Dbg("[dbg] stop external camera.");
-					//StopUSBCamera();
-
 					// 停止摄像头 add by ly@2019/03/19
 					if (m_bStartCamera&&!m_bExternControlCam)
 					{
@@ -1486,68 +1478,6 @@ private:
 		case LOG_EVT_RECORDFAILED: // add by ly at 20160713(edit by ly@2018/06/08)
 			{
 				Dbg("[dbg] record failed event.");
-				//GetFunction()->KillTimer(1);
-				//if (m_bIsPadType)
-				//{
-				//	LogEvent(Severity_Middle, LOG_EVT_UI_STOPRECORD, NULL);
-				//	m_nCameraErrorCode = Error_EnvCamera;
-				//	ChangeSysvar(m_nCameraErrorCode);
-				//	//重启ENV摄像头
-				//	if((m_nCameraErrorCode == Error_EnvCamera)&&(m_nEnvCameraRestartNum<CAMERA_RESTARTNUM))
-				//	{
-				//		Dbg("[dbg] Restart EnvCamera as Error_EnvCamera.");
-				//		if (ReStartCamera(ENVCAMERA) != Error_Succeed)
-				//		{
-				//			m_nEnvCameraRestartNum++;
-				//		}
-				//		else
-				//		{
-				//			m_nEnvCameraRestartNum = 0;
-				//			m_nCameraErrorCode = Error_Succeed;
-				//			ChangeSysvar(m_nCameraErrorCode);
-				//			m_iEnvEmptyTimes = 0;
-				//		}
-				//	}
-				//}
-				//else
-				//{
-				//	LogEvent(Severity_Middle, EVENT_MOD_END_RECORD,NULL);
-				//	//重启ENV摄像头
-				//	if(m_nEnvCameraRestartNum<CAMERA_RESTARTNUM)
-				//	{
-				//		if (ReStartCamera(ENVCAMERA) != Error_Succeed)
-				//		{
-				//			m_nEnvCameraRestartNum++;
-				//			m_nCameraErrorCode = Error_EnvCamera;
-				//			ChangeSysvar(m_nCameraErrorCode);
-				//		}
-				//		else
-				//		{
-				//			m_nEnvCameraRestartNum = 0;
-				//			m_nCameraErrorCode = Error_Succeed;
-				//			ChangeSysvar(m_nCameraErrorCode);
-				//			m_iEnvEmptyTimes = 0;
-				//		}
-				//	}
-				//	//重启OPT摄像头
-				//	if(m_nEnvCameraRestartNum<CAMERA_RESTARTNUM)
-				//	{
-				//		if (ReStartCamera(OPTCAMERA) != Error_Succeed)
-				//		{
-				//			m_nEnvCameraRestartNum++;
-				//			m_nCameraErrorCode = Error_OptCamera;
-				//			ChangeSysvar(m_nCameraErrorCode);
-				//		}
-				//		else
-				//		{
-				//			m_nEnvCameraRestartNum = 0;
-				//			m_nCameraErrorCode = Error_Succeed;
-				//			ChangeSysvar(m_nCameraErrorCode);
-				//			m_iEnvEmptyTimes = 0;
-				//		}
-				//	}
-				//}
-				//GetFunction()->SetTimer(1, this, 5000);
 				GetFunction()->KillTimer(1);
 				//edit by ly @2018/01/17
 				LogEvent(Severity_Middle, EVENT_MOD_END_RECORD, NULL);