Windows: Add a DDA grabber for much better performance (#1745)

* Add a DXDI DDA grabber

* Change all names to camel case

* Handle cropping and pixel decimation

* Try more persistently to restart capture after an error occurred.

These can happen when changing resolution, or resuming from sleep.
This commit is contained in:
David Sansome
2024-05-30 21:39:46 +10:00
committed by GitHub
parent c0ddca3c5b
commit 8c303c8b9c
16 changed files with 535 additions and 9 deletions

View File

@@ -118,6 +118,10 @@ if(ENABLE_DX)
target_link_libraries(${PROJECT_NAME} directx-grabber)
endif (ENABLE_DX)
if(ENABLE_DDA)
target_link_libraries(${PROJECT_NAME} dda-grabber)
endif (ENABLE_DDA)
if(ENABLE_CEC)
target_link_libraries(${PROJECT_NAME} cechandler)
endif (ENABLE_CEC)

View File

@@ -425,7 +425,7 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
void HyperionDaemon::updateScreenGrabbers(const QJsonDocument& grabberConfig)
{
#if !defined(ENABLE_DISPMANX) && !defined(ENABLE_OSX) && !defined(ENABLE_FB) && !defined(ENABLE_X11) && !defined(ENABLE_XCB) && !defined(ENABLE_AMLOGIC) && !defined(ENABLE_QT) && !defined(ENABLE_DX)
#if !defined(ENABLE_DISPMANX) && !defined(ENABLE_OSX) && !defined(ENABLE_FB) && !defined(ENABLE_X11) && !defined(ENABLE_XCB) && !defined(ENABLE_AMLOGIC) && !defined(ENABLE_QT) && !defined(ENABLE_DX) && !defined(ENABLE_DDA)
Info(_log, "No screen capture supported on this platform");
return;
#endif
@@ -469,6 +469,12 @@ void HyperionDaemon::updateScreenGrabbers(const QJsonDocument& grabberConfig)
startGrabber<DirectXWrapper>(_screenGrabber, grabberConfig);
}
#endif
#ifdef ENABLE_DDA
else if (type == "dda")
{
startGrabber<DDAWrapper>(_screenGrabber, grabberConfig);
}
#endif
#ifdef ENABLE_FB
else if (type == "framebuffer")
{

View File

@@ -64,6 +64,12 @@
typedef QObject DirectXWrapper;
#endif
#ifdef ENABLE_DDA
#include <grabber/dda/DDAWrapper.h>
#else
typedef QObject DDAWrapper;
#endif
#include <hyperion/GrabberWrapper.h>
#ifdef ENABLE_AUDIO
#include <grabber/audio/AudioWrapper.h>