Ver Fonte

Z991239-5945 #comment 优化摄像头故障时提示功能

80274480 há 8 meses atrás
pai
commit
7a39f93e36

+ 2 - 1
Module/mod_mediacontroller/Event.h

@@ -111,4 +111,5 @@
 #define LOG_EVT_POST_CAMERA_BRIGHTNESSINFO_COST_TIME			0x20899004	//上报摄像头亮度信息耗时
 
 
-
+#define LOG_WARN_JSOCCUPYCAMERAING								0x208A0001	//js层占用摄像头中
+#define LOG_WARN_ALLCAMERA_ERRORS								0x208A0002	//摄像头都故障

+ 17 - 13
Module/mod_mediacontroller/capture.cpp

@@ -1393,17 +1393,19 @@ namespace MediaController {
 
 	DeviceTypeEnum g_eDeviceType;
 
-	int capture_create(const capture_config_t *config, capture_t **p_cap)
+	int capture_create(const capture_config_t *config, capture_t **p_cap, bool bstartaudio)
 	{
 		capture_t *cap = ZALLOC_T(capture_t);
 		cap->handfree_audio = NULL;
 		cap->env_video = NULL;
 		cap->opt_video = NULL;
 		memcpy(&cap->config, config, sizeof(capture_config_t));
-		cap->handfree_audio = audio_capture_create(cap);
-		if (!cap->handfree_audio) {
-			DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("create handfree audio capture object failed!");
-			return Error_Unexpect;
+		if (bstartaudio) {
+			cap->handfree_audio = audio_capture_create(cap);
+			if (!cap->handfree_audio) {
+				DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("create handfree audio capture object failed!");
+				return Error_Unexpect;
+			}
 		}
 
 		int dev_id_env = capture_get_video_device_id(config->strVideoEnv);
@@ -1668,18 +1670,20 @@ namespace MediaController {
 		}
 	}
 
-	ErrorCodeEnum capture_start(capture_t *cap)
+	ErrorCodeEnum capture_start(capture_t *cap, bool bstartaudio)
 	{
 		int rc = 0;
 
-		if ('N' == cap->config.strAudioState[0] || 'P' == cap->config.strAudioState[0]) {
-			ErrorCodeEnum rslt = start_audio_capture(cap->handfree_audio);
-			if (Error_Succeed != rslt) {
-				return rslt;
+		if (bstartaudio) {
+			if ('N' == cap->config.strAudioState[0] || 'P' == cap->config.strAudioState[0]) {
+				ErrorCodeEnum rslt = start_audio_capture(cap->handfree_audio);
+				if (Error_Succeed != rslt) {
+					return rslt;
+				}
+			}
+			else {
+				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("handfree audio is error, not start it.");
 			}
-		}
-		else {
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("handfree audio is error, not start it.");
 		}
 
 		return capture_start_envopt(cap);

+ 2 - 2
Module/mod_mediacontroller/capture.h

@@ -171,10 +171,10 @@ namespace MediaController {
 		rvc_audio_capture_t *rvc_audio;
 	};
 
-	int capture_create(const capture_config_t *config, capture_t **p_cap);
+	int capture_create(const capture_config_t *config, capture_t **p_cap, bool bstartaudio = true);
 	ErrorCodeEnum capture_create(const capture_config_t *config,capture_t *cap,int nCamera);
 	void capture_destroy(capture_t *cap);
-	ErrorCodeEnum capture_start(capture_t *cap);
+	ErrorCodeEnum capture_start(capture_t *cap, bool bstartaudio = true);
 	ErrorCodeEnum start_audio_capture(audio_capture_t *paudio);
 	ErrorCodeEnum capture_start(capture_t *cap,int nCamera);
 	void capture_stop(capture_t *cap);

+ 29 - 15
Module/mod_mediacontroller/mod_mediacontroller.cpp

@@ -1032,11 +1032,11 @@ ErrorCodeEnum CMediaControllerEntity::GetEnvCameraVideoCaptureInfo(CSimpleString
 }
 
 
-ErrorCodeEnum CMediaControllerEntity::StartAllCameras()
+ErrorCodeEnum CMediaControllerEntity::StartAllCameras(bool bstartaudio)
 {
 	ErrorCodeEnum Error = Error_Succeed;
 	if (false == m_bStartCamera){
-		Error = StartCamera();
+		Error = StartCamera(bstartaudio);
 		SetCameraStateInfo(Error);
 
 		if (m_bStartCamera) {
@@ -1085,7 +1085,7 @@ ErrorCodeEnum CMediaControllerEntity::StopCamerasAndRecord()
 
 ErrorCodeEnum CMediaControllerEntity::StartCamerasAndRecord()
 {
-	ErrorCodeEnum CamRet = StartAllCameras();
+	ErrorCodeEnum CamRet = StartAllCameras(true);
 	LogTransactionRecordCtrEvt(1);
 
 	return CamRet;
@@ -1746,7 +1746,7 @@ ErrorCodeEnum CMediaControllerEntity::StopSalesRecordAudioCapture()
 	return Error_Succeed;
 }
 
-ErrorCodeEnum CMediaControllerEntity::StartCamera()
+ErrorCodeEnum CMediaControllerEntity::StartCamera(bool bstartaudio)
 {
 	if (m_capture == NULL)
 	{
@@ -1761,7 +1761,7 @@ ErrorCodeEnum CMediaControllerEntity::StartCamera()
 		conf.envopt_mutex = &m_envopt_mutex;
 #endif
 		conf.uintervaltime = m_interValTime;
-		Error = (ErrorCodeEnum)capture_create(&conf, &m_capture);
+		Error = (ErrorCodeEnum)capture_create(&conf, &m_capture, bstartaudio);
 		if (Error == Error_Succeed) 
 		{
 #ifdef RVC_OS_WIN
@@ -1774,7 +1774,7 @@ ErrorCodeEnum CMediaControllerEntity::StartCamera()
 			m_capture->config.strAudioState = strValue;
 			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Sound Card State is %s.", strValue.GetData());
 
-			Error = capture_start(m_capture);
+			Error = capture_start(m_capture, bstartaudio);
 			if (Error != Error_Succeed)
 			{
 				if((Error == Error_AudioIN)||(Error == Error_AudioOut))
@@ -1867,7 +1867,7 @@ void CMediaControllerEntity::SetCameraStateInfo(ErrorCodeEnum errorcode)
 void CMediaControllerEntity::StartCameraAndSetSysVar()
 {
 	CheckAutoVideoConfig(&conf);
-	ErrorCodeEnum Error = StartCamera();
+	ErrorCodeEnum Error = StartCamera(true);
 	SetCameraStateInfo(Error);
 }
 
@@ -1888,11 +1888,11 @@ ErrorCodeEnum CMediaControllerEntity::ReStartCamera(int nCamera)
 		Error = capture_create(&conf, m_capture, nCamera);
 		if (Error == Error_Succeed) 
 		{
-			Error = capture_start(m_capture,nCamera);
+			Error = capture_start(m_capture, nCamera);
 			if (Error != Error_Succeed)
 			{
 				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("ReStartCamera %d,capture_start fail!", nCamera);
-				capture_destroy(m_capture,nCamera);
+				capture_destroy(m_capture, nCamera);
 				return Error;
 			}
 			else
@@ -2515,7 +2515,13 @@ void MediaServiceSession::Handle_TurnOnCamera(SpReqAnsContext<MediaService_TurnO
 {
 	DbgToBeidou(ctx->link, __FUNCTION__)();
 
-	ErrorCodeEnum Error = m_pEntity->StartAllCameras();
+	DWORD warnCode = 0;
+	
+	if (m_pEntity->m_bJsOccupyCamera) {
+		ctx->Answer(Error_DevNotAvailable, LOG_WARN_JSOCCUPYCAMERAING);
+	}
+
+	ErrorCodeEnum Error = m_pEntity->StartAllCameras(false);
 #ifdef DEVOPS_ON_PRD
 #else
 #ifdef RVC_OS_WIN
@@ -2527,14 +2533,22 @@ void MediaServiceSession::Handle_TurnOnCamera(SpReqAnsContext<MediaService_TurnO
 #endif
 #endif
 
-	if (Error_Succeed == Error) {
-		ctx->Ans.result = 0;
+	if (Error != Error_AllCamera) {
+		if (Error_Succeed == Error) {
+			ctx->Ans.result = 0;
+		}
+		else if (Error_EnvCamera == Error) {
+			ctx->Ans.result = -1;
+		}
+		else if (Error_EnvCamera == Error) {
+			ctx->Ans.result = -2;
+		}
+		ctx->Answer(Error_Succeed);
 	}
 	else {
-		ctx->Ans.result = -1;
+		ctx->Ans.result = -3;
+		ctx->Answer(Error_AllCamera, LOG_WARN_ALLCAMERA_ERRORS);
 	}
-
-	ctx->Answer(Error_Succeed);
 }
 
 void MediaServiceSession::Handle_TurnOffCamera(SpReqAnsContext<MediaService_TurnOffCamera_Req, MediaService_TurnOffCamera_Ans>::Pointer ctx)

+ 2 - 2
Module/mod_mediacontroller/mod_mediacontroller.h

@@ -80,7 +80,7 @@ public:
 	void OnReceivePkt(int sub_type, const char *buffer, int size);
 	ErrorCodeEnum RealSelfCheck();
 	void SendCameraBright();
-	ErrorCodeEnum StartAllCameras();
+	ErrorCodeEnum StartAllCameras(bool bstartaudio = true);
 	ErrorCodeEnum StopAllCameras();
 	ErrorCodeEnum RvcCheckCameraInfo(int iCamNumber);
 
@@ -112,7 +112,7 @@ public:
 	ErrorCodeEnum ChangeSysvar(ErrorCodeEnum op);
 	ErrorCodeEnum StartSalesRecordAudioCapture(bool bRemoteRecord = false);
 	ErrorCodeEnum StopSalesRecordAudioCapture();
-	ErrorCodeEnum StartCamera();
+	ErrorCodeEnum StartCamera(bool bstartaudio = true);
 	void StartCameraAndSetSysVar();
 	ErrorCodeEnum ReStartCamera(int nCamera);
 	virtual CServerSessionBase* OnNewSession(const char* pszRemoteEntityName, const char* pszClass);