Commit Graph
100 Commits
Author SHA1 Message Date
Cameron Gutman fc124b60ce Enable slicing on HEVC if the client requests it 2018-08-04 16:37:57 -07:00
Cameron Gutman 679f6e83bb Fix HEVC streams requiring a higher bitrate to enable high quality surround audio 2018-07-27 19:04:25 -07:00
Cameron Gutman 4c47dd74ad Revert "Reduce audio bitrate when streaming with a low video bitrate" due to breakage on GFE 3.14.1 2018-07-27 19:02:27 -07:00
Cameron Gutman d55b6bb502 Update ENet with Vita fix 2018-07-27 00:52:44 -07:00
Cameron Gutman 219d87486e Check for both EWOULDBLOCK and EAGAIN for OSes where those values differ 2018-07-21 16:12:38 -07:00
Cameron Gutman ebd0b2d3b1 Merge pull request #37 from d3m3vilurr/fix-vita
Fix vita connecting problems
2018-07-21 15:33:54 -07:00
Cameron Gutman dabf0e9c23 Merge pull request #36 from d3m3vilurr/refix-alloca
Add NEED_ALLOCA macro
2018-07-21 12:19:42 -07:00
Cameron Gutman 6e7965f013 Use SO_RCVTIMEO to avoid the overhead of an extra syscall per packet 2018-07-16 00:46:40 -07:00
Cameron Gutman a9438d1f5e Fix build on MSVC 2018-06-23 19:44:56 -07:00
Cameron Gutman 77b277d05e Inform the host of disconnect immediately so it can clean up properly 2018-06-09 21:37:42 -07:00
Cameron Gutman ed134f07d3 Fix crash when using DR_NEEDS_IDR on a non-direct submit decoder 2018-06-01 16:59:06 -07:00
Cameron Gutman b528ef7921 Fix uninitialized variable warning when using an invalid audio configuration 2018-05-28 10:46:42 -07:00
Cameron Gutman c1b954da1f Fix channel mapping error in 5.1 high quality mode 2018-05-27 20:03:08 -07:00
Cameron Gutman a8b01d6c29 Enable high quality surround sound when the video bitrate is over 15 Mbps 2018-05-27 18:45:09 -07:00
Cameron Gutman 783af66324 Reduce audio bitrate when streaming with a low video bitrate 2018-05-27 17:29:20 -07:00
Cameron Gutman c4692a5b5f Rework sequencing code and fix audio dropout across 64K boundary in the process 2018-02-19 00:16:32 -08:00
Cameron Gutman bf737dc959 Plumb clientRefreshRateX100 for modern GFE versions 2018-02-03 21:56:52 -08:00
Cameron Gutman cafc4d8125 Fix ENet comments 2018-01-19 20:25:54 -08:00
Cameron Gutman 75f5477c85 Use RTSP over TCP for GFE 3.12 and later 2018-01-09 23:06:36 -08:00
Cameron Gutman a0b500a834 Centralize logic to use UDP for RTSP and append Host option if we use TCP 2018-01-09 22:04:08 -08:00
Cameron Gutman cde117df06 Allocate enough buffer space for high quality audio packets from GFE 3.12 2018-01-09 19:46:19 -08:00
Cameron Gutman f6ae7fc2b4 Improve decoder compatibility by using num_ref_frames=1 when RFI is disabled. Fixes decoder hangs on Amlogic SoCs. 2017-11-30 23:38:49 -08:00
Cameron Gutman deb0e69d64 HDR is a Gen7 feature 2017-11-30 23:26:32 -08:00
Cameron Gutman 069f1475b6 Refactor reference frame invalidation checks into one function 2017-11-30 23:14:11 -08:00
Cameron Gutman 26fe1cb22c Separate H.265 video format for SDR and HDR formats 2017-11-25 12:12:38 -08:00
Cameron Gutman 1c386a8987 Fix race condition that could result in loss of NALUs in an IDR frame
Unfortunately, this was a design flaw in the way we handled IDR frames
NALUs. Because we split them all up and handled them as separate
"frames" in the system, some of them could be discarded due to a
video decode unit overflow, for example, and cause the decoder to get
confused due to receiving an SPS without a following PPS.

To address this, NALUs in the IDR frame are always delivered together
as one frame. The SPS, PPS, and VPS are now in separate buffers in
the IDR frame's buffer list and tagged as such with the new buffer
type field. The IDR frames themselves have a new frame type field
which marks them as special frames that clients may need to process
in a special way.

