summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kms++/src/dumbframebuffer.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/kms++/src/dumbframebuffer.cpp b/kms++/src/dumbframebuffer.cpp
index 18f3f15..4c3c031 100644
--- a/kms++/src/dumbframebuffer.cpp
+++ b/kms++/src/dumbframebuffer.cpp
@@ -42,6 +42,14 @@ DumbFramebuffer::DumbFramebuffer(Card& card, uint32_t width, uint32_t height, Pi
struct drm_mode_create_dumb creq = drm_mode_create_dumb();
creq.width = width;
creq.height = height / pi.ysub;
+ /*
+ * For fully planar YUV buffers, the chroma planes don't combine
+ * U and V components, their width must thus be divided by the
+ * horizontal subsampling factor.
+ */
+ if (format_info.type == PixelColorType::YUV &&
+ format_info.num_planes == 3)
+ creq.width /= pi.xsub;
creq.bpp = pi.bitspp;
r = drmIoctl(card.fd(), DRM_IOCTL_MODE_CREATE_DUMB, &creq);
if (r)