internal void ProcessPacketQueueChanges(PacketQueueOp operation, MediaPacket packet, MediaType mediaType) { if (OnPacketQueueChanged == null) { return; } var state = default(PacketBufferState); state.HasEnoughPackets = true; foreach (var c in All) { state.Length += c.BufferLength; state.Count += c.BufferCount; state.CountThreshold += c.BufferCountThreshold; if (state.HasEnoughPackets && c.HasEnoughPackets == false) { state.HasEnoughPackets = false; } } // Update the buffer state lock (BufferSyncLock) BufferState = state; // Send the callback OnPacketQueueChanged?.Invoke(operation, packet, mediaType, state); }
internal void ProcessPacketQueueChanges(PacketQueueOp operation, MediaPacket packet, MediaType mediaType) { if (OnPacketQueueChanged == null) { return; } var state = default(PacketBufferState); state.HasEnoughPackets = true; state.Duration = TimeSpan.MaxValue; foreach (var c in All) { state.Length += c.BufferLength; state.Count += c.BufferCount; state.CountThreshold += c.BufferCountThreshold; if (c.HasEnoughPackets == false) { state.HasEnoughPackets = false; } if ((c.MediaType == MediaType.Audio || c.MediaType == MediaType.Video) && c.BufferDuration != TimeSpan.MinValue && c.BufferDuration.Ticks < state.Duration.Ticks) { state.Duration = c.BufferDuration; } } if (state.Duration == TimeSpan.MaxValue) { state.Duration = TimeSpan.MinValue; } // Update the buffer state lock (BufferSyncLock) BufferState = state; // Send the callback OnPacketQueueChanged?.Invoke(operation, packet, mediaType, state); }