Commit Graph

898 Commits

Author SHA1 Message Date
Cameron Gutman 7cf8b46c79 Pass the correct renderer to EGLImageFactory
We should be using the EGL renderer's colorspace and color range
rather than the backend renderer's for fallbacks. The former is
what actually gets passed to the host PC during stream init.
2026-08-06 00:29:53 -05:00
Cameron Gutman c1623ff44e Switch the default renderer color range to full 2026-08-05 23:56:18 -05:00
Cameron Gutman b2f0828df8 Use requested color range as a fallback in isFrameFullRange() 2026-08-05 23:54:19 -05:00
Cameron Gutman 3f26217df7 Select color range based on plane COLOR_RANGE property values 2026-08-05 23:49:09 -05:00
Cameron Gutman 4570fba87d Add full range handling to SdlRenderer 2026-08-05 23:44:11 -05:00
Cameron Gutman a903c5cef2 Explicitly request limited range for renderers that require it 2026-08-05 23:25:30 -05:00
Cameron Gutman 2bea406f67 Guess frame color metadata if left unspecified
Some decoders don't populate metadata, but the renderer may need it
to determine which shader or EGL import parameters to use.
2026-08-05 22:56:34 -05:00
Cameron Gutman 3aa111e825 Fix unused parameter warning on non-macOS platforms 2026-07-26 20:03:04 -05:00
Cameron Gutman fba7c4119a Validate that the SPS didn't change in debug builds 2026-07-26 19:39:34 -05:00
Cameron Gutman acea86de24 Revert "Make h264bitstream dependency optional"
This reverts commit 2328713f4e.
2026-07-26 19:23:34 -05:00
Cameron Gutman 2fc0d84aa0 Write the original H.264 SPS if it required no fixups 2026-07-26 18:33:28 -05:00
Cameron Gutman 490229be3f Fix GEM handle leak in DRM renderer
Huge thanks to @oliverlj for identifying this longstanding bug.

