public void Save(BinaryStateSaver bs) { var nheader = new IndexedStateLump(BinaryStateLump.BranchHeader); var ncore = new IndexedStateLump(BinaryStateLump.BranchCoreData); var ninput = new IndexedStateLump(BinaryStateLump.BranchInputLog); var nframebuffer = new IndexedStateLump(BinaryStateLump.BranchFrameBuffer); var nlaglog = new IndexedStateLump(BinaryStateLump.BranchLagLog); foreach (var b in this) { bs.PutLump(nheader, delegate(TextWriter tw) { // if this header needs more stuff in it, handle it sensibly tw.WriteLine(JsonConvert.SerializeObject(new { Frame = b.Frame, TimeStamp = b.TimeStamp })); }); bs.PutLump(ncore, delegate(Stream s) { s.Write(b.CoreData, 0, b.CoreData.Length); }); bs.PutLump(ninput, delegate(TextWriter tw) { foreach (var line in b.InputLog) { tw.WriteLine(line); } }); bs.PutLump(nframebuffer, delegate(Stream s) { var vp = new BitmapBufferVideoProvider(b.OSDFrameBuffer); QuickBmpFile.Save(vp, s, b.OSDFrameBuffer.Width, b.OSDFrameBuffer.Height); }); bs.PutLump(nlaglog, delegate(BinaryWriter bw) { b.LagLog.Save(bw); }); nheader.Increment(); ncore.Increment(); ninput.Increment(); nframebuffer.Increment(); nlaglog.Increment(); } }
public void Save(BinaryStateSaver bs) { var nheader = new IndexedStateLump(BinaryStateLump.BranchHeader); var ncore = new IndexedStateLump(BinaryStateLump.BranchCoreData); var ninput = new IndexedStateLump(BinaryStateLump.BranchInputLog); var nframebuffer = new IndexedStateLump(BinaryStateLump.BranchFrameBuffer); var ncoreframebuffer = new IndexedStateLump(BinaryStateLump.BranchCoreFrameBuffer); var nmarkers = new IndexedStateLump(BinaryStateLump.BranchMarkers); var nusertext = new IndexedStateLump(BinaryStateLump.BranchUserText); foreach (var b in this) { bs.PutLump(nheader, delegate(TextWriter tw) { // if this header needs more stuff in it, handle it sensibly tw.WriteLine(JsonConvert.SerializeObject(new { b.Frame, b.TimeStamp, b.UniqueIdentifier })); }); bs.PutLump(ncore, delegate(Stream s) { s.Write(b.CoreData, 0, b.CoreData.Length); }); bs.PutLump(ninput, delegate(TextWriter tw) { int todo = b.InputLog.Count; for (int i = 0; i < todo; i++) { tw.WriteLine(b.InputLog[i]); } }); bs.PutLump(nframebuffer, delegate(Stream s) { var vp = new BitmapBufferVideoProvider(b.OSDFrameBuffer); QuickBmpFile.Save(vp, s, b.OSDFrameBuffer.Width, b.OSDFrameBuffer.Height); }); bs.PutLump(ncoreframebuffer, delegate(Stream s) { var vp = new BitmapBufferVideoProvider(b.CoreFrameBuffer); QuickBmpFile.Save(vp, s, b.CoreFrameBuffer.Width, b.CoreFrameBuffer.Height); }); bs.PutLump(nmarkers, delegate(TextWriter tw) { tw.WriteLine(b.Markers.ToString()); }); bs.PutLump(nusertext, delegate(TextWriter tw) { tw.WriteLine(b.UserText); }); nheader.Increment(); ncore.Increment(); ninput.Increment(); nframebuffer.Increment(); ncoreframebuffer.Increment(); nmarkers.Increment(); nusertext.Increment(); } }
public void Load(BinaryStateLoader bl, TasMovie movie) { var nheader = new IndexedStateLump(BinaryStateLump.BranchHeader); var ncore = new IndexedStateLump(BinaryStateLump.BranchCoreData); var ninput = new IndexedStateLump(BinaryStateLump.BranchInputLog); var nframebuffer = new IndexedStateLump(BinaryStateLump.BranchFrameBuffer); var ncoreframebuffer = new IndexedStateLump(BinaryStateLump.BranchCoreFrameBuffer); var nmarkers = new IndexedStateLump(BinaryStateLump.BranchMarkers); var nusertext = new IndexedStateLump(BinaryStateLump.BranchUserText); Clear(); while (true) { var b = new TasBranch(); if (!bl.GetLump(nheader, false, delegate(TextReader tr) { var header = (dynamic)JsonConvert.DeserializeObject(tr.ReadLine()); b.Frame = (int)header.Frame; var timestamp = header.TimeStamp; if (timestamp != null) { b.TimeStamp = (DateTime)timestamp; } else { b.TimeStamp = DateTime.Now; } var identifier = header.UniqueIdentifier; if (identifier != null) { b.UniqueIdentifier = (Guid)identifier; } else { b.UniqueIdentifier = Guid.NewGuid(); } })) { return; } bl.GetLump(ncore, true, delegate(Stream s, long length) { b.CoreData = new byte[length]; s.Read(b.CoreData, 0, b.CoreData.Length); }); bl.GetLump(ninput, true, delegate(TextReader tr) { b.InputLog = StringLogUtil.MakeStringLog(); string line; while ((line = tr.ReadLine()) != null) { b.InputLog.Add(line); } }); bl.GetLump(nframebuffer, true, delegate(Stream s, long length) { var vp = new QuickBmpFile.LoadedBMP(); QuickBmpFile.Load(vp, s); b.OSDFrameBuffer = new BitmapBuffer(vp.BufferWidth, vp.BufferHeight, vp.VideoBuffer); }); bl.GetLump(ncoreframebuffer, false, delegate(Stream s, long length) { var vp = new QuickBmpFile.LoadedBMP(); QuickBmpFile.Load(vp, s); b.CoreFrameBuffer = new BitmapBuffer(vp.BufferWidth, vp.BufferHeight, vp.VideoBuffer); }); b.Markers = new TasMovieMarkerList(movie); bl.GetLump(nmarkers, false, delegate(TextReader tr) { string line; while ((line = tr.ReadLine()) != null) { if (!string.IsNullOrWhiteSpace(line)) { b.Markers.Add(new TasMovieMarker(line)); } } }); bl.GetLump(nusertext, false, delegate(TextReader tr) { string line; if ((line = tr.ReadLine()) != null) { if (!string.IsNullOrWhiteSpace(line)) { b.UserText = line; } } }); Add(b); nheader.Increment(); ncore.Increment(); ninput.Increment(); nframebuffer.Increment(); ncoreframebuffer.Increment(); nmarkers.Increment(); nusertext.Increment(); } }
public void Load(BinaryStateLoader bl) { var nheader = new IndexedStateLump(BinaryStateLump.BranchHeader); var ncore = new IndexedStateLump(BinaryStateLump.BranchCoreData); var ninput = new IndexedStateLump(BinaryStateLump.BranchInputLog); var nframebuffer = new IndexedStateLump(BinaryStateLump.BranchFrameBuffer); var nlaglog = new IndexedStateLump(BinaryStateLump.BranchLagLog); Clear(); while (true) { var b = new TasBranch(); if (!bl.GetLump(nheader, false, delegate(TextReader tr) { var header = (dynamic)JsonConvert.DeserializeObject(tr.ReadLine()); b.Frame = (int)header.Frame; var timestamp = (dynamic)header.TImeStamp; if (timestamp != null) { b.TimeStamp = (DateTime)timestamp; } else { b.TimeStamp = DateTime.Now; } })) { return; } bl.GetLump(ncore, true, delegate(Stream s, long length) { b.CoreData = new byte[length]; s.Read(b.CoreData, 0, b.CoreData.Length); }); bl.GetLump(ninput, true, delegate(TextReader tr) { b.InputLog = new List <string>(); string line; while ((line = tr.ReadLine()) != null) { b.InputLog.Add(line); } }); bl.GetLump(nframebuffer, true, delegate(Stream s, long length) { var vp = new QuickBmpFile.LoadedBMP(); QuickBmpFile.Load(vp, s); b.OSDFrameBuffer = new BitmapBuffer(vp.BufferWidth, vp.BufferHeight, vp.VideoBuffer); }); bl.GetLump(nlaglog, true, delegate(BinaryReader br) { b.LagLog = new TasLagLog(); b.LagLog.Load(br); }); Add(b); nheader.Increment(); ncore.Increment(); ninput.Increment(); nframebuffer.Increment(); nlaglog.Increment(); } }