1017 Commits

Author SHA1 Message Date
Cameron Gutman
7b838dd692 Improve audio FEC queue timeout logic 2021-06-09 00:46:14 -05:00
Cameron Gutman
ca7a6e7bbe Validate block size before writing data 2021-06-08 20:03:49 -05:00
Cameron Gutman
2228e4812d Improve debugging for A/V data loss and recovery 2021-06-08 20:01:58 -05:00
Cameron Gutman
5a71a4c092 Use 10ms packets for slow Opus decoders
With the old 20ms packets, an FEC block was 80ms of audio data.
This is enough data that waiting for the FEC shards can cause
an audio data underflow. The burst of 80ms of audio data after
reassembly fails can then lead clients to drop samples due to
excessive queued data.
2021-06-07 23:20:40 -05:00
Cameron Gutman
4e7b1e3c37
Merge pull request #60 from GaryOderNichts/wiiu-platform
Wii U platform support
2021-06-04 21:53:58 -05:00
GaryOderNichts
e5b39af6a5 some Wii U changes 2021-06-05 01:59:58 +02:00
GaryOderNichts
0c66a50e2d Wii U platform support 2021-06-04 21:36:54 +02:00
Cameron Gutman
509a17dbc3 Perform PLC for each lost packet in the FEC block 2021-06-03 21:03:46 -05:00
Cameron Gutman
a8aed6b344 Avoid spurious audio data loss warning on connection start 2021-06-03 21:02:27 -05:00
Cameron Gutman
ef33aaa3c8 Fix queued packet leak when audio packet queue overflows 2021-06-02 22:05:45 -05:00
Cameron Gutman
e9fd544ff4 Fix FEC queue state assert firing on shutdown 2021-06-02 20:11:20 -05:00
Cameron Gutman
e3d4f4e91f Validate the Opus data in debug builds 2021-06-02 20:10:46 -05:00
Cameron Gutman
ab51acb712 Only data shards should be eligible for immediate consumption 2021-06-02 19:50:22 -05:00
Cameron Gutman
d0adb044cf Fix bugs discovered by FEC state validation logic 2021-06-02 19:36:57 -05:00
Cameron Gutman
565b170e00 Add FEC state validation in debug builds 2021-06-02 19:36:31 -05:00
Cameron Gutman
9361c325bb Rename RtpFecQueue to RtpVideoQueue to match RtpAudioQueue 2021-06-01 22:57:26 -05:00
Cameron Gutman
08e4a47fc2 Add FEC validation mode for audio FEC 2021-06-01 22:43:43 -05:00
Cameron Gutman
dd3675db63 Fix mishandling of a completely missing FEC block 2021-06-01 21:31:48 -05:00
Cameron Gutman
da7db59414 Fix freeing FEC block after wrapping seqnum with in-order FEC block 2021-06-01 21:16:18 -05:00
Cameron Gutman
fde6b05618 Fix incorrect assert on sequence number wrap 2021-06-01 21:14:25 -05:00
Cameron Gutman
683208ddc8 Return all available audio data after FEC block timer expires 2021-06-01 20:01:26 -05:00
Cameron Gutman
3dff15b8c4 Fix memory leak when switching between immediate and queued audio packets 2021-06-01 19:33:56 -05:00
Cameron Gutman
4aa82b0a9f Fix Clang/GCC build 2021-06-01 18:39:19 -05:00
Cameron Gutman
89918324ce Implement audio FEC recovery support 2021-06-01 18:31:56 -05:00
Cameron Gutman
122ce4a568 Enable SO_RCVTIMEO for RTP sockets on Windows 2021-05-25 20:38:30 -05:00
Cameron Gutman
d9ea208dea Avoid unlock and immediate relock of mutex 2021-05-25 19:57:06 -05:00
Cameron Gutman
1376c62e5f Remove declaration of old deleted function 2021-05-25 19:54:27 -05:00
Cameron Gutman
59484ea066 Reorder some internal structures to reduce padding 2021-05-25 19:54:03 -05:00
Cameron Gutman
46cea5011d Use GetModuleHandle() for kernel32.dll, since it's guaranteed to be loaded already 2021-05-25 19:40:14 -05:00
Cameron Gutman
4723f8ba7c Update ENet to avoid excessive retransmissions when RTT variance is 0 2021-05-16 15:37:40 -05:00
Cameron Gutman
d4e22bb4a6 Update ENet to fix inaccurate RTT values under 8 ms 2021-05-16 14:42:15 -05:00
Cameron Gutman
daee5db7bc Use SleepEx() instead of WaitForSingleObjectEx() to implement PltSleepMs()
This was legacy cruft from back when Sleep() was forbidden in Metro apps in Win8.0.
2021-05-16 11:41:38 -05:00
Cameron Gutman
c057075eac Set minRequiredFecPackets to better handle lossy links at low bitrates 2021-05-16 09:27:50 -05:00
Cameron Gutman
ed9301f3f8 Join the input thread without interrupting first
Otherwise we'll kill it before it finishes draining
2021-05-15 22:56:44 -05:00
Cameron Gutman
431e188b07 Allow the input queue to drain before terminating the thread
This ensures any final input messages (like key ups) make it to the host
2021-05-15 22:01:50 -05:00
Cameron Gutman
71c9ff0d91 Elide the wait if the queue head is already non-null 2021-05-15 21:31:45 -05:00
Cameron Gutman
edf1838708 Expose RTT information from ENet 2021-05-15 13:58:54 -05:00
Cameron Gutman
5feb3b6f90 Dynamically adjust wait time to hit the next RTO 2021-05-15 12:47:20 -05:00
Cameron Gutman
50c0648de2 Run a full enet_host_service() rather than just enet_host_flush() on send 2021-05-15 12:26:01 -05:00
Cameron Gutman
97216e1704 Wait for ENet socket readability rather than just sleeping 10 ms 2021-05-15 00:15:16 -05:00
Cameron Gutman
43eb36e17a Simplify and improve graceful disconnect logic 2021-05-14 22:36:13 -05:00
Cameron Gutman
387ff48a65 Perform a graceful disconnection if the termination was locally initiated 2021-05-14 22:06:07 -05:00
Cameron Gutman
1b3c14a792 Increase maximum input queue size 2021-05-14 21:07:14 -05:00
Cameron Gutman
132833deeb Limit RTO to 2x RTT and fix early peer timeout expiration 2021-05-14 20:44:19 -05:00
Cameron Gutman
a1a150c300 Refactor IDR/RFI requests to simplify code and fix race conditions 2021-05-14 20:41:20 -05:00
Cameron Gutman
cd62147cdf Print a warning when the input queue reaches the maximum size 2021-05-14 20:36:25 -05:00
Cameron Gutman
7743899251 Optimize LBQ to avoid unnecessary syscalls 2021-05-14 18:42:01 -05:00
Cameron Gutman
5d09d43b08 Disable RFI at 4K until the problems are understood 2021-05-06 22:17:04 -05:00
Cameron Gutman
ccaca624f3 Attempt to fix audio latency issues on some PCs 2021-05-04 10:21:41 -05:00
Cameron Gutman
65047ac0e2 Switch to VS2019 build images for CI
Requires suppressing warning C5105 caused by Windows SDK headers
2021-04-29 17:59:38 -05:00