mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-10-27 14:32:35 +01:00
Fix for (sometimes) missing last sub in teletext - thx borifax/xylographe :)
See https://gitter.im/SubtitleEdit/subtitleedit
This commit is contained in:
parent
e1fdaf2c69
commit
5f7348a736
@ -138,7 +138,6 @@ namespace Nikse.SubtitleEdit.Core.ContainerFormats.TransportStream
|
||||
return pages;
|
||||
}
|
||||
|
||||
|
||||
public Dictionary<int, Paragraph> GetTeletext(TeletextRunSettings teletextRunSettings, int pageNumber, int pageNumberBcd)
|
||||
{
|
||||
var timestamp = PresentationTimestamp.HasValue ? PresentationTimestamp.Value / 90 : 40;
|
||||
@ -175,6 +174,7 @@ namespace Nikse.SubtitleEdit.Core.ContainerFormats.TransportStream
|
||||
}
|
||||
i += dataUnitLen;
|
||||
}
|
||||
|
||||
if (teletextRunSettings.PageNumberAndParagraph.ContainsKey(pageNumber) && teletextRunSettings.PageNumberAndParagraph[pageNumber] != null)
|
||||
{
|
||||
if (teletextPages.ContainsKey(pageNumber))
|
||||
|
@ -751,5 +751,21 @@ namespace Nikse.SubtitleEdit.Core.ContainerFormats.TransportStream
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static Dictionary<int, Paragraph> ProcessTelxPacketPendingLeftovers(TeletextRunSettings teletextRunSettings, int pageNumberDec)
|
||||
{
|
||||
// Now we have the beginning of page transmission; if there is page_buffer pending, process it
|
||||
if (_pageBuffer.Tainted)
|
||||
{
|
||||
// this time we do not subtract any frames, there will be no more frames
|
||||
_pageBuffer.HideTimestamp = teletextRunSettings.GetLastTimestamp(pageNumberDec);
|
||||
ProcessPage(_pageBuffer, teletextRunSettings, pageNumberDec);
|
||||
if (teletextRunSettings.PageNumberAndParagraph.Count > 0)
|
||||
{
|
||||
return teletextRunSettings.PageNumberAndParagraph;
|
||||
}
|
||||
}
|
||||
return new Dictionary<int, Paragraph>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,10 +1,10 @@
|
||||
using System;
|
||||
using Nikse.SubtitleEdit.Core.BluRaySup;
|
||||
using Nikse.SubtitleEdit.Core.VobSub;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Nikse.SubtitleEdit.Core.BluRaySup;
|
||||
using Nikse.SubtitleEdit.Core.VobSub;
|
||||
|
||||
namespace Nikse.SubtitleEdit.Core.ContainerFormats.TransportStream
|
||||
{
|
||||
@ -174,29 +174,11 @@ namespace Nikse.SubtitleEdit.Core.ContainerFormats.TransportStream
|
||||
foreach (var pes in teletextPesList[packetId])
|
||||
{
|
||||
var textDictionary = pes.GetTeletext(teletextRunSettings, page, pageBcd);
|
||||
foreach (var dic in textDictionary)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(dic.Value.Text))
|
||||
{
|
||||
if (TeletextSubtitlesLookup.ContainsKey(packetId))
|
||||
{
|
||||
var innerDic = TeletextSubtitlesLookup[packetId];
|
||||
if (innerDic.ContainsKey(dic.Key))
|
||||
{
|
||||
innerDic[dic.Key].Add(dic.Value);
|
||||
}
|
||||
else
|
||||
{
|
||||
innerDic.Add(dic.Key, new List<Paragraph> { dic.Value });
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
TeletextSubtitlesLookup.Add(packetId, new SortedDictionary<int, List<Paragraph>> { { dic.Key, new List<Paragraph> { dic.Value } } });
|
||||
}
|
||||
}
|
||||
}
|
||||
AddToTeletextDictionary(textDictionary, page, packetId);
|
||||
}
|
||||
|
||||
var lastTextDictionary = Teletext.ProcessTelxPacketPendingLeftovers(teletextRunSettings, page);
|
||||
AddToTeletextDictionary(lastTextDictionary, page, packetId);
|
||||
}
|
||||
}
|
||||
|
||||
@ -307,6 +289,32 @@ namespace Nikse.SubtitleEdit.Core.ContainerFormats.TransportStream
|
||||
SubtitlePacketIds.Sort();
|
||||
}
|
||||
|
||||
private void AddToTeletextDictionary(Dictionary<int, Paragraph> textDictionary, int page, int packetId)
|
||||
{
|
||||
foreach (var dic in textDictionary)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(dic.Value.Text))
|
||||
{
|
||||
if (TeletextSubtitlesLookup.ContainsKey(packetId))
|
||||
{
|
||||
var innerDic = TeletextSubtitlesLookup[packetId];
|
||||
if (innerDic.ContainsKey(dic.Key))
|
||||
{
|
||||
innerDic[dic.Key].Add(dic.Value);
|
||||
}
|
||||
else
|
||||
{
|
||||
innerDic.Add(dic.Key, new List<Paragraph> { dic.Value });
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
TeletextSubtitlesLookup.Add(packetId, new SortedDictionary<int, List<Paragraph>> { { dic.Key, new List<Paragraph> { dic.Value } } });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private ulong? ProcessPackages(int packetId, Dictionary<int, List<int>> teletextPages, Dictionary<int, List<DvbSubPes>> teletextPesList, ulong? firstVideoMs)
|
||||
{
|
||||
var list = MakeSubtitlePesPackets(packetId, SubtitlePackets);
|
||||
|
@ -305,7 +305,7 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
{
|
||||
toolStripMenuItemExport.Visible = true;
|
||||
saveAllImagesWithHtmlIndexViewToolStripMenuItem.Visible = true;
|
||||
saveSubtitleAsToolStripMenuItem.Visible = true;
|
||||
saveSubtitleAsToolStripMenuItem.Visible = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
using System;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using Nikse.SubtitleEdit.Core.ContainerFormats.TransportStream;
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using Nikse.SubtitleEdit.Core.ContainerFormats.TransportStream;
|
||||
|
||||
namespace Test.Logic.TransportStream
|
||||
{
|
||||
@ -37,13 +37,16 @@ namespace Test.Logic.TransportStream
|
||||
var packagePages = parser.TeletextSubtitlesLookup[parser.TeletextSubtitlesLookup.First().Key];
|
||||
Assert.AreEqual(2, packagePages.Count);
|
||||
Assert.AreEqual(1, packagePages[150].Count); // first page number
|
||||
Assert.AreEqual(1, packagePages[799].Count); // second page number
|
||||
Assert.AreEqual(2, packagePages[799].Count); // second page number
|
||||
|
||||
Assert.AreEqual("Für diese Klassenstufe ist er nicht" + Environment.NewLine +
|
||||
"geeignet. <font color=\"#00ffff\"> Stufen Sie ihn zurück!</font>", packagePages[150][0].Text);
|
||||
|
||||
Assert.AreEqual("Han er ikke egnet" + Environment.NewLine +
|
||||
"til dette klassetrin.", packagePages[799][0].Text);
|
||||
|
||||
Assert.AreEqual("Så sæt ham et år ned, så han kan" + Environment.NewLine +
|
||||
"indhente det forsømte.", packagePages[799][1].Text);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user