lipsync/trunk/Boare.Lib.Swf/SwfWriter.cs

82 lines
2.2 KiB
C#

/*
* SwfWriter.cs
* Copyright (c) 2008-2009 kbinani
*
* This file is part of Boare.Lib.Swf.
*
* Boare.Lib.Swf is free software; you can redistribute it and/or
* modify it under the terms of the BSD License.
*
* Boare.Lib.Swf is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
using System;
using System.IO;
using System.Collections.Generic;
namespace Boare.Lib.Swf {
using UI8 = System.Byte;
using UI32 = System.UInt32;
using UI16 = System.UInt16;
using SI8 = System.SByte;
using SI16 = System.Int16;
using SI32 = System.Int32;
public class SwfWriter : IDisposable {
private const UI8 m_version = 0x6;
private UI16 m_frame_rate;
private UI16 m_frame_count;
private FileStream m_stream;
public SwfWriter( FileStream s ) {
m_stream = s;
// swf header
s.WriteByte( 0x46 ); // Signature
s.WriteByte( 0x57 ); // Signature
s.WriteByte( 0x53 ); // Signature
s.WriteByte( m_version ); // Version
s.WriteByte( 0x0 ); // FileLength
}
public void Close() {
if ( m_stream != null ) {
m_stream.Close();
}
}
public void Dispose() {
Close();
}
public static int GetEncodedU32( byte[] pos ) {
int result = pos[0];
if ( (result & 0x00000080) == 0x0 ) {
return result;
}
result = (result & 0x0000007f) | pos[1] << 7;
if ( (result & 0x00004000) == 0x0 ) {
return result;
}
result = (result & 0x00003fff) | pos[2] << 14;
if ( (result & 0x00200000) == 0x0 ) {
return result;
}
result = (result & 0x001fffff) | pos[3] << 21;
if ( (result & 0x10000000) == 0x0 ) {
return result;
}
result = (result & 0x0fffffff) | pos[4] << 28;
return result;
}
}
}