public async void SetEncodingProperties(VideoEncodingProperties encodingProperties, IDirect3DDevice device) { currentEncodingProperties = encodingProperties; canvasDevice = device != null?CanvasDevice.CreateFromDirect3D11Device(device) : CanvasDevice.GetSharedDevice(); parser = new TinyYoloParser(); filteredBoxes = new List <BoundingBox>(); await LoadModelAsync(); frameProcessingTimer = ThreadPoolTimer.CreatePeriodicTimer(EvaluateVideoFrame, poolTimerInterval); }
public void SetEncodingProperties(VideoEncodingProperties encodingProperties, IDirect3DDevice device) { currentEncodingProperties = encodingProperties; canvasDevice = device != null?CanvasDevice.CreateFromDirect3D11Device(device) : CanvasDevice.GetSharedDevice(); parser = new TinyYoloParser(); filteredBoxes = new List <BoundingBox>(); if (model == null) { // Use the appropriate option if (device == null) { // startup WinML using CPU detectedDeviceKind = LearningModelDeviceKind.Cpu; } else { // Startup WinML using DirectX // IF the frame rate is really high, we can probably expect a higher powered device var frames = encodingProperties.FrameRate.Numerator; var timeSpan = encodingProperties.FrameRate.Denominator; var ratio = timeSpan / frames; if (ratio > 0.04) { // Greater than 30 frames a second detectedDeviceKind = LearningModelDeviceKind.DirectXHighPerformance; } else if (ratio > 0.01) { // If 30 frames a second or less, set expectations for WinML about what power is available detectedDeviceKind = LearningModelDeviceKind.DirectX; } else { detectedDeviceKind = LearningModelDeviceKind.DirectXMinPower; } } Debug.WriteLine($"Warning: LearningDeviceKind is set to {detectedDeviceKind}."); frameProcessingTimer = ThreadPoolTimer.CreatePeriodicTimer(EvaluateVideoFrame, poolTimerInterval); } }