Pārlūkot izejas kodu

Z991239-5745 #comment UOS增加音频设备信息上报

80274480 11 mēneši atpakaļ
vecāks
revīzija
37626f83f9

+ 1 - 0
Module/mod_sipphone/CMakeLists.txt

@@ -173,6 +173,7 @@ set(${MODULE_PREFIX}_LIBS  ${MODULE_BASE_LIBS}
 	videorender
 	audiomgr
 	libaudions
+	libpublicFun
 )
 endif(WIN32)
 

+ 39 - 1
Module/mod_sipphone/mod_sipphone.cpp

@@ -858,10 +858,11 @@ ErrorCodeEnum CSIPEntity::__OnStart(ErrorCodeEnum preOperationError)
 	m_pAudioMgr = CreateAudioMgrObj(&t_callback);
 	if (m_pAudioMgr && 0 == m_pAudioMgr->audio_mgr_initialize()) {
 		m_bAudioMgrInited = true;
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setLogCode("QLR0402301A1")("audio manager initialize success");
 	}
 	else {
 		LogWarn(Severity_Middle, Error_Debug, LOG_EVT_SIPPHONE_AUDIOMGR_INITIAL_FAILED, "audio manager initialize failed!");
-		DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM).setResultCode("RTA310B")("音频服务初始化失败");
+		DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM).setLogCode("QLR0402301A1").setResultCode("RTA310B")("音频服务初始化失败");
 	}
 	SetSoundCardSysVar(SOUNDCARD_INIT_STATE);
 
@@ -1335,6 +1336,8 @@ ErrorCodeEnum CSIPEntity::RvcGetAudioDeviceInfo()
 		CSimpleStringA strJsonInData = CSimpleStringA::Format("audio in devices [{%s}]", strJsonIn.GetData());
 		LogWarn(Severity_Low, Error_Debug, LOG_EVT_SIPPHONE_GET_AUDIO_IN_INFOS, strJsonInData.GetData());
 
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setLogCode("QLR0402301A2").setAPI("RvcMedia_GetAudioInDevInfo")(GetAudioDeviceJsonInfos(true).GetData());
+
 		CSimpleStringA strJsonOut("");
 		int icountspeaker = m_pAudioMgr->audio_get_device_count(false);
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("audio output devices(%d):", icountspeaker);
@@ -1350,6 +1353,8 @@ ErrorCodeEnum CSIPEntity::RvcGetAudioDeviceInfo()
 		CSimpleStringA strJsonOutData = CSimpleStringA::Format("audio out devices [{%s}]", strJsonOut.GetData());
 		LogWarn(Severity_Low, Error_Debug, LOG_EVT_SIPPHONE_GET_AUDIO_OUT_INFOS, strJsonOutData.GetData());
 
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setLogCode("QLR0402301A2").setAPI("RvcMedia_GetAudioOutDevInfo")(GetAudioDeviceJsonInfos(false).GetData());
+		
 		Error = Error_Succeed;
 	}
 	return Error;
@@ -2367,6 +2372,39 @@ void CSIPEntity::ShowBothVideo()
 	}
 }
 
+
+CSimpleStringA CSIPEntity::GetAudioDeviceJsonInfos(bool bmicro)
+{
+	CSimpleStringA strAudioDevJson("");
+	if (NULL != m_pAudioMgr) {
+		int iaudiocount = m_pAudioMgr->audio_get_device_count(bmicro);
+		for (int i = 0; i < iaudiocount; i++) {
+			rvc_audio_device_t* audio_dev = m_pAudioMgr->audio_get_device_infos(bmicro, i);
+
+			std::map<std::string, std::string> msgInfo;
+			msgInfo["name"] = audio_dev->name;
+			msgInfo["description"] = audio_dev->description;
+			msgInfo["samprate"] = CSimpleStringA::Format("%d", audio_dev->samprate).GetData();
+			msgInfo["channels"] = CSimpleStringA::Format("%d", audio_dev->channels).GetData();
+			msgInfo["low_latency"] = CSimpleStringA::Format("%.2f", audio_dev->low_latency).GetData();
+			msgInfo["high_latency"] = CSimpleStringA::Format("%.2f", audio_dev->high_latency).GetData();
+		
+			std::pair<bool, std::string> strResult;
+			strResult = generateJsonStr(msgInfo);
+			if (strResult.first) {
+				strAudioDevJson += strResult.second.c_str();
+				strAudioDevJson += ",";
+			}
+		}
+
+		if (strAudioDevJson.GetLength() > 0) {
+			strAudioDevJson[strAudioDevJson.GetLength() - 1] = '\0';
+		}
+	}
+
+	return strAudioDevJson;
+}
+
 #endif
 
 //

