public void Load(string filename)
{
Reset();
if (!File.Exists(filename))
{
Unload();
return;
}
lock (_zipFileLock)
{
if (_zipFile != null)
{
_zipFile.Dispose();
_zipFile = null;
}
_zipFile = new ZipFile(filename);
if (!_zipFile.EntryFileNames.Contains(descriptionFilename))
{
Unload();
return;
}
var frameFiles = _zipFile.EntryFileNames.Where(s => s.Substring(s.Length - 3, 3) == "mfx");
_filesToLoad = frameFiles.OrderBy(f => f).ToList();
if (_filesToLoad.Count == 0)
{
Unload();
return;
}
if (_zipFile.EntryFileNames.Contains(audioFilename))
{
if (_audioStream != null)
{
_audioStream.Dispose();
_audioStream = null;
}
_audioStream = new MemoryStream();
_zipFile[audioFilename].Extract(_audioStream);
_audioStream.Position = 0;
_soundPlayer.LoadWavStream(_audioStream);
}
using (var settingsStream = new MemoryStream())
{
_zipFile[descriptionFilename].Extract(settingsStream);
settingsStream.Position = 0;
var description = PointCloudStreamDescription.Load(settingsStream);
MinTimeUTC = description.RecordingStartDateTimeUTC;
CurrentTimeUTC = MinTimeUTC;
MaxTimeUTC = description.RecordingStopDateTimeUTC;
int count = description.FrameCount;
var span = MaxTimeUTC - MinTimeUTC;
if (count > 0 && span.TotalSeconds > 0)
{
FileFPS = count / span.TotalSeconds;
}
}
}
Status = PointCloudPlayerStatus.Stopped;
Seek(0);
}