From 51961fc2afd4e42b3416560153330f876efad297 Mon Sep 17 00:00:00 2001
From: lishixu <lishixu@allwinnertech.com>
Date: Tue, 25 Feb 2025 16:54:11 +0800
Subject: [PATCH] kmssink select plane which support YV12

---
 sys/kms/gstkmssink.c | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/sys/kms/gstkmssink.c b/sys/kms/gstkmssink.c
index 12a7d5a..860689c 100644
--- a/sys/kms/gstkmssink.c
+++ b/sys/kms/gstkmssink.c
@@ -198,6 +198,7 @@ static drmModePlane *
 find_plane_for_crtc (int fd, drmModeRes * res, drmModePlaneRes * pres,
     int crtc_id)
 {
+  GstVideoFormat fmt;
   drmModePlane *plane;
   int i, pipe;
 
@@ -215,8 +216,15 @@ find_plane_for_crtc (int fd, drmModeRes * res, drmModePlaneRes * pres,
 
   for (i = 0; i < pres->count_planes; i++) {
     plane = drmModeGetPlane (fd, pres->planes[i]);
-    if (plane->possible_crtcs & (1 << pipe))
-      return plane;
+    if (plane->possible_crtcs & (1 << pipe)) {
+      for (int j = 0; j < plane->count_formats; j++) {
+      fmt = gst_video_format_from_drm(plane->formats[j]);
+        if (fmt == GST_VIDEO_FORMAT_YV12) {
+          GST_WARNING_OBJECT(NULL, "find plane id %d", plane->plane_id);
+          return plane;
+        }
+      }
+    }
     drmModeFreePlane (plane);
   }
 
@@ -544,6 +552,9 @@ ensure_allowed_caps (GstKMSSink * self, drmModeConnector * conn,
         GST_INFO_OBJECT (self, "ignoring format %" GST_FOURCC_FORMAT,
             GST_FOURCC_ARGS (plane->formats[j]));
         continue;
+      } else {
+        GST_INFO_OBJECT (self, "support format %" GST_FOURCC_FORMAT,
+            GST_FOURCC_ARGS (plane->formats[j]));
       }
 
       format = gst_video_format_to_string (fmt);
-- 
2.37.1