This will likely be a breaking change for your clients!
2017-11-18 14:00:25 -08:00
Cameron Gutman 314a5937f4 Set encoder feature flags to disable split frame encode on GFE 3.10 2017-11-10 00:09:15 -08:00
Cameron Gutman a135ceaa9a Add support for HDR streaming 2017-10-11 23:21:43 -07:00
Cameron Gutman d2229fd6a8 Update SDP attributes for better 4K streaming 2017-10-11 23:00:01 -07:00
Cameron Gutman c0596ad1df Add the ability for clients to reduce bitrate when HEVC is used 2017-09-25 21:36:23 -07:00
Cameron Gutman 957b1de1ad Fix double-free and memory leak in RTSP option parsing failure path 2017-09-02 16:09:22 -07:00
Cameron Gutman 454fdccffc Fix possible lost wakeups by acquring event mutex in signal path 2017-08-20 00:28:15 -07:00
Cameron Gutman e3dadc3c08 Fix a couple files with bogus permissions 2017-08-20 00:28:15 -07:00
Cameron Gutman 047cdca847 Update README.md 2017-08-14 00:13:37 -07:00
Cameron Gutman 9c37b57510 Use a 24-bit rounding mask to correctly round SPI and restore SPI asserts 2017-06-11 14:52:56 -07:00
Cameron Gutman c51bfdc9cb Remove packet loss reporting, since it will be unreliable due to the FEC queue in front of the depacketizer 2017-06-11 14:50:21 -07:00
Cameron Gutman 3579265560 The SPI assert can still wrap on a long running stream and doesn't provide a ton of value anyway, so let's just kill it 2017-06-11 13:30:32 -07:00
Cameron Gutman 05c0fd68e3 Merge pull request #31 from irtimmer/audio_context
Add audio context and flags
2017-06-11 13:25:09 -07:00
Cameron Gutman fdb256185a Merge pull request #32 from irtimmer/customlog
Use application callback instead of standard error stream for logging
2017-06-11 13:22:51 -07:00
Cameron Gutman 88f95c7871 Remove a dangerous short cast that was causing incorrect wrapping of the packet index and a few other unnecessary casts 2017-06-11 12:55:44 -07:00
Cameron Gutman 99cfae7acc Add receive time to decode unit 2017-06-10 16:08:52 -07:00
Cameron Gutman 4113108f23 Remove extra depacketizer code handling packet sequencing since RTP FEC queue does that now 2017-06-10 15:52:20 -07:00
Cameron Gutman b83cafe845 Ensure FEC is always enabled 2017-06-10 15:51:05 -07:00
Cameron Gutman 4134ea3c23 Prevent the depacketizer from receiving parity packets 2017-06-10 15:42:51 -07:00
Cameron Gutman 6fb3472aec Add a frame number field to the decode unit struct 2017-06-10 13:41:21 -07:00
Cameron Gutman c386569754 Remove length prefix on video buffers 2017-06-10 12:55:50 -07:00
Cameron Gutman af6f13c7fa Use clock_gettime() for better timestamps on platforms that support it 2017-06-10 12:07:25 -07:00
Cameron Gutman c01deff683 Fix LC_DEBUG not working if NDEBUG is defined 2017-06-08 18:50:21 -07:00
Cameron Gutman 634031839c Use isBefore() for sequence number comparison 2017-06-08 00:30:29 -07:00
Cameron Gutman 965657523d Improve debug output during frame loss 2017-06-07 22:49:54 -07:00
Cameron Gutman 6b2de18481 Don't wait for a parity packet to submit a completed frame 2017-06-07 22:46:13 -07:00
Cameron Gutman 3deba8de7e Reduce video latency by 1 frame by not waiting for the next frame to signal us to give the current frame to the decoder. Also avoid giving partially reconstructed frames to the depacketizer because it can get confused with certain packet loss patterns. 2017-06-07 21:52:49 -07:00
Cameron Gutman 1a2996a49a Various minor fixes to the FEC queue 2017-06-07 21:48:04 -07:00
Cameron Gutman 4791f62688 Add additional asserts that were useful for debugging corruption caused by the bug fixed in a499413221 2017-06-06 02:55:25 -07:00
Cameron Gutman a499413221 Fix the buffer data packets value being truncated on very large frames causing an out of bounds buffer access in reed_solomon_reconstruct() 2017-06-06 02:07:13 -07:00
Cameron Gutman 9a7519937e Remove unused memory allocation 2017-06-06 00:49:46 -07:00
Cameron Gutman e2c6104251 Fix build error with LC_DEBUG defined 2017-06-05 22:26:38 -07:00
Cameron Gutman 6e31c21815 Round down the specified packet size to the nearest multiple of 16 rather than forcing 1024 all the time 2017-05-26 21:17:43 -07:00
Cameron Gutman 86447399a9 Add start and stop callbacks for audio and video renderers 2017-05-21 12:50:53 -07:00
Cameron Gutman 92951e1309 Add LiInterruptConnection() to interrupt LiStartConnection() 2017-05-21 12:24:22 -07:00
Cameron Gutman 9ebb429f66 Fix null check typo 2017-05-21 10:59:47 -07:00
Cameron Gutman b3b5ee1c2c Fix use of enetMutex during connection failure 2017-05-21 10:52:44 -07:00
Cameron Gutman 109472e4ab Fix bogus queue assert firing on failed connection 2017-05-21 10:37:34 -07:00
Cameron Gutman eaf3355c96 Reduce socket read timeout to 100 ms to allow LiStopConnection() to complete faster 2017-05-21 10:29:00 -07:00
Cameron Gutman 7ee9ea4e11 Fix RFI invalidating an extra frame each time 2017-05-21 10:11:07 -07:00
Cameron Gutman bfd368769e Force an IDR frame request when the decode unit queue overflows 2017-05-20 17:32:02 -07:00
Cameron Gutman 2d7bf5be82 Fix state cleanup if LiStartConnection() fails 2017-05-18 09:52:50 -07:00
Cameron Gutman ec6c569130 Split reference frame invalidation support capabilities into codec-specific options 2017-05-15 23:11:37 -07:00
Cameron Gutman 7aeaefd24f Add Limelog support under Android 2017-05-15 00:45:12 -07:00
Cameron Gutman 20821e7eb6 Leave the zero padding bytes on FEC-recovered packets alone. Decoders are required to cope with trailing zero bytes in NALUs and they are not safe to remove because they may actually be part of the byte stream itself. 2017-05-11 20:10:20 -07:00
Cameron Gutman 417c8be124 Add missing license 2017-05-10 10:13:06 -07:00
Cameron Gutman fe52c1848a Prevent FEC from breaking after 64K frames 2017-05-07 22:27:15 -07:00
Cameron Gutman 8a2b24e57a Fix frame queue corruption when trying to skip a frame with no buffers 2017-05-07 20:39:36 -07:00
Cameron Gutman 1439d53619 Remove unused function 2017-05-07 13:17:32 -07:00
Cameron Gutman 998650e53a Merge pull request #26 from d3m3vilurr/fix-build-openssl-1.0.x
Remove defines of EVP_CIPHER_CTX_new and EVP_CIPHER_CTX_free
2017-05-06 16:08:45 -07:00
Cameron Gutman 1eed2a65cb Merge pull request #28 from d3m3vilurr/fix-crash-on-vita
vita: Increate thread stack size
2017-05-06 16:05:06 -07:00
Cameron Gutman e7f8fd165e Fix unintentionally crashing the streamer when requesting FEC with packets sizes over 1024 2017-05-06 16:01:35 -07:00
Cameron Gutman ff4dbbb26d Fix compilation errors, warnings, and cosmetic stuff 2017-05-06 15:43:43 -07:00
Cameron Gutman 8d2dccf4ca Correctly transmit the number of controllers attached to the client 2017-02-04 20:09:34 -08:00
Cameron Gutman f1adbc1e6b Apparently we're back to 8 byte first frame headers on GFE 3.2 2016-12-13 20:24:34 -08:00
Cameron Gutman de915efaaf Wiggle the mouse at connection start to wake the display up 2016-12-13 20:23:32 -08:00
Cameron Gutman bd825776b3 Add support for GFE 3.0.7 2016-10-05 17:31:19 -07:00
Cameron Gutman f57bd745b4 API update to provide enough information to support GFE 3.0.7 2016-10-05 17:23:59 -07:00
Cameron Gutman ed2c4e716b Update enet submodule with Vita support 2016-10-05 16:45:07 -07:00
Cameron Gutman 293c6a7274 Fix IDR frame requests on Gen 3 servers 2016-09-24 13:07:30 -07:00
Cameron Gutman 86ade5204e Change message API to use const char * 2016-06-09 12:17:48 -05:00
Cameron Gutman 2103b62386 Cancel the pending IDR frame request if we got a spurious IDR frame after a stream discontinuity 2016-05-26 17:38:03 -05:00
Cameron Gutman 69c8881187 Update ENet submodule to include the MTU fix for LTE streaming 2016-05-21 18:32:39 -05:00
Cameron Gutman dddcba217b Try progressively lower receive buffer sizes until one is accepted 2016-05-08 12:10:04 -04:00
Cameron Gutman 41983369fb Remove unused member of RTP reorder queue 2016-05-08 12:06:51 -04:00
Cameron Gutman 7e5e2cebe2 Increase recv buffer of video stream from 64K to 512K for improved 4K performance 2016-05-06 14:44:16 -04:00
Cameron Gutman f69ab5dd5e Merge pull request #20 from Unknownforce351/patch-1
Increase RTP RECV BUFFER size
2016-04-27 11:12:17 -04:00
Cameron Gutman a5b5ed8d2b Return the oldest packet instead of removing it upon RTP queue constraint violation 2016-04-27 02:22:14 -04:00
Cameron Gutman be78c36fa1 Fix an overzealous compiler warning 2016-04-27 02:16:42 -04:00
Cameron Gutman 013a93bc32 Fix uninitialized memory usage in the RTP reorder queue causing assertion failures 2016-04-27 02:16:18 -04:00
Cameron Gutman 8846493eb4 Fix unsafe modification of the peer variable during shutdown 2016-04-18 16:36:45 -04:00
Cameron Gutman 597199ed92 Stop trying to disconnect the peer when aborting RTSP handshake. It's unsafe without additional synchronization. 2016-04-18 16:29:28 -04:00
Cameron Gutman d5e0950ec6 Wrap enet_host_service() to hide the logic required to make retransmissions work 2016-04-18 16:27:50 -04:00
Cameron Gutman 33deb0fe1a Allow ENet to directly use the resolved address rather than doing DNS resolution itself 2016-04-02 14:08:06 -04:00
Cameron Gutman 4055fb6d77 Always try to resolve a hostname to IPv4 first 2016-04-02 14:06:43 -04:00