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