From: Hans Verkuil <hans.verk...@cisco.com>

Signed-off-by: Hans Verkuil <hans.verk...@cisco.com>
---
 edid-decode.c | 296 +++++++++++++++++++++++++++++++---------------------------
 1 file changed, 157 insertions(+), 139 deletions(-)

diff --git a/edid-decode.c b/edid-decode.c
index 4deceba4..31aca8aa 100644
--- a/edid-decode.c
+++ b/edid-decode.c
@@ -158,6 +158,7 @@ static int
 detailed_cvt_descriptor(unsigned char *x, int first)
 {
     const unsigned char empty[3] = { 0, 0, 0 };
+    const char *ratio;
     char *names[] = { "50", "60", "75", "85" };
     int width, height;
     int valid = 1;
@@ -173,13 +174,21 @@ detailed_cvt_descriptor(unsigned char *x, int first)
 
     switch (x[1] & 0x0c) {
     case 0x00:
-       width = (height * 4) / 3; break;
+       width = (height * 4) / 3;
+       ratio = "4:3";
+       break;
     case 0x04:
-       width = (height * 16) / 9; break;
+       width = (height * 16) / 9;
+       ratio = "16:9";
+       break;
     case 0x08:
-       width = (height * 16) / 10; break;
+       width = (height * 16) / 10;
+       ratio = "16:10";
+       break;
     case 0x0c:
-       width = (height * 15) / 9; break;
+       width = (height * 15) / 9;
+       ratio = "15:9";
+       break;
     }
 
     if (x[1] & 0x03)
@@ -198,12 +207,13 @@ detailed_cvt_descriptor(unsigned char *x, int first)
     if (!valid) {
        printf("    (broken)\n");
     } else {
-       printf("    %dx%d @ ( %s%s%s%s%s) Hz (%s%s preferred)\n", width, height,
+       printf("    %dx%d @ ( %s%s%s%s%s) Hz %s (%s%s preferred)\n", width, 
height,
                fifty ? "50 " : "",
                sixty ? "60 " : "",
                seventyfive ? "75 " : "",
                eightyfive ? "85 " : "",
                reduced ? "60RB " : "",
+               ratio,
                names[(x[2] & 0x60) >> 5],
                (((x[2] & 0x60) == 0x20) && reduced) ? "RB" : "");
     }
@@ -652,113 +662,113 @@ cea_audio_block(unsigned char *x)
 }
 
 static const char *edid_cea_modes[] = {
-    "640x480@60Hz",
-    "720x480@60Hz",
-    "720x480@60Hz",
-    "1280x720@60Hz",
-    "1920x1080i@60Hz",
-    "1440x480i@60Hz",
-    "1440x480i@60Hz",
-    "1440x240@60Hz",
-    "1440x240@60Hz",
-    "2880x480i@60Hz",
-    "2880x480i@60Hz",
-    "2880x240@60Hz",
-    "2880x240@60Hz",
-    "1440x480@60Hz",
-    "1440x480@60Hz",
-    "1920x1080@60Hz",
-    "720x576@50Hz",
-    "720x576@50Hz",
-    "1280x720@50Hz",
-    "1920x1080i@50Hz",
-    "1440x576i@50Hz",
-    "1440x576i@50Hz",
-    "1440x288@50Hz",
-    "1440x288@50Hz",
-    "2880x576i@50Hz",
-    "2880x576i@50Hz",
-    "2880x288@50Hz",
-    "2880x288@50Hz",
-    "1440x576@50Hz",
-    "1440x576@50Hz",
-    "1920x1080@50Hz",
-    "1920x1080@24Hz",
-    "1920x1080@25Hz",
-    "1920x1080@30Hz",
-    "2880x480@60Hz",
-    "2880x480@60Hz",
-    "2880x576@50Hz",
-    "2880x576@50Hz",
-    "1920x1080i@50Hz",
-    "1920x1080i@100Hz",
-    "1280x720@100Hz",
-    "720x576@100Hz",
-    "720x576@100Hz",
-    "1440x576@100Hz",
-    "1440x576@100Hz",
-    "1920x1080i@120Hz",
-    "1280x720@120Hz",
-    "720x480@120Hz",
-    "720x480@120Hz",
-    "1440x480i@120Hz",
-    "1440x480i@120Hz",
-    "720x576@200Hz",
-    "720x576@200Hz",
-    "1440x576i@200Hz",
-    "1440x576i@200Hz",
-    "720x480@240Hz",
-    "720x480@240Hz",
-    "1440x480i@240Hz",
-    "1440x480i@240Hz",
-    "1280x720@24Hz",
-    "1280x720@25Hz",
-    "1280x720@30Hz",
-    "1920x1080@120Hz",
-    "1920x1080@100Hz",
-    "1280x720@24Hz",
-    "1280x720@25Hz",
-    "1280x720@30Hz",
-    "1280x720@50Hz",
-    "1280x720@60Hz",
-    "1280x720@100Hz",
-    "1280x720@120Hz",
-    "1920x1080@24Hz",
-    "1920x1080@25Hz",
-    "1920x1080@30Hz",
-    "1920x1080@50Hz",
-    "1920x1080@60Hz",
-    "1920x1080@100Hz",
-    "1920x1080@120Hz",
-    "1680x720@24Hz",
-    "1680x720@25Hz",
-    "1680x720@30Hz",
-    "1680x720@50Hz",
-    "1680x720@60Hz",
-    "1680x720@100Hz",
-    "1680x720@120Hz",
-    "2560x1080@24Hz",
-    "2560x1080@25Hz",
-    "2560x1080@30Hz",
-    "2560x1080@50Hz",
-    "2560x1080@60Hz",
-    "2560x1080@100Hz",
-    "2560x1080@120Hz",
-    "3840x2160@24Hz",
-    "3840x2160@25Hz",
-    "3840x2160@30Hz",
-    "3840x2160@50Hz",
-    "3840x2160@60Hz",
-    "4096x2160@24Hz",
-    "4096x2160@25Hz",
-    "4096x2160@30Hz",
-    "4096x2160@50Hz",
-    "4096x2160@60Hz",
-    "3840x2160@24Hz",
-    "3840x2160@25Hz",
-    "3840x2160@30Hz",
-    "3840x2160@50Hz",
-    "3840x2160@60Hz",
+    "640x480@60Hz 4:3",
+    "720x480@60Hz 4:3",
+    "720x480@60Hz 16:9",
+    "1280x720@60Hz 16:9",
+    "1920x1080i@60Hz 16:9",
+    "1440x480i@60Hz 4:3",
+    "1440x480i@60Hz 16:9",
+    "1440x240@60Hz 4:3",
+    "1440x240@60Hz 16:9",
+    "2880x480i@60Hz 4:3",
+    "2880x480i@60Hz 16:9",
+    "2880x240@60Hz 4:3",
+    "2880x240@60Hz 16:9",
+    "1440x480@60Hz 4:3",
+    "1440x480@60Hz 16:9",
+    "1920x1080@60Hz 16:9",
+    "720x576@50Hz 4:3",
+    "720x576@50Hz 16:9",
+    "1280x720@50Hz 16:9",
+    "1920x1080i@50Hz 16:9",
+    "1440x576i@50Hz 4:3",
+    "1440x576i@50Hz 16:9",
+    "1440x288@50Hz 4:3",
+    "1440x288@50Hz 16:9",
+    "2880x576i@50Hz 4:3",
+    "2880x576i@50Hz 16:9",
+    "2880x288@50Hz 4:3",
+    "2880x288@50Hz 16:9",
+    "1440x576@50Hz 4:3",
+    "1440x576@50Hz 16:9",
+    "1920x1080@50Hz 16:9",
+    "1920x1080@24Hz 16:9",
+    "1920x1080@25Hz 16:9",
+    "1920x1080@30Hz 16:9",
+    "2880x480@60Hz 4:3",
+    "2880x480@60Hz 16:9",
+    "2880x576@50Hz 4:3",
+    "2880x576@50Hz 16:9",
+    "1920x1080i@50Hz 16:9",
+    "1920x1080i@100Hz 16:9",
+    "1280x720@100Hz 16:9",
+    "720x576@100Hz 4:3",
+    "720x576@100Hz 16:9",
+    "1440x576@100Hz 4:3",
+    "1440x576@100Hz 16:9",
+    "1920x1080i@120Hz 16:9",
+    "1280x720@120Hz 16:9",
+    "720x480@120Hz 4:3",
+    "720x480@120Hz 16:9",
+    "1440x480i@120Hz 4:3",
+    "1440x480i@120Hz 16:9",
+    "720x576@200Hz 4:3",
+    "720x576@200Hz 16:9",
+    "1440x576i@200Hz 4:3",
+    "1440x576i@200Hz 16:9",
+    "720x480@240Hz 4:3",
+    "720x480@240Hz 16:9",
+    "1440x480i@240Hz 4:3",
+    "1440x480i@240Hz 16:9",
+    "1280x720@24Hz 16:9",
+    "1280x720@25Hz 16:9",
+    "1280x720@30Hz 16:9",
+    "1920x1080@120Hz 16:9",
+    "1920x1080@100Hz 16:9",
+    "1280x720@24Hz 64:27",
+    "1280x720@25Hz 64:27",
+    "1280x720@30Hz 64:27",
+    "1280x720@50Hz 64:27",
+    "1280x720@60Hz 64:27",
+    "1280x720@100Hz 64:27",
+    "1280x720@120Hz 64:27",
+    "1920x1080@24Hz 64:27",
+    "1920x1080@25Hz 64:27",
+    "1920x1080@30Hz 64:27",
+    "1920x1080@50Hz 64:27",
+    "1920x1080@60Hz 64:27",
+    "1920x1080@100Hz 64:27",
+    "1920x1080@120Hz 64:27",
+    "1680x720@24Hz 64:27",
+    "1680x720@25Hz 64:27",
+    "1680x720@30Hz 64:27",
+    "1680x720@50Hz 64:27",
+    "1680x720@60Hz 64:27",
+    "1680x720@100Hz 64:27",
+    "1680x720@120Hz 64:27",
+    "2560x1080@24Hz 64:27",
+    "2560x1080@25Hz 64:27",
+    "2560x1080@30Hz 64:27",
+    "2560x1080@50Hz 64:27",
+    "2560x1080@60Hz 64:27",
+    "2560x1080@100Hz 64:27",
+    "2560x1080@120Hz 64:27",
+    "3840x2160@24Hz 16:9",
+    "3840x2160@25Hz 16:9",
+    "3840x2160@30Hz 16:9",
+    "3840x2160@50Hz 16:9",
+    "3840x2160@60Hz 16:9",
+    "4096x2160@24Hz 256:135",
+    "4096x2160@25Hz 256:135",
+    "4096x2160@30Hz 256:135",
+    "4096x2160@50Hz 256:135",
+    "4096x2160@60Hz 256:135",
+    "3840x2160@24Hz 64:27",
+    "3840x2160@25Hz 64:27",
+    "3840x2160@30Hz 64:27",
+    "3840x2160@50Hz 64:27",
+    "3840x2160@60Hz 64:27",
 };
 
 static void
@@ -839,10 +849,10 @@ cea_vfpdb(unsigned char *x)
 }
 
 static const char *edid_cea_hdmi_modes[] = {
-    "3840x2160@30Hz",
-    "3840x2160@25Hz",
-    "3840x2160@24Hz",
-    "4096x2160@24Hz",
+    "3840x2160@30Hz 16:9",
+    "3840x2160@25Hz 16:9",
+    "3840x2160@24Hz 16:9",
+    "4096x2160@24Hz 256:135",
 };
 
 static void
