Fix missing images in bdsup - thx Devin :)

Multi images would be merged if only first image was the same
This commit is contained in:
Nikolaj Olsson 2020-05-03 10:18:37 +02:00
parent a467164c1e
commit 40973b62d5

View File

@ -829,6 +829,7 @@ namespace Nikse.SubtitleEdit.Core.BluRaySup
} }
} }
// merge images that are the same (probably due to fade)
for (int pcsIndex = pcsList.Count - 1; pcsIndex > 0; pcsIndex--) for (int pcsIndex = pcsList.Count - 1; pcsIndex > 0; pcsIndex--)
{ {
var cur = pcsList[pcsIndex]; var cur = pcsList[pcsIndex];
@ -836,14 +837,39 @@ namespace Nikse.SubtitleEdit.Core.BluRaySup
if (Math.Abs(prev.EndTime - cur.StartTime) < 10 && prev.Size.Width == cur.Size.Width && prev.Size.Height == cur.Size.Height) if (Math.Abs(prev.EndTime - cur.StartTime) < 10 && prev.Size.Width == cur.Size.Width && prev.Size.Height == cur.Size.Height)
{ {
if (cur.BitmapObjects.Count > 0 && cur.BitmapObjects[0].Count > 0 && if (cur.BitmapObjects.Count > 0 && cur.BitmapObjects[0].Count > 0 &&
prev.BitmapObjects.Count > 0 && prev.BitmapObjects[0].Count > 0 && prev.BitmapObjects.Count == cur.BitmapObjects.Count && prev.BitmapObjects[0].Count == cur.BitmapObjects[0].Count)
ByteArraysEqual(cur.BitmapObjects[0][0].Fragment.ImageBuffer, prev.BitmapObjects[0][0].Fragment.ImageBuffer)) {
var remove = true;
for (int k = 0; k < cur.BitmapObjects.Count; k++)
{
var c = cur.BitmapObjects[k];
var p = prev.BitmapObjects[k];
if (p.Count == c.Count)
{
for (int j = 0; j < c.Count; j++)
{
if (!ByteArraysEqual(c[j].Fragment.ImageBuffer, p[j].Fragment.ImageBuffer))
{
remove = false;
break;
}
}
}
else
{
remove = false;
break;
}
}
if (remove)
{ {
prev.EndTime = cur.EndTime; prev.EndTime = cur.EndTime;
pcsList.RemoveAt(pcsIndex); pcsList.RemoveAt(pcsIndex);
} }
} }
} }
}
// save last palette // save last palette
if (lastPalettes != null && palettes.Count > 0) if (lastPalettes != null && palettes.Count > 0)