diff options
author | Jonas Karlman <jonas@kwiboo.se> | 2018-05-21 23:18:12 +0200 |
---|---|---|
committer | Jonas Karlman <jonas@kwiboo.se> | 2018-05-21 23:18:12 +0200 |
commit | 7e7d01ddfbdb5ae655240fe38880cedb175feca3 (patch) | |
tree | df8364893ce75e14218f303c5b2e6939e02930d4 | |
parent | 19eb19e6b68c9aa3a999d8ec9ea0f3409855bfb1 (diff) |
RendererDRMPRIME: support drm format modifier
-rw-r--r-- | cmake/modules/FindLibDRM.cmake | 2 | ||||
-rw-r--r-- | xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererDRMPRIME.cpp | 7 |
2 files changed, 6 insertions, 3 deletions
diff --git a/cmake/modules/FindLibDRM.cmake b/cmake/modules/FindLibDRM.cmake index d452064e39..ec30920a06 100644 --- a/cmake/modules/FindLibDRM.cmake +++ b/cmake/modules/FindLibDRM.cmake @@ -14,7 +14,7 @@ # LibDRM::LibDRM - The LibDRM library if(PKG_CONFIG_FOUND) - pkg_check_modules(PC_LIBDRM libdrm QUIET) + pkg_check_modules(PC_LIBDRM libdrm>=2.4.71 QUIET) endif() find_path(LIBDRM_INCLUDE_DIR NAMES drm.h diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererDRMPRIME.cpp b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererDRMPRIME.cpp index cb46cbb9d9..e9398536b7 100644 --- a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererDRMPRIME.cpp +++ b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererDRMPRIME.cpp @@ -175,6 +175,7 @@ void CRendererDRMPRIME::SetVideoPlane(CVideoBufferDRMPRIME* buffer) if (descriptor && descriptor->nb_layers) { uint32_t handles[4] = {0}, pitches[4] = {0}, offsets[4] = {0}; + uint64_t modifier[4] = {0}; int ret; // convert Prime FD to GEM handle @@ -192,17 +193,19 @@ void CRendererDRMPRIME::SetVideoPlane(CVideoBufferDRMPRIME* buffer) for (int plane = 0; plane < layer->nb_planes; plane++) { - uint32_t handle = buffer->m_handles[layer->planes[plane].object_index]; + int object = layer->planes[plane].object_index; + uint32_t handle = buffer->m_handles[object]; if (handle && layer->planes[plane].pitch) { handles[plane] = handle; pitches[plane] = layer->planes[plane].pitch; offsets[plane] = layer->planes[plane].offset; + modifier[plane] = descriptor->objects[object].format_modifier; } } // add the video frame FB - ret = drmModeAddFB2(m_DRM->m_fd, buffer->GetWidth(), buffer->GetHeight(), layer->format, handles, pitches, offsets, &buffer->m_fb_id, 0); + ret = drmModeAddFB2WithModifiers(m_DRM->m_fd, buffer->GetWidth(), buffer->GetHeight(), layer->format, handles, pitches, offsets, modifier, &buffer->m_fb_id, 0); if (ret < 0) { CLog::Log(LOGERROR, "CRendererDRMPRIME::%s - failed to add drm layer %d, ret = %d", __FUNCTION__, buffer->m_fb_id, ret); |