Example #1
0
        internal static IotaVtiTimeStampStrings OcrField(uint[] pixels, IotaVtiOcrProcessor stateManager, bool isOddField)
        {
            char char1  = OcrBlock(pixels, stateManager, 1, isOddField);
            char char3  = OcrBlock(pixels, stateManager, 3, isOddField);
            char char4  = OcrBlock(pixels, stateManager, 4, isOddField);
            char char6  = OcrBlock(pixels, stateManager, 6, isOddField);
            char char7  = OcrBlock(pixels, stateManager, 7, isOddField);
            char char9  = OcrBlock(pixels, stateManager, 9, isOddField);
            char char10 = OcrBlock(pixels, stateManager, 10, isOddField);

            char char12 = OcrBlock(pixels, stateManager, 12, isOddField);
            char char13 = OcrBlock(pixels, stateManager, 13, isOddField);
            char char14 = OcrBlock(pixels, stateManager, 14, isOddField);
            char char15 = OcrBlock(pixels, stateManager, 15, isOddField);

            char char17 = OcrBlock(pixels, stateManager, 17, isOddField);
            char char18 = OcrBlock(pixels, stateManager, 18, isOddField);
            char char19 = OcrBlock(pixels, stateManager, 19, isOddField);
            char char20 = OcrBlock(pixels, stateManager, 20, isOddField);

            char char22 = OcrBlock(pixels, stateManager, 22, isOddField);
            char char23 = OcrBlock(pixels, stateManager, 23, isOddField);
            char char24 = OcrBlock(pixels, stateManager, 24, isOddField);
            char char25 = OcrBlock(pixels, stateManager, 25, isOddField);
            char char26 = OcrBlock(pixels, stateManager, 26, isOddField);
            char char27 = OcrBlock(pixels, stateManager, 27, isOddField);
            char char28 = OcrBlock(pixels, stateManager, 28, isOddField);

            var rv = new IotaVtiTimeStampStrings()
            {
                NumSat  = char1,
                HH      = string.Format("{0}{1}", char3, char4),
                MM      = string.Format("{0}{1}", char6, char7),
                SS      = string.Format("{0}{1}", char9, char10),
                FFFF1   = string.Format("{0}{1}{2}{3}", char12, char13, char14, char15),
                FFFF2   = string.Format("{0}{1}{2}{3}", char17, char18, char19, char20),
                FRAMENO = string.Format("{0}{1}{2}{3}{4}{5}{6}", char22, char23, char24, char25, char26, char27, char28).TrimEnd()
            };

            if (string.IsNullOrWhiteSpace(rv.FFFF1))
            {
                rv.FFFF1 = "";
            }
            if (string.IsNullOrWhiteSpace(rv.FFFF2))
            {
                rv.FFFF2 = "";
            }

            return(rv);
        }
Example #2
0
        public IotaVtiTimeStamp(IotaVtiTimeStampStrings timeStampStrings)
        {
            int.TryParse(timeStampStrings.NumSat + "", out NumSat);
            int ival;

            Hours   = ParseTwoDigitOCRedNumber(timeStampStrings.HH);
            Minutes = ParseTwoDigitOCRedNumber(timeStampStrings.MM);
            Seconds = ParseTwoDigitOCRedNumber(timeStampStrings.SS);
            if (int.TryParse(timeStampStrings.FFFF1.Length == 4 ? timeStampStrings.FFFF1.Replace(' ', '0') : timeStampStrings.FFFF2.Replace(' ', '0'), out ival))
            {
                Milliseconds10 = ival;
            }
            if (int.TryParse(timeStampStrings.FRAMENO.Replace(' ', '0'), out ival))
            {
                FrameNumber = ival;
            }
            OcredCharacters = string.Format("{0} {1}{2}{3} {4}{5} {6}", timeStampStrings.NumSat, timeStampStrings.HH, timeStampStrings.MM, timeStampStrings.SS, timeStampStrings.FFFF1, timeStampStrings.FFFF2, timeStampStrings.FRAMENO);
        }
