public void Clear_SeveralTestChunks_EmptyArray() { int count = 10; var chunkBytes = new byte[] { 1, 2, 3, 4, 5 }; var chunkSegment = new ArraySegment <byte>(chunkBytes); var chunkArray = new ChunksArray(1500, 10); for (int i = 0; i < count; i++) { chunkArray.Insert(chunkSegment); } chunkArray.Clear(); Assert.AreEqual(0, chunkArray.Count); }
private void ProcessBufferedPackets(ushort nextSeqNumber) { while (true) { bool anythingFound = false; for (int i = 0; i < _bufferedRtpPackets.Count; i++) { if (_bufferedRtpPackets[i].SeqNumber != nextSeqNumber) { continue; } RtpPacket nextRtpPacket = _bufferedRtpPackets[i]; int chunkIndex = _rtpPacketIndexToChunkIndexMap[i]; nextRtpPacket.PayloadSegment = _chunksArray[chunkIndex]; _previousCorrectSeqNumber = nextRtpPacket.SeqNumber; _previousTimestamp = nextRtpPacket.Timestamp; PacketPassed?.Invoke(ref nextRtpPacket); ++nextSeqNumber; anythingFound = true; _removeList.Add(i); } if (!anythingFound) { break; } } if (_removeList.Count == 0) { return; } if (_removeList.Count == _bufferedRtpPackets.Count) { _bufferedRtpPackets.Clear(); _chunksArray.Clear(); _rtpPacketIndexToChunkIndexMap.Clear(); } else { if (_removeList.Count == 1) { int removeIndex = _removeList[0]; _bufferedRtpPackets.RemoveAt(removeIndex); _chunksArray.RemoveAt(_rtpPacketIndexToChunkIndexMap[removeIndex]); _rtpPacketIndexToChunkIndexMap.RemoveAt(removeIndex); } else { _removeList.Sort(); for (int i = _removeList.Count - 1; i > -1; i--) { int removeIndex = _removeList[i]; _bufferedRtpPackets.RemoveAt(removeIndex); _chunksArray.RemoveAt(_rtpPacketIndexToChunkIndexMap[removeIndex]); _rtpPacketIndexToChunkIndexMap.RemoveAt(removeIndex); } } } _removeList.Clear(); }
private void ProcessBufferedPackets(ushort nextSeqNumber, int mediaId) { ////Debug.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " - Sequence Assembler - Processing buffered packets. nextSeqNumber: " + nextSeqNumber.ToString()); while (true) { bool anythingFound = false; for (int i = 0; i < _bufferedRtpPackets.Count; i++) { if (_bufferedRtpPackets[i].SeqNumber != nextSeqNumber) { continue; } RtpPacket nextRtpPacket = _bufferedRtpPackets[i]; int chunkIndex = _rtpPacketIndexToChunkIndexMap[i]; nextRtpPacket.PayloadSegment = _chunksArray[chunkIndex]; _previousCorrectSeqNumber = nextRtpPacket.SeqNumber; _previousTimestamp = nextRtpPacket.Timestamp; PacketPassed?.Invoke(ref nextRtpPacket, mediaId); ++nextSeqNumber; anythingFound = true; _removeList.Add(i); } if (!anythingFound) { break; } } if (_removeList.Count == 0) { return; } if (_removeList.Count == _bufferedRtpPackets.Count) { _bufferedRtpPackets.Clear(); _chunksArray.Clear(); _rtpPacketIndexToChunkIndexMap.Clear(); } else { if (_removeList.Count == 1) { int removeIndex = _removeList[0]; _bufferedRtpPackets.RemoveAt(removeIndex); _chunksArray.RemoveAt(_rtpPacketIndexToChunkIndexMap[removeIndex]); _rtpPacketIndexToChunkIndexMap.RemoveAt(removeIndex); } else { _removeList.Sort(); for (int i = _removeList.Count - 1; i > -1; i--) { int removeIndex = _removeList[i]; _bufferedRtpPackets.RemoveAt(removeIndex); _chunksArray.RemoveAt(_rtpPacketIndexToChunkIndexMap[removeIndex]); _rtpPacketIndexToChunkIndexMap.RemoveAt(removeIndex); } } } _removeList.Clear(); }