public Dictionary <int, Paragraph> GetTeletext(TeletextRunSettings teletextRunSettings, int pageNumber, int pageNumberBcd) { var timestamp = PresentationTimestamp.HasValue ? PresentationTimestamp.Value / 90 : 40; // do not allow timestamp to go back - treat lower timestamp as a reset/overflow var lastTimestamp = teletextRunSettings.GetLastTimestamp(pageNumber); teletextRunSettings.SetLastTimestamp(pageNumber, timestamp); timestamp += teletextRunSettings.GetAddTimestamp(pageNumber); if (lastTimestamp > 0 && lastTimestamp > timestamp) { teletextRunSettings.SetAddTimestamp(pageNumber, lastTimestamp); } // offset all time codes if first timestamp in ts file is > 1 sec timestamp = teletextRunSettings.SubtractStartMs(timestamp); if (timestamp < 40) { timestamp = 40; // Teletext.cs will subtract 40 ms (1 frame @25 fps) and this value must not be below 0 } var teletextPages = new Dictionary <int, Paragraph>(); var i = 1; while (i <= _dataBuffer.Length - 6) { var dataUnitId = _dataBuffer[i++]; var dataUnitLen = _dataBuffer[i++]; if (dataUnitId == (int)Teletext.DataUnitT.DataUnitEbuTeletextNonSubtitle || dataUnitId == (int)Teletext.DataUnitT.DataUnitEbuTeletextSubtitle) { if (dataUnitLen == 44) // teletext payload has always size 44 bytes { Teletext.ProcessTelxPacket((Teletext.DataUnitT)dataUnitId, new Teletext.TeletextPacketPayload(_dataBuffer, i), timestamp, teletextRunSettings, pageNumberBcd, pageNumber); } } i += dataUnitLen; } if (teletextRunSettings.PageNumberAndParagraph.ContainsKey(pageNumber) && teletextRunSettings.PageNumberAndParagraph[pageNumber] != null) { if (teletextPages.ContainsKey(pageNumber)) { teletextPages[pageNumber] = teletextRunSettings.PageNumberAndParagraph[pageNumber]; } else { teletextPages.Add(pageNumber, teletextRunSettings.PageNumberAndParagraph[pageNumber]); } } teletextRunSettings.PageNumberAndParagraph.Clear(); return(teletextPages); }