Cameron Gutman
c9e5660b8c
Track the last sent controller packet by controller index
...
This avoids stacking batch delay when multiple controller are connected
2023-10-16 22:02:55 -05:00
Cameron Gutman
615b5e2bba
Rewrite input batching for mouse and gamepad sensors
...
The old method was too inflexible (depending on consecutive events to batch) that it couldn't
really handle stressful cases like high polling rate mice combined with multiple gamepads
reporting motion sensor events.
2023-10-16 21:43:05 -05:00
Cameron Gutman
8d30079033
Prevent flooding the queue with motion events
2023-10-16 18:05:42 -05:00
Cameron Gutman
47fa51034a
Revert change to send mouse position and gamepad events as unreliable
...
This can lead to poor behavior on lossy networks
2023-10-16 18:02:57 -05:00
Cameron Gutman
f78f2135fa
Don't strictly enforce picture data following the first PPS in debug mode
2023-10-13 23:23:27 -05:00
Cameron Gutman
5e844aad08
Fix UBSan warning for signed integer overflow
2023-10-11 20:09:48 -05:00
Cameron Gutman
620b4be477
Add separate LC_ASSERT_VT() for asserts that only apply for valid traffic
2023-10-11 20:01:39 -05:00
Cameron Gutman
574ad6e676
Reject video packets beyond our valid sequence number range for the FEC block
2023-10-11 17:32:39 -05:00
Cameron Gutman
836bc6611f
Batch split UTF-8 packets at the ENet layer
2023-10-11 01:18:12 -05:00
Cameron Gutman
8d73a9f8b7
Allow the UTF-8 splitting loop to be interrupted
2023-10-11 01:10:34 -05:00
Cameron Gutman
d828868bc8
Fix uninitialized channel and packet flags in split UTF-8 packets
2023-10-11 00:56:54 -05:00
Cameron Gutman
da7967632a
Add a workaround for clients still using a short to represent button flags
2023-10-10 18:07:32 -05:00
Cameron Gutman
426745fa24
Extend to 32-bit button flags for the older LiSendControllerEvent() API
2023-10-10 18:07:08 -05:00
Cameron Gutman
d457fbb487
Fix warning for fopen() in RecorderCallbacks.c
2023-10-06 23:17:25 -05:00
Cameron Gutman
7580f3f8e3
Remove _CRT_SECURE_NO_WARNINGS now that we use safe string functions everywhere
2023-10-06 22:42:25 -05:00
Cameron Gutman
1351f382aa
Minor cleanups to RTSP URL parsing
2023-10-06 21:30:45 -05:00
Cameron Gutman
116267a245
Fix parseSdpAttributeTo[U]Int() to avoid writing to the const input string
2023-10-06 18:12:08 -05:00
Cameron Gutman
b2497a3918
Rewrite extractVersionQuadFromString() to avoid copying the input string
2023-10-06 18:09:15 -05:00
Cameron Gutman
8b84d17c8d
Replace additional unsafe string functions
2023-10-06 17:33:37 -05:00
Cameron Gutman
d055599608
Map Misc button to Guide for GFE hosts
2023-10-05 20:29:18 -05:00
Cameron Gutman
162c581754
Initialize strtokCtx to NULL for first call to strtok_r()
...
Apparently some strtok_r() implementations require this.
2023-09-27 01:27:12 -05:00
Cameron Gutman
1be56269a3
Fix handling of duplicate packets when OOS data was also received
...
It's possible for a sequence of packets seqnums like 2, 0, 1, 2 to end up hitting the fast path
again after filling in gap of OOS packets. The fast path assumes duplicate packets are caught
by the next contiguous sequence number check, but this is only true if that value is kept updated.
Since the slow path doesn't update the next contiguous sequence number, it's no longer safe to
use the fast path for the remaining packets in the frame because duplicate packets would be
mishandled.
Queuing duplicate packets violates all sorts of queue assumptions and can cause us to return
corrupt data to the decoder or attempt an FEC recovery without enough shards.
2023-09-23 12:08:16 -04:00
Cameron Gutman
7a6d12fc4e
Update ENet submodule to add ENET_NO_INSTALL option
2023-09-20 20:52:28 -05:00
Cameron Gutman
c1744de069
Batch async control stream callbacks
2023-09-18 23:02:44 -05:00
Cameron Gutman
a258b7e12b
Fix leak in unreachable codepath
2023-09-18 22:59:03 -05:00
Cameron Gutman
c3e9aea843
Fix non-standard forward declaration
2023-09-18 21:19:59 -05:00
Cameron Gutman
20130e210b
Invoke control stream callbacks on a separate thread
...
Time spent processing client callbacks would contribute to increased control stream latency,
which means higher RTTs, more lengthy waits before retransmissions, and higher client-reported
network latency stats.
2023-09-17 14:49:06 -05:00
Cameron Gutman
b2528faa02
Disable GCC static analysis in CI until newer GCC is available in AppVeyor
2023-09-15 23:19:10 -05:00
Cameron Gutman
7f665babf9
Enable GCC static analysis in CI
2023-09-15 22:41:37 -05:00
Cameron Gutman
515bea6fb4
Fix GCC static analysis warnings
2023-09-15 22:03:27 -05:00
Cameron Gutman
c13f4a323f
Use connected datagram sockets for audio and video
...
This ensures unwanted data from other sources is dropped and that our own source address doesn't change while streaming.
2023-09-12 23:29:05 -05:00
Cameron Gutman
ec6713fd80
Improve checks for runt video packets
...
Since we always allocate fixed size these aren't likely to be exploitable,
but we ought to fix them anyway. Worst case, we will just read some garbage
and generate corrupt video output.
2023-09-12 22:44:45 -05:00
Cameron Gutman
171858c2e7
Add CodeQL scanning
2023-09-12 21:46:46 -05:00
Cameron Gutman
315d0bbfa3
Use modern string parsing functions in SdpGenerator
2023-09-12 21:24:28 -05:00
Cameron Gutman
5a19e52921
Use modern string parsing functions in RtspParser
2023-09-12 21:20:44 -05:00
Cameron Gutman
91b4186b8a
Use strtok_r()/strtok_s() instead of regular strtok()
2023-09-12 20:56:15 -05:00
Cameron Gutman
2bb026c763
Suppress connection warnings for the first sampling period
2023-08-23 21:03:40 -05:00
Cameron Gutman
dc62a6f88e
Send periodic pings and FEC status messages more frequently
2023-08-19 11:39:55 -05:00
Cameron Gutman
e05ee6dfc8
Change FEC status message to avoid truncating large frames
2023-08-19 11:37:44 -05:00
Cameron Gutman
78e06eb613
Batch control stream messages
2023-08-19 11:27:16 -05:00
Cameron Gutman
8b0dbf7158
Send client feature flags indicating FEC status support
2023-08-19 11:03:00 -05:00
Cameron Gutman
e0d83f61c2
Fix missing debug message when an I-frame is sent as an RFI recovery frame for AV1
2023-08-14 21:32:38 -05:00
Cameron Gutman
8bca948b61
Fix unused function warning on release builds
2023-08-12 15:08:22 -05:00
Cameron Gutman
a0b29fe3dc
Avoid asserting on filler NALUs in reference frames on debug builds
2023-08-12 05:32:11 -05:00
Cameron Gutman
325518b47a
Add LiGetHostFeatureFlags() API
2023-08-03 22:09:30 -05:00
Cameron Gutman
0f17b4d0c5
Add LI_TOUCH_EVENT_CANCEL_ALL
2023-07-30 19:20:15 -05:00
Cameron Gutman
f2cea4d6b0
Update ENet submodule
2023-07-30 14:02:28 -05:00
Cameron Gutman
6d039a646b
Fix extended delays for unreliable/unsequenced traffic on high latency connections
2023-07-25 23:30:45 -05:00
Cameron Gutman
92cc6f96d4
Merge latest changes from upstream ENet
2023-07-25 22:03:42 -05:00
Cameron Gutman
77c5d5c282
Tune SO_RCVBUF logic
...
- Calculate desired SO_RCVBUF by packet size for the video socket
- Use the OS default SO_RCVBUF for audio and STUN sockets
2023-07-25 18:30:19 -05:00
Cameron Gutman
70a2e305bc
Extend pen/touch APIs with contact area and orientation
2023-07-22 15:01:03 -05:00
Cameron Gutman
6f4f2607b3
Clarify API documentation
2023-07-22 12:34:02 -05:00
Cameron Gutman
d8b2b04bb2
Reuse pressure field in touch/pen events to provide hover distance
2023-07-22 12:33:19 -05:00
Cameron Gutman
27428e655b
Move ServerCodecModeSupport values into public header
2023-07-16 15:30:55 -05:00
Cameron Gutman
9b5fbff7ba
Only disable 4K H.264 RFI with GFE
2023-07-16 15:13:22 -05:00
Cameron Gutman
2ac25bebaa
Send unreliable traffic as reliable when we have just one channel
2023-07-16 15:11:09 -05:00
Cameron Gutman
2d0badde9a
Send zero state gyro events as reliable traffic
2023-07-12 01:05:23 -05:00
Cameron Gutman
dc803bcd33
Document the correct way to indicate arrival and removal of controllers
2023-07-09 15:24:56 -05:00
Cameron Gutman
a3b28eb4d7
Update ENet for UWP builds
2023-07-08 19:15:45 -05:00
Cameron Gutman
49fef03830
Change frameHeaderSize to uint32_t to avoid warning from promotion to signed int
2023-07-08 01:40:44 -05:00
Cameron Gutman
9205a87002
Improve validation of lastPacketPayloadLength field
2023-07-08 01:31:41 -05:00
Cameron Gutman
ed7d72c07d
Fix single packet frame case for AV1
2023-07-06 01:41:15 -05:00
Cameron Gutman
190b08ecf4
Encode the final packet length in the frame header for AV1
...
Some decoders (Android) are very strict about trailing padding bytes.
2023-07-06 01:29:24 -05:00
Cameron Gutman
953971c9a3
Fix handling of AV1 keyframes
2023-07-05 18:45:29 -05:00
Cameron Gutman
f3b7edbd11
Overflow onto channel 0 rather than distributing
...
This allows the host to make some assumptions about channel IDs
2023-07-04 16:51:35 -05:00
Cameron Gutman
377d37503f
Split controller motion events onto their own channels
2023-07-04 16:18:52 -05:00
Cameron Gutman
53c29f11ba
Send mouse deltas reliably for now
2023-07-04 15:48:08 -05:00
Cameron Gutman
c8828d586c
Don't send periodic pings as reliable traffic
2023-07-04 15:03:01 -05:00
Cameron Gutman
7608e8e69d
Enforce setting serverCodecModeSupport field in SERVER_INFORMATION
2023-07-04 14:56:20 -05:00
Cameron Gutman
0095141e08
Split control data into multiple channels and optimize packet flags based on type of data
...
This can significantly performance on lossy networks by avoiding HOL blocking.
2023-07-04 14:49:21 -05:00
Cameron Gutman
7d59c6e14e
Fix motionType value in motion packets
2023-07-04 14:18:27 -05:00
Cameron Gutman
54e1556c40
Constrain the reported controller number by the max gamepad count
2023-07-04 14:16:53 -05:00
Cameron Gutman
9ad56cdd8e
Move serverCodecModeSupport into SERVER_INFORMATION struct
2023-07-02 23:54:04 -05:00
Cameron Gutman
effba1a16f
Remove mention of enableHdr
2023-07-02 23:40:42 -05:00
Cameron Gutman
59a506c15a
Only select 10-bit format if also compatible with client
2023-07-02 23:32:04 -05:00
Cameron Gutman
1125dc3dba
Replace enableHdr option with directly receiving ServerCodecModeSupport value from XML
2023-07-02 23:28:10 -05:00
Cameron Gutman
e36bde4acc
Implement AV1 codec support
...
This has a breaking change to StreamConfiguration that requires client updates.
2023-07-02 22:16:20 -05:00
Cameron Gutman
c0792168f5
Add LI_BATTERY_PERCENTAGE_UNKNOWN value
2023-07-02 16:42:09 -05:00
Cameron Gutman
a0f8c060c0
Introduce new protocol extensions for controller RGB LEDs and battery state
2023-07-02 14:38:54 -05:00
Cameron Gutman
c5dc45e144
Define an unknown tool type and clarify button-only events
2023-06-28 17:25:41 -05:00
Cameron Gutman
28d63b11dd
Fix float values in pen events
2023-06-25 20:06:43 -05:00
Cameron Gutman
f8899f724d
Add a touch event type for leaving hover
2023-06-25 16:58:12 -05:00
Cameron Gutman
8c447137d6
Fix controller arrival packet to actually contain the controller that arrived
2023-06-25 14:27:43 -05:00
Cameron Gutman
44c8b95400
Pen tilt is 0..90 not -90..90
2023-06-25 00:24:55 -05:00
Cameron Gutman
c8aac7f71c
Define units for controller motion events
2023-06-24 21:28:43 -05:00
Cameron Gutman
de0efa861a
Several fixes for touch and pen APIs
2023-06-24 21:25:48 -05:00
Cameron Gutman
5cbb6f210d
Fix signness of pen tilt parameters
2023-06-24 15:14:17 -05:00
Cameron Gutman
812ec0e2b7
Allow exceeding 4 controllers for Sunshine hosts
2023-06-18 16:36:34 -05:00
Cameron Gutman
9bf09d681e
Plumb Sunshine feature flags SDP attribute for protocol extensions
2023-06-18 15:52:51 -05:00
Cameron Gutman
689450954c
Add pen and motion batching
2023-06-18 14:30:16 -05:00
Cameron Gutman
372eb94ed0
Expand button flags to support additional buttons with Sunshine
2023-06-18 14:03:29 -05:00
Cameron Gutman
7eea7a7971
Fix endianness issues for BE systems
2023-06-18 13:50:39 -05:00
Cameron Gutman
329c55d52f
Send pointer IDs instead of touch indices
2023-06-18 13:48:55 -05:00
Cameron Gutman
cd35abbae7
Fix build
2023-06-11 19:46:13 -05:00
Cameron Gutman
ce98d4fb2f
Introduce connection callbacks for trigger rumble and motion events
2023-06-11 19:42:02 -05:00
Cameron Gutman
4a48024dc8
Introduce new input extension functions for touch, pen, motion, and controller arrival
2023-06-11 19:38:22 -05:00
Cameron Gutman
7970925fe4
Introduce macro function to determine endianness
2023-06-11 19:33:24 -05:00
Cameron Gutman
169078d0a9
Allow encoder to pick optimal ref frame count if RFI is supported by the decoder
2023-04-29 13:11:38 -05:00
Cameron Gutman
c9426a6a71
Add HDR and colorspace fields to DECODE_UNIT
2023-03-11 11:36:21 -06:00
Cameron Gutman
02f12e4448
Update enet to fix NO_MSGAPI build
2023-03-05 14:32:34 -06:00