ProcessFrame() public method

public ProcessFrame ( Byte>.Image frame ) : void
frame Byte>.Image
return void
        void Time()
        {
            var snake = new Snake {
                Ang = 0
            };
            var now    = DateTimeOffset.Now.ToUnixTimeMilliseconds();
            var frames = new List <SlitherFrame>();

            frames.Add(new SlitherFrame {
                Kills = 0, Time = now
            });
            frames.Add(new SlitherFrame {
                Kills = 1, Time = now + 1000, Snake = snake
            });
            frames.Add(new SlitherFrame {
                Kills = 2, Time = now + 2000, Snake = snake
            });
            frames.Add(new SlitherFrame {
                Kills = 3, Time = now + 3000, Snake = snake
            });
            frames.Add(new SlitherFrame {
                Kills = 4, Time = now + 4000, Snake = snake
            });
            frames.Add(new SlitherFrame {
                Kills = 5, Time = now + 5000, Snake = snake
            });
            var processedFrame = _frameProcessor.ProcessFrame(frames, 2);

            Assert.Equal(now + 2000, processedFrame.Time);
        }
Example #2
0
        private void NewFrameHandler(object sender, AForge.Video.NewFrameEventArgs eventArgs)
        {
            if (frameProcessor.IsProcessing)
            {
                return;
            }

            var newFrame = frameProcessor.ProcessFrame(eventArgs.Frame);

            ImageBox.Image  = newFrame;
            ImageBox.Width  = newFrame.Width;
            ImageBox.Height = newFrame.Height;
        }
Example #3
0
        public static void ReadVideo(Config config, FFProbeStream streamInfo, string filePath, string outPath)
        {
            var p = new Process();

            p.StartInfo.UseShellExecute        = false;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.FileName  = "ffmpeg.exe";
            p.StartInfo.Arguments = $"-i \"{filePath}\" -f rawvideo -c:v rawvideo -pix_fmt bgra -s {streamInfo.Width}x{streamInfo.Height} pipe:1";
            var f           = 0;
            var frameLength = streamInfo.Width * streamInfo.Height * 4;
            var buffer      = new byte[config.Model.BufferSize];

            p.Start();
            var stream = p.StandardOutput.BaseStream;

            using var frame = new MemoryStream(frameLength);
            var frameTasks     = new List <Task>();
            var frameBytesRead = 0;
            var bytesRead      = 0;

            do
            {
                while (frameTasks.Count >= config.Model.FrameConcurrency)
                {
                    var removeTasks = new List <Task>();
                    foreach (var task in frameTasks)
                    {
                        if (task.IsCompleted)
                        {
                            removeTasks.Add(task);
                        }
                    }
                    foreach (var r in removeTasks)
                    {
                        frameTasks.Remove(r);
                    }
                }

                if (frameBytesRead + config.Model.BufferSize > frameLength)
                {
                    bytesRead = stream.Read(buffer, 0, frameLength - frameBytesRead);
                    frame.Write(buffer);
                    var frameProcessStream = new MemoryStream(frameLength);
                    frame.Seek(0, SeekOrigin.Begin);
                    frame.CopyTo(frameProcessStream);
                    frameTasks.Add(FrameProcessor.ProcessFrame(config, frameProcessStream, f++, streamInfo.Width, streamInfo.Height, outPath));
                    frame.Seek(0, SeekOrigin.Begin);
                    frameBytesRead = 0;
                }
                else
                {
                    bytesRead = stream.Read(buffer, 0, buffer.Length);
                    if (bytesRead != 0)
                    {
                        frameBytesRead += bytesRead;
                        frame.Write(buffer);
                    }
                }
            } while (!p.HasExited);
            p.WaitForExit();
        }