Example #1
0
        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);
        }
Example #2
0
 public void Finish(FractionUInt32 averageFrameRate)
 {
     _fs.Close();
 }
 public void Finish(FractionUInt32 averageFrameRate)
 {
 }
Example #4
0
 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);
            }
        }