aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Karlman <jonas@kwiboo.se>2018-05-21 23:18:12 +0200
committerJonas Karlman <jonas@kwiboo.se>2018-05-21 23:18:12 +0200
commit7e7d01ddfbdb5ae655240fe38880cedb175feca3 (patch)
treedf8364893ce75e14218f303c5b2e6939e02930d4
parent19eb19e6b68c9aa3a999d8ec9ea0f3409855bfb1 (diff)
RendererDRMPRIME: support drm format modifier
-rw-r--r--cmake/modules/FindLibDRM.cmake2
-rw-r--r--xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/RendererDRMPRIME.cpp7
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);