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
Cameron Gutman
b77072d399
Don't use GFE modifier workaround with Sunshine
2023-02-25 13:11:54 -06:00
Cameron Gutman
d3cb8131d1
Revert "Send TCP FIN after completion of our RTSP request"
...
Existing servers already know how to parse our messages without this,
so we just risk breaking things with middleboxes that don't do half-closed
connections properly. We'll handle this better with encrypted RTSP.
This reverts commit 95e3e26d12 .
2023-02-20 16:58:21 -06:00
Cameron Gutman
7e089435c7
Reduce max number of frame status reports per second
2023-02-20 16:48:12 -06:00
Cameron Gutman
55a6d58225
Fix leak
2023-02-20 16:42:23 -06:00
Cameron Gutman
207f981fd0
Send final FEC frame status info to Sunshine
...
This info will be used for dynamic FEC and dynamic video packet batch size.
2023-02-20 16:24:48 -06:00
Cameron Gutman
82105f2f8f
Declare packetFreed as volatile
2023-02-15 01:42:48 -06:00
Cameron Gutman
c88b1bcf8e
Fix integer truncation warning on MSVC
2023-02-15 01:33:32 -06:00
Cameron Gutman
54d46ca80f
Put backpressure on control stream sender when the window fills up
...
Without any backpressure, ENet will just let packets accumulate forever.
2023-02-14 23:02:18 -06:00
Cameron Gutman
830187e4da
Throttle mouse/controller message rate in the input send thread
...
This avoids clients from all having to handle this themselves independently.
2023-02-14 21:24:13 -06:00
Cameron Gutman
95e3e26d12
Send TCP FIN after completion of our RTSP request
...
This allows servers to read until a FIN, just like we do on the client.
2023-02-13 21:47:22 -06:00
Cameron Gutman
8186687093
Fix video header parsing assert with GFE 3.27
2023-02-13 21:26:47 -06:00
Cameron Gutman
be1a48e856
Treat WSA_IO_PENDING as a receive timeout
2023-02-13 20:20:44 -06:00
Cameron Gutman
fb12361b3f
Fixed ENet to support hosts with multiple possible source addresses
2023-02-12 15:39:58 -06:00
Cameron Gutman
dc186082a7
Add protocol extension for multi-client-compatible ping support
2023-02-12 01:23:25 -06:00
Cameron Gutman
07beb0f0a5
Accept any negative version as Sunshine
2023-01-16 21:38:36 -06:00
Cameron Gutman
08bb69ff7c
Fix HScroll packet typedef
2023-01-16 21:24:09 -06:00
Cameron Gutman
4dbb445f8b
Suppress Opus header assert with Sunshine
2023-01-16 21:13:18 -06:00
Cameron Gutman
e1a7fe84e0
Add missing return
2023-01-16 21:12:24 -06:00
Cameron Gutman
79b5ef0e1e
Add Sunshine protocol extension for passing HDR metadata
2023-01-16 21:06:33 -06:00
Cameron Gutman
c9a5cea93e
Add Sunshine protocol extension to support non-normalized key codes
2023-01-16 21:05:11 -06:00
Cameron Gutman
22adeb3902
Enable high resolution scroll events on Sunshine
2023-01-16 20:58:03 -06:00
Cameron Gutman
071e595766
Implement horizontal scrolling protocol extension for Sunshine
2023-01-16 20:56:51 -06:00
Cameron Gutman
ef9ad529a4
Skip PPS NALUs prepended to P-frames
2023-01-02 23:48:16 -06:00
Cameron Gutman
9da6329496
Fix integer truncation warning on MSVC
2022-12-06 17:33:43 -06:00
Cameron Gutman
5c7a5ce129
Remove overzealous assert
2022-12-06 17:23:11 -06:00
Cameron Gutman
bc00d957d3
Synthesize a PTS for hosts that don't send one
2022-12-06 17:22:02 -06:00
Cameron Gutman
8169a31ecc
Fix incorrect PNV_INPUT_HEADER typedef
2022-11-22 21:30:17 -06:00
Cameron Gutman
0a87fd023d
Add magic values for keyboard/mouse up/down
2022-11-22 18:27:27 -06:00
Cameron Gutman
4840e431f4
Call notifyKeyFrameReceived() before the decoder processes the frame
...
We don't care if the decoder processes it successfully.
2022-11-21 02:22:26 -06:00
Cameron Gutman
1e582e3e58
Improve decode unit validation
2022-11-21 02:17:47 -06:00
Cameron Gutman
549058d9d1
Assert that P-frames are not processed before IDR frames
2022-11-12 19:42:51 -06:00
Cameron Gutman
56d6b7ff5a
Ensure RFI is not used when an IDR frame is needed
2022-11-12 19:22:13 -06:00
Cameron Gutman
50c0a51b10
Improve high quality audio support
...
High quality audio now works on IPv6 and remote connections
2022-11-04 21:44:07 -05:00
Cameron Gutman
6418c631ba
Further improve audio FEC recovery logic when dealing with completely missing FEC blocks
2022-10-25 22:31:18 -05:00
Cameron Gutman
21998586d1
Improve audio recovery when a prior FEC block was completely lost
...
We now start playing the latest FEC block immediately, instead of needlessly
waiting for a second FEC block to realize we've lost a full block and need
to skip forward.
2022-10-24 23:38:23 -05:00
Cameron Gutman
7ba4eea417
Don't print misleading audio FEC log messages
2022-10-23 22:09:01 -05:00
Cameron Gutman
a2f68835f9
Fix signed comparison warning on GCC
2022-10-22 15:08:55 -05:00
Cameron Gutman
af1dbfe505
Use APP_VERSION_AT_LEAST in a couple other places
2022-10-22 14:45:19 -05:00
Cameron Gutman
b282c7e603
Ensure UNIX implementations of PltGetMillis() are not limited to 32 bits
2022-10-22 14:45:19 -05:00
Cameron Gutman
6d767a8494
Assume the platform supports clock_gettime() if CLOCK_MONOTONIC is defined
2022-10-22 14:45:19 -05:00
Cameron Gutman
9e52b70edf
Fix handling of a drop pattern where OOS packets are late but in contiguous order from the previous point
2022-10-22 14:45:19 -05:00
Cameron Gutman
05a925b801
Simplify speculative RFI tracking by looking at missing shards of any type
2022-10-22 14:45:19 -05:00
Cameron Gutman
5f92ecafe7
Avoid triggering RFI wait code for decode unit queue overflow
2022-10-06 21:25:48 -05:00
Cameron Gutman
44668bd256
Distinguish speculative RFIs from normal FEC-initiated RFIs
2022-10-06 21:21:00 -05:00
Cameron Gutman
73f1ec64a8
Suppress speculative RFI for 5 minutes after OOS data is detected
2022-10-06 21:20:44 -05:00
Cameron Gutman
947d1b5aef
Predictive RFI -> Speculative RFI
2022-10-06 21:20:44 -05:00
Cameron Gutman
9d25ebec40
Immediately report a lost frame if we find a discontinuity in the frame indices
2022-10-06 21:20:41 -05:00
Cameron Gutman
7d1a081fd0
Fix signature of notifyFrameLost() and add additional assert
2022-10-06 20:38:55 -05:00
Cameron Gutman
f2dd7888f7
Immediately request an IDR frame on corrupt frame
2022-10-06 20:36:53 -05:00
Cameron Gutman
e951302927
Disable RFI when streaming from a server that doesn't support it
2022-10-06 20:01:40 -05:00
Cameron Gutman
9091238861
Add another predictive RFI detection technique
2022-10-06 01:17:37 -05:00
Cameron Gutman
5e1be51b84
Implement predictive RFI to recover more quickly from frame loss
...
With predictive RFI, we can recover from a lost frame as soon as the next frame
by predicting whether we will have enough FEC data to be be able to recover a
frame based on the sequence numbers of the received packets.
2022-10-05 22:04:22 -05:00
Cameron Gutman
9240090983
Add LiRequestIdrFrame() API for requesting an IDR frame on demand
2022-10-05 00:46:56 -05:00
Cameron Gutman
502f799a73
Add ML_ERROR_FRAME_CONVERSION error constant
2022-10-04 19:37:35 -05:00
Cameron Gutman
bfade1d795
Add workaround for nvstreamer.exe crash on GFE 3.26 when streaming below 720x540
2022-10-04 18:33:12 -05:00
Cameron Gutman
72f4f9e7b1
Disable BLL-FEC on GFE 3.26
...
The effective FEC percentage is much lower which negatively impacts performance on lossy networks
2022-10-04 17:51:01 -05:00
Cameron Gutman
dbfbc91971
Explicitly request an IDR frame in the IDR frame wait path
2022-10-03 18:27:57 -05:00
Cameron Gutman
a4870f619b
Frame type fields are present all the way back to GFE 3.2 (and probably further)
2022-10-03 18:26:24 -05:00
Cameron Gutman
4c62b5d23a
Fix fallback handling of RFI on older servers
2022-10-03 18:25:08 -05:00
Cameron Gutman
3593dea585
Rework RFI to work reliably with HEVC
2022-10-02 22:19:48 -05:00
Cameron Gutman
795e3f644a
Ensure the next frame after a DU drop is always an IDR frame
...
On RFI-capable decoders, this would sometimes be a P-frame
2022-10-02 21:12:01 -05:00
Cameron Gutman
3ae777f973
Try to recover if the frame header parsing fails
2022-09-24 13:43:32 -05:00
Cameron Gutman
54825845e7
Fix large frame header size for GFE 3.26
2022-09-22 21:51:11 -05:00
Cameron Gutman
50603ac16e
Fix mishandling of IDR frames with a VUI or AUD NAL
2022-09-11 23:34:38 -05:00
Cameron Gutman
e453a4d548
Add 3 byte Annex B start sequence test mode for debugging clients
2022-09-05 17:41:37 -05:00