[PATCH v2 edid-decode] Parse the list of additional 3D modes

Thomas Wood thomas.wood at intel.com
Wed Nov 27 07:59:02 PST 2013


Parse 2D_VIC_order_X and 3D_Structure_X from the list at the end of the
HDMI Vendor Specific Block.

v2: check 3D_Detail_X indicates horizontal sub-sampling in side-by-side
(half) mode

Signed-off-by: Thomas Wood <thomas.wood at intel.com>
---
 edid-decode.c | 29 ++++++++++++++++++++++++++++-
 1 file changed, 28 insertions(+), 1 deletion(-)

diff --git a/edid-decode.c b/edid-decode.c
index 4265843..3f7e4da 100644
--- a/edid-decode.c
+++ b/edid-decode.c
@@ -851,6 +851,7 @@ cea_hdmi_block(unsigned char *x)
 		    if (x[10 + b] & 0x01)
 			printf("      3D: Frame-packing\n");
 		    b += 2;
+		    len_3d -= 2;
 		}
 		if (mask) {
 		    int i;
@@ -864,14 +865,40 @@ cea_hdmi_block(unsigned char *x)
 			    printf(" %d", i + 8);
 		    printf("\n");
 		    b += 2;
+		    len_3d -= 2;
 		}
 
 		/*
-		 * XXX list of nibbles:
+		 * list of nibbles:
 		 * 2D_VIC_Order_X
 		 * 3D_Structure_X
 		 * (optionally: 3D_Detail_X and reserved)
 		 */
+		if (len_3d > 0) {
+			int end = b + len_3d;
+
+			while (b < end) {
+				printf("      VIC index %d supports ", x[9 + b] >> 4);
+				switch (x[9 + b] & 0x0f) {
+				case 0: printf("frame packing"); break;
+				case 6: printf("top-and-bottom"); break;
+				case 8:
+					if ((x[10 + b] >> 4) == 1) {
+						printf("side-by-side (half, horizontal)");
+						break;
+					}
+				default: printf("unknown");
+				}
+				printf("\n");
+
+				if ((x[9 + b] & 0x0f) > 7) {
+					/* Optional 3D_Detail_X and reserved */
+					b++;
+				}
+				b++;
+			}
+		}
+
 	    }
 
 	}
-- 
1.8.4.2



More information about the dri-devel mailing list