@@ -1759,28 +1769,28 @@ extract_edid(int fd)
 }
 
 static const struct {
-  int x, y, refresh;
+  int x, y, refresh, ratio_w, ratio_h;
 } established_timings[] = {
   /* 0x23 bit 7 - 0 */
-  {720, 400, 70},
-  {720, 400, 88},
-  {640, 480, 60},
-  {640, 480, 67},
-  {640, 480, 72},
-  {640, 480, 75},
-  {800, 600, 56},
-  {800, 600, 60},
+  {720, 400, 70, 9, 5},
+  {720, 400, 88, 9, 5},
+  {640, 480, 60, 4, 3},
+  {640, 480, 67, 4, 3},
+  {640, 480, 72, 4, 3},
+  {640, 480, 75, 4, 3},
+  {800, 600, 56, 4, 3},
+  {800, 600, 60, 4, 3},
   /* 0x24 bit 7 - 0 */
-  {800, 600, 72},
-  {800, 600, 75},
-  {832, 624, 75},
-  {1280, 768, 87},
-  {1024, 768, 60},
-  {1024, 768, 70},
-  {1024, 768, 75},
-  {1280, 1024, 75},
+  {800, 600, 72, 4, 3},
+  {800, 600, 75, 4, 3},
+  {832, 624, 75, 4, 3},
+  {1280, 768, 87, 5, 3},
+  {1024, 768, 60, 4, 3},
+  {1024, 768, 70, 4, 3},
+  {1024, 768, 75, 4, 3},
+  {1280, 1024, 75, 5, 4},
   /* 0x25 bit 7*/
-  {1152, 870, 75},
+  {1152, 870, 75, 192, 145},
 };
 
 static void print_subsection(char *name, unsigned char *edid, int start,
@@ -2066,13 +2076,15 @@ int main(int argc, char **argv)
     printf("Established timings supported:\n");
     for (i = 0; i < 17; i++) {
       if (edid[0x23 + i / 8] & (1 << (7 - i % 8))) {
-       printf("  %dx%d@%dHz\n", established_timings[i].x,
-              established_timings[i].y, established_timings[i].refresh);
+       printf("  %dx%d@%dHz %u:%u\n", established_timings[i].x,
+              established_timings[i].y, established_timings[i].refresh,
+              established_timings[i].ratio_w, established_timings[i].ratio_h);
       }
     }
 
     printf("Standard timings supported:\n");
     for (i = 0; i < 8; i++) {
+      const char *ratio;
       uint8_t b1 = edid[0x26 + i * 2], b2 = edid[0x26 + i * 2 + 1];
       unsigned int x, y, refresh;
 
@@ -2086,24 +2098,30 @@ int main(int argc, char **argv)
       x = (b1 + 31) * 8;
       switch ((b2 >> 6) & 0x3) {
       case 0x00:
-       if (claims_one_point_three)
+       if (claims_one_point_three) {
          y = x * 10 / 16;
-       else
+         ratio = "16:10";
+       } else {
          y = x;
+         ratio = "1:1";
+       }
        break;
       case 0x01:
        y = x * 3 / 4;
+       ratio = "4:3";
        break;
       case 0x02:
        y = x * 4 / 5;
+       ratio = "5:4";
        break;
       case 0x03:
        y = x * 9 / 16;
+       ratio = "16:9";
        break;
       }
       refresh = 60 + (b2 & 0x3f);
 
-      printf("  %dx%d@%dHz\n", x, y, refresh);
+      printf("  %dx%d@%dHz %s\n", x, y, refresh, ratio);
     }
 
     /* detailed timings */
-- 
2.14.1

_______________________________________________
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to