+ 1 - 1
Module/mod_sipphone/mod_sipphone.h

@@ -10,7 +10,6 @@ using namespace SIPPhone;
 
 #if defined(RVC_OS_WIN)
 #include "volumekeeper.h"
-#include "iaudiomgrinterface.h"
 #else
 #include "video_render.h"
 #include "Event.h"
@@ -331,6 +330,7 @@ private:
 	void ShowLocalVideo();
 	void HideBothVideo();
 	void ShowBothVideo();
+	CSimpleStringA GetAudioDeviceJsonInfos(bool bmicro);
 #endif //RVC_OS_WIN
 
 	void HandleHandfreeAudioDeviceErrorEvent();

+ 21 - 1
Other/libaudiomgr/iaudiomgrinterface.h

@@ -15,6 +15,10 @@
 #include <stddef.h>
 #include <stdarg.h>
 
+#ifndef MAX_PATH
+#define MAX_PATH 260
+#endif
+
 typedef struct audiocap_param_s
 {
 	/** callbacks */
@@ -27,9 +31,21 @@ typedef struct audiocap_param_s
 	/* called from inner thread, should not block, can be null */
 	void (*on_audio_callback)(const void* input, unsigned long audiolen,void* userdata);
 	void* user_data;
-
 }audiocap_param_t;
 
+#pragma pack(1)
+typedef struct rvc_audio_device_s
+{
+	int id;							/*audo device id*/
+	int channels;					/*max channels*/
+	int samprate;					/*default samplerate*/
+	double low_latency;				/*default low latency*/
+	double high_latency;			/*default high latency*/
+	char name[MAX_PATH];			/*device name*/
+	char description[MAX_PATH];		/*device description*/
+} rvc_audio_device_t;
+#pragma pack()
+
 typedef struct audiomgr_callback_s{
 	void (*debug)(void* user_data, const char* fmt, va_list arg);
 	void (*on_audio_mgr_failed)();
@@ -51,12 +67,16 @@ public:
 #endif
 	virtual int audio_get_device_id(const char* pstrname, bool binput) = 0;
 
+	virtual rvc_audio_device_t* audio_get_device_infos(bool binput, int index) = 0;
+	
 	virtual int audio_get_device_volume(int* ivolume, const char* pstrname, bool binput) = 0;
 	virtual int audio_set_device_volume(int ivolume, const char* pstrname, bool binput) = 0;
 
 	virtual int set_audio_capture_params(audiocap_param_t* param) = 0;
+
 	virtual int start_audio_capture() = 0;
 	virtual int stop_audio_capture() = 0;
+	
 	virtual int audio_mgr_destroy() = 0;
 };
 

+ 15 - 2
Other/libaudiomgr/linux/libaudiomgr_linux.cpp

@@ -137,7 +137,7 @@ static void pa_sourcelist_cb(pa_context* c, const pa_source_info* l, int eol, vo
 		}
 		/*fill device data*/
 		audio_ctx->list_input_devices[audio_ctx->num_input_dev - 1].id = l->index; /*saves dev id*/
-		strncpy(audio_ctx->list_input_devices[audio_ctx->num_input_dev - 1].name, l->name, MAX_PATH_EX-1);
+		strncpy(audio_ctx->list_input_devices[audio_ctx->num_input_dev - 1].name, l->name, MAX_PATH-1);
 		strncpy(audio_ctx->list_input_devices[audio_ctx->num_input_dev - 1].description, l->description, MAX_PATH-1);
 		audio_ctx->list_input_devices[audio_ctx->num_input_dev - 1].channels = channels;
 		audio_ctx->list_input_devices[audio_ctx->num_input_dev - 1].samprate = l->sample_spec.rate;
@@ -291,7 +291,7 @@ static void pa_sinklist_cb(pa_context* c, const pa_sink_info* l, int eol, void*
 	}
 	/*fill device data*/
 	audio_ctx->list_output_devices[audio_ctx->num_output_dev - 1].id = l->index; /*saves dev id*/
