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; }
private void RequestFullTimeStampDump() { suggestedTimeStampTestResult = TestFrameResult.ErrorSaveScreenShotImages; }