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
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
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
947d1b5aef
Predictive RFI -> Speculative RFI
2022-10-06 21:20:44 -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
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
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
Cameron Gutman
5a2911ffe4
Rework NALU parsing to be more robust handling 3 byte prefixes
2022-09-05 16:45:14 -05:00
Cameron Gutman
921b59c467
Add API to wake a waiting thread in LiWaitForNextVideoFrame()
2022-01-17 14:12:11 -06:00
Cameron Gutman
fa892c5334
Remove SEI prefix NAL units before returning data to clients
2021-07-09 17:37:30 -05:00
Cameron Gutman
68c784445c
Introduce optional pull-based API for video data
2021-06-13 15:14:38 -05:00
Cameron Gutman
9361c325bb
Rename RtpFecQueue to RtpVideoQueue to match RtpAudioQueue
2021-06-01 22:57:26 -05:00
Cameron Gutman
8f371343cd
Consolidate includes
2021-04-29 17:22:15 -05:00
Cameron Gutman
83b1b17f87
Add specific logging for frames dropped completely
2021-04-27 17:39:00 -05:00
Cameron Gutman
7174caf5f1
Implement support for multi-FEC frames
2021-04-26 20:36:07 -05:00
Cameron Gutman
8dab1ee300
Use stdint.h types for Video.h
2021-04-26 17:08:44 -05:00
Cameron Gutman
a51cc972d3
Add APP_VERSION_AT_LEAST() macro for cleaner GFE version checks
2021-04-09 07:26:24 -05:00
Cameron Gutman
b528867466
Change NAL type parsing to match the spec and add AUD removal for H.264
2021-03-29 19:27:19 -05:00
Cameron Gutman
8b1fbc770e
Discard AUD NALs prepended to incoming frames
2021-03-28 10:34:01 -05:00
Cameron Gutman
fd950b6452
Allow applications to reliably calculate decode unit queue delay
2020-12-31 16:08:00 -06:00
Cameron Gutman
97ca7b099f
Report frames to the control stream code before FEC reconstruction
2020-12-24 11:08:31 -06:00
Cameron Gutman
8dc304bcd3
Fix more warnings
2020-12-05 23:30:25 -06:00
Cameron Gutman
0ead0df2a1
Remove usage of long types for LP64 and LLP64 consistency
2020-12-05 16:51:03 -06:00
Cameron Gutman
5f9f7ce407
Code cleanup: use stdbool.h
2020-11-30 20:38:13 -06:00
Cameron Gutman
1b022a0d05
Terminate the connection if we can't receive a key frame in 10 seconds
2020-08-29 21:00:05 -07:00
Cameron Gutman
f4dad9ae8b
Add presentation timestamp to video frame metadata
2019-11-10 18:07:11 -08:00
Cameron Gutman
9bd301897a
Remove unnecessary field in QDU struct
2019-10-21 17:03:01 -07:00
Cameron Gutman
801aaf43d6
Fix video on GFE 3.19
2019-05-27 01:27:50 -07:00
Cameron Gutman
dffe51e885
Add LiGetPendingVideoFrames() and LiGetPendingAudioFrames()
2019-05-07 20:25:26 -07:00
Cameron Gutman
a7d4537274
Fix receive time corruption after f395d305
2019-04-30 23:15:40 -07:00
Cameron Gutman
4a82762118
Assert that LENTRY_INTERNAL can fit in the reserved space
2019-04-27 14:09:55 -07:00
Cameron Gutman
0b8dc80823
Fetch receive time only once per frame instead of once per packet
2019-04-26 21:51:17 -07:00
Cameron Gutman
f395d3056a
Eliminate a copy and allocation for each incoming video packet
2019-04-25 22:07:03 -07:00
Cameron Gutman
12eebe0039
Wait for first IDR frame before enabling RFI
2019-01-19 14:44:48 -08:00
Cameron Gutman
a653f4d3e0
Fix IDR frame dropping race condition which seems to occur frequently with GFE 3.17
2019-01-18 01:50:39 -08:00