private static LineBlock[] InterlacedFrame(TimingConstants timing) { byte dark = timing.SyncTimes.BlackLevel, sign = 255, sync = 0; var synlLine = new[] { new LineSegment { Value = sync, Duration = (long)(ps * (0.5 * timing.LineTime - timing.SyncTimes.LineSyncTime)) }, new LineSegment { Value = dark, Duration = (long)(ps * timing.SyncTimes.LineSyncTime) } }; var synsLine = new[] { new LineSegment { Value = dark, Duration = (long)(ps * (0.5 * timing.LineTime - timing.SyncTimes.EquPulseTime)) }, new LineSegment { Value = sync, Duration = (long)(ps * timing.SyncTimes.EquPulseTime) } }; var pictureLine = new[] { new LineSegment { Value = sync, Duration = (long)(ps * timing.SyncTimes.LineSyncTime) }, new LineSegment { Value = dark, Duration = (long)(ps * (timing.SyncTimes.LineBlankingTime - timing.SyncTimes.FrontPorchTime - timing.SyncTimes.LineSyncTime)) }, new LineSegment { Value = sign, Duration = (long)(ps * (timing.LineTime - timing.SyncTimes.LineBlankingTime)) }, new LineSegment { Value = dark, Duration = (long)(ps * timing.SyncTimes.FrontPorchTime) }, }; var blankLine = new[] { new LineSegment { Value = sync, Duration = (long)(ps * timing.SyncTimes.LineSyncTime) }, new LineSegment { Value = dark, Duration = (long)(ps * (timing.LineTime - timing.SyncTimes.LineSyncTime)) }, }; return(new[] { new LineBlock { Count = 5, LineSegments = synlLine }, new LineBlock { Count = 5, LineSegments = synsLine }, new LineBlock { Count = 12, LineSegments = blankLine }, new LineBlock { Count = 293, LineSegments = pictureLine, dy = 2, sy = 1 }, new LineBlock { Count = 5, LineSegments = synsLine }, new LineBlock { Count = 5, LineSegments = synlLine }, new LineBlock { Count = 4, LineSegments = synsLine }, new LineBlock { Count = 12, LineSegments = blankLine }, new LineBlock { Count = 293, LineSegments = pictureLine, dy = 2, sy = 0 }, new LineBlock { Count = 6, LineSegments = synsLine }, }); }
private VideoConstants(LineBlock[] lineBlocks, TimingConstants timing, bool interlaced) { LineBlocks = lineBlocks; Timing = timing; InterlacedScaler = interlaced ? 2 : 1; }