public void Start(RecordingParameters control) { options = control; encodingThread = new Thread(EncodeUpdate); encodingThread.IsBackground = true; encodingThread.Start(); running = true; }
public void Start(RecordingParameters control) { this.RecordingParemeters = control; frametime = Stopwatch.Frequency / control.FrameRate; //timer.Start(); maxframes = control.FrameRate; thread = new Thread(Update); thread.IsBackground = true; thread.Start(); }
public RecordingParameters(RecordingParameters copyFrom) { this.PosX = copyFrom.PosX; this.PosY = copyFrom.PosY; this.SizeX = copyFrom.SizeX; this.SizeY = copyFrom.SizeY; this.ResX = copyFrom.ResX; this.ResY = copyFrom.ResY; this.FrameRate = copyFrom.FrameRate; this.running = copyFrom.running; this.RecordingMs = copyFrom.RecordingMs; this.audioBalance = copyFrom.audioBalance; this.leftVolume = copyFrom.leftVolume; this.rightVolume = copyFrom.rightVolume; this.pixelFormat = copyFrom.pixelFormat; this.interpolationMode = copyFrom.interpolationMode; this.smoothingMode = copyFrom.smoothingMode; this.compressionRate = copyFrom.compressionRate; }
private void Update() { timer.Start(); nextFrame = timer.ElapsedTicks; nextFrameSecond = timer.ElapsedTicks; var lastFrametime = timer.ElapsedMilliseconds; var Tasks = new List <Task <FrameWork> >(); while (true) { Thread.Sleep(0); if (Tasks.Count > 0) { var first = Tasks.First(); if (first.IsCompleted) { var work = first.Result; RaiseDataAvailable(work); RecordingParemeters.RecordingMs = work.framems; //workstack.Push(work); Tasks.RemoveAt(0); } continue; } if (!RecordingParemeters.running) { break; } bool needframe = false; bool keyFrame = false; if (frames < maxframes) { if (nextFrame > timer.ElapsedTicks) { continue; } frames++; nextFrame += frametime; needframe = RecordingParemeters.running; } if (frames > maxframes || nextFrameSecond <= timer.ElapsedTicks) { needframe = RecordingParemeters.running; keyFrame = true; currentFrameParams = new RecordingParameters(RecordingParemeters); //only change on keyframe. compression = RecordingParemeters.compressionRate; frames = 0; nextFrame = timer.ElapsedTicks + frametime; nextFrameSecond += frequency; } if (!needframe) { continue; } FrameWork p; if (workstack.Count > 0) { lock (workstack) { p = workstack.Pop(); } } else { p = new FrameWork(); } p.Prepare(currentFrameParams, keyFrame, compression); p.GetScreenshot(); var task = Task.Run(p.DoWork); Tasks.Add(task); } timer.Stop(); RaiseStoppedRecording(); }