瀏覽代碼

Z991239-5945 #comment 兼容单摄像头故障场景

80274480 10 月之前
父節點
當前提交
2c2e40a6a0

+ 1 - 2
Module/mod_mediacontroller/capture.cpp

@@ -1899,7 +1899,7 @@ namespace MediaController {
 			if (dev_name != NULL && strlen(dev_name) > 1 && 
 				strstr(dev_name, ";") == NULL) 
 			{
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("[dbg] device_path: %s",t2);
+				//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("[dbg] device_path: %s",t2);
 				if (strstr(t2,dev_name) != NULL) 
 				{
 					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("[dbg] %s founded in %d cameras.", dev_name, n);
@@ -1920,7 +1920,6 @@ namespace MediaController {
 #else
 		return rvc_videocap_get_video_device_id(dev_name);
 #endif // RVC_OS_WIN
-		
 	}
 
 	int capture_lib_init(int *ivideonum)

+ 11 - 8
Module/mod_mediacontroller/mod_mediacontroller.cpp

@@ -806,7 +806,7 @@ void CMediaControllerEntity::OnTimeCameraStatusCheck()
 	}
 
 	//重新打开摄像头
-	if((m_nCameraErrorCode == Error_EnvCamera)&&(iEnvCameraRestartNum<CAMERA_RESTARTNUM))
+	if((m_nCameraErrorCode == Error_EnvCamera)&&(iEnvCameraRestartNum<CAMERA_RESTARTNUM)&&(NULL != m_capture->env_video))
 	{
 		if (ReStartCamera(ENVCAMERA) != Error_Succeed){
 			iEnvCameraRestartNum++;
@@ -821,7 +821,7 @@ void CMediaControllerEntity::OnTimeCameraStatusCheck()
 			LogWarn(Severity_Low, Error_Debug, LOG_EVT_MEDIACONTROLLER_RESTART_CAME_SUCCESS, "restart env camera success.");
 		}
 	}
-	else if((m_nCameraErrorCode == Error_OptCamera)&&(iOptCameraRestartNum<CAMERA_RESTARTNUM)&&(eStand2sType == m_eDeviceType))
+	else if((m_nCameraErrorCode == Error_OptCamera)&&(iOptCameraRestartNum<CAMERA_RESTARTNUM)&&(eStand2sType == m_eDeviceType)&&(NULL != m_capture->opt_video))
 	{
 		if (ReStartCamera(OPTCAMERA) != Error_Succeed) {
 			iOptCameraRestartNum++;
@@ -838,7 +838,7 @@ void CMediaControllerEntity::OnTimeCameraStatusCheck()
 	}
 	else if (m_nCameraErrorCode == Error_AllCamera)
 	{
-		if (iEnvCameraRestartNum<CAMERA_RESTARTNUM)
+		if ((iEnvCameraRestartNum<CAMERA_RESTARTNUM) && (NULL != m_capture->env_video))
 		{
 			if (ReStartCamera(ENVCAMERA) != Error_Succeed) {
 				iEnvCameraRestartNum++;
@@ -854,7 +854,7 @@ void CMediaControllerEntity::OnTimeCameraStatusCheck()
 			}
 		}
 
-		if((iOptCameraRestartNum<CAMERA_RESTARTNUM)&&(eStand2sType == m_eDeviceType))
+		if((iOptCameraRestartNum<CAMERA_RESTARTNUM)&&(eStand2sType == m_eDeviceType)&&(NULL != m_capture->opt_video))
 		{
 			if (ReStartCamera(OPTCAMERA) != Error_Succeed) {
 				iOptCameraRestartNum++;
@@ -2516,6 +2516,7 @@ void MediaServiceSession::Handle_TurnOnCamera(SpReqAnsContext<MediaService_TurnO
 	DbgToBeidou(ctx->link, __FUNCTION__)();
 	
 	if (m_pEntity->m_bJsOccupyCamera) {
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA280C").setAPI(__FUNCTION__)("摄像头正在使用中,请断开连线后再试");
 		ctx->Answer(Error_DevNotAvailable, LOG_WARN_JSOCCUPYCAMERAING);
 		return;
 	}
@@ -2532,20 +2533,22 @@ void MediaServiceSession::Handle_TurnOnCamera(SpReqAnsContext<MediaService_TurnO
 #endif
 #endif
 
-	if (Error != Error_AllCamera) {
-		if (Error_Succeed == Error) {
+	ErrorCodeEnum CameraErrorCode = m_pEntity->m_nCameraErrorCode;
+	if (Error_AllCamera != Error || Error_AllCamera != CameraErrorCode) {
+		if (Error_Succeed == Error || Error_Succeed == CameraErrorCode) {
 			ctx->Ans.result = 0;
 		}
-		else if (Error_EnvCamera == Error) {
+		else if (Error_EnvCamera == Error || Error_EnvCamera == CameraErrorCode) {
 			ctx->Ans.result = -1;
 		}
-		else if (Error_EnvCamera == Error) {
+		else if (Error_OptCamera == Error || Error_OptCamera == CameraErrorCode) {
 			ctx->Ans.result = -2;
 		}
 		ctx->Answer(Error_Succeed);
 	}
 	else {
 		ctx->Ans.result = -3;
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA2808").setAPI(__FUNCTION__)("上下摄像头都故障,请联系厂商处理");
 		ctx->Answer(Error_AllCamera, LOG_WARN_ALLCAMERA_ERRORS);
 	}
 }

+ 12 - 3
Module/mod_sipphone/video_render.cpp

@@ -64,10 +64,14 @@ static int rvc_video_shm_enqueue(Clibvideoqueue* shm_queue, video_frame* frame,
 	}
 }
 
-static int get_local_video_frame(video_frame** frame, int itype, Clibvideoqueue* local_video_queue, int iwidth, int iheight, IplImage* personimage, IplImage* personmask)
+static bool get_local_video_frame(video_frame** frame, int itype, Clibvideoqueue* local_video_queue, int iwidth, int iheight, IplImage* personimage, IplImage* personmask)
 {
+	bool result = false;
 	video_frame* tmp_frame_preview = NULL;
 	tmp_frame_preview = video_frame_new(iwidth, iheight, VIDEO_FORMAT_RGB24);
+	if (NULL == tmp_frame_preview) {
+		return result;
+	}
 	videoq_frame frm;
 	frm.data = tmp_frame_preview->data[0];
 
@@ -81,7 +85,7 @@ static int get_local_video_frame(video_frame** frame, int itype, Clibvideoqueue*
 	}
 
 	//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("%s:%d, session->video_shm_q_preview = 0x%08x.", __FUNCTION__, __LINE__, local_video_queue);
-	bool result = local_video_queue->GetVideo(&frm, VIDEOQUEUE_FLAG_HORIZONTAL_FLIP);
+	result = local_video_queue->GetVideo(&frm, VIDEOQUEUE_FLAG_HORIZONTAL_FLIP);
 	if (result){
 		if (1 == itype) {
 			if (NULL != personimage && NULL != personmask)
@@ -105,8 +109,13 @@ static int get_local_video_frame(video_frame** frame, int itype, Clibvideoqueue*
 		}
 		*frame = tmp_frame_preview;
 	}
+	else {
+		video_frame_delete(tmp_frame_preview);
+		tmp_frame_preview = NULL;
+	}
+	
 
-	return 0;
+	return result;
 }