This is an automatic generated email to let you know that the following patch 
were queued:

Subject: edid-decode: calculate and show remaining unused space
Author:  Hans Verkuil <[email protected]>
Date:    Wed Mar 30 12:07:56 2022 +0200

Report how many bytes in an Extension Block are unused,
where applicable.

This helps determining how full an Extension Block is.

Signed-off-by: Hans Verkuil <[email protected]>

 edid-decode.cpp           | 11 +++++++----
 edid-decode.h             |  3 ++-
 parse-cta-block.cpp       |  5 +++--
 parse-displayid-block.cpp |  5 +++--
 parse-ls-ext-block.cpp    |  3 ++-
 parse-vtb-ext-block.cpp   |  5 +++++
 6 files changed, 22 insertions(+), 10 deletions(-)

---

diff --git a/edid-decode.cpp b/edid-decode.cpp
index b0183b6b8ea1..47460089b62d 100644
--- a/edid-decode.cpp
+++ b/edid-decode.cpp
@@ -234,7 +234,7 @@ static void show_msgs(bool is_warn)
 }
 
 
-void do_checksum(const char *prefix, const unsigned char *x, size_t len)
+void do_checksum(const char *prefix, const unsigned char *x, size_t len, 
unsigned unused_bytes)
 {
        unsigned char check = x[len - 1];
        unsigned char sum = 0;
@@ -246,11 +246,13 @@ void do_checksum(const char *prefix, const unsigned char 
*x, size_t len)
                sum += x[i];
 
        if ((unsigned char)(check + sum) != 0) {
-               printf(" (should be 0x%02x)\n", -sum & 0xff);
+               printf(" (should be 0x%02x)", -sum & 0xff);
                fail("Invalid checksum 0x%02x (should be 0x%02x).\n",
                     check, -sum & 0xff);
-               return;
        }
+       if (unused_bytes)
+               printf("  Unused space in Extension Block: %u byte%s",
+                      unused_bytes, unused_bytes > 1 ? "s" : "");
        printf("\n");
 }
 
@@ -1270,6 +1272,7 @@ void edid_state::parse_extension(const unsigned char *x)
 {
        block = block_name(x[0]);
        data_block.clear();
+       unused_bytes = 0;
 
        printf("\n");
        if (block_nr && x[0] == 0)
@@ -1307,7 +1310,7 @@ void edid_state::parse_extension(const unsigned char *x)
        }
 
        data_block.clear();
-       do_checksum("", x, EDID_PAGE_SIZE);
+       do_checksum("", x, EDID_PAGE_SIZE, unused_bytes);
 }
 
 void edid_state::print_preferred_timings()
diff --git a/edid-decode.h b/edid-decode.h
index e05a514dd9a7..ceb39b522fef 100644
--- a/edid-decode.h
+++ b/edid-decode.h
@@ -209,6 +209,7 @@ struct edid_state {
        unsigned block_nr;
        std::string block;
        std::string data_block;
+       unsigned unused_bytes;
        bool has_cta;
        bool has_dispid;
        bool hide_serial_numbers;
@@ -496,7 +497,7 @@ void msg(bool is_warn, const char *fmt, ...);
 
 #endif
 
-void do_checksum(const char *prefix, const unsigned char *x, size_t len);
+void do_checksum(const char *prefix, const unsigned char *x, size_t len, 
unsigned unused_bytes = 0);
 std::string utohex(unsigned char x);
 std::string ouitohex(unsigned oui);
 std::string containerid2s(const unsigned char *x);
diff --git a/parse-cta-block.cpp b/parse-cta-block.cpp
index e846a66f8929..d525e2aceb41 100644
--- a/parse-cta-block.cpp
+++ b/parse-cta-block.cpp
@@ -2690,9 +2690,10 @@ void edid_state::parse_cta_block(const unsigned char *x)
                        }
                        detailed_block(detailed);
                }
-               if (!memchk(detailed, x + 127 - detailed)) {
+               unused_bytes = x + 127 - detailed;
+               if (!memchk(detailed, unused_bytes)) {
                        data_block = "Padding";
-                       fail("CTA-861 padding contains non-zero bytes.\n");
+                       fail("Contains non-zero bytes.\n");
                }
        } while (0);
 
diff --git a/parse-displayid-block.cpp b/parse-displayid-block.cpp
index 12fce07aafd2..a5c33c65a75c 100644
--- a/parse-displayid-block.cpp
+++ b/parse-displayid-block.cpp
@@ -2022,9 +2022,10 @@ void edid_state::parse_displayid_block(const unsigned 
char *x)
        data_block.clear();
        do_checksum("  ", x + 1, x[2] + 5);
 
-       if (!memchk(x + 1 + x[2] + 5, 0x7f - (1 + x[2] + 5))) {
+       unused_bytes = 0x7f - (1 + x[2] + 5);
+       if (!memchk(x + 1 + x[2] + 5, unused_bytes)) {
                data_block = "Padding";
-               fail("DisplayID padding contains non-zero bytes.\n");
+               fail("Contains non-zero bytes.\n");
        }
        dispid.is_base_block = false;
 }
diff --git a/parse-ls-ext-block.cpp b/parse-ls-ext-block.cpp
index 1643f7def5f1..3c991dc56ab4 100644
--- a/parse-ls-ext-block.cpp
+++ b/parse-ls-ext-block.cpp
@@ -64,7 +64,8 @@ void edid_state::parse_ls_ext_block(const unsigned char *x)
                parse_string_table(x + 1);
                x += x[0];
        }
-       if (!memchk(x, orig + 127 - x)) {
+       unused_bytes = orig + 127 - x;
+       if (!memchk(x, unused_bytes)) {
                data_block.clear();
                fail("Non-zero values in unused space.\n");
        }
diff --git a/parse-vtb-ext-block.cpp b/parse-vtb-ext-block.cpp
index 7af19c4ea43a..15ff0efdfd03 100644
--- a/parse-vtb-ext-block.cpp
+++ b/parse-vtb-ext-block.cpp
@@ -55,4 +55,9 @@ void edid_state::parse_vtb_ext_block(const unsigned char *x)
                        print_standard_timing("    ", x[0], x[1], true);
                }
        }
+       unused_bytes = y - x;
+       if (!memchk(x, unused_bytes)) {
+               data_block = "Padding";
+               fail("Contains non-zero bytes.\n");
+       }
 }

_______________________________________________
linuxtv-commits mailing list
[email protected]
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to