mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-11-22 03:02:35 +01:00
Refactor frame-to-milliseconds conversion
Replaced direct frame rate based conversions with reusable utility methods across multiple subtitle formats. This improves consistency, readability, and maintainability of the codebase. Signed-off-by: Ivandro Jao <Ivandrofly@gmail.com>
This commit is contained in:
parent
30ba6afdba
commit
0edb30eba8
@ -354,7 +354,7 @@ namespace Nikse.SubtitleEdit.Core.Common
|
|||||||
public TimeCode AlignToFrame()
|
public TimeCode AlignToFrame()
|
||||||
{
|
{
|
||||||
var ts = TimeSpan.FromMilliseconds(Math.Round(TotalMilliseconds, MidpointRounding.AwayFromZero));
|
var ts = TimeSpan.FromMilliseconds(Math.Round(TotalMilliseconds, MidpointRounding.AwayFromZero));
|
||||||
var frames = Math.Round(ts.Milliseconds / (TimeCode.BaseUnit / Configuration.Settings.General.CurrentFrameRate));
|
var frames = SubtitleFormat.MillisecondsToFrames(ts.Milliseconds);
|
||||||
TimeSpan ts2;
|
TimeSpan ts2;
|
||||||
if (frames >= Configuration.Settings.General.CurrentFrameRate - 0.001)
|
if (frames >= Configuration.Settings.General.CurrentFrameRate - 0.001)
|
||||||
{
|
{
|
||||||
|
@ -131,11 +131,6 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
return frames.ToString(CultureInfo.InvariantCulture);
|
return frames.ToString(CultureInfo.InvariantCulture);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static TimeCode DecodeTimeCode(string timePart)
|
private static TimeCode DecodeTimeCode(string timePart) => new TimeCode(FramesToMilliseconds(int.Parse(timePart)));
|
||||||
{
|
|
||||||
int milliseconds = (int)Math.Round(TimeCode.BaseUnit / Configuration.Settings.General.CurrentFrameRate * int.Parse(timePart));
|
|
||||||
return new TimeCode(milliseconds);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,14 +24,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
var minutes = int.Parse(parts[1]);
|
var minutes = int.Parse(parts[1]);
|
||||||
var seconds = int.Parse(parts[2]);
|
var seconds = int.Parse(parts[2]);
|
||||||
var frames = int.Parse(parts[3]);
|
var frames = int.Parse(parts[3]);
|
||||||
|
return new TimeCode(hour, minutes, seconds, FramesToMillisecondsMax999(frames));
|
||||||
int milliseconds = (int)Math.Round(((TimeCode.BaseUnit / Configuration.Settings.General.CurrentFrameRate) * frames));
|
|
||||||
if (milliseconds > 999)
|
|
||||||
{
|
|
||||||
milliseconds = 999;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new TimeCode(hour, minutes, seconds, milliseconds);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string ToText(Subtitle subtitle, string title)
|
public override string ToText(Subtitle subtitle, string title)
|
||||||
|
@ -1522,8 +1522,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
|
|
||||||
private static void WriteTime(Stream fs, TimeCode timeCode)
|
private static void WriteTime(Stream fs, TimeCode timeCode)
|
||||||
{
|
{
|
||||||
double totalMilliseconds = timeCode.TotalMilliseconds;
|
int frames = MillisecondsToFrames(timeCode.TotalMilliseconds);
|
||||||
int frames = (int)Math.Round(totalMilliseconds / (TimeCode.BaseUnit / Configuration.Settings.General.CurrentFrameRate));
|
|
||||||
fs.WriteByte((byte)(frames / 256 / 256));
|
fs.WriteByte((byte)(frames / 256 / 256));
|
||||||
fs.WriteByte((byte)(frames / 256));
|
fs.WriteByte((byte)(frames / 256));
|
||||||
fs.WriteByte((byte)(frames % 256));
|
fs.WriteByte((byte)(frames % 256));
|
||||||
@ -1644,8 +1643,8 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
subtitle.Paragraphs.Add(p);
|
subtitle.Paragraphs.Add(p);
|
||||||
p.StartTime.TotalMilliseconds = (TimeCode.BaseUnit / Configuration.Settings.General.CurrentFrameRate) * startFrame;
|
p.StartTime.TotalMilliseconds = FramesToMilliseconds(startFrame);
|
||||||
p.EndTime.TotalMilliseconds = (TimeCode.BaseUnit / Configuration.Settings.General.CurrentFrameRate) * endFrame;
|
p.EndTime.TotalMilliseconds = FramesToMilliseconds(endFrame);
|
||||||
p.Text = string.Join(Environment.NewLine, new[] { line1, line2 }.Select(l => l.TrimEnd()).Where(l => !string.IsNullOrWhiteSpace(l)));
|
p.Text = string.Join(Environment.NewLine, new[] { line1, line2 }.Select(l => l.TrimEnd()).Where(l => !string.IsNullOrWhiteSpace(l)));
|
||||||
}
|
}
|
||||||
if (boxType >= 0xa0 && boxType <= 0xa9 && !string.IsNullOrEmpty(p.Text)) // box
|
if (boxType >= 0xa0 && boxType <= 0xa9 && !string.IsNullOrEmpty(p.Text)) // box
|
||||||
|
@ -48,7 +48,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
{
|
{
|
||||||
string s;
|
string s;
|
||||||
var ts = p.Duration.TimeSpan;
|
var ts = p.Duration.TimeSpan;
|
||||||
var frames = Math.Round(ts.Milliseconds / (TimeCode.BaseUnit / Configuration.Settings.General.CurrentFrameRate));
|
var frames = MillisecondsToFrames(ts.Milliseconds);
|
||||||
if (frames >= Configuration.Settings.General.CurrentFrameRate - 0.001)
|
if (frames >= Configuration.Settings.General.CurrentFrameRate - 0.001)
|
||||||
{
|
{
|
||||||
s = $"{ts.Seconds + 1:00}:{0:00}";
|
s = $"{ts.Seconds + 1:00}:{0:00}";
|
||||||
|
@ -62,14 +62,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
int minutes = buffer[index + 1];
|
int minutes = buffer[index + 1];
|
||||||
int seconds = buffer[index + 2];
|
int seconds = buffer[index + 2];
|
||||||
int frames = buffer[index + 3];
|
int frames = buffer[index + 3];
|
||||||
|
return new TimeCode(hour, minutes, seconds, FramesToMillisecondsMax999(frames));
|
||||||
int milliseconds = (int)Math.Round(TimeCode.BaseUnit / Configuration.Settings.General.CurrentFrameRate * frames);
|
|
||||||
if (milliseconds > 999)
|
|
||||||
{
|
|
||||||
milliseconds = 999;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new TimeCode(hour, minutes, seconds, milliseconds);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void LoadSubtitle(Subtitle subtitle, List<string> lines, string fileName)
|
public override void LoadSubtitle(Subtitle subtitle, List<string> lines, string fileName)
|
||||||
|
@ -72,17 +72,8 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
subtitle.Renumber();
|
subtitle.Renumber();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string EncodeTimeCode(TimeCode time)
|
private static string EncodeTimeCode(TimeCode time) => MillisecondsToFrames(time.TotalMilliseconds).ToString();
|
||||||
{
|
|
||||||
long frames = (long)(time.TotalMilliseconds / (TimeCode.BaseUnit / Configuration.Settings.General.CurrentFrameRate));
|
|
||||||
return frames.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static TimeCode DecodeTimeCode(string timePart)
|
|
||||||
{
|
|
||||||
int milliseconds = (int)Math.Round(TimeCode.BaseUnit / Configuration.Settings.General.CurrentFrameRate * int.Parse(timePart));
|
|
||||||
return new TimeCode(milliseconds);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
private static TimeCode DecodeTimeCode(string timePart) => new TimeCode(FramesToMilliseconds(int.Parse(timePart)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13408,7 +13408,7 @@ namespace Nikse.SubtitleEdit.Forms
|
|||||||
{
|
{
|
||||||
var seconds = (int)numericUpDownDuration.Value;
|
var seconds = (int)numericUpDownDuration.Value;
|
||||||
var frames = (int)Math.Round((Convert.ToDouble(numericUpDownDuration.Value) % 1.0 * 100.0));
|
var frames = (int)Math.Round((Convert.ToDouble(numericUpDownDuration.Value) % 1.0 * 100.0));
|
||||||
return seconds * TimeCode.BaseUnit + frames * (TimeCode.BaseUnit / Configuration.Settings.General.CurrentFrameRate);
|
return seconds * TimeCode.BaseUnit + SubtitleFormat.FramesToMilliseconds(frames);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ((double)numericUpDownDuration.Value * TimeCode.BaseUnit);
|
return ((double)numericUpDownDuration.Value * TimeCode.BaseUnit);
|
||||||
|
Loading…
Reference in New Issue
Block a user