Example #1
0
        private void SendPattern(object sender, PropertyChangedEventArgs e)
        {
            switch (e.PropertyName)
            {
            case nameof(Settings.Model.PatternId):
                var value = Settings.Model.PatternId;
                Enqueue(Message.SetPattern(value));

                if (value == -2)      //manual control
                {
                    Enqueue(Message.SetRed(Settings.Model.Red));
                    Enqueue(Message.SetGreen(Settings.Model.Green));
                    Enqueue(Message.SetBlue(Settings.Model.Blue));
                    Enqueue(Message.SetBright(Settings.Model.Brightness));
                }
                break;

            case nameof(Settings.Model.HorizontalLEDs):
            case nameof(Settings.Model.VerticalLEDs):
                Enqueue(Message.SetLedNumber(Settings.Model.TotalLeds));
                break;

            case nameof(Settings.Model.Brightness):
                Enqueue(Message.SetBright(Settings.Model.Brightness));
                break;

            case nameof(Settings.Model.Red):
                Enqueue(Message.SetRed(Settings.Model.Red));
                break;

            case nameof(Settings.Model.Green):
                Enqueue(Message.SetGreen(Settings.Model.Green));
                break;

            case nameof(Settings.Model.Blue):
                Enqueue(Message.SetBlue(Settings.Model.Blue));
                break;

            case nameof(Settings.Model.Mirror):
                Enqueue(Settings.Model.Mirror? Message.StreamStart() : Message.StreamEnd());
                break;
            }
        }
Example #2
0
        internal static void Run(object obj)
        {
            Thread.CurrentThread.Name = "DXGI Capture";
            var token = (CancellationToken)obj;

            int i, ix;

            byte[] points, color;
            HardwareScreenCapture <T> instance = null;

            while (!token.IsCancellationRequested)
            {
                try
                {
                    if (instance == null)
                    {
                        instance = new HardwareScreenCapture <T>();
                        instance.Initialize();
                        SerialCom.Enqueue(Message.StreamStart());
                        //first call or two returns an empty (black) screen
                        //consume here during init
                        instance.CaptureFrameGPU();
                    }

                    if (instance.CaptureFrameGPU())
                    {
#if DOT_TIMER
                        var sw = new Stopwatch();
                        sw.Start();
#endif
                        instance.TransferFrameCPU();
#if PARALLEL
                        Parallel.ForEach(instance.ledPoints, x => x.Calculate());
#else
                        for (i = 0; i < instance.ledPoints.Length; i++)
                        {
                            instance.ledPoints[i].Calculate();
                        }
#endif
                        points = new byte[instance.ledPoints.Length * 3];

                        for (i = 0, ix = 0; i < instance.ledPoints.Length; ++i, ix = i * 3)
                        {
                            color          = instance.ledPoints[i].mean;
                            points[ix]     = color[0];
                            points[ix + 1] = color[1];
                            points[ix + 2] = color[2];
                        }

                        if (token.IsCancellationRequested)
                        {
                            break;
                        }

                        SerialCom.Enqueue(new Message.Command()
                        {
                            Type = Message.Type.Stream,
                            Raw  = points
                        });
#if DOT_TIMER
                        Console.WriteLine(sw.Elapsed.TotalMilliseconds);
#endif
                        instance.Render(points);
                    }
                }
                catch (Exception)
                {
                    instance?.Dispose();
                    instance = null;
                }
            }
            instance?.Dispose();
        }