diff options
author | pommicket <pommicket@gmail.com> | 2025-02-20 21:16:41 -0500 |
---|---|---|
committer | pommicket <pommicket@gmail.com> | 2025-02-20 21:16:41 -0500 |
commit | c699ecca00d30c643171c78fa66dc84c8f7f0966 (patch) | |
tree | 5e03af2602bbc8b780c5d1a7258bca7741954ac8 | |
parent | 0586767eef4d1ebfb2c065106b67b2ef3639b77c (diff) |
hash debugging
-rw-r--r-- | camera.c | 38 | ||||
-rw-r--r-- | camera.h | 1 |
2 files changed, 19 insertions, 20 deletions
@@ -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; } @@ -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]); |