diff --git a/01-Diary/周小结/2024.9.md b/01-Diary/周小结/2024.9.md index ff0e938..26d2b57 100644 --- a/01-Diary/周小结/2024.9.md +++ b/01-Diary/周小结/2024.9.md @@ -16,9 +16,12 @@ 1. 删除EOE所有角色,不包含资产。 2. 部署大棚P4V,并且拉取工程。 3. 研究并且部署P4触发器,以此来规避P4资产大小写的问题。 - # 9.18~9.20 -1. + +# 9.23~9.29 +1. 修复道具BP_Balloon_01、BP_FeathersFalling_01、BP_FeathersFalling_02问题。 +2. 实现枝江冬季显示场景铺雪与商业路口樱花消失。 +3. MultiView采集卡添加。 # 问题 1. 功能测试问题: diff --git a/02-Note/DAWA/ASoul/流程笔记/MultiView逻辑.md b/02-Note/DAWA/ASoul/流程笔记/MultiView逻辑.md index 4821fa4..9569218 100644 --- a/02-Note/DAWA/ASoul/流程笔记/MultiView逻辑.md +++ b/02-Note/DAWA/ASoul/流程笔记/MultiView逻辑.md @@ -1 +1,88 @@ -TsScreenPlayerTextureRenderer => AMultiViewActor \ No newline at end of file +TsScreenPlayerTextureRenderer => AMultiViewActor + +# 多屏与采集卡 +以Preview为例: +TsDirectorCamManagerActor.ts +```c++ +this.PreviewWindow = UE.MultiViewActor.Open(this.GetWorld(), UE.EMultiViewCameraLayout.Display_1920x1080_Layout_4x4, UE.EMultiViewMultiGPUMode.HalfSplit) +this.PreviewWindow.SetRenderFeaturePlanarReflection(false); +this.PreviewWindow.SetRenderFeatureNiagara(false); + +// video output +let videoOutputParam = new UE.VideOutputParam() +videoOutputParam.bBlackMagicCard = false +videoOutputParam.bLazyStart = false +this.PreviewWindow.StartVideoOutput(videoOutputParam) +``` + +PVW&PGM使用 **BLACKMAGIC_OUTPUT_CONFIG_HORIZONTAL**  也就是/Game/ResArt/BlackmagicMedia/MO_BlackmagicVideoOutput。 +```ts + export function StartVideoOutput(camManager : TsDirectorCamManagerActor, targetWindow : UE.MultiViewActor):void{ + let videoOutpuParam = new UE.VideOutputParam() + videoOutpuParam.FilmbackMode = camManager.FilmbackMode + videoOutpuParam.OutputConfigPath = BLACKMAGIC_OUTPUT_CONFIG_HORIZONTAL + videoOutpuParam.bBlackMagicCard = true + videoOutpuParam.bLazyStart = false + if(camManager.FilmbackMode == UE.EFilmbackMode.EFM_1080x1920){ + videoOutpuParam.MatV2H = GetV2HMaterialInstace(camManager) + } + targetWindow.StartVideoOutput(videoOutpuParam) + } +``` + +- DirectorMode.Preview:bBlackMagicCard = false +- PVW&PGM:bBlackMagicCard = true + +## c++ +核心函数在于**AMultiViewActor::StartVideoOutput** +# UDeckLinkMediaCapture + + +m_DeckLinkOutputDevice = DeckLinkDiscovery->GetDeviceByName(m_DeviceName); + +```c++ +FDeckLinkDeviceDiscovery::DeckLinkDeviceArrived(IDeckLink *device) +{ + /*TComPtr device_; + device_ = device;*/ + + TComPtr newDeviceComPtr = new FDeckLinkOutputDevice(device); + if (!newDeviceComPtr->Init()) + return S_OK; + + std::lock_guard lock(m_DeviceMutex); + FString deviceName = newDeviceComPtr->GetDeviceName();//看这个Com对象的设备名称是否对应 + if (!m_Devices.Contains(deviceName) ) + { + m_Devices.Add(deviceName,newDeviceComPtr); + } + return S_OK; +} +``` + +DeckLinkDeviceArrived调用逻辑位于**DeckLinkAPI_h.h**。 + +## ADeckLinkOutputActor +ADeckLinkOutputActor的DeviceName 默认值为"DeckLink Mini Monitor 4K"; + +判断错误函数 +UMediaCapture::CaptureTextureRenderTarget2D()=>UMediaCapture::StartSourceCapture() => ValidateMediaOutput() +```c++ +bool UMediaCapture::ValidateMediaOutput() const +{ + if (MediaOutput == nullptr) + { UE_LOG(LogMediaIOCore, Error, TEXT("Can not start the capture. The Media Output is invalid.")); + return false; + } + FString FailureReason; + if (!MediaOutput->Validate(FailureReason)) + { UE_LOG(LogMediaIOCore, Error, TEXT("Can not start the capture. %s."), *FailureReason); + return false; + } + if(DesiredCaptureOptions.bAutostopOnCapture && DesiredCaptureOptions.NumberOfFramesToCapture < 1) + { UE_LOG(LogMediaIOCore, Error, TEXT("Can not start the capture. Please set the Number Of Frames To Capture when using Autostop On Capture in the Media Capture Options")); + return false; + } + return true; +} +``` \ No newline at end of file