Browse Source

Z991239-2055 #comment fix: 连线支持设置最大音量

陈礼鹏80274480 4 years ago
parent
commit
bdbcb95ff8

+ 7 - 1
Module/mod_sipphone/audio_pulse.cpp

@@ -60,13 +60,19 @@ int AudioPulseMgr::audio_get_device_volume(int* ivolume, const char* pstrname, b
 	if (ilast >= 5) {
 		inum++;
 	}
+
 	*ivolume = inum;
 
 	return iret;
 }
 
-int AudioPulseMgr::audio_set_device_volume(int ivolume, const char* pstrname, bool binput)
+int AudioPulseMgr::audio_set_device_volume(int ivolume, int imax, const char* pstrname, bool binput)
 {
+	if (imax > 0 && imax < 100) {
+		if (ivolume > imax){
+			ivolume = imax;
+		}
+	}
 	int ivol = ivolume * RVC_MAX_VOLUME / 100;
 	return m_pAudioMgr->audio_set_device_volume(ivol, pstrname, binput);
 }

+ 1 - 1
Module/mod_sipphone/audio_pulse.h

@@ -20,7 +20,7 @@ public:
 	int audio_get_device_id(const char* pstrname, bool binput);
 
 	int audio_get_device_volume(int* ivolume, const char* pstrname, bool binput);
-	int audio_set_device_volume(int ivolume, const char* pstrname, bool binput);
+	int audio_set_device_volume(int ivolume, int imax, const char* pstrname, bool binput);
 
 private:
 	IAudioMgr* m_pAudioMgr;

+ 27 - 14
Module/mod_sipphone/mod_sipphone.cpp

@@ -39,6 +39,10 @@ using namespace SelfChecker;
 #define DEVICE_PICKUP_IN	3
 
 
