summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpommicket <pommicket@gmail.com>2025-02-20 21:16:41 -0500
committerpommicket <pommicket@gmail.com>2025-02-20 21:16:41 -0500
commitc699ecca00d30c643171c78fa66dc84c8f7f0966 (patch)
tree5e03af2602bbc8b780c5d1a7258bca7741954ac8
parent0586767eef4d1ebfb2c065106b67b2ef3639b77c (diff)
hash debugging
-rw-r--r--camera.c38
-rw-r--r--camera.h1
2 files changed, 19 insertions, 20 deletions
diff --git a/camera.c b/camera.c
index a03f21c..35f0e07 100644
--- a/camera.c
+++ b/camera.c
@@ -17,7 +17,6 @@ struct Camera {
char *name;
uint32_t input_idx;
struct v4l2_format curr_format;
- crypto_generichash_state hash_state;
int fd;
Hash hash;
uint8_t *read_frame;
@@ -798,9 +797,17 @@ static void cameras_from_device_with_fd(const char *dev_path, const char *serial
return;
}
camera->fd = -1;
- crypto_generichash_init(&camera->hash_state, NULL, 0, HASH_SIZE);
- crypto_generichash_update(&camera->hash_state, cap.card, strlen((const char *)cap.card) + 1);
- crypto_generichash_update(&camera->hash_state, input.name, strlen((const char *)input.name) + 1);
+ crypto_generichash_state hash_state = {0};
+ crypto_generichash_init(&hash_state, NULL, 0, HASH_SIZE);
+ static char fname[32];
+ static int fid;
+ sprintf(fname, "%d.hash", fid++);
+ FILE *fp = fopen(fname, "w");
+ fprintf(fp,"%s %s %s\n",cap.card,input.name,serial);
+ crypto_generichash_update(&hash_state, cap.card, strlen((const char *)cap.card) + 1);
+ crypto_generichash_update(&hash_state, input.name, strlen((const char *)input.name) + 1);
+ if (serial && *serial)
+ crypto_generichash_update(&hash_state, (const uint8_t *)serial, strlen(serial) + 1);
struct v4l2_fmtdesc fmtdesc = {0};
printf("-----\n");
for (uint32_t fmt_idx = 0; ; fmt_idx++) {
@@ -810,8 +817,6 @@ static void cameras_from_device_with_fd(const char *dev_path, const char *serial
uint32_t fourcc[2] = {fmtdesc.pixelformat, 0};
printf(" - %s (%s)\n",fmtdesc.description, (const char *)fourcc);
struct v4l2_frmsizeenum frmsize = {0};
- if (serial && *serial)
- crypto_generichash_update(&camera->hash_state, (const uint8_t *)serial, strlen(serial) + 1);
for (uint32_t frmsz_idx = 0; ; frmsz_idx++) {
frmsize.index = frmsz_idx;
frmsize.pixel_format = fmtdesc.pixelformat;
@@ -851,7 +856,8 @@ static void cameras_from_device_with_fd(const char *dev_path, const char *serial
// select best format
PictureFormat best_format = {0};
uint32_t desired_format = V4L2_PIX_FMT_RGB24;
- crypto_generichash_update(&camera->hash_state, (const uint8_t *)(const uint32_t [1]){arr_len(camera->formats)}, 4);
+ fprintf(fp, "%u\n", arr_len(camera->formats));
+ crypto_generichash_update(&hash_state, (const uint8_t *)(const uint32_t [1]){arr_len(camera->formats)}, 4);
arr_foreach_ptr(camera->formats, PictureFormat, fmt) {
// Now you might think do we really need this?
// Is it really not enough to use the device name, input name, and serial number to uniquely identify a camera??
@@ -861,9 +867,10 @@ static void cameras_from_device_with_fd(const char *dev_path, const char *serial
// Oddly Windows doesn't show the infrared camera as an input device.
// I wonder if there is some way of detecting which one is the "normal" camera.
// Or perhaps Windows has its own special proprietary driver and we have no way of knowing.
- crypto_generichash_update(&camera->hash_state, (const uint8_t *)&fmt->pixfmt, sizeof fmt->pixfmt);
- crypto_generichash_update(&camera->hash_state, (const uint8_t *)&fmt->width, sizeof fmt->width);
- crypto_generichash_update(&camera->hash_state, (const uint8_t *)&fmt->height, sizeof fmt->height);
+ fprintf(fp, "%u %u %u\n",fmt->pixfmt, fmt->width, fmt->height);
+ crypto_generichash_update(&hash_state, (const uint8_t *)&fmt->pixfmt, sizeof fmt->pixfmt);
+ crypto_generichash_update(&hash_state, (const uint8_t *)&fmt->width, sizeof fmt->width);
+ crypto_generichash_update(&hash_state, (const uint8_t *)&fmt->height, sizeof fmt->height);
if (best_format.pixfmt == desired_format && fmt->pixfmt != desired_format) {
continue;
}
@@ -872,12 +879,13 @@ static void cameras_from_device_with_fd(const char *dev_path, const char *serial
best_format = *fmt;
}
}
+ fclose(fp);
camera->best_format = best_format;
camera->name = a_sprintf(
"%s %s (up to %" PRIu32 "x%" PRIu32 ")", (const char *)cap.card, (const char *)input.name,
best_format.width, best_format.height
);
- crypto_generichash_final(&camera->hash_state, camera->hash.hash, sizeof camera->hash.hash);
+ crypto_generichash_final(&hash_state, camera->hash.hash, sizeof camera->hash.hash);
arr_add(*cameras, camera);
}
}
@@ -892,14 +900,6 @@ void cameras_from_device(const char *dev_path, const char *serial, Camera ***cam
v4l2_close(fd);
}
-
-void camera_update_hash(Camera *camera, const void *data, size_t len) {
- crypto_generichash_update(&camera->hash_state, data, len);
- // should be perfectly fine to copy state?
- crypto_generichash_state state = camera->hash_state;
- crypto_generichash_final(&state, camera->hash.hash, sizeof camera->hash.hash);
-}
-
Hash camera_hash(Camera *camera) {
return camera->hash;
}
diff --git a/camera.h b/camera.h
index d4f1a0e..d09c9f9 100644
--- a/camera.h
+++ b/camera.h
@@ -117,7 +117,6 @@ uint32_t camera_pixel_format(Camera *camera);
CameraAccessMethod camera_access_method(Camera *camera);
void camera_close(Camera *camera);
void cameras_from_device(const char *dev_path, const char *serial, Camera ***cameras);
-void camera_update_hash(Camera *camera, const void *data, size_t len);
bool camera_open(Camera *camera);
Hash camera_hash(Camera *camera);
void camera_hash_str(Camera *camera, char str[HASH_SIZE * 2 + 1]);