Tried to add read support for NCI CAPT 1.2 (besides the existing NCI CAPT 2.0)

git-svn-id: https://subtitleedit.googlecode.com/svn/trunk@2138 99eadd0c-20b8-1223-b5c4-2a2b2df33de2
This commit is contained in:
niksedk 2013-10-10 19:02:36 +00:00
parent f98f1d0bc7
commit 46cab87a3b

View File

@ -41,14 +41,24 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
if (fileName.ToLower().EndsWith(".cap"))
{
byte[] buffer = File.ReadAllBytes(fileName);
return (buffer[0] == 0x43 &&
return ((buffer[0] == 0x43 && // CAPT.2.0
buffer[1] == 0x41 &&
buffer[2] == 0x50 &&
buffer[3] == 0x54 &&
buffer[4] == 0x00 &&
buffer[5] == 0x32 &&
buffer[6] == 0x2e &&
buffer[7] == 0x30);
buffer[7] == 0x30) ||
(buffer[0] == 0x43 && // CAPT.1.2
buffer[1] == 0x41 &&
buffer[2] == 0x50 &&
buffer[3] == 0x54 &&
buffer[4] == 0x00 &&
buffer[5] == 0x31 &&
buffer[6] == 0x2e &&
buffer[7] == 0x32));
}
}
}
@ -126,6 +136,40 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
}
subtitle.Renumber(1);
if (buffer[0] == 0x43 && // CAPT.1.2
buffer[1] == 0x41 &&
buffer[2] == 0x50 &&
buffer[3] == 0x54 &&
buffer[4] == 0x00 &&
buffer[5] == 0x31 &&
buffer[6] == 0x2e &&
buffer[7] == 0x32)
{
i = 396;
int start = i;
int number = 0;
while (i < buffer.Length - 66)
{
if (buffer[i] == 0xff && buffer[i + 1] == 0xff && buffer[i + 2] != 0xff && buffer[i + 28] == 0xff && buffer[i + 29] == 0xff && buffer[i + 30] != 0xff)
{
if (buffer[i+14] == number+1)
{
Paragraph p = subtitle.GetParagraphOrDefault(number);
if (p != null)
{
p.StartTime = DecodeTimeCode(buffer, i + 18);
p.EndTime = DecodeTimeCode(buffer, i + 22);
number++;
}
i += 25;
}
}
i++;
}
}
else
{
i = 230;
int countTimecodes = 0;
int start = i;
@ -154,7 +198,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
int number = buffer[index] + buffer[index + 1] * 256;
if (number != lastNumber + 1)
{
int tempNumber = buffer[index-2] + buffer[index -1] * 256;
int tempNumber = buffer[index - 2] + buffer[index - 1] * 256;
if (tempNumber == lastNumber + 1)
{
index -= 2;
@ -186,6 +230,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
}
i++;
}
}
for (i = 0; i < subtitle.Paragraphs.Count; i++)
{