Cameron Gutman
a81c6a1c5e
Initial work on AV1 support
2023-07-03 00:45:36 -05:00
Cameron Gutman
68daa90b7e
Refactor non-hwaccel decoders to use a single list of known codec names
2023-04-02 17:31:31 -05:00
Cameron Gutman
fb39ad896e
Add h264_omx and hevc_omx decoders used by the Vision Five 2
2023-04-02 17:17:25 -05:00
Cameron Gutman
a3d1e9a117
Allow negotation of 36 and 48 bit deep color modes
2023-03-27 01:02:50 -05:00
Cameron Gutman
755c7c9895
Set max BPC property when streaming in 10-bit color modes
2023-03-27 00:44:02 -05:00
Cameron Gutman
f16b5cd337
Expose glslow config option
2023-03-26 20:27:03 -05:00
Cameron Gutman
21cda8141d
Always request AV_PIX_FMT_DRM_PRIME to ensure we get it if available
2023-03-26 19:59:12 -05:00
Cameron Gutman
90f26dfa45
Support direct KMSDRM output for platforms with slow GL implementations
2023-03-26 19:46:22 -05:00
Cameron Gutman
ba507d8046
Move hw->sw frame mapping into a separate class
2023-03-26 14:41:02 -05:00
Cameron Gutman
4cd030582d
Allow matching primary planes for direct rendering
2023-03-26 13:28:26 -05:00
Cameron Gutman
a0365c8e1c
Evaluate D3D9 quirks before calling CreateDeviceEx()
2023-03-17 00:53:47 -05:00
Cameron Gutman
38156c9f7f
Default to D3D11VA on multi-GPU systems
2023-03-13 22:56:28 -05:00
Cameron Gutman
5baa8c680a
Add upstreamed NV15 format used by Rockchip devices
2023-03-11 11:44:36 -06:00
Cameron Gutman
5de29928cd
Plumb HDR metadata for VideoToolbox
2023-02-02 19:16:18 -06:00
Cameron Gutman
b3cfdbb835
Fix DRM renderer build
2023-01-17 21:45:02 -06:00
Cameron Gutman
8a0142bd0f
Plumb HDR metadata and horizontal scrolling with Sunshine
2023-01-16 21:51:18 -06:00
Cameron Gutman
68c6d6c932
Attempt to fix build with SDL 2.26 on systems with old GL headers
2022-11-21 20:32:10 -06:00
Cameron Gutman
b9709d0825
Fix build without SDL_VIDEO_DRIVER_WAYLAND
2022-11-14 21:11:26 -06:00
Cameron Gutman
cae666b834
Wake pacing queue waiters when Pacer is being destroyed
2022-11-12 15:55:36 -06:00
Cameron Gutman
5970ca49e9
Don't use swap interval on Wayland
2022-11-12 15:45:54 -06:00
Cameron Gutman
6ae6218043
Refactor Pacer to handle both blocking and non-blocking VsyncSources
2022-11-12 15:08:50 -06:00
Cameron Gutman
8e3e19a7f7
Removed unused NullThreadedVsyncSource
2022-11-12 14:30:38 -06:00
Cameron Gutman
e3d51fd7f7
Implement a Wayland Vsync source using frame callbacks
2022-11-12 13:03:42 -06:00
Cameron Gutman
a6fccf93d1
Use a separate texture for rendering to avoid blending in the alignment padding
...
Fixes #885
2022-10-26 21:48:55 -05:00
Cameron Gutman
30a5f405f5
Enable HEVC RFI for the FFmpeg software decoder
2022-10-25 23:19:19 -05:00
Cameron Gutman
17848c097c
Don't switch between GLX and EGL if EGL worked
2022-10-16 22:57:08 -05:00
Cameron Gutman
8465a27a97
Deprioritize VAAPI for Gallium and Nvidia drivers and work around RFI latency bug
2022-10-16 21:51:10 -05:00
Cameron Gutman
7717749b72
Reduce max queued frames to avoid exhausting the decoder buffer pool
2022-10-15 14:34:42 -05:00
Cameron Gutman
9e4337babf
Revert "Increase the number of decoder surfaces for DXVA2/D3D11VA"
...
This reverts commit 02c781b8f4
.
2022-10-15 14:32:12 -05:00
Cameron Gutman
a860bd8dd5
Enable HEVC RFI on Tegra
2022-10-14 23:41:09 -05:00
Cameron Gutman
704ce4ff0c
Add environment variable for overriding decoder capabilities
2022-10-14 23:39:49 -05:00
Cameron Gutman
125738f13d
Cancel overlay update callbacks before destroying VTRenderer
2022-10-14 22:49:33 -05:00
Cameron Gutman
02c781b8f4
Increase the number of decoder surfaces for DXVA2/D3D11VA
...
We forgot to take into account frames buffered within Moonlight itself
2022-10-14 21:20:35 -05:00
Cameron Gutman
84fc5f3008
Use colorspace helper with VAAPI direct rendering
2022-10-14 19:23:51 -05:00
Cameron Gutman
8a224fbae4
Revert "Fix macOS build"
...
This reverts commit 0928d1fab2
.
2022-10-13 01:19:56 -05:00
Cameron Gutman
e6c4332445
Revert "Use Rec 2020 colorspace for WCG support even if HDR is off on the host"
...
Rec 2020 conversion causes colors to be blown out in SDR
This reverts commit 472e8ee92e
.
2022-10-13 01:19:49 -05:00
Cameron Gutman
0928d1fab2
Fix macOS build
2022-10-13 01:11:04 -05:00
Cameron Gutman
40dd588bef
Use 10-bit format mask instead of hardcoding specific formats
2022-10-13 00:17:05 -05:00
Cameron Gutman
472e8ee92e
Use Rec 2020 colorspace for WCG support even if HDR is off on the host
2022-10-13 00:14:10 -05:00
Cameron Gutman
c55af7fff3
Add a decoder/renderer callback to specify the desired color range
2022-10-12 23:59:01 -05:00
Cameron Gutman
7a39daf179
Implement Rec 601 Full Range support in SDLRenderer
2022-10-12 23:52:29 -05:00
Cameron Gutman
5501d7bc6b
Include opt-out variable in VAAPI avoidance log output
2022-10-05 18:50:53 -05:00
Cameron Gutman
413ef42a34
Enable HEVC RFI for CUDA, VAAPI, and VDPAU decoders
2022-10-05 18:47:43 -05:00
Cameron Gutman
a1694ab951
Use nvidia-vaapi-driver on Wayland systems if available
2022-10-05 18:44:11 -05:00
Cameron Gutman
fbbbd5e0b8
Use new LiRequestIdrFrame() API
2022-10-05 00:53:31 -05:00
Cameron Gutman
f8c7e2ee41
Enable HEVC RFI for VideoToolbox
2022-10-05 00:25:59 -05:00
Cameron Gutman
2a4af0bc2c
Use colorspace helpers for DRM EGL export
2022-10-05 00:20:33 -05:00
Cameron Gutman
bc68aad67b
Print the frame number if decoding fails
2022-10-04 23:38:54 -05:00
Cameron Gutman
9e8a4cab7b
Enable HEVC RFI for DXVA2 and D3D11VA
2022-10-04 22:56:21 -05:00
Cameron Gutman
483a601867
Display SDR/HDR status in performance overlay
2022-09-28 17:44:22 -05:00
Cameron Gutman
439e8fe33f
Constify frame colorspace helper functions
2022-09-24 18:37:51 -05:00
Cameron Gutman
99885f5b4b
Centralize colorspace and color range handling
2022-09-24 12:28:23 -05:00
Cameron Gutman
81cfacaa3d
Add fallback logic when the host doesn't send valid colorspace data
2022-09-11 23:13:10 -05:00
Cameron Gutman
ad3ed97472
Fix handling of 3 byte Annex B start sequences
2022-09-05 17:56:42 -05:00
Cameron Gutman
0ff8a44ec3
Allow 10-bit in DXVA2 as a fallback
2022-08-22 00:23:07 -05:00
Cameron Gutman
c6d8f6e618
Allow D3D11VA to be disabled via environment variable
2022-08-22 00:19:46 -05:00
Cameron Gutman
d39a29759c
Don't draw with test-only renderers
2022-08-21 18:38:09 -05:00
Cameron Gutman
bf4332b9e7
Prefer D3D11VA in non-FSE modes for improved performance
2022-08-21 17:50:56 -05:00
Cameron Gutman
aa7d5fa924
Don't use swap interval 1 by default on Wayland systems
2022-08-14 13:09:31 -05:00
Cameron Gutman
36218b54f8
Don't hardcode /dev/dri/card0 and /dev/dri/renderD128
2022-06-30 19:25:33 -05:00
Cameron Gutman
be2f4433db
Avoid hardcoding VIDEO_FORMAT_H265_MAIN10 for HDR/10-bit color
2022-06-26 16:22:05 -05:00
Cameron Gutman
1b96b18bc0
Fix handling of colorspace changes when using CUDA+SDL
2022-05-28 22:55:55 -05:00
Cameron Gutman
e9edad6f8c
Fix surface leak if SDLVideo_CreateOverlay() fails
2022-05-28 22:48:49 -05:00
Cameron Gutman
f8a6012c3a
Improve overlay format handling
2022-05-28 22:48:23 -05:00
Cameron Gutman
e103f6c9b6
Avoid holding the overlay lock during vaPutSurface
2022-05-28 22:28:17 -05:00
Cameron Gutman
9daf7b5a36
Fix modesetting for non-EGL HEVC streams
2022-05-28 21:42:27 -05:00
Cameron Gutman
b9c73df488
Draw the black background even for the KMSDRM backend to fix modesetting
2022-05-24 19:41:37 -05:00
Cameron Gutman
f99f1f6441
Disable EGL renderer on RPi due to very poor performance
2022-05-23 23:05:07 -05:00
Cameron Gutman
1ec1f5d3be
Switch to D3D11VA by default on Windows ARM64
...
It performs much better at 4K on Surface Pro X
2022-05-22 22:29:18 -05:00
Cameron Gutman
c2d7b835fb
Try moving session.h prior to vaapi.h
2022-05-21 16:58:28 -05:00
Cameron Gutman
f72888ce6f
Attempt to fix build error with older Qt headers
2022-05-21 16:52:04 -05:00
Cameron Gutman
216f274a92
Fix UAF in SLVideo overlay update
2022-05-21 00:30:07 -05:00
Cameron Gutman
5ea79efe4b
Work around broken overlay state restoration in Qt GUI
2022-05-21 00:20:36 -05:00
Cameron Gutman
197c1ba21b
Add support for the status overlay on Steam Link
2022-05-21 00:10:49 -05:00
Cameron Gutman
95c4a24d99
Destroy subpictures before the associated image
2022-05-20 21:46:40 -05:00
Cameron Gutman
f5f23a7c22
Implement overlay support for the VAAPI direct renderer
2022-05-20 21:40:37 -05:00
Cameron Gutman
8aa42ff1d9
Reset the EGL renderer when specialization fails
2022-05-17 17:10:40 -05:00
Cameron Gutman
63a5bc5e12
Only force pacing in true full-screen mode to be consistent with DXVA2
2022-05-15 13:38:58 -05:00
Cameron Gutman
e0b7b6dc3d
Fix DXGI_FEATURE_PRESENT_ALLOW_TEARING feature check
2022-05-11 22:48:15 -05:00
Cameron Gutman
3d7ecf98c2
Fix HEVC Main10 support check on macOS GPUFamily1 GPUs
2022-05-11 22:00:34 -05:00
Cameron Gutman
ad5581c620
Use DWM MMCSS for D3D11VA like DXVA2 does
2022-05-09 23:52:13 -05:00
Cameron Gutman
69af991772
Improve DXVA2 performance in borderless windowed on AMD hardware
2022-05-09 22:55:58 -05:00
Cameron Gutman
2bb2745f91
Enhance frame pacing logic for HDR renderers
2022-05-07 16:21:17 -05:00
Cameron Gutman
5f682bb45f
Revert addition of D3DCREATE_NOWINDOWCHANGES
...
This flag breaks Alt+Tab in full-screen exclusive mode
2022-05-07 16:21:04 -05:00
Cameron Gutman
2480849f39
Clean up DXGI adapter enumeration code
2022-05-02 19:05:00 -05:00
Cameron Gutman
a1c350a537
Fix WARP device leak
2022-04-26 23:29:04 -05:00
Cameron Gutman
f732b1978e
Require a test frame with D3D11VA
2022-04-26 23:04:31 -05:00
Cameron Gutman
d3a542bac4
Try all available GPUs in D3D11VA decoder
2022-04-26 22:49:46 -05:00
Cameron Gutman
f8f5e8e869
Don't discard all excess frames before rendering
...
This prevents the render queue's pacing logic from working and
interferes with renderers that take a full v-sync period between
their waitToRender() and renderFrame() callbacks.
2022-04-24 17:04:32 -05:00
Cameron Gutman
38396b2691
Rework window management to fix issues restoring window state between windowed and full-screen
2022-04-24 16:22:17 -05:00
Cameron Gutman
220f50ebe4
Revert "Allow renderers to apply size and display changes seamlessly"
...
This reverts commit c989133d27
.
2022-04-24 16:12:12 -05:00
Cameron Gutman
c989133d27
Allow renderers to apply size and display changes seamlessly
2022-04-24 15:42:08 -05:00
Cameron Gutman
ef23a80b16
Fix EGL build when using EGL 1.4 or earlier headers
2022-04-21 21:13:39 -05:00
Cameron Gutman
747d3eedf1
Cleanup D3D11VA renderer by removing unnecessary codepaths
...
Waitable swapchains seem to be worse than our existing DXVsyncSource for synchronizing with VBlank.
Full-screen exclusive mode isn't beneficial vs Independent Flip on modern Win10/Win11 systems.
2022-04-15 23:26:32 -05:00
Cameron Gutman
fd563726f0
Fix blocking presents in borderless windowed flip modes
2022-04-15 23:21:52 -05:00
Cameron Gutman
62136a1a96
Increase buffer count to prevent starvation on AMD GPUs
2022-04-14 23:21:32 -05:00
Cameron Gutman
cf16c31d38
Improve performance and latency of D3D11VA renderer
2022-04-14 22:46:13 -05:00
Cameron Gutman
0f5d4aa72f
Enhance EGLRenderer's waitForRender() implementation
2022-04-10 20:20:44 -05:00
Cameron Gutman
d8dbe77427
Tiny EGL code cleanup
2022-04-10 19:35:29 -05:00
Cameron Gutman
e3a7b54f90
Use EGL fences to reduce video latency
2022-04-08 19:28:22 -05:00
Cameron Gutman
81d5e7f014
Wait for the VDPAU output surface to be idle in waitToRender()
2022-04-07 22:16:52 -05:00
Cameron Gutman
9790c218dc
Wait on the display link callback before rendering to reduce latency
2022-04-07 22:08:43 -05:00
Cameron Gutman
6d3d51553b
Wait on our D3D11 swapchain before rendering to reduce latency
2022-04-07 21:46:48 -05:00
Cameron Gutman
474591c6a5
Use a separate callback to indicate EOS instead of renderFrame()
2022-04-07 21:30:20 -05:00
Cameron Gutman
4291e15b60
Use NDC helpers in D3D11VA renderer
2022-04-05 00:57:14 -05:00
Cameron Gutman
940ae6406b
Add helper functions to perform NDC transformations
2022-04-05 00:50:04 -05:00
Cameron Gutman
6a0cf4bfd3
Fix some #if -> #ifdefs
2022-04-05 00:26:13 -05:00
Cameron Gutman
fee6f75223
Fix VAAPIRenderer build error with neither HAVE_EGL nor HAVE_DRM defined
2022-04-05 00:24:00 -05:00
Cameron Gutman
8c93b2d54c
Fix VAAPIRenderer build error with HAVE_DRM but not HAVE_EGL
2022-04-04 19:40:31 -05:00
Cameron Gutman
09ed82db65
Fix build with HAVE_MMAL
2022-04-02 16:16:40 -05:00
Cameron Gutman
a56cb0e88a
Don't waste time retrying the same renderer again
2022-04-02 16:14:04 -05:00
Cameron Gutman
9acf5ff0ef
Update workaround to prevent deadlock with h264_mmal
2022-04-02 16:06:39 -05:00
Cameron Gutman
9a5134ffcf
Use QString not QByteArray for string equality
2022-04-02 15:49:07 -05:00
Cameron Gutman
055cae90b8
Only apply the AMD color range workaround to new drivers
...
Applying it to older drivers introduces the very same issues it's meant to fix
2022-03-30 22:43:08 -05:00
Cameron Gutman
742f1b1283
Prefer hevc_nvv4l2 over hevc_nvmpi
2022-03-26 22:54:54 -05:00
The Great Wizard Azkali
0b127a2f3b
Add support for h264_nvv4l2 and hevc_nvv4l2 ( #745 )
...
* Add support for h264_nvv4l2
A new implementation of nvv4l2 decoder has been made by @CTCaer and will be released in thr next switchroot (Linux for Nintendo Switch) update. This implementation of ffmpeg can also be used by other Jetson boards. A repository will be soon hosted so Jetson users can install it.
Prior to the new implementation distribution, we add it to the project who currently use nvmpi implementation.
* Add support for hevc_nvv4l2
Following previous PR, add hevc support as well.
2022-03-26 22:02:00 -05:00
Cameron Gutman
2fc1dda232
Partially revert e64b15d
and b85d5b8
...
These changes cause excessive window recreation using the Flatpak on Nvidia with Wayland
2022-03-19 14:50:38 -05:00
Cameron Gutman
99495cff90
Add logging for cases where color range/encoding cannot be set
2022-03-19 13:12:41 -05:00
Cameron Gutman
a6395b9025
Fix short UI hang when manually stopping the stream after losing connection with the host
2022-03-06 13:11:36 -06:00
Cameron Gutman
4b83b022d3
Remove unnecessary assert
2022-02-25 22:47:20 -06:00
Cameron Gutman
93c02fb43a
Print GPU info in D3D11VA renderer
2022-02-20 22:10:18 -06:00
Cameron Gutman
9add6b3696
Add DXVA2 quirk for AMD GPUs to fix color range on the latest drivers
2022-02-17 00:35:33 -06:00
Cameron Gutman
36db791516
Refactor D3D11 shaders to reduce duplicated code
2022-02-16 19:38:18 -06:00
Cameron Gutman
9a64c026ea
Use optimized pixel shaders for the normal SDR and HDR colorspaces
2022-02-09 20:46:02 -06:00
Cameron Gutman
be2af1d17a
Add environment variables to configure DXVA2 and D3D11VA options
2022-02-08 22:27:27 -06:00
Cameron Gutman
1d79bcc657
Disable waitable swapchains in full-screen mode
2022-02-06 00:28:59 -06:00
Cameron Gutman
e8b4494fc3
Add an extra buffer for DirectFlip
2022-02-05 23:22:07 -06:00
Cameron Gutman
2518208c5c
Don't set fullScreenDesc fields to prevent entering "proxy" full-screen mode
2022-02-05 19:32:05 -06:00
Cameron Gutman
918fea7d4b
Precompute the aspect ratio stretch to avoid having to change viewports twice each frame
2022-02-05 15:44:37 -06:00
Cameron Gutman
4dc07bf63f
Don't render the alignment padding area
2022-02-05 15:23:29 -06:00
Cameron Gutman
04a0aca221
Create SRVs for all textures in the pool during initialization
2022-02-05 14:49:08 -06:00
Cameron Gutman
1942e72474
Only bind the constant buffer once
2022-02-05 14:15:35 -06:00
Cameron Gutman
f256407789
Implement D3D11VA video rendering
2022-02-04 21:51:34 -06:00
Cameron Gutman
67612f607e
WIP: D3D11VA support
...
Overlays work, but drawing the actual video is unimplemented
2022-02-03 19:45:07 -06:00
Cameron Gutman
76bd4a1c7b
Don't set the HDR metadata blob if we don't have one
2022-01-30 22:57:53 -06:00
Cameron Gutman
13dbad6f35
Fix build with old libdrm headers
2022-01-30 22:56:22 -06:00
Cameron Gutman
cf089fdfe9
Add support for HDR with VAAPI using DRM frontend renderer
2022-01-29 18:16:39 -06:00
Cameron Gutman
9755e31fa2
Refactor VAAPI surface export check into separate function
2022-01-29 17:45:36 -06:00
Cameron Gutman
3fcf31d009
Improve robustness of EGL retry logic for 10-bit color
2022-01-29 01:12:38 -06:00
Cameron Gutman
1cbdd0e675
Display the HDR option if the platform has a decoder that supports it
2022-01-29 00:59:04 -06:00
Cameron Gutman
e0fd84d6f5
Fix build with old libdrm headers
2022-01-29 00:28:46 -06:00
Cameron Gutman
443720c3de
Plumb HDR metadata into DRM renderer
2022-01-28 22:40:07 -06:00
Cameron Gutman
254526a213
Plumb HDR mode information to the decoders
2022-01-28 22:10:50 -06:00
Cameron Gutman
ad0afb5fc9
Prefer direct rendering when using HDR
2022-01-27 22:36:49 -06:00
Cameron Gutman
e64b15d2a7
Rework how we deal with window re-creation for EGLRenderer
...
Previously we opted to just lie to SDL and tell it that the current
GL context is actually GLES 3.0 when it wasn't. This meant that
we avoided our window being recreated for GLES usage on Wayland
and KMSDRM, but that meant our 10-bit color change didn't apply
either. I suspect this hackery is what led EGLRenderer to get
stuck in a state where SDL_CreateRenderer() always failed.
Now SDL will recreate our window once to configure a compatible GL
API for our renderer. If that fails, we'll move on to a different
renderer (which may recreate the window again).
2022-01-27 21:49:03 -06:00
Cameron Gutman
2416618b34
Don't require 2 bits of alpha for 10-bit color
2022-01-26 18:55:56 -06:00
Cameron Gutman
a0709bec51
Improve debugging and add missing break
2022-01-23 21:12:32 -06:00
Cameron Gutman
f5bc4e7a24
Add color properties to DRM renderer
2022-01-23 21:03:56 -06:00
Cameron Gutman
b4665b6e5a
Pick a 10-bit DRM overlay for Main10 streaming
2022-01-23 19:19:16 -06:00
Cameron Gutman
b85d5b8822
Enable P010 surface export from VAAPI to EGL
2022-01-23 18:33:30 -06:00