mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-11-22 11:12:36 +01:00
Display progress when parsing .ts files
This commit is contained in:
parent
0fe5d99fa2
commit
deb5e83cc3
@ -18,6 +18,7 @@
|
|||||||
* Updated Slovenian translation - thx Hawk
|
* Updated Slovenian translation - thx Hawk
|
||||||
* Updated Portuguese translation - thx moob
|
* Updated Portuguese translation - thx moob
|
||||||
* Export to images now remembers shadow width
|
* Export to images now remembers shadow width
|
||||||
|
* Display progress when reading Transport Stream files
|
||||||
* FIXED:
|
* FIXED:
|
||||||
* Compare window works again now - thx SimplyTheBOSS
|
* Compare window works again now - thx SimplyTheBOSS
|
||||||
* Changed duration via Waveform start/end is shown again - thx Quetsbeek/Mirko
|
* Changed duration via Waveform start/end is shown again - thx Quetsbeek/Mirko
|
||||||
|
@ -8533,12 +8533,34 @@ namespace Nikse.SubtitleEdit.Forms
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string _lastProgressMessage = string.Empty;
|
||||||
private void MatroskaProgress(long position, long total)
|
private void MatroskaProgress(long position, long total)
|
||||||
{
|
{
|
||||||
ShowStatus(string.Format("{0}, {1:0}%", _language.ParsingMatroskaFile, position * 100 / total));
|
string msg = string.Format("{0}, {1:0}%", _language.ParsingMatroskaFile, position * 100 / total);
|
||||||
|
if (_lastProgressMessage == msg)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ShowStatus(msg);
|
||||||
statusStrip1.Refresh();
|
statusStrip1.Refresh();
|
||||||
if (DateTime.Now.Ticks % 10 == 0)
|
if (DateTime.Now.Ticks % 10 == 0)
|
||||||
Application.DoEvents();
|
Application.DoEvents();
|
||||||
|
_lastProgressMessage = msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void TransportStreamProgress(long position, long total)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(_language.ParsingTransportStreamFile))
|
||||||
|
_language.ParsingTransportStreamFile = "Parsing Transport Stream file. Please wait...";
|
||||||
|
|
||||||
|
string msg = string.Format("{0}, {1:0}%", _language.ParsingTransportStreamFile, position * 100 / total);
|
||||||
|
if (_lastProgressMessage == msg)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ShowStatus(msg);
|
||||||
|
statusStrip1.Refresh();
|
||||||
|
if (DateTime.Now.Ticks % 10 == 0)
|
||||||
|
Application.DoEvents();
|
||||||
|
_lastProgressMessage = msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Subtitle LoadMatroskaSubtitleForSync(MatroskaTrackInfo matroskaSubtitleInfo, MatroskaFile matroska)
|
private Subtitle LoadMatroskaSubtitleForSync(MatroskaTrackInfo matroskaSubtitleInfo, MatroskaFile matroska)
|
||||||
@ -8930,7 +8952,7 @@ namespace Nikse.SubtitleEdit.Forms
|
|||||||
ShowStatus(_language.ParsingTransportStream);
|
ShowStatus(_language.ParsingTransportStream);
|
||||||
Refresh();
|
Refresh();
|
||||||
var tsParser = new TransportStreamParser();
|
var tsParser = new TransportStreamParser();
|
||||||
tsParser.ParseTSFile(fileName);
|
tsParser.Parse(fileName, TransportStreamProgress);
|
||||||
ShowStatus(string.Empty);
|
ShowStatus(string.Empty);
|
||||||
|
|
||||||
if (tsParser.SubtitlePacketIds.Count == 0)
|
if (tsParser.SubtitlePacketIds.Count == 0)
|
||||||
|
@ -1019,6 +1019,7 @@ namespace Nikse.SubtitleEdit.Logic
|
|||||||
NoSubtitlesFound = "No subtitles found",
|
NoSubtitlesFound = "No subtitles found",
|
||||||
NotAValidMatroskaFileX = "This is not a valid Matroska file: {0}",
|
NotAValidMatroskaFileX = "This is not a valid Matroska file: {0}",
|
||||||
ParsingMatroskaFile = "Parsing Matroska file. Please wait...",
|
ParsingMatroskaFile = "Parsing Matroska file. Please wait...",
|
||||||
|
ParsingTransportStreamFile = "Parsing Transport Stream file. Please wait...",
|
||||||
BeforeImportFromMatroskaFile = "Before import subtitle from Matroska file",
|
BeforeImportFromMatroskaFile = "Before import subtitle from Matroska file",
|
||||||
SubtitleImportedFromMatroskaFile = "Subtitle imported from Matroska file",
|
SubtitleImportedFromMatroskaFile = "Subtitle imported from Matroska file",
|
||||||
DropFileXNotAccepted = "Drop file '{0}' not accepted - file is too large",
|
DropFileXNotAccepted = "Drop file '{0}' not accepted - file is too large",
|
||||||
|
@ -2282,6 +2282,9 @@ namespace Nikse.SubtitleEdit.Logic
|
|||||||
case "Main/ParsingMatroskaFile":
|
case "Main/ParsingMatroskaFile":
|
||||||
language.Main.ParsingMatroskaFile = reader.Value;
|
language.Main.ParsingMatroskaFile = reader.Value;
|
||||||
break;
|
break;
|
||||||
|
case "Main/ParsingTransportStreamFile":
|
||||||
|
language.Main.ParsingTransportStreamFile = reader.Value;
|
||||||
|
break;
|
||||||
case "Main/BeforeImportFromMatroskaFile":
|
case "Main/BeforeImportFromMatroskaFile":
|
||||||
language.Main.BeforeImportFromMatroskaFile = reader.Value;
|
language.Main.BeforeImportFromMatroskaFile = reader.Value;
|
||||||
break;
|
break;
|
||||||
|
@ -904,6 +904,7 @@
|
|||||||
public string NoSubtitlesFound { get; set; }
|
public string NoSubtitlesFound { get; set; }
|
||||||
public string NotAValidMatroskaFileX { get; set; }
|
public string NotAValidMatroskaFileX { get; set; }
|
||||||
public string ParsingMatroskaFile { get; set; }
|
public string ParsingMatroskaFile { get; set; }
|
||||||
|
public string ParsingTransportStreamFile { get; set; }
|
||||||
public string BeforeImportFromMatroskaFile { get; set; }
|
public string BeforeImportFromMatroskaFile { get; set; }
|
||||||
public string SubtitleImportedFromMatroskaFile { get; set; }
|
public string SubtitleImportedFromMatroskaFile { get; set; }
|
||||||
public string DropFileXNotAccepted { get; set; }
|
public string DropFileXNotAccepted { get; set; }
|
||||||
|
@ -12,6 +12,9 @@ namespace Nikse.SubtitleEdit.Logic.TransportStream
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class TransportStreamParser
|
public class TransportStreamParser
|
||||||
{
|
{
|
||||||
|
|
||||||
|
public delegate void LoadTransportStreamCallback(long position, long total);
|
||||||
|
|
||||||
public int NumberOfNullPackets { get; private set; }
|
public int NumberOfNullPackets { get; private set; }
|
||||||
public long TotalNumberOfPackets { get; private set; }
|
public long TotalNumberOfPackets { get; private set; }
|
||||||
public long TotalNumberOfPrivateStream1 { get; private set; }
|
public long TotalNumberOfPrivateStream1 { get; private set; }
|
||||||
@ -24,11 +27,11 @@ namespace Nikse.SubtitleEdit.Logic.TransportStream
|
|||||||
public bool IsM2TransportStream { get; private set; }
|
public bool IsM2TransportStream { get; private set; }
|
||||||
public ulong FirstVideoPts { get; private set; }
|
public ulong FirstVideoPts { get; private set; }
|
||||||
|
|
||||||
public void ParseTSFile(string fileName)
|
public void Parse(string fileName, LoadTransportStreamCallback callback)
|
||||||
{
|
{
|
||||||
using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
|
using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
|
||||||
{
|
{
|
||||||
ParseTSFile(fs);
|
Parse(fs, callback);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36,7 +39,7 @@ namespace Nikse.SubtitleEdit.Logic.TransportStream
|
|||||||
/// Can be used with e.g. MemoryStream or FileStream
|
/// Can be used with e.g. MemoryStream or FileStream
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="ms">Input stream</param>
|
/// <param name="ms">Input stream</param>
|
||||||
public void ParseTSFile(Stream ms)
|
public void Parse(Stream ms, LoadTransportStreamCallback callback)
|
||||||
{
|
{
|
||||||
bool firstVideoPtsFound = false;
|
bool firstVideoPtsFound = false;
|
||||||
IsM2TransportStream = false;
|
IsM2TransportStream = false;
|
||||||
@ -60,7 +63,8 @@ namespace Nikse.SubtitleEdit.Logic.TransportStream
|
|||||||
if (m2TsTimeCodeBuffer[0] == 0x54 && m2TsTimeCodeBuffer[1] == 0x46 && m2TsTimeCodeBuffer[2] == 0x72)
|
if (m2TsTimeCodeBuffer[0] == 0x54 && m2TsTimeCodeBuffer[1] == 0x46 && m2TsTimeCodeBuffer[2] == 0x72)
|
||||||
position = 3760;
|
position = 3760;
|
||||||
|
|
||||||
while (position < ms.Length)
|
long transportStreamLength = ms.Length;
|
||||||
|
while (position < transportStreamLength)
|
||||||
{
|
{
|
||||||
ms.Seek(position, SeekOrigin.Begin);
|
ms.Seek(position, SeekOrigin.Begin);
|
||||||
|
|
||||||
@ -162,6 +166,10 @@ namespace Nikse.SubtitleEdit.Logic.TransportStream
|
|||||||
|
|
||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
|
if (callback != null)
|
||||||
|
{
|
||||||
|
callback.Invoke(ms.Position, transportStreamLength);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
TotalNumberOfPackets++;
|
TotalNumberOfPackets++;
|
||||||
position += packetLength;
|
position += packetLength;
|
||||||
|
@ -12,7 +12,7 @@ namespace Test.Logic.TransportStream
|
|||||||
{
|
{
|
||||||
string fileName = Path.Combine(Directory.GetCurrentDirectory(), "sample_TS_with_graphics.ts");
|
string fileName = Path.Combine(Directory.GetCurrentDirectory(), "sample_TS_with_graphics.ts");
|
||||||
var parser = new Nikse.SubtitleEdit.Logic.TransportStream.TransportStreamParser();
|
var parser = new Nikse.SubtitleEdit.Logic.TransportStream.TransportStreamParser();
|
||||||
parser.ParseTSFile(fileName);
|
parser.Parse(fileName, null);
|
||||||
var subtitles = parser.GetDvbSubtitles(41);
|
var subtitles = parser.GetDvbSubtitles(41);
|
||||||
|
|
||||||
Assert.IsTrue(subtitles.Count == 10);
|
Assert.IsTrue(subtitles.Count == 10);
|
||||||
|
Loading…
Reference in New Issue
Block a user