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

Reply via email to