XProtect Corporate VMS channels fail to stream on mobile workstation with double display adapters

My mobile workstation has 2 display adapters: Intel630 and QuadroP1000. We used to have SDK 2018 integrated in our component, now we use SDK 2020. On both SDK version I have been experiencing difficulty with streaming from XProtect channels when both adapters are enabled. I need to disable integrated display adapter Intel630 for the camera stream to start. Otherwise I get an attempt to connect to the camera, but no video and the following exception thrown:

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> VideoOS.Platform.Primitives.Error: NmTimeStamp::CmTimeStamp::CmTimeStamp (line TimeStamp/win32/TimeStamp-OSD.cpp, 742): Error initializing time stamp. Invalid number of milliseconds given!
at msclr.interop.marshal_as<class NmTimeStamp::CmTimeStamp,class System::DateTime>(CmTimeStamp* , DateTime* const_stamp)
at VideoOS.Toolkit.RendererToolkit.MoveTo(Int32 sourceToMove, DateTime timeStamp)
at VideoOS.UI.Common.WPF.VideoPlayer.Toolkit.ToolkitWrapper.ExecuteSourceOperation(MoveToSourceOperation moveToSourceOperation)
at VideoOS.UI.Common.WPF.VideoPlayer.Toolkit.VideoImage.VideoImageManager.VideoImageMoveTo(VideoImage videoImage, DateTime timeStamp)
at VideoOS.UI.Common.WPF.VideoPlayer.Toolkit.ToolkitVideoSource.MoveTo(DateTime timeStamp)
at VideoOS.UI.Common.WPF.VideoPlayer.VideoPlayer.PlaybackMoveTo(DateTime timeStamp)
at VideoOS.Platform.SDK.UI.DirectX.ImageViewerDirectX.GoTo(Double nImageMilliseconds)
at VideoOS.Platform.SDK.UI.SDKImageViewerControl.ImageViewerGoto(DateTime gotoTime)
at VideoOS.Platform.SDK.UI.SDKImageViewerControl.ImageViewer_onConnectResponseReceived(Object sender, OnConnectResponseReceivedEventArgs e)
at System.EventHandler`1.Invoke(Object sender, TEventArgs e)
at VideoOS.Platform.SDK.UI.DirectX.ImageViewerDirectX.set_Connected(Boolean value)
at System.EventHandler`1.Invoke(Object sender, TEventArgs e)
at System.EventHandler`1.Invoke(Object sender, TEventArgs e)
at System.EventHandler.Invoke(Object sender, EventArgs e)
at VideoOS.UI.Common.WPF.VideoPlayer.Model.VideoFeedModel.set_ConnectionState(ConnectionState value)
at VideoOS.UI.Common.WPF.VideoPlayer.Toolkit.ToolkitVideoSource._videoImage_ConnectionStateChanged(Object sender, EventArgs e)
at System.EventHandler.Invoke(Object sender, EventArgs e)
at VideoOS.UI.Common.WPF.VideoPlayer.Toolkit.VideoImage.VideoImage.set_ConnectionState(ConnectionState value)
at VideoOS.UI.Common.WPF.VideoPlayer.Toolkit.VideoImage.VideoImageManager.<>c__DisplayClass52_0.<_toolkitWrapper_SourceStateChanged>b__0()

We tried to enforce the Milestone SDK to use nvidia display adapter with the trick found here: https://developer.milestonesys.com/s/article/Smart-Client-hardware-acceleration-GPU-switch

VideoOS.Platform.EnvironmentOptions.OptionHardwareDecodingModeOnlyNvidia

but no luck, it doesn’t make a difference for my workstation. Below is my workstation’s specs. Do You have any clue what is the reason of the exception? All in all it may be something more than the Intel630 fault.

computer model: HP Zbook G5 (intel630 and QuadroP1000)

os: Windows 10 20H2 19042.928

intel630 drivers: 27.20.100.8853 (device manager)

intel chipset drivers: 10.1.18121.8164

official nvidia drivers not installed:

intel630 enabled, quadroP1000 enabled - does not stream

intel630 disabled, quadroP1000 enabled - streams

official nvidia drivers installed 462.59-quadro-rtx-desktop-notebook-win10-64bit-international-dch-whql:

intel630 enabled, quadroP1000 enabled - does not stream

intel630 disabled, quadroP1000 enabled - streams

You mention OptionHardwareDecodingModeAuto and say it enforces NVidia, actual it does not, it will use the default scheme where it uses all available hardware for acceleration. Please try instead OptionHardwareDecodingModeOnlyNvidia = “OnlyNvidia”

Ref. https://doc.developer.milestonesys.com/html/index.html?base=miphelp/class_video_o_s_1_1_platform_1_1_environment_options.html&tree=tree_search.html?search=optionhardwaredecodingmodeauto

The Smart Client and the MIP SDK uses the same components and most of these kind of errors will in our general experience be solved by a driver upgrade.

First step is always to update the graphics drivers, I have not checked but as you mention the drivers version I will assume you have updated.

You say SDK 2020, can you confirm it is MIP SDK 2020R3?

Using the Smart Client 2020R3 (same version as the MIP SDK) do you experience the same crash?

When I have your reply on these little additional questions I will run the exception by a developer colleague

Hi Bo, thanks for answering. I made a typo in the initial post. I meant the “OnlyNvidia” setting, this is what we use in the code and it doesn’t help unfortunately. I fixed the typo.

I had some questions on versions, can you clarify?

  1. The nVidia drivers 462.59 are up to the date we are discussing the issue.

  2. I confirm we use MIP SDK 2020R3.

  3. Good point to check with Smart Client. It seems there is no issue in XProtect Smart Client 2020 R3 (64-bit). Since You said “The Smart Client and the MIP SDK uses the same components” we need to study the code samples, we may have omitted something important. Could You name the code samples it’s best to study more, VideoViewer?

Video Viewer is the simplest sample using ImageViewerControl and will be an excellent choice for testing.