Forráskód Böngészése

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

陈礼鹏80274480 4 éve
szülő
commit
5dca8919ec

+ 12 - 13
Module/mod_mediacontroller/capture.cpp

@@ -597,30 +597,29 @@ static void env_cap_on_frame(void *user_data, video_frame *frame)
 	{
 		if (*cap->config.ref_env_capture_count) 
 		{
-			Dbg("env camera ref_env_capture_count=%d",*cap->config.ref_env_capture_count);
+			Dbg("env camera ref_env_capture_count=%d", *cap->config.ref_env_capture_count);
 #ifdef RVC_OS_WIN
 			InterlockedDecrement(cap->config.ref_env_capture_count);
 #else
 			//__sync_fetch_and_sub(cap->config.ref_env_capture_count, 1);
-			pthread_mutex_lock(&cap->config.env_mutex);
+			pthread_mutex_lock(cap->config.env_mutex);
 			*(cap->config.ref_env_capture_count) -= 1;
-			pthread_mutex_unlock(&cap->config.env_mutex);
+			pthread_mutex_unlock(cap->config.env_mutex);
 #endif
 			LogEvent(Severity_Middle, MOD_EVENT_MEDIACONTROLLER_FINISHED_CAPTURE_ENV, "agent capture env ok, and capture env finished!");
 		} 
 		else if (*cap->config.ref_envopt_capture_count & 2) 
 		{
-			Dbg("env camera ref_envopt_capture_count=%d",*cap->config.ref_envopt_capture_count);
+			Dbg("env camera ref_envopt_capture_count=%d", *cap->config.ref_envopt_capture_count);
 #ifdef RVC_OS_WIN
 			_InterlockedAnd(cap->config.ref_envopt_capture_count, 0xfffffffD);
 #else
 			//__sync_fetch_and_add(cap->config.ref_env_capture_count, 0xfffffffD);
-			pthread_mutex_lock(&cap->config.envopt_mutex);
+			pthread_mutex_lock(cap->config.envopt_mutex);
 			LONG lcount = *(cap->config.ref_envopt_capture_count);
 			*(cap->config.ref_envopt_capture_count) = (lcount & 0xfffffffD);
-			pthread_mutex_unlock(&cap->config.envopt_mutex);
+			pthread_mutex_unlock(cap->config.envopt_mutex);
 #endif // RVC_OS_WIN
-
 			if (*cap->config.ref_envopt_capture_count == 0) 
 			{
 				LogEvent(Severity_Middle, MOD_EVENT_MEDIACONTROLLER_FINISHED_CAPTURE_ENVOPT, "agent capture env ok, and capture env opt finished!");
@@ -779,23 +778,23 @@ 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_lock(&cap->config.opt_mutex);
+			pthread_mutex_lock(cap->config.opt_mutex);
 			*(cap->config.ref_opt_capture_count) -= 1;
-			pthread_mutex_unlock(&cap->config.opt_mutex);
+			pthread_mutex_unlock(cap->config.opt_mutex);
 #endif
 			LogEvent(Severity_Middle, MOD_EVENT_MEDIACONTROLLER_FINISHED_CAPTURE_OPT, "agent capture opt ok, and capture opt finished!");
 		} 
 		else if (*cap->config.ref_envopt_capture_count&1) 
 		{
-			Dbg("opt camera ref_envopt_capture_count=%d",*cap->config.ref_envopt_capture_count);
+			Dbg("opt camera ref_envopt_capture_count=%d", *cap->config.ref_envopt_capture_count);
 #ifdef RVC_OS_WIN
 			if (InterlockedDecrement(cap->config.ref_envopt_capture_count) == 0) 
 #else
 			//__sync_fetch_and_sub(cap->config.ref_envopt_capture_count,1);
-			pthread_mutex_lock(&cap->config.envopt_mutex);
+			pthread_mutex_lock(cap->config.envopt_mutex);
 			*(cap->config.ref_envopt_capture_count) -= 1;
-			pthread_mutex_unlock(&cap->config.envopt_mutex);
-			if (0 == cap->config.ref_envopt_capture_count)
+			pthread_mutex_unlock(cap->config.envopt_mutex);
+			if (0 == *cap->config.ref_envopt_capture_count)
 #endif
 			{
 				LogEvent(Severity_Middle, MOD_EVENT_MEDIACONTROLLER_FINISHED_CAPTURE_ENVOPT, "agent capture opt ok, and capture envopt finished!");

+ 3 - 3
Module/mod_mediacontroller/capture.h

@@ -51,9 +51,9 @@ namespace MediaController {
 		volatile LONG *ref_envopt_capture_count;
 #ifdef RVC_OS_WIN
 #else
-		pthread_mutex_t env_mutex;
-		pthread_mutex_t opt_mutex;
-		pthread_mutex_t envopt_mutex;
+		pthread_mutex_t* env_mutex;
+		pthread_mutex_t* opt_mutex;
+		pthread_mutex_t* envopt_mutex;
 #endif
 	}capture_config_t;
 

+ 25 - 14
Module/mod_mediacontroller/mod_mediacontroller.cpp

@@ -85,7 +85,15 @@ public:
 		m_lCaptureEnvOptCount(0), m_lCaptureOptCount(0), m_iEnvEmptyTimes(0), m_iOptEmptyTimes(0),m_bSendCameraError(false),
 		m_nEnvCameraRestartNum(0),m_nOptCameraRestartNum(0), m_nCameraCount(2),m_pSelfcheckClient(NULL),
 		strFrontCam("$"), strRearCam("$"), strEnvCam("$"), strUSBCam("$"), strEwsCam("$"), m_bCustomerwareBegin(false),
-		m_pAudioRenderObj(NULL), m_bRecordPCM(false),m_bIsRemoteRecord(false),m_bHasStartSpeakerRender(false){}
+		m_pAudioRenderObj(NULL), m_bRecordPCM(false),m_bIsRemoteRecord(false),m_bHasStartSpeakerRender(false){
+	
+#ifdef RVC_OS_WIN
+#else
+		m_env_mutex = PTHREAD_MUTEX_INITIALIZER;
+		m_opt_mutex = PTHREAD_MUTEX_INITIALIZER;
+		m_envopt_mutex = PTHREAD_MUTEX_INITIALIZER;
+#endif
+	}
 
 	virtual ~CMediaControllerEntity() {}
 	virtual const char *GetEntityName() const { return "MediaController"; }
@@ -1287,13 +1295,12 @@ private:
 #ifdef RVC_OS_WIN
 				InterlockedCompareExchange(&m_lCaptureEnvOptCount, 3, 0);
 #else
-				pthread_mutex_t clock = PTHREAD_MUTEX_INITIALIZER;
-				pthread_mutex_lock(&clock);
+				pthread_mutex_lock(&m_envopt_mutex);
 				LONG* plTemp = &m_lCaptureEnvOptCount;
 				if (0 == *plTemp) {
 					*plTemp = 3;
 				}
-				pthread_mutex_unlock(&clock);
+				pthread_mutex_unlock(&m_envopt_mutex);
 #endif // RVC_OS_WIN
 			}
 			break;
@@ -1303,13 +1310,12 @@ private:
 #ifdef RVC_OS_WIN
 				InterlockedCompareExchange(&m_lCaptureEnvOptCount, 1, 0);
 #else
-				pthread_mutex_t clock = PTHREAD_MUTEX_INITIALIZER;
-				pthread_mutex_lock(&clock);
+				pthread_mutex_lock(&m_envopt_mutex);
 				LONG* plTemp = &m_lCaptureEnvOptCount;
 				if (0 == *plTemp) {
 					*plTemp = 1;
 				}
-				pthread_mutex_unlock(&clock);
+				pthread_mutex_unlock(&m_envopt_mutex);
 #endif // RVC_OS_WIN
 			} 
 			break;
@@ -1319,13 +1325,12 @@ private:
 #ifdef RVC_OS_WIN
 				InterlockedCompareExchange(&m_lCaptureEnvOptCount, 1, 0);
 #else
-				pthread_mutex_t clock = PTHREAD_MUTEX_INITIALIZER;
-				pthread_mutex_lock(&clock);
+				pthread_mutex_lock(&m_envopt_mutex);
 				LONG* plTemp = &m_lCaptureEnvOptCount;
 				if (0 == *plTemp) {
 					*plTemp = 1;
 				}
-				pthread_mutex_unlock(&clock);
+				pthread_mutex_unlock(&m_envopt_mutex);
 #endif // RVC_OS_WIN
 			}
 			break;
@@ -1783,12 +1788,11 @@ private:
 			conf.ref_envopt_capture_count = &m_lCaptureEnvOptCount;
 #ifdef RVC_OS_WIN
 #else
-			conf.env_mutex = PTHREAD_MUTEX_INITIALIZER;
-			conf.opt_mutex = PTHREAD_MUTEX_INITIALIZER;
-			conf.envopt_mutex = PTHREAD_MUTEX_INITIALIZER;
+			conf.env_mutex = &m_env_mutex;
+			conf.opt_mutex = &m_opt_mutex;
+			conf.envopt_mutex = &m_envopt_mutex;
 #endif
 
-
 			Error = (ErrorCodeEnum)capture_create(&conf, &m_capture);
 			if (Error == Error_Succeed) 
 			{
@@ -2248,6 +2252,13 @@ private:
 	bool m_bRecordPCM;						//add by clp 20200401   是否单独录制PCM音频
 	int m_nSalesAudioSmpPsec;				//add by clp 20200402   销售双录音频采样率
 	bool m_bIsRemoteRecord;					//add by clp 20200403	是否是远程双录
+
+#ifdef RVC_OS_WIN
+#else
+	pthread_mutex_t m_env_mutex;
+	pthread_mutex_t m_opt_mutex;
+	pthread_mutex_t m_envopt_mutex;
+#endif
 };
 
 SelfChekerClient::SelfChekerClient( CMediaControllerEntity *pEntity ) : SelfCheckerService_ClientBase(pEntity)

+ 0 - 115
Module/mod_snapshot/mod_snapshot.vcxproj

@@ -1,115 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{3018D41D-0521-4311-8F79-AC3AB343E491}</ProjectGuid>
-    <Keyword>Win32Proj</Keyword>
-    <RootNamespace>mod_snapshot</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>Windows7.1SDK</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <Import Project="..\modmake.setting" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>true</LinkIncremental>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <LinkIncremental>false</LinkIncremental>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;MOD_SNAPSHOT_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>$(FrameworkHeadRoot)\libtoolkit;$(FrameworkHeadRoot)\Common;$(OtherHeadPath)\libvideoqueue;$(OtherHeadPath)\libfacecapture;$(OtherHeadPath)\libbizchan;$(ThirdPartyHeadRoot)\opencv\include\opencv;$(OtherHeadPath)\libvideoframework</AdditionalIncludeDirectories>
-      <!--<AdditionalIncludeDirectories>..\..\Other\libvideoqueue;..\..\Other\libfacecapture;..\..\Other\libbizchan;..\..\Other\libvideoframework\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>-->
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalDependencies>$(ThirdPartyLib)\opencv_highgui230.lib;$(ThirdPartyLib)\opencv_video230.lib;$(ThirdPartyLib)\opencv_core230.lib;$(ThirdPartyLib)\opencv_imgproc230.lib;$(FrameworkLib)\SpBase.lib;$(FrameworkLib)\libtoolkit.lib</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-    	<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>    
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MOD_SNAPSHOT_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>$(FrameworkHeadRoot)\libtoolkit;$(FrameworkHeadRoot)\Common;$(OtherHeadPath)\libvideoqueue;$(OtherHeadPath)\libfacecapture;$(OtherHeadPath)\libbizchan;$(ThirdPartyHeadRoot)\opencv\include\opencv;$(OtherHeadPath)\libvideoframework</AdditionalIncludeDirectories>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-      <AdditionalDependencies>$(ThirdPartyLib)\opencv_highgui230.lib;$(ThirdPartyLib)\opencv_video230.lib;$(ThirdPartyLib)\opencv_core230.lib;$(ThirdPartyLib)\opencv_imgproc230.lib;$(FrameworkLib)\SpBase.lib;$(FrameworkLib)\libtoolkit.lib</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="$(FrameworkHeadRoot)\Common\stdafx.cpp" />
-    <ClCompile Include="mod_snapshot.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="$(FrameworkHeadRoot)\Common\stdafx.h" />
-    <ClInclude Include="Event.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <ResourceCompile Include="..\..\Version.rc" />
-  </ItemGroup>
-  <ItemGroup>
-  	<ProjectReference Include="..\..\Other\libbizchan\libbizchan.vcxproj">
-      <Project>{2CD0FBBB-F040-4D5E-B9D1-089DBBE175F4}</Project>
-    </ProjectReference>
-    <ProjectReference Include="..\..\Other\libfacecapture\libfacecapture.vcxproj">
-      <Project>{461cc6a5-0788-4aac-a94c-c874c0be04f9}</Project>
-    </ProjectReference>
-    <ProjectReference Include="..\..\Other\libvideoframework\libvideoframework.vcxproj">
-      <Project>{a03cf9de-36c7-4c86-8ce3-ad4d564f6341}</Project>
-    </ProjectReference>
-    <ProjectReference Include="..\..\Other\libvideohorflip\libvideohorflip.vcxproj">
-      <Project>{91736fa2-f047-4bdb-889b-d7f25f429601}</Project>
-    </ProjectReference>
-    <ProjectReference Include="..\..\Other\libvideoqueue\libvideoqueue.vcxproj">
-      <Project>{24312d88-f752-40c2-a1b9-a55eddd9791a}</Project>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>

+ 0 - 33
Module/mod_snapshot/mod_snapshot.vcxproj.filters

@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup>
-    <Filter Include="Source Files">
-      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
-      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
-    </Filter>
-    <Filter Include="Header Files">
-      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
-      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
-    </Filter>
-    <Filter Include="Resource Files">
-      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
-      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
-    </Filter>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\Framework\Common\stdafx.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="mod_snapshot.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="..\..\Framework\Common\stdafx.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="Event.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-  </ItemGroup>
-</Project>