public void Reset() { currentState = UncalibratedState.Instance; currentState.Reset(this); LastTimeStamp = null; }
internal override TestFrameResult TestTimeStamp(StateContext context, OsdFrameInfo frameTimestamp) { attempts++; if (lastGoodTimeStamp == null) { if (frameTimestamp.FrameInfoIsOk()) lastGoodTimeStamp = frameTimestamp; } else { if (!frameTimestamp.FrameInfoIsOk() || lastGoodTimeStamp.SecondField.FieldNumber + 1 != frameTimestamp.FirstField.FieldNumber || Math.Abs(new TimeSpan(frameTimestamp.FirstField.TimeStamp.Ticks - lastGoodTimeStamp.SecondField.TimeStamp.Ticks).TotalMilliseconds - 20) > 1) { lastGoodTimeStamp = null; } else { secondLastGoodTimeStamp = frameTimestamp; context.LastTimeStamp = secondLastGoodTimeStamp; context.TransitionToState(CalibratedState.Instance); } } return attempts > 4 ? TestFrameResult.ErrorSaveScreenShotImages : TestFrameResult.Undefined; }
public TestFrameResult TestTimeStamp(OsdFrameInfo frameTimestamp, bool ts) { TestFrameResult suggestedResult = currentState.TestTimeStamp(this, frameTimestamp); if (!frameTimestamp.FrameInfoIsOk() || suggestedResult == TestFrameResult.ErrorSaveScreenShotImages) { return TestFrameResult.ErrorSaveScreenShotImages; } else return suggestedResult; }
internal override TestFrameResult TestTimeStamp(StateContext context, OsdFrameInfo frameTimestamp) { if (lastTimeStamp.SecondField.FieldNumber + 1 == frameTimestamp.FirstField.FieldNumber && Math.Abs(new TimeSpan(frameTimestamp.FirstField.TimeStamp.Ticks - lastTimeStamp.SecondField.TimeStamp.Ticks).TotalMilliseconds - 20) <= 1) { // All good lastTimeStamp = frameTimestamp; return TestFrameResult.Okay; } suggestedTimeStampTestResult = TestFrameResult.Undefined; // Find, record and try to solve problems #region Frame/Field Number Corrections long expectedFieldNumber = lastTimeStamp.SecondField.FieldNumber + 1; int attempts = 5; while (expectedFieldNumber != frameTimestamp.FirstField.FieldNumber && attempts > 0) { // Problem with first frame number long correctedFieldNo = CorrectField(expectedFieldNumber, frameTimestamp.FirstField.FieldNumber); frameTimestamp.FirstField.FieldNumber = correctedFieldNo; frameTimestamp.FrameNumber = correctedFieldNo; attempts--; } attempts = 5; expectedFieldNumber = frameTimestamp.FirstField.FieldNumber + 1; while (expectedFieldNumber != frameTimestamp.SecondField.FieldNumber && attempts > 0) { // Problem with first frame number long correctedFieldNo = CorrectField(expectedFieldNumber, frameTimestamp.SecondField.FieldNumber); frameTimestamp.SecondField.FieldNumber = correctedFieldNo; attempts--; } #endregion #region TimeStamp Corrections long expectedTicks = lastTimeStamp.SecondField.TimeStamp.Ticks + FIELD_LENGTH_IN_TICKS; while (Math.Abs(new TimeSpan(frameTimestamp.FirstField.TimeStamp.Ticks - expectedTicks).TotalMilliseconds) > 1) { // Correct the timestamp of the first field long correctedTicks = CorrectTimeStamp(expectedTicks, frameTimestamp.FirstField.TimeStamp.Ticks); frameTimestamp.FirstField.TimeStamp = new DateTime(correctedTicks); } #endregion frameTimestamp.ReCalculate(); lastTimeStamp = frameTimestamp; return suggestedTimeStampTestResult; }
internal override void Reset(StateContext context) { lastGoodTimeStamp = null; secondLastGoodTimeStamp = null; attempts = 0; }
internal override void Reset(StateContext context) { lastTimeStamp = context.LastTimeStamp; correctedChars.Clear(); }
internal abstract TestFrameResult TestTimeStamp(StateContext context, OsdFrameInfo frameTimestamp);