mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-10-27 22:42:38 +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;
|
return pages;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public Dictionary<int, Paragraph> GetTeletext(TeletextRunSettings teletextRunSettings, int pageNumber, int pageNumberBcd)
|
public Dictionary<int, Paragraph> GetTeletext(TeletextRunSettings teletextRunSettings, int pageNumber, int pageNumberBcd)
|
||||||
{
|
{
|
||||||
var timestamp = PresentationTimestamp.HasValue ? PresentationTimestamp.Value / 90 : 40;
|
var timestamp = PresentationTimestamp.HasValue ? PresentationTimestamp.Value / 90 : 40;
|
||||||
@ -175,6 +174,7 @@ namespace Nikse.SubtitleEdit.Core.ContainerFormats.TransportStream
|
|||||||
}
|
}
|
||||||
i += dataUnitLen;
|
i += dataUnitLen;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (teletextRunSettings.PageNumberAndParagraph.ContainsKey(pageNumber) && teletextRunSettings.PageNumberAndParagraph[pageNumber] != null)
|
if (teletextRunSettings.PageNumberAndParagraph.ContainsKey(pageNumber) && teletextRunSettings.PageNumberAndParagraph[pageNumber] != null)
|
||||||
{
|
{
|
||||||
if (teletextPages.ContainsKey(pageNumber))
|
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.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using Nikse.SubtitleEdit.Core.BluRaySup;
|
|
||||||
using Nikse.SubtitleEdit.Core.VobSub;
|
|
||||||
|
|
||||||
namespace Nikse.SubtitleEdit.Core.ContainerFormats.TransportStream
|
namespace Nikse.SubtitleEdit.Core.ContainerFormats.TransportStream
|
||||||
{
|
{
|
||||||
@ -174,29 +174,11 @@ namespace Nikse.SubtitleEdit.Core.ContainerFormats.TransportStream
|
|||||||
foreach (var pes in teletextPesList[packetId])
|
foreach (var pes in teletextPesList[packetId])
|
||||||
{
|
{
|
||||||
var textDictionary = pes.GetTeletext(teletextRunSettings, page, pageBcd);
|
var textDictionary = pes.GetTeletext(teletextRunSettings, page, pageBcd);
|
||||||
foreach (var dic in textDictionary)
|
AddToTeletextDictionary(textDictionary, page, packetId);
|
||||||
{
|
|
||||||
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 } } });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var lastTextDictionary = Teletext.ProcessTelxPacketPendingLeftovers(teletextRunSettings, page);
|
||||||
|
AddToTeletextDictionary(lastTextDictionary, page, packetId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -307,6 +289,32 @@ namespace Nikse.SubtitleEdit.Core.ContainerFormats.TransportStream
|
|||||||
SubtitlePacketIds.Sort();
|
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)
|
private ulong? ProcessPackages(int packetId, Dictionary<int, List<int>> teletextPages, Dictionary<int, List<DvbSubPes>> teletextPesList, ulong? firstVideoMs)
|
||||||
{
|
{
|
||||||
var list = MakeSubtitlePesPackets(packetId, SubtitlePackets);
|
var list = MakeSubtitlePesPackets(packetId, SubtitlePackets);
|
||||||
|
@ -305,7 +305,7 @@ namespace Nikse.SubtitleEdit.Forms
|
|||||||
{
|
{
|
||||||
toolStripMenuItemExport.Visible = true;
|
toolStripMenuItemExport.Visible = true;
|
||||||
saveAllImagesWithHtmlIndexViewToolStripMenuItem.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.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Nikse.SubtitleEdit.Core.ContainerFormats.TransportStream;
|
|
||||||
|
|
||||||
namespace Test.Logic.TransportStream
|
namespace Test.Logic.TransportStream
|
||||||
{
|
{
|
||||||
@ -37,13 +37,16 @@ namespace Test.Logic.TransportStream
|
|||||||
var packagePages = parser.TeletextSubtitlesLookup[parser.TeletextSubtitlesLookup.First().Key];
|
var packagePages = parser.TeletextSubtitlesLookup[parser.TeletextSubtitlesLookup.First().Key];
|
||||||
Assert.AreEqual(2, packagePages.Count);
|
Assert.AreEqual(2, packagePages.Count);
|
||||||
Assert.AreEqual(1, packagePages[150].Count); // first page number
|
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 +
|
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);
|
"geeignet. <font color=\"#00ffff\"> Stufen Sie ihn zurück!</font>", packagePages[150][0].Text);
|
||||||
|
|
||||||
Assert.AreEqual("Han er ikke egnet" + Environment.NewLine +
|
Assert.AreEqual("Han er ikke egnet" + Environment.NewLine +
|
||||||
"til dette klassetrin.", packagePages[799][0].Text);
|
"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