Ejemplo n.º 1
0
        public ulong EncodeSizeWithLength(int value, int length)
        {
            var v = VInt.EncodeSize((ulong)value, length);

            Assert.AreEqual(length, v.Length);
            return(v.EncodedValue);
        }
Ejemplo n.º 2
0
        public ulong EncodeSize(int value, int expectedLength)
        {
            var v = VInt.EncodeSize((ulong)value);

            Assert.AreEqual(expectedLength, v.Length);

            return(v.EncodedValue);
        }
Ejemplo n.º 3
0
        public void CreatesSizeOrIdFromEncodedValue(ulong value, int expectedLength)
        {
            var v = VInt.EncodeSize(value);

            Assert.IsFalse(v.IsReserved);
            Assert.AreEqual(value, v.Value);
            Assert.AreEqual(expectedLength, v.Length);
        }
Ejemplo n.º 4
0
        public void EncodeSizeWithLength(int value, int length, ulong expectedResult)
        {
            var v = VInt.EncodeSize((ulong)value, length);

            Assert.Equal(length, v.Length);

            Assert.Equal(expectedResult, v.EncodedValue);
        }
Ejemplo n.º 5
0
        public void EncodeSizeWithLengthException(int value, int length, ulong expectedResult)
        {
            Assert.Throws(typeof(ArgumentException), () =>
            {
                var v = VInt.EncodeSize((ulong)value, length);
                Assert.Equal(length, v.Length);

                Assert.Equal(expectedResult, v.EncodedValue);
            });
        }
Ejemplo n.º 6
0
 public void EncodeSizeWithIncorrectLength(int value, int length)
 {
     Assert.Throws <ArgumentException>(() => VInt.EncodeSize((ulong)value, length));
 }
Ejemplo n.º 7
0
        private void WriteData()
        {
            var reader = new EbmlReader(new MemoryStream(_oldSegmentInfoData), _oldSegmentInfoData.Length);

            // prepare writing part
            var infoStream = new MemoryStream();
            var infoWriter = new EbmlWriter(infoStream);

            var writeMap = new[]
            {
                new { Id = MatroskaDtd.Segment.Info.Title.Identifier, Value = _title },
                new { Id = MatroskaDtd.Segment.Info.WritingApp.Identifier, Value = _writingApp },
            };

            // enter the Segment block
            reader.ReadNext();
            reader.EnterContainer();

            while (reader.ReadNext())
            {
                if (!writeMap.Any(arg => arg.Id == reader.ElementId))
                {
                    // copying data as is
                    var buffer = new byte[reader.ElementSize];
                    reader.ReadBinary(buffer, 0, (int)reader.ElementSize);
                    infoWriter.Write(reader.ElementId, buffer);
                }
            }

            // write title/app in case it was not present!
            foreach (var e in writeMap.Where(arg => !string.IsNullOrEmpty(arg.Value)))
            {
                infoWriter.WriteUtf(e.Id, e.Value);
            }

            var outStream = new MemoryStream(_dataLength);
            var writer    = new EbmlWriter(outStream);

            writer.Write(MatroskaDtd.Segment.Info.Identifier, infoStream.ToArray());
            var extraByteCount = _dataLength - outStream.Position;

            if (extraByteCount != 0)
            {
                var extraHLen = StandardDtd.Void.Identifier.Length + 2;

                var blankDataLen = (int)(extraByteCount - extraHLen);
                if (blankDataLen < 0)
                {
                    throw new InvalidOperationException(string.Format("Not enough space to put the new data, {0} bytes to feet", -blankDataLen));
                }

                writer.WriteElementHeader(StandardDtd.Void.Identifier, VInt.EncodeSize((ulong)blankDataLen, 2));
                writer.Write(new byte[blankDataLen], 0, blankDataLen);
            }

            if (outStream.Length != _dataLength)
            {
                throw new InvalidOperationException("Failed to prepare modified data - block length mismatch");
            }

            _stream.Position = _dataStart;
            _stream.Write(outStream.ToArray(), 0, _dataLength);
        }