Prefer direct rendering when using HDR

This commit is contained in:
Cameron Gutman 2022-01-27 22:36:49 -06:00
parent e64b15d2a7
commit ad0afb5fc9
2 changed files with 15 additions and 1 deletions

View File

@ -31,6 +31,7 @@ DrmRenderer::DrmRenderer()
m_DrmFd(-1), m_DrmFd(-1),
m_SdlOwnsDrmFd(false), m_SdlOwnsDrmFd(false),
m_SupportsDirectRendering(false), m_SupportsDirectRendering(false),
m_Main10Hdr(false),
m_ConnectorId(0), m_ConnectorId(0),
m_EncoderId(0), m_EncoderId(0),
m_CrtcId(0), m_CrtcId(0),
@ -96,6 +97,8 @@ bool DrmRenderer::initialize(PDECODER_PARAMETERS params)
{ {
int i; int i;
m_Main10Hdr = (params->videoFormat == VIDEO_FORMAT_H265_MAIN10);
#if SDL_VERSION_ATLEAST(2, 0, 15) #if SDL_VERSION_ATLEAST(2, 0, 15)
SDL_SysWMinfo info; SDL_SysWMinfo info;
@ -278,7 +281,7 @@ bool DrmRenderer::initialize(PDECODER_PARAMETERS params)
if (plane != nullptr) { if (plane != nullptr) {
bool matchingFormat = false; bool matchingFormat = false;
for (uint32_t j = 0; j < plane->count_formats && !matchingFormat; j++) { for (uint32_t j = 0; j < plane->count_formats && !matchingFormat; j++) {
if (params->videoFormat == VIDEO_FORMAT_H265_MAIN10) { if (m_Main10Hdr) {
switch (plane->formats[j]) { switch (plane->formats[j]) {
case DRM_FORMAT_P010: case DRM_FORMAT_P010:
case DRM_FORMAT_P030: case DRM_FORMAT_P030:
@ -567,6 +570,16 @@ bool DrmRenderer::canExportEGL() {
"Using direct rendering due to environment variable"); "Using direct rendering due to environment variable");
return false; return false;
} }
else if (qgetenv("DRM_FORCE_EGL") == "1") {
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"Using EGL rendering due to environment variable");
return true;
}
else if (m_SupportsDirectRendering && m_Main10Hdr) {
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"Using direct rendering for HDR support");
return false;
}
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"DRM backend supports exporting EGLImage"); "DRM backend supports exporting EGLImage");

View File

@ -32,6 +32,7 @@ private:
int m_DrmFd; int m_DrmFd;
bool m_SdlOwnsDrmFd; bool m_SdlOwnsDrmFd;
bool m_SupportsDirectRendering; bool m_SupportsDirectRendering;
bool m_Main10Hdr;
uint32_t m_ConnectorId; uint32_t m_ConnectorId;
uint32_t m_EncoderId; uint32_t m_EncoderId;
uint32_t m_CrtcId; uint32_t m_CrtcId;