AssetStudio/UnityStudio/Classes/VideoClip.cs
Perfare f87390cc2b Update README.md
Updated project
Support 2017.4
2018-03-25 13:53:52 +08:00

103 lines
3.9 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace UnityStudio
{
class VideoClip
{
public string m_Name;
public byte[] m_VideoData;
public VideoClip(AssetPreloadData preloadData, bool readSwitch)
{
var sourceFile = preloadData.sourceFile;
var reader = preloadData.Reader;
m_Name = reader.ReadAlignedString(reader.ReadInt32());
var m_OriginalPath = reader.ReadAlignedString(reader.ReadInt32());
var m_ProxyWidth = reader.ReadUInt32();
var m_ProxyHeight = reader.ReadUInt32();
var Width = reader.ReadUInt32();
var Height = reader.ReadUInt32();
if (sourceFile.version[0] >= 2017)//2017.x and up
{
var m_PixelAspecRatioNum = reader.ReadUInt32();
var m_PixelAspecRatioDen = reader.ReadUInt32();
}
var m_FrameRate = reader.ReadDouble();
var m_FrameCount = reader.ReadUInt64();
var m_Format = reader.ReadInt32();
//m_AudioChannelCount
var size = reader.ReadInt32();
reader.Position += size * 2;
reader.AlignStream(4);
//m_AudioSampleRate
size = reader.ReadInt32();
reader.Position += size * 4;
//m_AudioLanguage
size = reader.ReadInt32();
for (int i = 0; i < size; i++)
{
reader.ReadAlignedString(reader.ReadInt32());
}
//StreamedResource m_ExternalResources
var m_Source = reader.ReadAlignedString(reader.ReadInt32());
var m_Offset = reader.ReadUInt64();
var m_Size = reader.ReadUInt64();
var m_HasSplitAlpha = reader.ReadBoolean();
if (readSwitch)
{
if (!string.IsNullOrEmpty(m_Source))
{
var resourceFileName = Path.GetFileName(m_Source);
var resourceFilePath = Path.GetDirectoryName(sourceFile.filePath) + "\\" + resourceFileName;
if (!File.Exists(resourceFilePath))
{
var findFiles = Directory.GetFiles(Path.GetDirectoryName(sourceFile.filePath), resourceFileName, SearchOption.AllDirectories);
if (findFiles.Length > 0)
{
resourceFilePath = findFiles[0];
}
}
if (File.Exists(resourceFilePath))
{
using (var resourceReader = new BinaryReader(File.OpenRead(resourceFilePath)))
{
resourceReader.BaseStream.Position = (long)m_Offset;
m_VideoData = resourceReader.ReadBytes((int)m_Size);
}
}
else
{
if (Studio.resourceFileReaders.TryGetValue(resourceFileName.ToUpper(), out var resourceReader))
{
resourceReader.Position = (long)m_Offset;
m_VideoData = resourceReader.ReadBytes((int)m_Size);
}
else
{
MessageBox.Show($"can't find the resource file {resourceFileName}");
}
}
}
else
{
if (m_Size > 0)
m_VideoData = reader.ReadBytes((int)m_Size);
}
}
else
{
preloadData.extension = Path.GetExtension(m_OriginalPath);
preloadData.Text = m_Name;
preloadData.fullSize = preloadData.Size + (int)m_Size;
}
}
}
}