I think because it's printing serial number at the end of lens name, due to a missing termination character of the string... (present after first 32 char)
Two option here:
1) hardening string with a termination character in mlv.c:
diff --git a/modules/mlv_rec/mlv.c b/modules/mlv_rec/mlv.c
--- a/modules/mlv_rec/mlv.c
+++ b/modules/mlv_rec/mlv.c
@@ -58,7 +58,7 @@
char buf[33];
snprintf(buf, sizeof(buf), "%X%08X", (uint32_t) (lens_info.lens_serial >> 32), (uint32_t)(lens_info.lens_serial & 0xFFFFFFFF));
- strncpy((char *)hdr->lensName, lens_info.name, 32);
+ snprintf((char *)hdr->lensName, 32, "%s", lens_info.name);
strncpy((char *)hdr->lensSerial, buf, 32);
}
As a drawback we will loose a char of the string, making space for a 31 char string without using ELNS block
2) modify mlv_dump to copy first 32 character of the string in a "buffer" and then print it instead of lens_info.lensName
diff --git a/modules/mlv_rec/mlv_dump.c b/modules/mlv_rec/mlv_dump.c
--- a/modules/mlv_rec/mlv_dump.c
+++ b/modules/mlv_rec/mlv_dump.c
@@ -3670,18 +3670,22 @@
if(verbose)
{
+ /* Ensure lens name is null trminated to avoid printing serial number */
+ char name[33];
+ snprintf(name, sizeof(name), "%s", lens_info.lensName);
+
uint64_t serial = 0;
char serial_str[64];
char *end;
-
+
strcpy(serial_str, "no valid S/N");
serial = strtoull((char *)lens_info.lensSerial, &end, 16);
if (serial && !*end)
{
sprintf(serial_str, "%"PRIu64, serial);
}
-
- print_msg(MSG_INFO, " Name: '%s'\n", lens_info.lensName);
+
+ print_msg(MSG_INFO, " Name: '%s'\n", name);
print_msg(MSG_INFO, " Serial: '%s' (%s)\n", lens_info.lensSerial, serial_str);
print_msg(MSG_INFO, " Focal Len: %d mm\n", lens_info.focalLength);
print_msg(MSG_INFO, " Focus Dist: %d mm\n", lens_info.focalDist);
Can cause similar issue when processing with other tools if they don't take care of it