public void Finish(FractionUInt32 averageFrameRate) { WriteIndexChunk(); _bw.BaseStream.Seek(4, SeekOrigin.Begin); _bw.Write(224 + _moviDataSize + _indexChunkSize - 8); _bw.BaseStream.Seek(24 + 8, SeekOrigin.Begin); _bw.Write((uint)0); _bw.BaseStream.Seek(12, SeekOrigin.Current); _bw.Write((uint)_frameCount); _bw.BaseStream.Seek(12, SeekOrigin.Current); _bw.Write((uint)_width); _bw.Write((uint)_height); _bw.BaseStream.Seek(100 + 28, SeekOrigin.Begin); _bw.Write(averageFrameRate.D); _bw.Write(averageFrameRate.N); _bw.BaseStream.Seek(4, SeekOrigin.Current); _bw.Write((uint)_frameCount); _bw.BaseStream.Seek(16, SeekOrigin.Current); _bw.Write((ushort)_width); _bw.Write((ushort)_height); _bw.BaseStream.Seek(164 + 12, SeekOrigin.Begin); _bw.Write((uint)_width); _bw.Write((uint)_height); _bw.BaseStream.Seek(8, SeekOrigin.Current); _bw.Write((uint)(_width * _height * 6)); _bw.BaseStream.Seek(212 + 4, SeekOrigin.Begin); _bw.Write(_moviDataSize + 4); _bw.Close(); _alphaWriter?.Finish(averageFrameRate); }
public void Finish(FractionUInt32 averageFrameRate) { _fs.Close(); }
public void Finish(FractionUInt32 averageFrameRate) { }
private static bool ParseValue(PropertyTagType type, int?length, byte[] value, out object result) { if (length != null && length.Value != value.Length) { result = null; return(false); } var len = length ?? value.Length; switch (type) { case PropertyTagType.ByteArray: case PropertyTagType.ASCII: result = value; return(true); case PropertyTagType.UInt16: if (len % sizeof(ushort) != 0) { result = null; return(false); } else { var array = new ushort[len / sizeof(ushort)]; result = array; for (var i = 0; i < len; i += sizeof(ushort)) { array[i / sizeof(ushort)] = BitConverter.ToUInt16(value, i); // TODO: Consider endianness. } return(true); } case PropertyTagType.UInt32: if (len % sizeof(uint) != 0) { result = null; return(false); } else { var array = new uint[len / sizeof(uint)]; result = array; for (var i = 0; i < len; i += sizeof(uint)) { array[i / sizeof(uint)] = BitConverter.ToUInt32(value, i); // TODO: Consider endianness. } return(true); } case PropertyTagType.URational: if (len % (sizeof(uint) * 2) != 0) { result = null; return(false); } else { var array = new FractionUInt32[len / (sizeof(uint) * 2)]; result = array; for (var i = 0; i < len / (sizeof(uint) * 2); i += 1) { // TODO: Consider endianness. array[i] = new FractionUInt32( BitConverter.ToUInt32(value, sizeof(uint) * (i * 2)), BitConverter.ToUInt32(value, sizeof(uint) * (i * 2 + 1))); } return(true); } case PropertyTagType.Int32: if (len % sizeof(int) != 0) { result = null; return(false); } else { var array = new int[len / sizeof(int)]; result = array; for (var i = 0; i < len; i += sizeof(int)) { array[i / sizeof(int)] = BitConverter.ToInt32(value, i); // TODO: Consider endianness. } return(true); } case PropertyTagType.SRational: if (len % (sizeof(int) * 2) != 0) { result = null; return(false); } else { var array = new FractionInt32[len / (sizeof(int) * 2)]; result = array; for (var i = 0; i < len / (sizeof(int) * 2); i += sizeof(int)) { // TODO: Consider endianness. array[i] = new FractionInt32( BitConverter.ToInt32(value, sizeof(uint) * (i * 2)), BitConverter.ToInt32(value, sizeof(uint) * (i * 2 + 1))); } return(true); } case PropertyTagType.Any: default: result = null; return(false); } }