Browse Source

#IQRV #comment [CameraConfig] 获取音频列表

gifur 4 years ago
parent
commit
a43cd54a7e

+ 2 - 0
Module/mod_CameraConfigManage/CMakeLists.txt

@@ -33,6 +33,7 @@ target_include_directories(${MODULE_NAME} PRIVATE
 	${CONAN_INCLUDE_DIRS_OPENCV}/opencv2/imgcodecs
 	${MODULE_BASE_DIR}
     ${RVC_OTHER_DEPENDENIES_DIR}/libmediadeviceinfo
+	${RVC_OTHER_DEPENDENIES_DIR}/libaudiomgr
     ${CONAN_INCLUDE_DIRS_PORTAUDIO}
     ${CONAN_INCLUDE_DIRS_FFMPEG}
 )
@@ -105,6 +106,7 @@ else(MSVC)
 		${CONAN_PKG_LIBS_APR}
 		${CONAN_PKG_LIBS_SPANDSP}
 		${CONAN_PKG_LIBS_SPEEXDSP}
+		${CONAN_PKG_LIBS_PULSEAUDIO}
 		audiomgr
 	)
 endif(MSVC)

+ 1 - 0
Module/mod_CameraConfigManage/CameraConfigManage.xml

@@ -99,6 +99,7 @@
         <param name="result" type="int"/>
         <param name="message" type="string"/>
         <param name="AvailableList" type="array_string"/>
+        <!--1:摄像头;2:麦克风:4:扬声器-->
         <param name="ListItemType" type="array_int"/>
         <param name="ListItemStatus" type="array_int"/>
         <param name="reserverd1" type="int"/>

+ 90 - 6
Module/mod_CameraConfigManage/mod_CameraConfigManage.cpp

