void RecordScreen()
{
var buffer = new byte[Params.Width * Params.Height * 4];
var timeTillNextFrame = TimeSpan.Zero;
Control.CheckForIllegalCrossThreadCalls = false;
bool creatingNewFile = false;
while (!closed)
{
creatingNewFile = false;
var startDate = DateTime.Now;
using (var writer = Params.CreateAviWriter())
{
var frameInterval = TimeSpan.FromSeconds(1 / (double)writer.FramesPerSecond);
var videoStream = Params.CreateVideoStream(writer);
videoStream.Name = "Captura";
var timedWriter = new TimedFrameWriter(videoStream, writer, Params);
while (!stopThread.WaitOne(timeTillNextFrame) && !creatingNewFile)
{
var timestamp = DateTime.Now;
bool captured = Screenshot(buffer);
if (captured)
{
timedWriter.WriteFrame(true, buffer, 0, buffer.Length);
}
//videoStream.WriteFrame(true, buffer, 0, buffer.Length);
timeTillNextFrame = timestamp + frameInterval - DateTime.Now;
if (timeTillNextFrame < TimeSpan.Zero)
{
timeTillNextFrame = TimeSpan.Zero;
}
if (DateTime.Now.Subtract(startDate).Minutes == 1)
{
creatingNewFile = true;
}
}
writer.Close();
if (!creatingNewFile)
{
closed = true;
}
if (Params.YTUpload)
{
UploadToYouTube(Params.FileName);
Params.FileName = DateTime.Now.ToString("out-yyyy-MM-dd_HH-mm-ss.avi");
}
}
}
}