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
Cameron Gutman
12ad75a6b0
Move hybrid decode detection logic into a central location
2022-01-23 15:41:33 -06:00
Cameron Gutman
af92fe6ad1
Fix Apple silicon CPU check
2022-01-23 13:01:20 -06:00
Cameron Gutman
fcf7ed4faa
Only use the VT rasterization workaround on Apple silicon
2022-01-22 20:25:50 -06:00
Cameron Gutman
a58649fd10
Update Windows and macOS to FFmpeg 5.0
2022-01-22 13:44:05 -06:00
Cameron Gutman
dd941154d6
Fix EGL renderer overlay rendering with SDL_ttf 2.0.18
...
Fixes #721
2022-01-20 18:02:44 -06:00
Cameron Gutman
f0659b4f3c
Fix random crash on stream start with renderers that require test frames
2022-01-18 18:19:28 -06:00
Cameron Gutman
c138cbf994
Fix Windows build
2022-01-17 15:47:36 -06:00
Cameron Gutman
dfe275ab67
Avoid consuming stale data during/after decoder reset
2022-01-17 15:26:00 -06:00
Cameron Gutman
d6cfbdb273
Rewrite FFmpeg decoder to use pull model
...
This allows us to keep asynchronous decoders like MMAL and V4L2M2M fed
while we're waiting for output frames. Behavior for synchronous decoders
should be identical.
Continuing to feed new data while waiting for output frames is crucial for
acceptable performance on 1080p video on the Raspberry Pi using V4L2M2M,
since it allows the decode and copy operations to be pipelined.
2022-01-17 15:06:12 -06:00
Cameron Gutman
b9a6fb1fe5
Add workaround for AVSampleBufferDisplayLayer colorspace and artifacting issues
...
Fixes #493
2022-01-15 14:44:08 -06:00
Cameron Gutman
4b6194e15e
Add chroma location buffer attachment
2022-01-15 12:17:31 -06:00
Cameron Gutman
31eddd8da0
Remove superfluous colorspace check
2022-01-13 01:19:17 -06:00
Cameron Gutman
abf2a14ee6
Handle colorspace changes in SDL renderer
2022-01-13 01:16:09 -06:00
Cameron Gutman
08175de069
Fix incorrect colorspace in MMAL renderer
2022-01-09 17:04:38 -06:00
Cameron Gutman
808933cd70
Use DT files to get status of FKMS and rpivid
2022-01-09 16:44:20 -06:00
Cameron Gutman
384dd2adab
Prefer a render node in indirect rendering mode
2022-01-08 18:39:12 -06:00
lyashenko.v
1046d264d8
Fixed not working frame pacing on macOS
2022-01-06 23:23:00 -06:00
Cameron Gutman
8302187dee
Remove superfluous availability checks
2022-01-06 23:05:18 -06:00
Cameron Gutman
0d70bd9ac0
Add (untested) VAAPI support for CCS planes on Tiger Lake
...
See https://github.com/intel/media-driver/issues/1210
2022-01-05 21:09:08 -06:00
Cameron Gutman
8f63d59b81
Correct comment to avoid confusion
2022-01-04 22:00:46 -06:00
Cameron Gutman
0395c0cc95
Revert "Revert "Don't attempt to use direct rendering without DRM master""
...
The correct fix was 154b5b6ded
.
This reverts commit 8219dbef6f
.
2022-01-04 21:59:02 -06:00
Cameron Gutman
72065412a3
Don't allow copyback rendering on RPi by default
2022-01-04 20:35:17 -06:00
Cameron Gutman
67c801c4e7
Use av_frame_copy_props() to copy metadata
2022-01-02 17:38:58 -06:00
Cameron Gutman
f7c8ad4c5a
Fail render frame test for unsupported pixel formats
2022-01-02 15:03:49 -06:00
Cameron Gutman
61092b34de
Properly handle mismatched pitch between frame and texture
2022-01-02 14:35:14 -06:00
Cameron Gutman
1e9e96fb8c
Small code cleanup for hwframe code
2022-01-02 13:58:37 -06:00
Cameron Gutman
17d1ced07c
Add support for mapping hwframes
2022-01-02 13:41:36 -06:00
Cameron Gutman
a26ced04ff
Add support for negotiating non-default transfer formats for hwframes
2022-01-01 22:15:43 -06:00
Cameron Gutman
154b5b6ded
Fix fallback to SDL read-back for DRM contexts when !HAVE_EGL
2022-01-01 20:44:29 -06:00
Cameron Gutman
8219dbef6f
Revert "Don't attempt to use direct rendering without DRM master"
...
We support indirect rendering via SDL, even if EGL is unavailable.
This reverts commit 6145913068
.
2022-01-01 20:37:04 -06:00
Cameron Gutman
3da724e76a
Fix and enhance the Full KMS check
2021-12-28 17:13:54 -06:00
Cameron Gutman
1616d237ae
Avoid h264_v4l2m2m by default on RPi builds
2021-12-28 16:28:04 -06:00
Cameron Gutman
d8acf24af0
Don't use SdlRenderer with MMAL
2021-12-19 20:58:50 -06:00