modetest: Allocate NV buffers large enough for the two planes
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Fri, 14 Jun 2013 20:57:49 +0000 (22:57 +0200)
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Mon, 5 Aug 2013 12:21:45 +0000 (14:21 +0200)
Multiple the image height by 1.5 for NV12/NV21 and by 2 for NV16/NV61 to
make room for the chroma plane.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
tests/modetest/buffers.c

index 1575bf6..8206ce3 100644 (file)
@@ -1038,12 +1038,29 @@ create_test_buffer(struct kms_driver *kms, unsigned int format,
                   unsigned int handles[4], unsigned int pitches[4],
                   unsigned int offsets[4], enum fill_pattern pattern)
 {
+       unsigned int virtual_height;
        struct kms_bo *bo;
        void *planes[3] = { 0, };
        void *virtual;
        int ret;
 
-       bo = allocate_buffer(kms, width, height, &pitches[0]);
+       switch (format) {
+       case DRM_FORMAT_NV12:
+       case DRM_FORMAT_NV21:
+               virtual_height = height * 3 / 2;
+               break;
+
+       case DRM_FORMAT_NV16:
+       case DRM_FORMAT_NV61:
+               virtual_height = height * 2;
+               break;
+
+       default:
+               virtual_height = height;
+               break;
+       }
+
+       bo = allocate_buffer(kms, width, virtual_height, &pitches[0]);
        if (!bo)
                return NULL;