mirror of
https://github.com/BlackMATov/unity-flash-tools.git
synced 2025-12-14 20:21:27 +07:00
going to open source
This commit is contained in:
54
Assets/FlashTools/Scripts/Editor/FTSwfTools/SwfDecoder.cs
Normal file
54
Assets/FlashTools/Scripts/Editor/FTSwfTools/SwfDecoder.cs
Normal file
@@ -0,0 +1,54 @@
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using FTSwfTools.SwfTags;
|
||||
using FTSwfTools.SwfTypes;
|
||||
|
||||
namespace FTSwfTools {
|
||||
public class SwfDecoder {
|
||||
public SwfShortHeader OriginalHeader;
|
||||
public SwfLongHeader UncompressedHeader;
|
||||
public List<SwfTagBase> Tags = new List<SwfTagBase>();
|
||||
|
||||
public SwfDecoder(string swf_path) {
|
||||
var raw_data = File.ReadAllBytes(swf_path);
|
||||
var uncompressed_stream = DecompressSwfData(raw_data);
|
||||
DecodeSwf(new SwfStreamReader(uncompressed_stream));
|
||||
}
|
||||
|
||||
MemoryStream DecompressSwfData(byte[] raw_swf_data) {
|
||||
var raw_reader = new SwfStreamReader(raw_swf_data);
|
||||
OriginalHeader = SwfShortHeader.Read(raw_reader);
|
||||
switch ( OriginalHeader.Format ) {
|
||||
case "FWS":
|
||||
return new MemoryStream(raw_swf_data);
|
||||
case "CWS":
|
||||
var rest_stream = SwfStreamReader.DecompressZBytes(
|
||||
raw_reader.ReadRest());
|
||||
var new_short_header = new SwfShortHeader{
|
||||
Format = "FWS",
|
||||
Version = OriginalHeader.Version,
|
||||
FileLength = OriginalHeader.FileLength};
|
||||
var uncompressed_stream = new MemoryStream();
|
||||
SwfShortHeader.Write(new_short_header, uncompressed_stream);
|
||||
rest_stream.WriteTo(uncompressed_stream);
|
||||
uncompressed_stream.Position = 0;
|
||||
return uncompressed_stream;
|
||||
default:
|
||||
throw new System.Exception(string.Format(
|
||||
"Unsupported swf format: {0}", OriginalHeader.Format));
|
||||
}
|
||||
}
|
||||
|
||||
void DecodeSwf(SwfStreamReader reader) {
|
||||
UncompressedHeader = SwfLongHeader.Read(reader);
|
||||
while ( !reader.IsEOF ) {
|
||||
var tag = SwfTagBase.Read(reader);
|
||||
if ( tag.TagType == SwfTagType.End ) {
|
||||
break;
|
||||
}
|
||||
Tags.Add(tag);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user