Example #1
0
        public void Reset()
        {
            currentState = UncalibratedState.Instance;
            currentState.Reset(this);

            LastTimeStamp = null;
        }
Example #2
0
        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;
        }
Example #3
0
        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;
        }
Example #4
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 #5
0
 internal override void Reset(StateContext context)
 {
     lastGoodTimeStamp = null;
     secondLastGoodTimeStamp = null;
     attempts = 0;
 }
Example #6
0
 internal override void Reset(StateContext context)
 {
     lastTimeStamp = context.LastTimeStamp;
     correctedChars.Clear();
 }
Example #7
0
 internal abstract TestFrameResult TestTimeStamp(StateContext context, OsdFrameInfo frameTimestamp);