Example #3
0
        public override void Process(IotaVtiOcrProcessor stateManager, Graphics graphics, int frameNo, bool isOddField)
        {
            if (m_Width != stateManager.CurrentImageWidth || m_Height != stateManager.CurrentImageHeight)
            {
                stateManager.ChangeState <IotaVtiOcrCalibratingState>();
                return;
            }

            uint[] pixels = stateManager.CurrentImage;
            IotaVtiTimeStampStrings ocredValue = OcrField(pixels, stateManager, isOddField);

            stateManager.SetOcredString(ocredValue);

            if (graphics != null)
            {
                base.PlotImage(graphics, stateManager, isOddField);
            }
        }
Example #4
0
 public void SetOcredString(IotaVtiTimeStampStrings ocredValue)
 {
     CurrentOcredString    = string.Format("{0}|{1}:{2}:{3}|{4} {5}|{6}", ocredValue.NumSat, ocredValue.HH, ocredValue.MM, ocredValue.SS, ocredValue.FFFF1, ocredValue.FFFF2, ocredValue.FRAMENO);
     CurrentOcredTimeStamp = new IotaVtiTimeStamp(ocredValue);
 }
Example #5
0
        private bool RecognizedTimestampsConsistent(IotaVtiOcrProcessor stateManager, List <CalibratedBlockPosition> normalizedPositions, bool swapped)
        {
            var allTimeStamps   = new List <IotaVtiTimeStamp>();
            int index           = 0;
            int totalTimestamps = normalizedPositions.Count;

            for (; ;)
            {
                if (index == totalTimestamps - 1)
                {
                    break;
                }

                IotaVtiTimeStampStrings timeStampStrings = IotaVtiOcrCalibratedState.OcrField(normalizedPositions[index].Image, stateManager, normalizedPositions[index].IsOddField);
                if (!timeStampStrings.AllCharsPresent())
                {
                    return(false);
                }

                var timeStamp = new IotaVtiTimeStamp(timeStampStrings);

                if (stateManager.SwapFieldsOrder)
                {
                    if (index + 1 == totalTimestamps - 1)
                    {
                        break;
                    }

                    IotaVtiTimeStampStrings timeStampStrings2 = IotaVtiOcrCalibratedState.OcrField(normalizedPositions[index + 1].Image, stateManager, normalizedPositions[index + 1].IsOddField);
                    if (!timeStampStrings2.AllCharsPresent())
                    {
                        return(false);
                    }
                    var timeStamp2 = new IotaVtiTimeStamp(timeStampStrings2);
                    allTimeStamps.Add(timeStamp2);

                    index++;
                }

                allTimeStamps.Add(timeStamp);

                index++;
            }

            float fieldDurationMS = 0;

            for (int i = 0; i < allTimeStamps.Count - 1; i++)
            {
                if (allTimeStamps[i].FrameNumber != allTimeStamps[i + 1].FrameNumber - 1 &&
                    allTimeStamps[i].FrameNumber != allTimeStamps[i + 1].FrameNumber + 1)
                {
                    return(false);
                }

                int totalMillisecondsThis = (allTimeStamps[i].Hours * 3600 + allTimeStamps[i].Minutes * 60 + allTimeStamps[i].Seconds) * 10000 + allTimeStamps[i].Milliseconds10;
                int totalMillisecondsNext = (allTimeStamps[i + 1].Hours * 3600 + allTimeStamps[i + 1].Minutes * 60 + allTimeStamps[i + 1].Seconds) * 10000 + allTimeStamps[i + 1].Milliseconds10;

                fieldDurationMS = (totalMillisecondsNext - totalMillisecondsThis) / 10f;

                if (Math.Abs(Math.Abs(fieldDurationMS) - VtiTimeStampComposer.FIELD_DURATION_PAL) > 0.15 && Math.Abs(Math.Abs(fieldDurationMS) - VtiTimeStampComposer.FIELD_DURATION_NTSC) > 0.15)
                {
                    return(false);
                }
            }

            if (Math.Abs(Math.Abs(fieldDurationMS) - VtiTimeStampComposer.FIELD_DURATION_PAL) < 0.15)
            {
                stateManager.VideoFormat = VideoFormat.PAL;
            }
            else if (Math.Abs(Math.Abs(fieldDurationMS) - VtiTimeStampComposer.FIELD_DURATION_NTSC) < 0.15)
            {
                stateManager.VideoFormat = VideoFormat.NTSC;
            }
            else
            {
                stateManager.VideoFormat = null;
            }

            stateManager.EvenBeforeOdd = swapped;

            return(true);
        }