Browse Source

Revert "#IQRV #comment 去掉MediaController里面的ManipulateMediaDevice接口"

This reverts commit 1eece38cfa0c88afdbe54094cfd7997d61accb31.
80374374 1 year ago
parent
commit
800da1927a

+ 49 - 0
Module/mod_mediacontroller/MediaController_client_g.h

@@ -227,6 +227,55 @@ public:
 		return ret;
 	}
 
+	ErrorCodeEnum ManipulateMediaDevice(MediaService_ManipulateMediaDevice_Req &Req, CSmartPointer<IAsynWaitSp> &spAsyncWait, DWORD dwTimeout)
+	{
+		CSmartPointer<IClientSessionFunction> pFunc = GetFunction();
+		CAutoBuffer Buf = SpObject2Buffer(Req);
+		if (m_context.checkEmpty())
+		{
+			m_context.AutoGenerate();
+			DbgToBeidou(m_context, m_pEntityBase != NULL ? m_pEntityBase->GetEntityName() : "")();
+			m_context = m_context.upgradeLink();
+		}
+		auto ret = pFunc->AsyncRequest(MediaService_Method_ManipulateMediaDevice, MediaService_MethodSignature_ManipulateMediaDevice, Buf, spAsyncWait, m_context, dwTimeout);
+		m_context.clear();
+		return ret;
+	}
+	ErrorCodeEnum ManipulateMediaDevice(MediaService_ManipulateMediaDevice_Req &Req, MediaService_ManipulateMediaDevice_Ans &Ans, DWORD dwTimeout)
+	{
+		CSmartPointer<IAsynWaitSp> spAsyncWait;
+		ErrorCodeEnum Error = ManipulateMediaDevice(Req, spAsyncWait, dwTimeout);
+		if (Error == Error_Succeed) {
+			bool bEnd = false;
+			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwTimeout);
+			LOG_ASSERT(Error || bEnd);
+		}
+		return Error;
+	}
+	ErrorCodeEnum ManipulateMediaDevice(MediaService_ManipulateMediaDevice_Req &Req, MediaService_ManipulateMediaDevice_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError, CSimpleString &str)
+	{
+		CSmartPointer<IAsynWaitSp> spAsyncWait;
+		ErrorCodeEnum Error = ManipulateMediaDevice(Req, spAsyncWait, dwTimeout);
+		if (Error == Error_Succeed) {
+			bool bEnd = false;
+			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, str, dwTimeout);
+			LOG_ASSERT(Error || bEnd);
+		}
+		return Error;
+	}
+	ErrorCodeEnum ManipulateMediaDevice(MediaService_ManipulateMediaDevice_Req &Req, MediaService_ManipulateMediaDevice_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError)
+	{
+		CSmartPointer<IAsynWaitSp> spAsyncWait;
+		ErrorCodeEnum Error = ManipulateMediaDevice(Req, spAsyncWait, dwTimeout);
+		if (Error == Error_Succeed) {
+			bool bEnd = false;
+			CSimpleString str;
+			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, str, dwTimeout);
+			LOG_ASSERT(Error || bEnd);
+		}
+		return Error;
+	}
+
 
 	bool SafeDelete()
 	{

+ 30 - 0
Module/mod_mediacontroller/MediaController_def_g.h

@@ -19,6 +19,7 @@ namespace MediaController {
 #define MediaService_Method_StopEnvCamera 4
 #define MediaService_Method_StartSpeakerRender 5
 #define MediaService_Method_StopSpeakerRender 6
+#define MediaService_Method_ManipulateMediaDevice 7
 
 #define MediaService_MethodSignature_GetVideoDeviceName -496217232
 #define MediaService_MethodSignature_StartCamera 749460891
@@ -27,6 +28,7 @@ namespace MediaController {
 #define MediaService_MethodSignature_StopEnvCamera -1214187442
 #define MediaService_MethodSignature_StartSpeakerRender -803727657
 #define MediaService_MethodSignature_StopSpeakerRender -1325509398
+#define MediaService_MethodSignature_ManipulateMediaDevice -461255211
 
 #define MediaService_LogCode_GetVideoDeviceName "QLR040220800"
 #define MediaService_LogCode_StartCamera "QLR040220801"
@@ -35,6 +37,7 @@ namespace MediaController {
 #define MediaService_LogCode_StopEnvCamera "QLR040220804"
 #define MediaService_LogCode_StartSpeakerRender "QLR040220805"
 #define MediaService_LogCode_StopSpeakerRender "QLR040220806"
+#define MediaService_LogCode_ManipulateMediaDevice "QLR040220807"
 
 struct MediaService_GetVideoDeviceName_Req
 {
@@ -122,6 +125,33 @@ struct MediaService_StopSpeakerRender_Info
 
 };
 
+struct MediaService_ManipulateMediaDevice_Req
+{
+	int cmdType;
+	int devType;
+	int reserved1;
+	CSimpleStringA reserved2;
+
+	void Serialize(SpBuffer &Buf)
+	{
+		auto & buf = Buf & cmdType & devType & reserved1 & reserved2;
+	}
+
+};
+
+struct MediaService_ManipulateMediaDevice_Ans
+{
+	int retCode;
+	int reserved1;
+	CSimpleStringA reserved2;
+
+	void Serialize(SpBuffer &Buf)
+	{
+		auto & buf = Buf & retCode & reserved1 & reserved2;
+	}
+
+};
+
 
 ///////////////////////////
 

+ 27 - 0
Module/mod_mediacontroller/MediaController_server_g.h

@@ -79,6 +79,13 @@ public:
 				Error = Error_MethodSignatureFailed;
 			}
 			break;
+		case MediaService_Method_ManipulateMediaDevice:
+			if (dwSignature == MediaService_MethodSignature_ManipulateMediaDevice) {
+				bOverlap = true;
+			} else {
+				Error = Error_MethodSignatureFailed;
+			}
+			break;
 		default:
 			Error = Error_MethodNotFound;
 			break;
@@ -125,6 +132,11 @@ public:
 				Error = Error_MethodSignatureFailed;
 			}
 			break;
+		case MediaService_Method_ManipulateMediaDevice:
+			if (dwSignature != MediaService_MethodSignature_ManipulateMediaDevice) {
+				Error = Error_MethodSignatureFailed;
+			}
+			break;
 		default:
 			Error = Error_MethodNotFound;
 			break;
@@ -167,6 +179,11 @@ public:
 	/// override by user
 	}
 
+	virtual void Handle_ManipulateMediaDevice(SpReqAnsContext<MediaService_ManipulateMediaDevice_Req, MediaService_ManipulateMediaDevice_Ans>::Pointer ctx)
+	{
+	/// override by user
+	}
+
 	virtual void OnRequest(CSmartPointer<ITransactionContext> pTransactionContext)
 	{
 		CAutoBuffer Buf;
@@ -253,6 +270,16 @@ public:
 						Handle_StopSpeakerRender(ctx);
 					}
 					break;
+				case MediaService_Method_ManipulateMediaDevice:
+					{
+						SpReqAnsContext<MediaService_ManipulateMediaDevice_Req,MediaService_ManipulateMediaDevice_Ans>::Pointer ctx;
+						ctx.Attach(new SpReqAnsContext<MediaService_ManipulateMediaDevice_Req,MediaService_ManipulateMediaDevice_Ans>(pTransactionContext));
+						SpBuffer2Object(Buf, ctx->Req);
+						pTransactionContext->GetLinkContext(ctx->link);
+						EntityResource::setLink(ctx->link);
+						Handle_ManipulateMediaDevice(ctx);
+					}
+					break;
 				default:
 					assert(0);
 					break;

+ 17 - 0
Module/mod_mediacontroller/MediaService.xml

@@ -22,6 +22,23 @@
 		</oneway>
 		<oneway name="StopSpeakerRender" overlap="true">
 		</oneway>
+		<twoway name="ManipulateMediaDevice" overlap="true">
+            <req>
+                <!--操作意图指令: 0:获取并接管设备权限;1:归还设备权限,不再占用-->
+                <param name="cmdType" type="int"/>
+                <!--设备类型:0:无效参数;1:ENV环境摄像头;2:OPT操作摄像头;3:EWS外部广角摄像头;4:高拍仪文档摄像头;5:高拍仪上接摄像头-->
+                <param name="devType" type="int"/>
+                <param name="reserved1" type="int"/>
+                <param name="reserved2" type="string"/>
+            </req>
+                <!--实体收到接口请求时无论操作成功与否返回Answer(Error_Succeed),具体操作成功与否通过retCode标识-->
+            <res>
+                <!--retCode:0:表示成功,非0:表示失败 -->
+                <param name="retCode" type="int"/>
+                <param name="reserved1" type="int"/>
+                <param name="reserved2" type="string"/>
+            </res>
+        </twoway>
 	</class>
 	<!-- 内置摄像头切换外接摄像头失败消息 -->
 	<message name="ExternalCameraSwitchFailed">

+ 58 - 0
Module/mod_mediacontroller/misc.c

@@ -0,0 +1,58 @@
+#include "precompile.h"
+#include "videortp.h"
+#include "videocap.h"
+#include "videocommon.h"
+
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include <assert.h>
+#include <malloc.h>
+
+#define av_always_inline __inline
+#define inline __inline
+
+#include <stdint.h>
+#include <libavutil\avutil.h>
+#include <libavcodec\avcodec.h>
+#include <libswscale\swscale.h>
+
+void Dbg(const char *str, ...);
+extern void vDbg(const char *str, va_list list);
+
+static void av_log_cb(void*ptr, int level, const char*fmt, va_list list)
+{
+	vDbg(fmt, list);
+}
+
+int video_lib_init()
+{
+	CoInitialize(NULL);
+
+	{
+		int i, n;
+
+		n = videocap_get_device_count();
+		for (i = 0; i < n; ++i) {
+			WCHAR tmp[128];
+			char t[128];
+			videocap_get_device_name(i, tmp, ARRAYSIZE(tmp));
+			WideCharToMultiByte(CP_ACP, 0, tmp, -1, t, sizeof(t), 0, NULL);
+			Dbg("%d = %s", i, t);
+		}
+	}
+
+	videoframework_init();
+
+	av_log_set_callback(&av_log_cb);
+	//av_log_set_level(AV_LOG_DEBUG);
+	av_log_set_level(AV_LOG_QUIET);
+
+	return 0;
+}
+
+void video_lib_deinit()
+{
+	CoUninitialize();
+	videoframework_term();
+}
+

+ 1 - 0
Module/mod_mediacontroller/mod_mediacontroller.h

@@ -58,6 +58,7 @@ public:
 	virtual void Handle_StopEnvCamera(SpOnewayCallContext<MediaService_StopEnvCamera_Info>::Pointer ctx);
 	virtual void Handle_StartSpeakerRender(SpOnewayCallContext<MediaService_StartSpeakerRender_Info>::Pointer ctx);
 	virtual void Handle_StopSpeakerRender(SpOnewayCallContext<MediaService_StopSpeakerRender_Info>::Pointer ctx);
+	virtual void Handle_ManipulateMediaDevice(SpReqAnsContext<MediaService_ManipulateMediaDevice_Req, MediaService_ManipulateMediaDevice_Ans>::Pointer ctx);
 
 private:
 	CMediaControllerEntity* m_pEntity;