-	strncpy(audio_ctx->list_output_devices[audio_ctx->num_output_dev - 1].name, l->name, MAX_PATH_EX-1);
+	strncpy(audio_ctx->list_output_devices[audio_ctx->num_output_dev - 1].name, l->name, MAX_PATH-1);
 	strncpy(audio_ctx->list_output_devices[audio_ctx->num_output_dev - 1].description, l->description, MAX_PATH-1);
 	audio_ctx->list_output_devices[audio_ctx->num_output_dev - 1].channels = l->channel_map.channels;
 	audio_ctx->list_output_devices[audio_ctx->num_output_dev - 1].samprate = l->sample_spec.rate;
@@ -653,6 +653,19 @@ int AudioMgrImpl::audio_get_device_id(const char* pstrname, bool binput)
 	return iret;
 }
 
+rvc_audio_device_t* AudioMgrImpl::audio_get_device_infos(bool binput, int index)
+{
+	rvc_audio_device_t* audio_device = NULL;
+	if (binput) {
+		audio_device = audio_get_input_device(index);
+	}
+	else {
+		audio_device = audio_get_output_device(index);
+	}
+
+	return audio_device;
+}
+
 int AudioMgrImpl::audio_get_device_volume(int* ivolume, const char* pstrname, bool binput)
 {
 	audiopulse_get_device_volume(ivolume, pstrname, binput);

+ 1 - 19
Other/libaudiomgr/linux/libaudiomgr_linux.h

@@ -11,14 +11,6 @@
 
 #include "audiodevicepulse.h"
 
-#ifndef MAX_PATH_EX
-#define MAX_PATH_EX 512
-#endif
-
-#ifndef MAX_PATH
-#define MAX_PATH 260
-#endif
-
 #ifndef NSEC_PER_SEC
 #define NSEC_PER_SEC 1000000000LL
 #endif
@@ -61,17 +53,6 @@
 /*internally is always float*/
 typedef int16_t sample_t;
 
-typedef struct rvc_audio_device_s
-{
-	int id;							/*audo device id*/
-	int channels;					/*max channels*/
-	int samprate;					/*default samplerate*/
-	double low_latency;				/*default low latency*/
-	double high_latency;			/*default high latency*/
-	char name[MAX_PATH_EX];         /*device name*/
-	char description[MAX_PATH];		/*device description*/
-} rvc_audio_device_t;
-
 typedef struct rvc_audio_context_s
 {
 	int num_input_dev;            /*number of audio input devices in list*/
@@ -126,6 +107,7 @@ public:
 	int audio_get_device_count(bool binput);
 	int audio_get_device_name(char* pstrbuf, size_t ulen, bool binput, int index);
 	int audio_get_device_id(const char* pstrname, bool binput);
+	rvc_audio_device_t* audio_get_device_infos(bool binput, int index);
 
 	int audio_get_device_volume(int* ivolume, const char* pstrname, bool binput);
 	int audiopulse_get_device_volume(int* ivolume, const char* pstrname, bool binput);

+ 4 - 0
Other/libaudiomgr/win/libaudiomgr_win.cpp

@@ -174,6 +174,10 @@ int AudioMgrImpl::audio_get_device_id(const char* pstrname, bool binput)
 	return iret;
 }
 
+rvc_audio_device_t* AudioMgrImpl::audio_get_device_infos(bool binput, int index)
+{
+	return NULL;
+}
 
 int AudioMgrImpl::audio_get_device_volume(int* ivolume, const char* pstrname, bool binput)
 {

+ 1 - 8
Other/libaudiomgr/win/libaudiomgr_win.h

@@ -15,14 +15,6 @@
 #include <functiondiscoverykeys.h>
 #include <EndpointVolume.h>
 
-#ifndef MAX_PATH_EX
-#define MAX_PATH_EX 512
-#endif
-
-#ifndef MAX_PATH
-#define MAX_PATH 260
-#endif
-
 
 class AudioMgrImpl : public IAudioMgr
 {
@@ -35,6 +27,7 @@ public:
 	int audio_get_device_count(bool binput);
 	int audio_get_device_name(char* pstrbuf, size_t ulen, bool binput,  unsigned int uindex);
 	int audio_get_device_id(const char* pstrname, bool binput);
+	rvc_audio_device_t* audio_get_device_infos(bool binput, int index);
 
 	int audio_get_device_volume(int* ivolume, const char* pstrname, bool binput);
 	int audio_set_device_volume(int ivolume, const char* pstrname, bool binput);