Cameron Gutman
a1b74e1220
Fix vaExportSurfaceHandle() detection with i965 VAAPI driver
2020-05-14 20:56:24 -07:00
Cameron Gutman
01f6188824
Add VAAPI_FORCE_DIRECT and VAAPI_FORCE_INDIRECT env vars to control rendering technique
2020-05-13 19:45:30 -07:00
Cameron Gutman
283f31a734
Test if vaExportSurfaceHandle() works before claiming EGL export is supported
2020-05-13 19:39:45 -07:00
Cameron Gutman
b800ce9ebe
Allow use of VA drivers without VAEntrypointVideoProc
2020-05-13 19:31:25 -07:00
Cameron Gutman
eb9d54465c
Don't use EGLRenderer if not built with SDL 2.0.10+
2020-05-13 19:19:11 -07:00
Cameron Gutman
eb9e1f81d4
Enable the EGLRenderer to use the render thread
2020-05-13 19:09:20 -07:00
Cameron Gutman
51e9ab83ad
Send a null AVFrame to indicate end of stream to allow renderers to do render thread cleanup
2020-05-13 18:55:21 -07:00
Cameron Gutman
5ed7e03b2e
Merge pull request #365 from xdbob/wayland_for_upstream
...
Introduce a new FFMPEG frontend renderer: EGLRenderer
2020-05-13 18:39:18 -07:00
Cameron Gutman
b4548c1af2
Flush all window events after SDL_CreateRenderer()
2020-05-12 18:41:36 -07:00
Antoine Damhet
0a396f3112
Introduce a new FFMPEG frontend renderer: EGLRenderer
...
Right now this renderer works on X11 & Wayland with VAAPI as a backend.
Some rendering latency benchmarks on my `i7-10510U` (with
`intel-media-driver` 20.1.1 which cause a *huge* regression with the
SDL_Renderer):
| | X11 | Wayland |
| Before | 6.78ms | 22.50ms |
| EGLRenderer | 0.76ms | 00.77ms |
Signed-off-by: Antoine Damhet <antoine.damhet@lse.epita.fr>
2020-05-12 11:11:35 +02:00
Cameron Gutman
514a8575a2
Use the viewport size for computing the overlay position
2020-05-07 18:56:53 -07:00
Cameron Gutman
f30c11ddf4
Properly fix SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH on macOS VTRenderer
2020-05-06 22:20:21 -07:00
Cameron Gutman
dfa63297fc
Fix incorrectly scaled output from the SDL renderer on macOS
2020-05-04 17:48:32 -07:00
Cameron Gutman
1852f74e8b
Add missing return statement
2020-04-26 20:42:01 -07:00
Cameron Gutman
55e3e16860
Try radeonsi if other VAAPI drivers fail
2020-04-26 20:18:46 -07:00
Cameron Gutman
7cf2a55b43
Allow radeonsi to direct render on XWayland
2020-04-26 20:13:00 -07:00
Cameron Gutman
c41cbbd2da
Allow the radeonsi VAAPI driver on XWayland
2020-04-26 20:06:53 -07:00
Cameron Gutman
aaa112c3f3
Don't use VAAPI drivers that lack VPP support
...
intel-media-va-driver (free) is one example of such a driver which
is apparently missing the shaders to perform colorspace conversion.
2020-04-26 15:38:05 -07:00
Cameron Gutman
8cf7f3ac08
Fix absolute mouse positioning on SDL renderer
2020-04-24 19:37:15 -07:00
Cameron Gutman
e56329d05a
Don't render with vaPutSurface() on XWayland
2020-03-27 19:11:03 -07:00
Cameron Gutman
2452e80e57
Add VDPAU driver path fallbacks for AppImage
2020-03-26 19:06:24 -07:00
Cameron Gutman
b9019831a9
Fix failure to try the default VAAPI driver with the modified LIBVA_DRIVERS_PATH
2020-03-26 18:25:52 -07:00
Cameron Gutman
b3b49b440e
Add VAAPI driver path fallbacks for AppImage
2020-03-24 00:09:03 -07:00
Cameron Gutman
ba2488b6e2
Try the iHD VA driver as a fallback to fix Comet Lake and later
2020-03-18 18:39:43 -07:00
Cameron Gutman
4e7e0d67e5
Add a workaround for Mesa Iris returning the wrong VA driver
2020-03-17 17:34:35 -07:00
Cameron Gutman
81221336f4
Rec 601 seems to be a bit more accurate on macOS
2020-03-10 23:21:00 -07:00
Cameron Gutman
ecfc758ce4
Attach colorspace data to CVPixelBuffer. Fixes #323
2020-03-10 22:21:09 -07:00
Cameron Gutman
7ee323f0d5
Fix deprecation warning on macOS
2020-02-29 15:54:10 -08:00
Cameron Gutman
979de190dc
Cap resolution options at 1080p on Steam Link and Raspberry Pi due to hardware limitations
2020-02-23 00:43:43 -08:00
Cameron Gutman
46bcbda972
MMAL is always full-screen
2020-02-23 00:25:01 -08:00
Cameron Gutman
43bdc353fb
Fix 720p streaming on MMAL
2020-02-23 00:22:44 -08:00
Cameron Gutman
57a1c5eb76
Disable the window mode options for always full-screen renderers
2020-02-09 11:35:05 -08:00
Cameron Gutman
77386f8dfc
Reduce buffering for MMAL to avoid requiring 128 MB VRAM split
2020-02-08 17:56:30 -08:00
Cameron Gutman
529fdf0341
Add decoder options dictionary to prepareDecoderContext()
2020-02-08 17:47:26 -08:00
Cameron Gutman
4794f44a6d
Charge decoders for time spent holding on to frames
2020-01-26 20:15:11 -08:00
Cameron Gutman
f0119b1231
Add support for the out-of-tree Jetson FFmpeg NVMPI decoders
...
https://github.com/jocover/jetson-ffmpeg
2020-01-26 19:16:03 -08:00
Cameron Gutman
4c579aa826
Provide another frame if avcodec_receive_frame() returns EAGAIN
2020-01-26 15:36:22 -08:00
Cameron Gutman
b9463b3c0e
Allow NV12 and NV21 to be selected for non-hwaccel decoders using the SDL renderer
2020-01-26 15:02:29 -08:00
Cameron Gutman
cede6ce8a9
Add H264_DECODER_HINT and HEVC_DECODER_HINT envvars to specify a decoder manually
2020-01-26 14:40:48 -08:00
Cameron Gutman
956e6e3638
Avoid slicing for hardware decoders that use SDL as the renderer
2020-01-26 14:13:42 -08:00
Cameron Gutman
2e0bd2ec28
Invoke avcodec_receive_frame() during decoder testing
2020-01-15 18:09:59 -08:00
Cameron Gutman
a0151fbc04
Fix memory leak if 10-bit color is not supported
2020-01-15 17:56:11 -08:00
Cameron Gutman
c6638a7154
Add support for 10-bit output in full-screen with DXVA2
2020-01-14 17:12:55 -08:00
Cameron Gutman
5aed8f928a
Add V4L2M2M support using SDL renderer
...
Note: This requires FFmpeg master to work, since it depends on:
https://github.com/FFmpeg/FFmpeg/commit/d61cf1b1ebc2477749d7d7825a072400ed24af9
2020-01-10 20:52:16 -08:00
Cameron Gutman
e1603f0808
Explicitly use Rec 601 for VDPAU
2019-12-16 18:02:28 -08:00
Cameron Gutman
d4c2350d63
Fix DXVA2 rendering with the wrong colorspace on AMD GPUs
2019-12-15 13:29:19 -08:00
Cameron Gutman
5e5470ae12
Specify video transfer matrix for SLVideo
2019-12-15 11:27:47 -08:00
Cameron Gutman
6230a99360
Fix colorspace conversion with SDL as frontend renderer
2019-12-14 17:17:29 -08:00
Cameron Gutman
801adb6af7
Add colorspace support to VAAPI renderer
2019-12-14 16:58:04 -08:00
Cameron Gutman
8b9b96f422
Only enable slicing when CPU decoding
2019-12-14 15:34:48 -08:00
Cameron Gutman
160684f23e
Allow decoders to choose a desired colorspace
2019-12-14 15:25:56 -08:00
Cameron Gutman
af6b8c9b88
Update common-c with colorspace configuration support
2019-12-14 14:40:02 -08:00
Cameron Gutman
de7b973239
Plumb presentation time from server into AVFrame.pts field
2019-11-11 18:03:47 -08:00
Cameron Gutman
c20daa8867
Add compatibility checks for HEVC Main10 in VT backend
2019-11-05 18:36:43 -08:00
Cameron Gutman
5e57a7d5c0
Prevent SDL renderer from trying to render 10-bit output
2019-11-05 17:29:21 -08:00
Cameron Gutman
7c8d27700e
Add 10-bit output support to VDPAU renderer
2019-11-05 17:09:44 -08:00
Cameron Gutman
f8621be5ee
Add an HEVC Main10 test frame
2019-11-05 17:08:25 -08:00
Cameron Gutman
ca26fa2dd0
Add basic HEVC Main10 support in DXVA2 renderer
2019-11-04 22:57:12 -08:00
Cameron Gutman
dbf98ce3a6
Require keyframes even for software H.264 decoding
2019-08-07 22:38:31 -07:00
Cameron Gutman
5db5a088ea
Fix NVDEC artifacts if the renderer is delayed for a bit
2019-08-01 20:25:58 -07:00
Cameron Gutman
bcbd1a5b4b
Fix subsystem print in VAAPI
2019-07-07 15:41:26 -07:00
Cameron Gutman
6468efd7e4
Add VAAPI DRM support
2019-07-07 15:32:38 -07:00
Cameron Gutman
1c225ed04d
Use CUDA acceleration if other hwaccels are unavailable
2019-06-26 21:54:29 -07:00
Cameron Gutman
612b738968
Use the preferred sw_format when reading frames back
2019-06-26 21:25:41 -07:00
Cameron Gutman
87356ef594
Add CUDA acceleration support
2019-06-26 21:02:33 -07:00
Cameron Gutman
4f74fd5354
Fix uninitialized variables and a race condition with CVDisplayLinkStart()
2019-05-21 09:09:16 -07:00
Cameron Gutman
97fb30cdf1
Fix a few bugs in CVDisplayLink integration in VTRenderer
2019-05-19 09:52:59 -07:00
Cameron Gutman
c2b12868bb
Move DisplayLinkVsyncSource back into VTRenderer to reduce latency
2019-05-11 18:33:12 -07:00
Cameron Gutman
53138d7c16
Name threads for easier debugging
2019-05-03 21:18:58 -07:00
Cameron Gutman
18d1d35104
Use QByteArray::reserve() rather than reallocating each time we must resize
2019-05-02 22:54:18 -07:00
Cameron Gutman
99d9de35de
Add NV21 pixel format support to SDL renderer
2019-05-02 22:51:28 -07:00
Cameron Gutman
e6a48481a5
Restore the bulk submission optimization for Steam Link
2019-05-01 22:31:52 -07:00
Cameron Gutman
477fa8fedf
Add logging callbacks for SLAudio and SLVideo
2019-04-28 11:01:54 -07:00
Cameron Gutman
4e936193c7
Request a test frame for MMAL decoder
2019-04-24 21:31:52 -07:00
Cameron Gutman
8878c4a136
Use VAAPI decoder for AMD on Wayland
2019-04-21 15:33:21 -07:00
Cameron Gutman
00926bac81
Fix build warning in SDL renderer
2019-04-21 11:09:11 -07:00
Cameron Gutman
dba479774b
Add DRM renderer for Rockchip devices
2019-04-21 05:22:37 +00:00
Cameron Gutman
5c8a1e632b
Add support for rendering NV12 hwframes with SDL
2019-04-19 22:16:06 -07:00
Cameron Gutman
d65e29111f
Fix some codec selection bugs
2019-04-19 20:57:21 -07:00
Cameron Gutman
1dfca525cf
Refactor renderer initialization to reduce duplication and inconsistency
2019-04-18 20:02:14 -07:00
Cameron Gutman
e51ad1a68a
Fix use-after-free due to stale m_FrontendRenderer pointer. Fixes #214
2019-04-18 19:26:13 -07:00
Cameron Gutman
9c76700f74
Add MMAL renderer for Raspberry Pi
2019-04-16 01:20:21 -07:00
Cameron Gutman
773b1af6f1
Minor refactoring in preparation for non-hwaccel decoder support
2019-04-15 21:56:01 -07:00
Cameron Gutman
b8b633a6cc
Use SDL to render on Wayland for VAAPI
2019-04-12 22:54:21 -07:00
Cameron Gutman
ada2270bd1
Reduce code duplication in renderers
2019-04-12 22:12:53 -07:00
Cameron Gutman
25e5175c54
Refactor parameter passing to decoders and split backend/decode-only and frontend renderers
2019-04-11 22:27:20 -07:00
Cameron Gutman
00a1948b73
Treat AV_CODEC_CAP_HARDWARE codecs as hardware accelerated too
2019-04-09 21:50:22 -07:00
Cameron Gutman
859a5a5e0c
Allow a renderer to opt-out of the render thread and use that for SDL on OGL
2019-04-09 21:46:14 -07:00
Cameron Gutman
6783cf57da
TTF_OpenFontRW retains the SDL_RWops on success, so we must keep the font data around to back it
2019-04-09 21:26:47 -07:00
Cameron Gutman
54383b84ec
Fix random deadlocks on window resize with the software decoder due to processing window messages off the render thread
2019-04-03 20:44:50 -07:00
Cameron Gutman
2d7dcb495c
Remove CAPABILITY_DIRECT_SUBMIT for the video decoder because it can block for significant time periods when D3D9 is reconfiguring display settings (and holding the D3D global lock)
...
This can cause false reports of packet loss.
2019-03-29 23:38:23 -07:00
Cameron Gutman
cabbba2448
Move status update overlay to bottom left for SDL
2019-03-23 21:14:21 -07:00
Cameron Gutman
c48ed7bb0d
Fix undefined variable usage after 2703efedef
2019-03-23 20:25:19 -07:00
Cameron Gutman
c313f1a20b
Embed our data files inside the binary with QRC
2019-03-23 10:45:44 -07:00
Cameron Gutman
2bf3f1b94b
Refactor Steam Link support files
2019-03-22 22:51:08 -07:00
Cameron Gutman
e95ff989b1
Allow DXVA2 renderer blacklists to be bypassed
2019-03-21 20:44:30 -07:00
Cameron Gutman
018e8999e2
Add connection status overlay for the VT renderer
2019-03-18 20:56:53 -07:00
Cameron Gutman
202a643e5a
Fix size of the status update overlay on DXVA2
2019-03-17 15:12:25 -07:00
Cameron Gutman
c75b9c9221
Add connection status overlay for DXVA2 and SDL
2019-03-17 15:08:21 -07:00
Cameron Gutman
052194714a
Adjust thread priorities based on recent refactoring
2019-03-17 00:45:31 -07:00
Cameron Gutman
bf5d43d0cf
Use SDL_HINT_OVERRIDE for critical hints
2019-03-17 00:18:15 -07:00
Cameron Gutman
f2ac570949
Rebuild SDL2 (5dc13016cf) with USE_D3D9EX
2019-03-16 23:52:40 -07:00
Cameron Gutman
e5a8b49c93
Limit the number of queued frames in Pacer to prevent excessive memory consumption if the renderer gets blocked for a while
2019-02-18 12:13:45 -08:00
Cameron Gutman
80a40ac5f9
Increase frame drop threshold
2019-02-16 23:13:35 -08:00
Cameron Gutman
a1956350b1
Rename pacing drop to jitter drop to be less confusing for users
2019-02-16 23:04:25 -08:00
Cameron Gutman
ab4127f940
Use presence of a frame after rendering rather than render time for frame dropping
2019-02-15 22:44:52 -08:00
Cameron Gutman
f03d12b677
Use a separate render thread even with a V-Sync source
2019-02-15 22:09:50 -08:00
Cameron Gutman
81c6202582
Rename renderFrameAtVsync() to renderFrame() in preparation for further refactoring
2019-02-15 21:07:02 -08:00
Cameron Gutman
6cab2bec61
Don't trust VT to tell us whether decode is supported
2019-02-15 19:10:21 -08:00
Cameron Gutman
38b8a59fe5
Adjust overlay color for more contrast
2019-02-15 18:53:40 -08:00
Cameron Gutman
b1799009b3
Use the Path class to lookup ModeSeven.ttf
2019-02-15 18:13:36 -08:00
Cameron Gutman
aba806bc32
Implement debug overlay for VideoToolbox renderer
2019-02-13 20:55:52 -08:00
Cameron Gutman
b1fb3f2391
Set FFmpeg log level at debug until first frame is rendered
2019-02-13 18:34:59 -08:00
Cameron Gutman
f83853c2fb
OverlayManager now manages font size for the overlays
2019-02-12 22:36:56 -08:00
Cameron Gutman
46bd8ad83d
Add debug overlay for SDL renderer
2019-02-12 21:55:15 -08:00
Cameron Gutman
5788fa7204
Make OverlayManager own the overlay color setting
2019-02-12 20:39:10 -08:00
Cameron Gutman
d077c6450f
Split SdlRenderer from renderer.h
2019-02-12 19:58:36 -08:00
Cameron Gutman
6ed512e762
Provide a renderer callback when the overlay data changes
2019-02-12 18:43:38 -08:00
Cameron Gutman
947970e07b
Shortcut decoder initialization when only using it for capability testing
2019-02-12 18:42:53 -08:00
Cameron Gutman
1fd099db70
Log when StretchRect() fails
2019-02-09 18:47:57 -08:00
Cameron Gutman
8bb6d4d0d9
Fix VDPAU scaling on AMD cards. Fixes #171
2019-01-29 20:52:41 -08:00
Cameron Gutman
21aad643f3
Use 32 pixel alignment for HEVC to fix Intel green line issue
2019-01-28 21:26:27 -08:00
Cameron Gutman
8687448966
Use StretchRect() on Intel GPUs or if VideoProcessBlt() fails
2019-01-28 19:18:43 -08:00
Cameron Gutman
4471a858db
Fix miscounted pacer dropped frames in non-pacing mode
2019-01-22 21:21:29 -08:00
Cameron Gutman
22e712af5a
Add v-sync text to stats overlay
2019-01-22 20:55:58 -08:00
Cameron Gutman
9799b82d53
Improve long render time logic
2019-01-22 20:55:35 -08:00
Cameron Gutman
78915e0b99
Use a separate render thread when not using frame pacing
2019-01-22 20:31:31 -08:00
Cameron Gutman
a4edd9d202
Submit frame directly from the decoder thread to avoid interference from the main thread
2019-01-21 20:27:37 -08:00
Cameron Gutman
7747624c80
Revert "Wake up main thread immediately after new frame is pushed"
...
This reverts commit aab7191a44
.
2019-01-21 20:10:13 -08:00
Cameron Gutman
aab7191a44
Wake up main thread immediately after new frame is pushed
2019-01-21 18:57:14 -08:00
Cameron Gutman
1f972b1828
Require several consecutive long render times to drop a frame
2019-01-21 17:58:42 -08:00
Cameron Gutman
58b77cf589
Fix inaccurate pacer drop and network drop percentages and add total FPS stat
2019-01-21 17:43:15 -08:00
Cameron Gutman
c064f87889
Drop a frame if the rendering time exceeds the v-sync period
2019-01-20 19:59:29 -08:00
Cameron Gutman
d6b4c8e7da
Avoid blocking decoding operations during Present calls
2019-01-20 14:08:53 -08:00
Cameron Gutman
b19c4bfc5d
Add performance overlay for DXVA2 renderer
2019-01-19 23:05:56 -08:00
Cameron Gutman
8612e6726d
Remove accidentally enabled debug prints
2018-12-25 14:05:55 -08:00
Cameron Gutman
cfabaf334e
Add frame pacing toggle
2018-12-25 12:57:00 -08:00
Cameron Gutman
c054536fab
Count Pacer delay in frame stats
2018-12-25 12:09:45 -08:00
Cameron Gutman
d5a1189053
Avoid VAAPI on AMD drivers due to a bad memory leak
2018-10-14 20:37:13 -07:00
Cameron Gutman
4f84843b00
Fixup H.264 SPS for VideoToolbox compatibility. Fixes #98
2018-10-12 17:59:53 -07:00
Cameron Gutman
9075f309ad
Disable annoying stream stats prints
2018-10-02 20:12:53 -07:00
Cameron Gutman
a0249b4337
Add video stats for performance overlay
2018-09-25 00:47:59 -07:00
Cameron Gutman
b1de66d878
Directly use the AVBufferSampleDisplayLayer as the rendering view's layer to increase efficiency
2018-09-22 18:34:15 -07:00
Cameron Gutman
af9fb0e091
Fix GetVideoProcessorCaps() failure handling
2018-09-21 17:29:53 -07:00
Cameron Gutman
f96911e1ba
Use DXVA2_VideoProcProgressiveDevice since we don't need any fancy image processing or deinterlacing
2018-09-21 17:07:28 -07:00
Cameron Gutman
8a0089eb81
Print driver information in VDPAU and VAAPI renderers
2018-09-20 21:23:16 -07:00
Cameron Gutman
8002c65693
Block Intel drivers earlier than 4836 from using HEVC due to artifacting issues. Fixes #32
2018-09-14 20:20:47 -07:00
Cameron Gutman
7ca2ca8045
Print the GPU driver version on Windows
2018-09-13 14:54:30 -07:00
Cameron Gutman
12496e4432
Refactor audio rendering into a separate class
2018-09-13 06:23:06 -07:00
Cameron Gutman
9dcd856099
Blacklist Kepler GPUs for HEVC due to hybrid decode support present in some drivers
2018-09-09 10:48:01 -07:00