+#ifndef RVC_MAX_VOLUME
+#define RVC_MAX_VOLUME 100
+#endif
+
 enum ePickupMicrophoneState
 {
 	ePickupMicrophoneState_On,
@@ -277,6 +281,7 @@ public:
 	{
 		m_kept_volume_in[0] = m_kept_volume_in[1] = 0;
 		m_kept_volume_out[0] = m_kept_volume_out[1] = 0;
+		m_volume_max[0] = m_volume_max[1] = 100;
 #ifdef RVC_OS_WIN
 		m_pKeeperIn[0] = m_pKeeperIn[1] = NULL;
 		m_pKeeperOut[0] = m_pKeeperOut[1] = NULL;
@@ -1105,7 +1110,7 @@ public:
 #else
 				if (m_pAudioMgr)
 				{
-					m_pAudioMgr->audio_set_device_volume(num.nValue, conf.audio_handfree_out_dev, false);
+					m_pAudioMgr->audio_set_device_volume(num.nValue,m_volume_max[DEV_HANDFREE], conf.audio_handfree_out_dev, false);
 					m_kept_volume_out[DEV_HANDFREE] = num.nValue;
 					SendAudioDeviceVolumn(DEVICE_HANDFREE_OUT);
 					SaveAudioRunConfig(m_kept_volume_out[DEV_HANDFREE], m_kept_volume_out[DEV_PICKUP], m_kept_volume_in[DEV_HANDFREE], m_kept_volume_in[DEV_PICKUP]);
@@ -1147,7 +1152,7 @@ public:
 				{
 					if (eStand2sType == m_eDeviceType)
 					{
-						m_pAudioMgr->audio_set_device_volume(num.nValue, conf.audio_pickup_out_dev, false);
+						m_pAudioMgr->audio_set_device_volume(num.nValue, m_volume_max[DEV_PICKUP], conf.audio_pickup_out_dev, false);
 						m_kept_volume_out[DEV_PICKUP] = num.nValue;
 						SendAudioDeviceVolumn(DEVICE_PICKUP_OUT);
 						SaveAudioRunConfig(m_kept_volume_out[DEV_HANDFREE], m_kept_volume_out[DEV_PICKUP], m_kept_volume_in[DEV_HANDFREE], m_kept_volume_in[DEV_PICKUP]);
@@ -1185,7 +1190,7 @@ public:
 #else
 				if (m_pAudioMgr)
 				{
-					m_pAudioMgr->audio_set_device_volume(num.nValue, conf.audio_handfree_in_dev, true);
+					m_pAudioMgr->audio_set_device_volume(num.nValue, RVC_MAX_VOLUME, conf.audio_handfree_in_dev, true);
 					m_kept_volume_in[DEV_HANDFREE] = num.nValue;
 					SendAudioDeviceVolumn(DEVICE_HANDFREE_IN);
 					SaveAudioRunConfig(m_kept_volume_out[DEV_HANDFREE], m_kept_volume_out[DEV_PICKUP], m_kept_volume_in[DEV_HANDFREE], m_kept_volume_in[DEV_PICKUP]);
@@ -1227,7 +1232,7 @@ public:
 				{
 					if (eStand2sType == m_eDeviceType)
 					{
-						m_pAudioMgr->audio_set_device_volume(num.nValue, conf.audio_pickup_in_dev, true);
+						m_pAudioMgr->audio_set_device_volume(num.nValue, RVC_MAX_VOLUME, conf.audio_pickup_in_dev, true);
 						m_kept_volume_in[DEV_PICKUP] = num.nValue;
 						SendAudioDeviceVolumn(DEVICE_PICKUP_IN);
 						SaveAudioRunConfig(m_kept_volume_out[DEV_HANDFREE], m_kept_volume_out[DEV_PICKUP], m_kept_volume_in[DEV_HANDFREE], m_kept_volume_in[DEV_PICKUP]);
@@ -1303,8 +1308,7 @@ public:
 	}
 
 
-#ifdef RVC_OS_WIN
-#else
+#ifdef RVC_OS_LINUX
 	ErrorCodeEnum RvcGetAudioDeviceInfo()
 	{
 		ErrorCodeEnum Error = Error_Param;
@@ -1336,10 +1340,10 @@ public:
 		if (eStand2sType == m_eDeviceType) {
 			Dbg("handfree out volume is %d, handfree in volume is %d, pickup out volume is %d, pickup in volume %d", m_kept_volume_out[DEV_HANDFREE], m_kept_volume_in[DEV_HANDFREE], m_kept_volume_out[DEV_PICKUP], m_kept_volume_in[DEV_PICKUP]);
 			if (m_pAudioMgr){
-				m_pAudioMgr->audio_set_device_volume(m_kept_volume_out[DEV_HANDFREE], conf.audio_handfree_out_dev, false);
-				m_pAudioMgr->audio_set_device_volume(m_kept_volume_in[DEV_HANDFREE], conf.audio_handfree_in_dev, true);
-				m_pAudioMgr->audio_set_device_volume(m_kept_volume_out[DEV_PICKUP], conf.audio_pickup_out_dev, false);
-				m_pAudioMgr->audio_set_device_volume(m_kept_volume_in[DEV_PICKUP], conf.audio_pickup_in_dev, true);
+				m_pAudioMgr->audio_set_device_volume(m_kept_volume_out[DEV_HANDFREE], m_volume_max[DEV_HANDFREE], conf.audio_handfree_out_dev, false);
+				m_pAudioMgr->audio_set_device_volume(m_kept_volume_in[DEV_HANDFREE], RVC_MAX_VOLUME, conf.audio_handfree_in_dev, true);
+				m_pAudioMgr->audio_set_device_volume(m_kept_volume_out[DEV_PICKUP], m_volume_max[DEV_PICKUP], conf.audio_pickup_out_dev, false);
+				m_pAudioMgr->audio_set_device_volume(m_kept_volume_in[DEV_PICKUP], RVC_MAX_VOLUME, conf.audio_pickup_in_dev, true);
 			}
 		}
 		return Error;
@@ -1851,8 +1855,10 @@ private:
 				table.AddEntryBoolean("audio", "handfree_aec", conf->audio_handfree_aec, false);
 				table.AddEntryInt("audio", "handfree_in_volume", m_kept_volume_in[DEV_HANDFREE], 0);
 				table.AddEntryInt("audio", "handfree_out_volume", m_kept_volume_out[DEV_HANDFREE], 0);
+				table.AddEntryInt("audio", "handfree_out_max", m_volume_max[DEV_HANDFREE], 100);
 				table.AddEntryInt("audio", "pickup_in_volume", m_kept_volume_in[DEV_PICKUP], 0);
 				table.AddEntryInt("audio", "pickup_out_volume", m_kept_volume_out[DEV_PICKUP], 0);
+				table.AddEntryInt("audio", "pickup_out_max", m_volume_max[DEV_PICKUP], 100);
 				table.AddEntryInt("video", "quant", conf->quant, 0);
 				table.AddEntryInt("video", "mtu", conf->mtu, 0);
 				Error = table.Load(spRootConfig);
@@ -1863,9 +1869,10 @@ private:
 #else
 					id = m_pAudioMgr->audio_get_device_id(strHandFreeIn.GetData(), true);
 #endif
-					if (id == -1) 
-					{
+					if (id == -1) {
 						Dbg("audio handfree in device %s does not exist!", (LPCSTR)strHandFreeIn);
+						CSimpleStringA strErrMsg = "外部麦克风配置错误,请重新配置!";
+						LogWarn(Severity_Middle, Error_Param, 0, strErrMsg);
 						Error = Error_Param;
 					}
 					strcpy(conf->audio_handfree_in_dev, strHandFreeIn);
@@ -1875,9 +1882,10 @@ private:
 #else
 					id = m_pAudioMgr->audio_get_device_id(strHandFreeOut.GetData(), false);
 #endif
-					if (id == -1) 
-					{
+					if (id == -1) {
 						Dbg("audio handfree out device %s does not exist!", (LPCSTR)strHandFreeOut);
+						CSimpleStringA strErrMsg = "外部扬声器配置错误,请重新配置!";
+						LogWarn(Severity_Middle, Error_Param, 0, strErrMsg);
 						Error = Error_Param;
 					}
 					strcpy(conf->audio_handfree_out_dev, strHandFreeOut);
@@ -1889,6 +1897,8 @@ private:
 #endif
 					if (id == -1) {
 						Dbg("audio pickup in device %s does not exist!", (LPCSTR)strPickupIn);
+						CSimpleStringA strErrMsg = "话筒麦克风(大机)配置错误,请重新配置!";
+						LogWarn(Severity_Middle, Error_Param, 0, strErrMsg);
 						Error = Error_Param;
 					}
 					strcpy(conf->audio_pickup_in_dev, strPickupIn);
@@ -1901,6 +1911,8 @@ private:
 					
 					if (id == -1) {
 						Dbg("audio device %s does not exist!", (LPCSTR)strPickupOut);
+						CSimpleStringA strErrMsg = "话筒扬声器(大机)配置错误,请重新配置!";
+						LogWarn(Severity_Middle, Error_Param, 0, strErrMsg);
 						Error = Error_Param;
 					}
 					strcpy(conf->audio_pickup_out_dev, strPickupOut);
@@ -2098,6 +2110,7 @@ private:
 public:
 	int m_kept_volume_in[2];
 	int m_kept_volume_out[2];
+	int m_volume_max[2];
 #ifdef RVC_OS_WIN
 	void* m_pKeeperIn[2];
 	void* m_pKeeperOut[2];