mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-10-27 22:42:38 +01:00
Still show waveform if video name is changed
This commit is contained in:
parent
f79ea47d21
commit
ff6e70aeba
@ -334,7 +334,74 @@ namespace Nikse.SubtitleEdit.Core
|
||||
|
||||
public class WavePeakGenerator : IDisposable
|
||||
{
|
||||
public static string GetPeakWaveFileName(string videoFileName)
|
||||
#region Movie Hasher - hash from OpenSubtitles: http://trac.opensubtitles.org/projects/opensubtitles/wiki/HashSourceCodes
|
||||
|
||||
public static string GetPeakWaveFileName(string videofileName)
|
||||
{
|
||||
var old = GetPeakWaveFileNameOld(videofileName);
|
||||
if (File.Exists(old))
|
||||
return old;
|
||||
|
||||
try
|
||||
{
|
||||
return ToHexadecimal(ComputeMovieHash(videofileName)) + ".wav";
|
||||
}
|
||||
catch
|
||||
{
|
||||
return old;
|
||||
}
|
||||
}
|
||||
|
||||
private static byte[] ComputeMovieHash(string videofileName)
|
||||
{
|
||||
byte[] result;
|
||||
using (Stream input = new FileStream(videofileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
|
||||
{
|
||||
result = ComputeMovieHash(input);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private static byte[] ComputeMovieHash(Stream input)
|
||||
{
|
||||
long streamsize = input.Length;
|
||||
long lhash = streamsize;
|
||||
|
||||
long i = 0;
|
||||
var buffer = new byte[sizeof(long)];
|
||||
const int c = 65536;
|
||||
while (i < c / sizeof(long) && input.Read(buffer, 0, sizeof(long)) > 0)
|
||||
{
|
||||
i++;
|
||||
lhash += BitConverter.ToInt64(buffer, 0);
|
||||
}
|
||||
|
||||
input.Position = Math.Max(0, streamsize - c);
|
||||
i = 0;
|
||||
while (i < 65536 / sizeof(long) && input.Read(buffer, 0, sizeof(long)) > 0)
|
||||
{
|
||||
i++;
|
||||
lhash += BitConverter.ToInt64(buffer, 0);
|
||||
}
|
||||
input.Close();
|
||||
var result = BitConverter.GetBytes(lhash);
|
||||
Array.Reverse(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
private static string ToHexadecimal(byte[] bytes)
|
||||
{
|
||||
var hexBuilder = new StringBuilder();
|
||||
for (int i = 0; i < bytes.Length; i++)
|
||||
{
|
||||
hexBuilder.Append(bytes[i].ToString("x2"));
|
||||
}
|
||||
return hexBuilder.ToString();
|
||||
}
|
||||
|
||||
#endregion Movie Hasher
|
||||
|
||||
private static string GetPeakWaveFileNameOld(string videoFileName)
|
||||
{
|
||||
var dir = Configuration.WaveformsDirectory.TrimEnd(Path.DirectorySeparatorChar);
|
||||
if (!Directory.Exists(dir))
|
||||
@ -358,8 +425,8 @@ namespace Nikse.SubtitleEdit.Core
|
||||
}
|
||||
}
|
||||
|
||||
private Stream _stream;
|
||||
private WaveHeader _header;
|
||||
private readonly Stream _stream;
|
||||
private readonly WaveHeader _header;
|
||||
|
||||
private delegate int ReadSampleDataValue(byte[] data, ref int index);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user