static void video_thread_save_shot(struct image_t *img, struct image_t *img_jpeg) { // Search for a file where we can write to char save_name[128]; for (; video_thread.shot_number < 99999; video_thread.shot_number++) { sprintf(save_name, "%s/img_%05d.jpg", STRINGIFY(VIDEO_THREAD_SHOT_PATH), video_thread.shot_number); // Check if file exists or not if (access(save_name, F_OK) == -1) { // Create a high quality image (99% JPEG encoded) jpeg_encode_image(img, img_jpeg, 99, TRUE); #if JPEG_WITH_EXIF_HEADER write_exif_jpeg(save_name, img_jpeg->buf, img_jpeg->buf_size, img_jpeg->w, img_jpeg->h); #else FILE *fp = fopen(save_name, "w"); if (fp == NULL) { printf("[video_thread-thread] Could not write shot %s.\n", save_name); } else { // Save it to the file and close it fwrite(img_jpeg->buf, sizeof(uint8_t), img_jpeg->buf_size, fp); fclose(fp); } #endif // We don't need to seek for a next index anymore break; } } }
static void save_shot_on_disk(struct image_t *img, struct image_t *img_jpeg) { // Search for a file where we can write to char save_name[128]; snprintf(save_name, sizeof(save_name), "%s/img_%05d.jpg", foldername, shotNumber); shotNumber++; // Check if file exists or not if (access(save_name, F_OK) == -1) { // Create a high quality image (99% JPEG encoded) jpeg_encode_image(img, img_jpeg, 99, TRUE); #if VIDEO_USB_LOGGER_JPEG_WITH_EXIF_HEADER write_exif_jpeg(save_name, img_jpeg->buf, img_jpeg->buf_size, img_jpeg->w, img_jpeg->h); #else FILE *fp = fopen(save_name, "w"); if (fp == NULL) { printf("[video_thread-thread] Could not write shot %s.\n", save_name); } else { // Save it to the file and close it fwrite(img_jpeg->buf, sizeof(uint8_t), img_jpeg->buf_size, fp); fclose(fp); printf("Wrote image\n"); } #endif /** Log the values to a csv file */ if (video_usb_logger == NULL) { return; } static uint32_t counter = 0; struct pose_t pose = get_rotation_at_timestamp(img->pprz_ts); struct NedCoor_i *ned = stateGetPositionNed_i(); struct NedCoor_i *accel = stateGetAccelNed_i(); static uint32_t sonar = 0; // Save current information to a file fprintf(video_usb_logger, "%d,%d,%f,%f,%f,%d,%d,%d,%d,%d,%d,%f,%f,%f,%d\n", counter, shotNumber, pose.eulers.phi, pose.eulers.theta, pose.eulers.psi, ned->x, ned->y, ned->z, accel->x, accel->y, accel->z, pose.rates.p, pose.rates.q, pose.rates.r, sonar); counter++; } }