public ProcessFrame ( Byte>.Image |
||
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); }
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; }
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(); }