This is an automatic generated email to let you know that the following patch 
were queued at the 
http://git.linuxtv.org/cgit.cgi/v4l-utils.git tree:

Subject: v4l2-compliance: improve media info test
Author:  Hans Verkuil <hans.verk...@cisco.com>
Date:    Thu Feb 8 10:54:13 2018 +0100

- don't fail when an unknown function ID is detected, make it a warning
  since it is more likely that v4l2-compliance hasn't been updated.
- clarify what 'test MC information' actually refers to and also fail it
  when the returned topology infomation is inconsistent.

Signed-off-by: Hans Verkuil <hans.verk...@cisco.com>

 utils/common/media-info.cpp               | 30 +++++++++++++++++++-----------
 utils/common/media-info.h                 |  4 +++-
 utils/v4l2-compliance/v4l2-compliance.cpp |  8 ++++----
 3 files changed, 26 insertions(+), 16 deletions(-)

---

http://git.linuxtv.org/cgit.cgi/v4l-utils.git/commit/?id=2024bce1fc69f61a2ecb377acae7bc8ca11369c5
diff --git a/utils/common/media-info.cpp b/utils/common/media-info.cpp
index 8be7a62dc8af..d9281ad73f71 100644
--- a/utils/common/media-info.cpp
+++ b/utils/common/media-info.cpp
@@ -280,9 +280,7 @@ std::string entfunction2s(__u32 function, bool *is_invalid)
                                *is_invalid = 
!memcmp(entity_functions_def[i].str, "FAIL:", 5);
                        return entity_functions_def[i].str;
                }
-       if (is_invalid)
-               *is_invalid = true;
-       return "FAIL: Unknown Function (" + num2s(function) + ")";
+       return "WARNING: Unknown Function (" + num2s(function) + "), is 
v4l2-compliance out-of-date?";
 }
 
 static const flag_def pad_flags_def[] = {
@@ -345,9 +343,11 @@ static __u32 read_topology(int media_fd, __u32 major, 
__u32 minor, bool *is_inva
                    v2_ifaces[i].devnode.minor == minor)
                        break;
        if (i == topology.num_interfaces) {
-               fprintf(stderr, "could not find %d:%d device in topology\n",
+               fprintf(stderr, "FAIL: could not find %d:%d device in 
topology\n",
                        major, minor);
-               return 0;
+               if (is_invalid)
+                       *is_invalid = true;
+               return MEDIA_ENT_F_UNKNOWN;
        }
        media_v2_interface &iface = v2_ifaces[i];
        for (i = 0; i < topology.num_links; i++) {
@@ -359,9 +359,11 @@ static __u32 read_topology(int media_fd, __u32 major, 
__u32 minor, bool *is_inva
                        break;
        }
        if (i == topology.num_links) {
-               fprintf(stderr, "could not find link for interface %u in 
topology\n",
+               if (is_invalid)
+                       *is_invalid = true;
+               fprintf(stderr, "FAIL: could not find link for interface %u in 
topology\n",
                        iface.id);
-               return 0;
+               return MEDIA_ENT_F_UNKNOWN;
        }
        __u32 ent_id = v2_links[i].sink_id;
        for (i = 0; i < topology.num_entities; i++) {
@@ -369,9 +371,11 @@ static __u32 read_topology(int media_fd, __u32 major, 
__u32 minor, bool *is_inva
                        break;
        }
        if (i == topology.num_entities) {
-               fprintf(stderr, "could not find entity %u in topology\n",
+               if (is_invalid)
+                       *is_invalid = true;
+               fprintf(stderr, "FAIL: could not find entity %u in topology\n",
                        ent_id);
-               return 0;
+               return MEDIA_ENT_F_UNKNOWN;
        }
        media_v2_entity &ent = v2_ents[i];
 
@@ -412,7 +416,9 @@ static __u32 read_topology(int media_fd, __u32 major, __u32 
minor, bool *is_inva
                                        break;
                                }
                        if (!remote_ent_id) {
-                               fprintf(stderr, "could not find remote pad 
0x%08x in topology\n",
+                               if (is_invalid)
+                                       *is_invalid = true;
+                               fprintf(stderr, "FAIL: could not find remote 
pad 0x%08x in topology\n",
                                        remote_pad);
                                return ent.id;
                        }
@@ -422,7 +428,9 @@ static __u32 read_topology(int media_fd, __u32 major, __u32 
minor, bool *is_inva
                                        break;
                                }
                        if (!remote_ent) {
-                               fprintf(stderr, "could not find remote entity 
0x%08x in topology\n",
+                               if (is_invalid)
+                                       *is_invalid = true;
+                               fprintf(stderr, "FAIL: could not find remote 
entity 0x%08x in topology\n",
                                        remote_ent_id);
                                return ent.id;
                        }
diff --git a/utils/common/media-info.h b/utils/common/media-info.h
index 5c79a7953534..09797984e771 100644
--- a/utils/common/media-info.h
+++ b/utils/common/media-info.h
@@ -60,7 +60,9 @@ std::string linkflags2s(__u32 flags);
  * If is_invalid != NULL, then set it to true if errors are detected
  * in the media information.
  *
- * Return the entity ID of fd.
+ * Return 0 if the driver doesn't support MEDIA_IOC_G_TOPOLOGY.
+ * Return MEDIA_ENT_F_UNKNOWN if it does support this but there were
+ * errors reading the topology. Otherwise return the entity ID of fd.
  */
 __u32 mi_media_info_for_fd(int media_fd, int fd, bool *is_invalid = NULL);
 
diff --git a/utils/v4l2-compliance/v4l2-compliance.cpp 
b/utils/v4l2-compliance/v4l2-compliance.cpp
index 9cc3e6274124..e7924a3ac1db 100644
--- a/utils/v4l2-compliance/v4l2-compliance.cpp
+++ b/utils/v4l2-compliance/v4l2-compliance.cpp
@@ -702,11 +702,11 @@ void testNode(struct node &node, struct node 
&expbuf_node, media_type type,
        bool is_invalid = false;
 
        if (node.is_media())
-               ent_id = mi_media_info_for_fd(node.g_fd(), -1, &is_invalid);
+               mi_media_info_for_fd(node.g_fd(), -1, &is_invalid);
        else if (media_fd >= 0)
                ent_id = mi_media_info_for_fd(media_fd, node.g_fd(), 
&is_invalid);
 
-       if (ent_id) {
+       if (ent_id && ent_id != MEDIA_ENT_F_UNKNOWN) {
                memset(&node.entity, 0, sizeof(node.entity));
                node.entity.id = ent_id;
                if (!ioctl(media_fd, MEDIA_IOC_ENUM_ENTITIES, &node.entity)) {
@@ -732,8 +732,8 @@ void testNode(struct node &node, struct node &expbuf_node, 
media_type type,
 
        printf("Required ioctls:\n");
 
-       if (!node.is_media())
-               printf("\ttest MC information: %s\n", ok(is_invalid ? -1 : 0));
+       if (ent_id)
+               printf("\ttest MC information (see 'Media Driver Info' above): 
%s\n", ok(is_invalid ? -1 : 0));
 
        if (node.is_v4l2())
                printf("\ttest VIDIOC_QUERYCAP: %s\n", ok(testCap(&node)));

_______________________________________________
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to