This is likely responsible for many different issues with the DRM renderer randomly failing.
2026-07-26 15:22:15 -05:00
Cameron Gutman 2328713f4e Make h264bitstream dependency optional 2026-07-19 14:11:27 -05:00
Cameron Gutman 4453e4aef1 Add a renderer selection option for macOS
There are numerous conflicting reports about which Mac renderer works best (even on the same systems!). I give up, just let the users figure it out.
2026-07-18 16:38:40 -05:00
Cameron Gutman 8b18d58aa0 Add workaround for interoperability issue with out-of-tree FFmpeg zero-copy v4l2m2m patches and libplacebo
Fixes #1786
2026-07-08 23:40:08 -05:00
Cameron Gutman fd34a1fd28 Disable the text outline when line wrapping is required 2026-07-01 23:43:40 -05:00
Cameron Gutman 9067db8915 Switch to UTF-8 for overlay text rendering 2026-07-01 23:24:31 -05:00
Mira 177f845183 Add outline to stream overlay text (#1887)
Co-authored-by: Cameron Gutman <aicommander@gmail.com>
2026-07-01 23:03:45 -05:00
Cameron Gutman c9b03f80f8 Partially revert "Use GL_NEAREST when possible without degrading quality"
The changes to GL_NEAREST for overlay textures and disabling alpha blending in SDL renderer are left intact.

This reverts commit 0f49dca4c0.
2026-07-01 21:56:54 -05:00
Cameron Gutman 6e231778a2 Fix blocking during rendering rather than in waitToRender() on MoltenVK
MoltenVK does a lazy fetch of the drawable only when it's being modified, so waitToRender() is completely ineffective as is. Rendering a small empty overlay in waitToRender() forces the next drawable wait to happen in waitToRender(), before we pick the current frame to render. This removes one display refresh period of latency when using V-sync.
2026-06-25 20:01:29 -05:00
Cameron Gutman d997a0d0c8 Dynamically adjust libplacebo swapchain depth on macOS
Direct-to-display mode on some Macs (M4 Mac Mini) can retain our drawables, which cuts the frame rate in half if we're in double-buffered mode.

We don't want to use triple-buffered mode all the time because it increases latency when used if not required, so detect delayed presentation and enable it on the fly if needed.
2026-06-23 21:09:20 -05:00
Cameron Gutman 06bd8a730b Force sRGB Vulkan swapchain on macOS to fix washed out colors 2026-06-23 19:19:56 -05:00
Cameron Gutman 50364fd522 Don't set VK lock/unlock queue functions past libavutil 62
They are scheduled for removal at that ABI bump.
2026-06-21 14:01:47 -05:00
Cameron Gutman bea5355c66 Fix unused parameter warning on Windows and Linux 2026-06-21 14:01:47 -05:00
Cameron Gutman ca7d61f528 Prefer libplacebo on macOS when available 2026-06-14 19:27:01 -05:00
Cameron Gutman 2b5388e941 Fix non-EGL frontend renderers when compiled without EGL support 2026-06-14 19:16:16 -05:00
Cameron Gutman a9ad048252 Fix HDR rendering in libplacebo on macOS 2026-06-14 18:58:22 -05:00
Cameron Gutman 51cc5a8537 Remove libplacebo workaround for FFmpeg compiled without Vulkan support 2026-06-14 18:57:46 -05:00
Cameron Gutman 8c6b422040 Implement libplacebo on MoltenVK 2026-06-14 15:45:38 -05:00
Cameron Gutman ec75f0d8de Refactor libplacebo renderer to handle non-Vulkan hwcontexts 2026-06-14 12:20:54 -05:00
Cameron Gutman 97240cd5f2 Add workaround for libplacebo crash with Raspbian FFmpeg
Fixes #1409
2026-05-24 14:43:02 -05:00
Cameron Gutman d94b92e247 Use SDL_utf8strlcpy() to avoid MSVC secure CRT warnings 2026-05-23 19:50:32 -05:00
Cameron Gutman 459dcd7b2c Fix incorrect error print 2026-05-16 16:10:47 -05:00
Cameron Gutman b33a252739 Fix incorrect apply() return value for legacy DRM clients 2026-05-16 16:09:57 -05:00
Cameron Gutman 87c3179f77 Fix incorrect failure check 2026-05-15 23:23:36 -05:00
Cameron Gutman 9cbba106ad Use the Metal renderer by default on all Macs
Whatever dGPU/eGPU rendering issues existed at the time I wrote that check seem to no longer happen on my RX 480 eGPU test setup running Ventura (our oldest supported OS).

It seems safe enough to enable now, especially since 7d6ce0b4c should catch broken systems and transparently fall back to AVSampleBufferDisplayLayer.

Fixes #1885
2026-05-14 00:45:57 -05:00
Cameron Gutman 7d6ce0b4cc Implement testRenderFrame() for the VTMetal renderer
This can be used to (hopefully) detect cases where importing the decoded frames onto the target GPU fails.

See #1885
2026-05-14 00:34:32 -05:00
Cameron Gutman 5faa5fece8 Don't manually override v4l2m2m buffer counts
This causes POLLERR when decoding from meson-vdec on the Libre
Computer Alta (and likely other Amlogic boards). Our requried buffer
counts were already lower than the default 16/20 configuration that
FFmpeg uses, so overriding them was just a memory usage optimization.
2026-04-20 00:25:21 -05:00
Cameron Gutman 51f86caac3 Fix assert on exit using KMSDRM on AMDGPU
AMDGPU disallows commits that would leave a CRTC active without
the primary plane enabled. Instead of disabling the primary plane,
simply restore the original state of the plane to avoid this.
2026-04-19 23:17:28 -05:00
Cameron Gutman 5d813ed3df Fix clamping of signed range properties 2026-04-19 22:17:37 -05:00
Cameron Gutman 0e50a9d457 Only enable D3D11/DXGI debug layer if Graphics Tools are installed
Closes #1857
2026-04-13 20:06:24 -05:00
Cameron Gutman a766c9cafc Disable texture sharing on Qualcomm GPUs
See #1857
2026-04-11 20:14:14 -05:00
Cameron Gutman 94d47e95fe Fix non-determinism during Vulkan decoder probing on KMSDRM 2026-04-09 21:37:25 -05:00
Cameron Gutman 4ec682dc72 Remove errant assert to fix software decoding on Xe 2026-04-06 21:12:00 -05:00
Cameron Gutman c8d18f8a8e Bring back DRM atomic test commit using new DRM master lock
The DRM master lock avoids race conditions between Qt taking master
to draw the GUI and the DRM renderer performing a test commit.
2026-04-06 19:25:03 -05:00
Cameron Gutman 9c11dca454 Move DRM master state cleanup into cleanupRenderContext() 2026-04-06 19:24:04 -05:00
Cameron Gutman 5676a076fd Fix overlay plane selection on drivers without zpos properties 2026-04-01 22:37:12 -05:00
Cameron Gutman 88b4a17fe1 Use AV_CODEC_RECEIVE_FRAME_FLAG_SYNCHRONOUS for decoder probing on FFmpeg 8.1 2026-03-28 16:30:28 -05:00
Cameron Gutman 8326223220 Revert "Use EOS to force decoder test frame output"
It causes hangs on defective v4l2m2m decoders, and it's not always
well-supported by out-of-tree decoders either.

This reverts commit 66a30c66f3.
2026-03-28 16:24:20 -05:00
Cameron Gutman 4aa5ad71c0 Use av_vk_get_optional_device_extensions() on FFmpeg 8.1 2026-03-28 16:17:59 -05:00