Exemplo n.º 1
0
        public void RemoveWithLimit1()
        {
            List <int> list = new List <int>()
            {
                1, 2, 0, 1, 0, 0, 1
            };

            Remover <int> remover = new Remover <int>(list, 5);

            int i = 0;

            while (i < remover.Limit)
            {
                if (list[i] == 0)
                {
                    remover.Remove(ref i);
                }
                else
                {
                    remover.Skip(ref i);
                }
            }

            remover.Finish(remover.Limit);

            Assert.AreEqual(remover.RemovedCount, 2);
            CollectionAssert.AreEqual(new int[] { 1, 2, 1, 0, 1 }, list);
        }
Exemplo n.º 2
0
        public void CutToEnd(TimeSpan end)
        {
            logger.Log("Removing video and audio packets later than {0}...", (int)end.TotalSeconds);

            int i = 0;
            Remover <BasePacket> remover = new Remover <BasePacket>(Packets);

            while (i < Packets.Count)
            {
                BasePacket packet = Packets[i];

                if ((packet.PacketType == PacketType.VideoPayload ||
                     packet.PacketType == PacketType.AudioPayload) &&
                    packet.TimeStamp > end)
                {
                    remover.Remove(ref i);
                }
                else
                {
                    remover.Skip(ref i);
                }
            }

            remover.Finish(Packets.Count);

            logger.Log("Removed {0} packets", remover.RemovedCount);
        }
Exemplo n.º 3
0
        public void FilterPackets()
        {
            int i = 0;

            Remover <BasePacket> remover = new Remover <BasePacket>(Packets);

            while (i < Packets.Count)
            {
                if (Packets[i].PacketType != PacketType.AMFMetadata &&
                    Packets[i].PacketType != PacketType.AudioPayload &&
                    Packets[i].PacketType != PacketType.VideoPayload)
                {
                    remover.Remove(ref i);
                }
                else
                {
                    remover.Skip(ref i);
                }
            }

            remover.Finish(Packets.Count);

            logger.Log("Packets filtering done. Removed: {0} packets", remover.RemovedCount);
        }
Exemplo n.º 4
0
        public void CutFromStart(TimeSpan start)
        {
            logger.Log("Searching for keyframe nearest to {0}...", (int)start.TotalSeconds);

            int keyframeIndex = -1;
            int headerIndex   = -1;

            for (int j = 0; j < Packets.Count; j++)
            {
                BasePacket packet = Packets[j];
                if (packet.PacketType != PacketType.VideoPayload || ((VideoPacket)packet).FrameType != VideoFrameType.KeyFrame)
                {
                    continue;
                }

                if (((VideoPacket)packet).IsHeader)
                {
                    headerIndex = j;
                }

                if (packet.TimeStamp > start)
                {
                    break;
                }

                keyframeIndex = j;
            }

            if (keyframeIndex == -1)
            {
                logger.Log("Keyframe not found.");
                return;
            }

            if (headerIndex == -1)
            {
                logger.Log("Header keyframe not found.");
                return;
            }

            logger.Log("Keyframe found at #{0}, header keyframe found at #{1}", keyframeIndex, headerIndex);

            int i = 0;
            Remover <BasePacket> remover = new Remover <BasePacket>(Packets, keyframeIndex);

            while (i < remover.Limit)
            {
                BasePacket packet = Packets[i];

                if ((packet.PacketType == PacketType.VideoPayload ||
                     packet.PacketType == PacketType.AudioPayload) && i != headerIndex)
                {
                    remover.Remove(ref i);
                }
                else
                {
                    remover.Skip(ref i);
                }
            }

            remover.Finish(remover.Limit);

            logger.Log("Removed {0} packets", remover.RemovedCount);
        }