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