@@ -187,6 +187,11 @@ void CCameraConfigManageEntity::OnPreStart(
 void CCameraConfigManageEntity::OnStarted()
 {
 	LOG_FUNCTION();
+    if (0 == mlibAudioMgr->audio_mgr_initialize()) {
+        Dbg("Audio Manager Initialize success!");
+    } else {
+        Dbg("Audio Manager Initialize failed!");
+    }
 	RefreshCameras();
 }
 
@@ -1151,6 +1156,82 @@ bool CCameraConfigManageEntity::AutoCorrectCameraByOnlyOne(camera_names_t &corre
 	return result;
 }
 
+void CCameraConfigManageEntity::GetMediaAvailableList(
+	SpReqAnsContext<CameraConfigManageService_GetMediaAvailableList_Req,
+	CameraConfigManageService_GetMediaAvailableList_Ans>::Pointer ctx)
+{
+	int count = 0;
+	const int maxCnt = 15;
+
+    CAutoArray<CSimpleStringA> cameras;
+	int icountmic(0);
+	int icountspeaker(0);
+
+	if (ctx->Req.type == 0 || (ctx->Req.type & 1)) {
+        capture_enum_cameras(cameras);
+		count += cameras.GetCount();
+	}
+    if (ctx->Req.type == 0 || (ctx->Req.type & 2)) {
+		icountmic = mlibAudioMgr->audio_get_device_count(true);
+		Dbg("audio input device(%d)", icountmic);
+		count += icountmic;
+    }
+    if (ctx->Req.type == 0 || (ctx->Req.type & 4)) {
+		icountspeaker = mlibAudioMgr->audio_get_device_count(false);
+        Dbg("audio output device(%d)", icountspeaker);
+		count += icountspeaker;
+    }
+
+    ctx->Ans.AvailableList.Init(count);
+    ctx->Ans.ListItemType.Init(count);
+    ctx->Ans.ListItemStatus.Init(count);
+	int curCnt(0);
+
+    if (ctx->Req.type == 0 || (ctx->Req.type & 1)) {
+        for (int i = 0; i < cameras.GetCount(); ++i) {
+			ctx->Ans.AvailableList[curCnt] = cameras[i];
+			ctx->Ans.ListItemType[curCnt] = 1;
+			ctx->Ans.ListItemStatus[curCnt] = 0;
+            Dbg("%d: %s", i, ctx->Ans.AvailableList[curCnt].GetData());
+			curCnt++;
+        }
+    }
+    if (ctx->Req.type == 0 || (ctx->Req.type & 2)) {
+        for (int i=0; i < icountmic; i++) {
+            char strname[MAX_PATH] = { 0 };
+            mlibAudioMgr->audio_get_device_name(strname, MAX_PATH, true, i);
+            ctx->Ans.AvailableList[curCnt] = strname;
+            ctx->Ans.ListItemType[curCnt] = 2;
+			ctx->Ans.ListItemStatus[curCnt] = 0;
+            Dbg("%d: %s", i, ctx->Ans.AvailableList[curCnt].GetData());
+			curCnt++;
+        }
+    }
+    if (ctx->Req.type == 0 || (ctx->Req.type & 4)) {
+        for (int i = 0; i < icountspeaker; i++) {
+            char strname[MAX_PATH] = { 0 };
+            mlibAudioMgr->audio_get_device_name(strname, MAX_PATH, false, i);
+            ctx->Ans.AvailableList[curCnt] = strname;
+            ctx->Ans.ListItemType[curCnt] = 4;
+			ctx->Ans.ListItemStatus[curCnt] = 0;
+            Dbg("%d: %s", i, ctx->Ans.AvailableList[curCnt].GetData());
+			curCnt++;
+        }
+    }
+	
+	ctx->Ans.result = curCnt;
+	ctx->Answer(Error_Succeed);
+}
+
+void CCameraConfigManageEntity::SetMediaDevice(SpReqAnsContext<CameraConfigManageService_SetMediaDevice_Req, CameraConfigManageService_SetMediaDevice_Ans>::Pointer ctx)
+{
+	ctx->Answer(Error_NotImpl);
+}
+
+void CCameraConfigManageEntity::TestAvailableMedieDev(SpReqAnsContext<CameraConfigManageService_TestAvailableMedieDev_Req, CameraConfigManageService_TestAvailableMedieDev_Ans>::Pointer ctx)
+{
+	ctx->Answer(Error_NotImpl);
+}
 
 void CameraConfigManageServiceSession::Handle_BeginCameraConfigManage( 
 	SpOnewayCallContext<CameraConfigManageService_BeginCameraConfigManage_Info>::Pointer ctx )
@@ -1518,19 +1599,22 @@ void CameraConfigManageServiceSession::Handle_AutoCorrectCameraConfig(
 	ctx->Answer(Error_Succeed);
 }
 
-void CameraConfigManage::CameraConfigManageServiceSession::Handle_GetMediaAvailableList(SpReqAnsContext<CameraConfigManageService_GetMediaAvailableList_Req, CameraConfigManageService_GetMediaAvailableList_Ans>::Pointer ctx)
+void CameraConfigManageServiceSession::Handle_GetMediaAvailableList(SpReqAnsContext<CameraConfigManageService_GetMediaAvailableList_Req, CameraConfigManageService_GetMediaAvailableList_Ans>::Pointer ctx)
 {
-
+	LOG_FUNCTION();
+	m_pEntity->GetMediaAvailableList(ctx);
 }
 
-void CameraConfigManage::CameraConfigManageServiceSession::Handle_SetMediaDevice(SpReqAnsContext<CameraConfigManageService_SetMediaDevice_Req, CameraConfigManageService_SetMediaDevice_Ans>::Pointer ctx)
+void CameraConfigManageServiceSession::Handle_SetMediaDevice(SpReqAnsContext<CameraConfigManageService_SetMediaDevice_Req, CameraConfigManageService_SetMediaDevice_Ans>::Pointer ctx)
 {
-
+    LOG_FUNCTION();
+    m_pEntity->SetMediaDevice(ctx);
 }
 
-void CameraConfigManage::CameraConfigManageServiceSession::Handle_TestAvailableMedieDev(SpReqAnsContext<CameraConfigManageService_TestAvailableMedieDev_Req, CameraConfigManageService_TestAvailableMedieDev_Ans>::Pointer ctx)
+void CameraConfigManageServiceSession::Handle_TestAvailableMedieDev(SpReqAnsContext<CameraConfigManageService_TestAvailableMedieDev_Req, CameraConfigManageService_TestAvailableMedieDev_Ans>::Pointer ctx)
 {
-
+    LOG_FUNCTION();
+    m_pEntity->TestAvailableMedieDev(ctx);
 }
 
 SP_BEGIN_ENTITY_MAP()

+ 17 - 2
Module/mod_CameraConfigManage/mod_CameraConfigManage.h

@@ -21,6 +21,8 @@
 #include "capture.h"
 #endif //_MSC_VER
 
+#include "iaudiomgrinterface.h"
+
 using namespace MediaController;
 
 namespace CameraConfigManage {
@@ -109,9 +111,16 @@ namespace CameraConfigManage {
             , m_pSession(NULL)
 #endif //RVC_OS_WIN
 			, m_bStartCamera(FALSE), 
-			m_bEchoVideo(FALSE), m_lCaptureCount(0) {}
+			m_bEchoVideo(FALSE), m_lCaptureCount(0),mlibAudioMgr(NULL)
+		{
+			mlibAudioMgr = CreateAudioMgrObj(NULL);
+		}
 
-		virtual ~CCameraConfigManageEntity() { /*nothing to implement*/ }
+		virtual ~CCameraConfigManageEntity() { 
+            if (NULL != mlibAudioMgr) {
+                DestroyIAudioMgrObj(mlibAudioMgr);
+            }
+		}
 
 		virtual const char *GetEntityName() const { return "CameraConfigManage"; }
 
@@ -164,6 +173,10 @@ namespace CameraConfigManage {
 
 		virtual void OnTimeout(DWORD dwTimerID);
 
+        void GetMediaAvailableList(SpReqAnsContext<CameraConfigManageService_GetMediaAvailableList_Req, CameraConfigManageService_GetMediaAvailableList_Ans>::Pointer ctx);
+        void SetMediaDevice(SpReqAnsContext<CameraConfigManageService_SetMediaDevice_Req, CameraConfigManageService_SetMediaDevice_Ans>::Pointer ctx);
+        void TestAvailableMedieDev(SpReqAnsContext<CameraConfigManageService_TestAvailableMedieDev_Req, CameraConfigManageService_TestAvailableMedieDev_Ans>::Pointer ctx);
+
 		virtual void Debug(const char *fmt, ...);
 
 		virtual int GetActiveCamera();
@@ -233,6 +246,7 @@ namespace CameraConfigManage {
 		VideoConfigDetail m_camerasConfig;
 
 		capture_config_t m_conf;
+
 #if defined(RVC_OS_WIN)
         LibVideoEcho::videoplay_session_t* m_pSession;
 #endif //RVC_OS_WIN
@@ -241,6 +255,7 @@ namespace CameraConfigManage {
 
 		LONG m_lCaptureCount;
 		CAutoArray<CUUID> m_arrListener;
+		IAudioMgr* mlibAudioMgr;
 	};
 }
 

+ 5 - 65
addin/res/ManagerDesktop/guide.html

@@ -300,23 +300,8 @@
                                 </div>
                                 <div class="controls text-left">
                                     <div id="gui_media_config_audio_output_outfree" class="select_on_normal audio_output_outfree_seleceed_save_btn"
-                                        onclick="SelectItem(this)" value="None"></div>
+                                        onclick="SelectItem(this)" value=""></div>
                                     <div id="gui_media_config_audio_output_outfree_list" class="select_list hide">
-                                        <div id="gui_media_config_audio_output_outfree_list_item_0" option="CW" class="select_medium">
-                                            恒银金融
-                                        </div>
-                                        <div id="gui_media_config_audio_output_outfree_list_item_1" option="KEBA" class="select_medium">
-                                            中钞科堡
-                                        </div>
-                                        <div id="gui_media_config_audio_output_outfree_list_item_2" option="GRG" class="select_medium">
-                                            广电运通
-                                        </div>
-                                        <div id="gui_media_config_audio_output_outfree_list_item_3" option="NANTIAN" class="select_medium">
-                                            云南南天
-                                        </div>
-                                        <div id="gui_media_config_audio_output_outfree_list_item_4" option="GWI" class="select_medium">
-                                            长城信息
-                                        </div>
                                     </div>
                                 </div>
                                 
@@ -337,23 +322,8 @@
                                 </div>
                                 <div class="controls text-left">
                                     <div id="gui_media_config_audio_output_infree" class="select_on_normal audio_output_infree_seleceed_save_btn"
-                                        onclick="SelectItem(this)" value="None"></div>
+                                        onclick="SelectItem(this)" value=""></div>
                                     <div id="gui_media_config_audio_output_infree_list" class="select_list hide">
-                                        <div id="gui_media_config_audio_output_infree_list_item_0" option="CW" class="select_medium">
-                                            恒银金融
-                                        </div>
-                                        <div id="gui_media_config_audio_output_infree_list_item_1" option="KEBA" class="select_medium">
-                                            中钞科堡
-                                        </div>
-                                        <div id="gui_media_config_audio_output_infree_list_item_2" option="GRG" class="select_medium">
-                                            广电运通
-                                        </div>
-                                        <div id="gui_media_config_audio_output_infree_list_item_3" option="NANTIAN" class="select_medium">
-                                            云南南天
-                                        </div>
-                                        <div id="gui_media_config_audio_output_infree_list_item_4" option="GWI" class="select_medium">
-                                            长城信息
-                                        </div>
                                     </div>
                                 </div>
                                 
@@ -374,23 +344,8 @@
                                 </div>
                                 <div class="controls text-left">
                                     <div id="gui_media_config_audio_input_outfree" class="select_on_normal audio_input_outfree_seleceed_save_btn"
-                                        onclick="SelectItem(this)" value="None"></div>
+                                        onclick="SelectItem(this)" value=""></div>
                                     <div id="gui_media_config_audio_input_outfree_list" class="select_list hide">
-                                        <div id="gui_media_config_audio_input_outfree_list_item_0" option="CW" class="select_medium">
-                                            恒银金融
-                                        </div>
-                                        <div id="gui_media_config_audio_input_outfree_list_item_1" option="KEBA" class="select_medium">
-                                            中钞科堡
-                                        </div>
-                                        <div id="gui_media_config_audio_input_outfree_list_item_2" option="GRG" class="select_medium">
-                                            广电运通
-                                        </div>
-                                        <div id="gui_media_config_audio_input_outfree_list_item_3" option="NANTIAN" class="select_medium">
-                                            云南南天
-                                        </div>
-                                        <div id="gui_media_config_audio_input_outfree_list_item_4" option="GWI" class="select_medium">
-                                            长城信息
-                                        </div>
                                     </div>
                                 </div>
                                 
@@ -411,23 +366,8 @@
                                 </div>
                                 <div class="controls text-left">
                                     <div id="gui_media_config_audio_input_infree" class="select_on_normal audio_input_infree_seleceed_save_btn"
-                                        onclick="SelectItem(this)" value="None"></div>
+                                        onclick="SelectItem(this)" value=""></div>
                                     <div id="gui_media_config_audio_input_infree_list" class="select_list hide">
-                                        <div id="gui_media_config_audio_input_infree_list_item_0" option="CW" class="select_medium">
-                                            恒银金融
-                                        </div>
-                                        <div id="gui_media_config_audio_input_infree_list_item_1" option="KEBA" class="select_medium">
-                                            中钞科堡
-                                        </div>
-                                        <div id="gui_media_config_audio_input_infree_list_item_2" option="GRG" class="select_medium">
-                                            广电运通
-                                        </div>
-                                        <div id="gui_media_config_audio_input_infree_list_item_3" option="NANTIAN" class="select_medium">
-                                            云南南天
-                                        </div>
-                                        <div id="gui_media_config_audio_input_infree_list_item_4" option="GWI" class="select_medium">
-                                            长城信息
-                                        </div>
                                     </div>
                                 </div>
                                 
@@ -448,7 +388,7 @@
                                     style="margin-top:50px;margin-bottom:50px;">
                                     <div id="guide_media_config_next"
                                         style="position: relative;" class="btn_normal_long">
-                                        确定</div>
+                                        保存</div>
                                 </div>
                             </div>
                         </div>

+ 103 - 0
addin/res/ManagerDesktop/js/guide.js

@@ -7,6 +7,12 @@ DeployStep_MediaConfig : 4,
 DeployStep_Finished : 5
 };
 
+var MEDIA_TYPE = {
+    CAMERA : 1,
+    MICROPHONE : 2,
+    LOUNDSPEAKER:4
+}
+
 var VENDOR = {
     KEBA : 'KEBA',
     CW : 'CW',
@@ -203,6 +209,100 @@ $(document).on('click', '#guide_access_authorize_next', function() {
 
 $(function () {
 
+    RVC.CameraConfigEntity = RVC.EntityController.extend({
+        entityName: 'CameraConfigManage',
+        className: 'CameraConfigManageService',
+        methodID: {
+            GetMediaAvailableList: 9,
+            SetMediaDevice: 10,
+            TestAvailableMedieDev: 11
+        },
+        methodSignature: {
+            GetMediaAvailableList: -1547834445,
+            SetMediaDevice: -865058557,
+            TestAvailableMedieDev: -2126935432
+        },
+
+        GetMediaAvailableList: function(req, callback) {
+            this.webSocketInvokeEx(req, 
+                ({id:this.methodID.GetMediaAvailableList, sig:this.methodSignature.GetMediaAvailableList}),
+                 callback);
+        },
+        SetMediaDevice: function(req, callback) {
+            this.webSocketInvokeEx(req, 
+                ({id:this.methodID.SetMediaDevice, sig:this.methodSignature.SetMediaDevice}),
+                 callback);
+        },
+        TestAvailableMedieDev: function(req, callback) {
+            this.webSocketInvokeEx(req, 
+                ({id:this.methodID.TestAvailableMedieDev, sig:this.methodSignature.TestAvailableMedieDev}),
+                 callback);
+        }
+    });
+
+    function generateDeviceSelect(devices, select_id) {
+        var deviceLength = 0;
+        if ((devices) instanceof Array) {
+            deviceLength = devices.length;
+        } else {
+            deviceLength = 1
+        }
+        var devicesHtml = '';
+        var selectid = select_id;
+        $('#' + selectid).empty();
+        for (var loop = 0; loop < deviceLength; loop++) {
+            var cur = devices[loop];
+            var deviceTemplateData = {
+                loop: loop,
+                deviceName : cur,
+                type: selectid
+            };
+            var pushHtml = '';
+            pushHtml = '<div id="{{type}}_item_{{loop}}" option="{{deviceName}}" class="select_medium hide_with_ellipsis">'
+            pushHtml += '{{deviceName}}</div>'
+            $('#' +  selectid).secureAppend(pushHtml, deviceTemplateData);
+        }
+    }
+
+    function FulfillMediaDeviceList()
+    {
+        let req = new Request();
+        req.type = 6; //不需要摄像头配置
+        req.interest = 0;
+        req.reserverd1 = 0;
+        req.reserverd2 = '';
+        req.reserverd2 = '';
+
+        RVC.CameraConfigEntity.GetMediaAvailableList(req, function(ret) {
+            if(ret.errorCode === 0) {
+                let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
+                console.log('device count: ' + result.result);
+                var microphones = [];
+                var loundspeakers = [];
+                var cameras = [];
+                for (var n = 0; n < result.AvailableList.length; n++) {
+                    console.log(result.AvailableList[n] + ' ' + result.ListItemType[n] + ' ' + result.ListItemStatus[n]);
+                    if(result.ListItemType[n] == MEDIA_TYPE.MICROPHONE) {
+                        microphones.push(result.AvailableList[n]);
+                    } else if(result.ListItemType[n] == MEDIA_TYPE.LOUNDSPEAKER) {
+                        loundspeakers.push(result.AvailableList[n]);
+                    } else if(result.ListItemType[n] == MEDIA_TYPE.CAMERA) {
+                        cameras.push(result.AvailableList[n]);
+                    }
+                }
+                generateDeviceSelect(loundspeakers, 'gui_media_config_audio_output_outfree_list');
+                generateDeviceSelect(loundspeakers, 'gui_media_config_audio_output_infree_list');
+                generateDeviceSelect(microphones, 'gui_media_config_audio_input_outfree_list');
+                generateDeviceSelect(microphones, 'gui_media_config_audio_input_infree_list');
+
+
+            } else {
+                RVC.CameraConfigEntity.commErrorCallback(ret);
+            }
+        });
+    }
+
+
     RVC.GuideController = RVC.Object.extend({
         hideAllPage: function () {
             $('#guide_initparam_page').hide();
@@ -251,5 +351,8 @@ $(function () {
         window.attachEvent('resize', RVC.GuideController.resizeWindow);
     }
     setTimeout(RVC.GuideController.resizeWindow, 200);
+
+    RVC.CameraConfigEntity.init();
+    FulfillMediaDeviceList();
     
 });