Example #1
0
        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);
            }
        }