bool flow_job_link_codecs(flow_c * c, struct flow_job * job, struct flow_graph ** graph_ref) { if (graph_ref == NULL || *graph_ref == NULL) { FLOW_error(c, flow_status_Null_argument); return false; } if (!flow_job_notify_graph_changed(c, job, *graph_ref)) { FLOW_error_return(c); } struct flow_graph * g = *graph_ref; int32_t i; for (i = 0; i < g->next_node_id; i++) { if (g->nodes[i].type == flow_ntype_decoder || g->nodes[i].type == flow_ntype_encoder) { uint8_t * info_bytes = &g->info_bytes[g->nodes[i].info_byte_index]; struct flow_nodeinfo_codec * info = (struct flow_nodeinfo_codec *)info_bytes; if (info->codec == NULL) { info->codec = flow_job_get_codec_instance(c, job, info->placeholder_id); if (info->codec == NULL) FLOW_error_msg(c, flow_status_Graph_invalid, "No matching codec or io found for placeholder id %d (node #%d).", info->placeholder_id, i); } } } return true; }
static bool load_checksums(flow_c * c, struct named_checksum ** checksums, size_t * checksum_count, const char * storage_relative_to) { static struct named_checksum * list = NULL; static size_t list_size = 0; if (list == NULL) { char filename[2048]; if (!create_path_from_relative(c,storage_relative_to, false, filename, 2048, "/visuals/checksums.list")) { FLOW_add_to_callstack(c); return false; } //fprintf(stderr, "Using checkums from %s.", filename); FILE * fp; char * line_a = NULL; size_t len_a = 0; int64_t read_a; char * line_b = NULL; size_t len_b = 0; int64_t read_b; fp = fopen(filename, "r"); if (fp == NULL) { FLOW_error(c, flow_status_IO_error); return false; } list_size = 200; list = (struct named_checksum *)calloc(list_size, sizeof(struct named_checksum)); size_t index = 0; while (true) { // Read lines in pairs read_a = flow_getline(&line_a, &len_a, fp); if (read_a == -1) { break; } read_b = flow_getline(&line_b, &len_b, fp); if (read_b == -1) { free(line_a); break; } // Drop newlines if present if (line_a[read_a - 1] == '\n') { line_a[read_a - 1] = '\0'; } if (line_b[read_b - 1] == '\n') { line_b[read_b - 1] = '\0'; } // Save list[index].name = line_a; list[index].checksum = line_b; line_a = NULL; line_b = NULL; index++; if (index >= list_size) { FLOW_error_msg(c, flow_status_IO_error, "Could not read in entire checksum file. Please increase list_size above %ul.", list_size); fclose(fp); return false; } } list_size = index; fclose(fp); } *checksum_count = list_size; *checksums = list; return true; }
static struct flow_interpolation_details * InterpolationDetails_create_from_internal(flow_c * context, flow_interpolation_filter filter, bool checkExistenceOnly) { bool ex = checkExistenceOnly; struct flow_interpolation_details * truePtr = (struct flow_interpolation_details *)-1; switch (filter) { case flow_interpolation_filter_Linear: case flow_interpolation_filter_Triangle: return ex ? truePtr : flow_interpolation_details_create_custom(context, 1, 1, filter_triangle); case flow_interpolation_filter_RawLanczos2: return ex ? truePtr : flow_interpolation_details_create_custom(context, 2, 1, filter_sinc); case flow_interpolation_filter_RawLanczos3: return ex ? truePtr : flow_interpolation_details_create_custom(context, 3, 1, filter_sinc); case flow_interpolation_filter_RawLanczos2Sharp: return ex ? truePtr : flow_interpolation_details_create_custom(context, 2, 0.9549963639785485, filter_sinc); case flow_interpolation_filter_RawLanczos3Sharp: return ex ? truePtr : flow_interpolation_details_create_custom(context, 3, 0.9812505644269356, filter_sinc); // Hermite and BSpline no negative weights case flow_interpolation_filter_CubicBSpline: return ex ? truePtr : flow_interpolation_details_create_bicubic_custom(context, 2, 1, 1, 0); case flow_interpolation_filter_Lanczos2: return ex ? truePtr : flow_interpolation_details_create_custom(context, 2, 1, filter_sinc_windowed); case flow_interpolation_filter_Lanczos: return ex ? truePtr : flow_interpolation_details_create_custom(context, 3, 1, filter_sinc_windowed); case flow_interpolation_filter_Lanczos2Sharp: return ex ? truePtr : flow_interpolation_details_create_custom(context, 2, 0.9549963639785485, filter_sinc_windowed); case flow_interpolation_filter_LanczosSharp: return ex ? truePtr : flow_interpolation_details_create_custom(context, 3, 0.9812505644269356, filter_sinc_windowed); case flow_interpolation_filter_CubicFast: return ex ? truePtr : flow_interpolation_details_create_custom(context, 2, 1, filter_bicubic_fast); case flow_interpolation_filter_Cubic: return ex ? truePtr : flow_interpolation_details_create_bicubic_custom(context, 2, 1, 0, 1); case flow_interpolation_filter_CubicSharp: return ex ? truePtr : flow_interpolation_details_create_bicubic_custom(context, 2, 0.9549963639785485, 0, 1); case flow_interpolation_filter_CatmullRom: return ex ? truePtr : flow_interpolation_details_create_bicubic_custom(context, 2, 1, 0, 0.5); case flow_interpolation_filter_CatmullRomFast: return ex ? truePtr : flow_interpolation_details_create_bicubic_custom(context, 1, 1, 0, 0.5); case flow_interpolation_filter_CatmullRomFastSharp: return ex ? truePtr : flow_interpolation_details_create_bicubic_custom(context, 1, 13.0 / 16.0, 0, 0.5); case flow_interpolation_filter_Mitchell: return ex ? truePtr : flow_interpolation_details_create_bicubic_custom(context, 2, 1, 1.0 / 3.0, 1.0 / 3.0); case flow_interpolation_filter_MitchellFast: return ex ? truePtr : flow_interpolation_details_create_bicubic_custom(context, 1, 1, 1.0 / 3.0, 1.0 / 3.0); case flow_interpolation_filter_NCubic: return ex ? truePtr : flow_interpolation_details_create_bicubic_custom( context, 2.5, 1. / 1.1685777620836932, 0.37821575509399867, 0.31089212245300067); case flow_interpolation_filter_NCubicSharp: return ex ? truePtr : flow_interpolation_details_create_bicubic_custom( context, 2.5, 1. / 1.105822933719019, 0.2620145123990142, 0.3689927438004929); case flow_interpolation_filter_Robidoux: return ex ? truePtr : flow_interpolation_details_create_bicubic_custom( context, 2, 1, 0.37821575509399867, 0.31089212245300067); case flow_interpolation_filter_Fastest: return ex ? truePtr : flow_interpolation_details_create_bicubic_custom( context, 0.74, 0.74, 0.37821575509399867, 0.31089212245300067); case flow_interpolation_filter_RobidouxFast: return ex ? truePtr : flow_interpolation_details_create_bicubic_custom( context, 1.05, 1, 0.37821575509399867, 0.31089212245300067); case flow_interpolation_filter_RobidouxSharp: return ex ? truePtr : flow_interpolation_details_create_bicubic_custom( context, 2, 1, 0.2620145123990142, 0.3689927438004929); case flow_interpolation_filter_Hermite: return ex ? truePtr : flow_interpolation_details_create_bicubic_custom(context, 1, 1, 0, 0); case flow_interpolation_filter_Box: return ex ? truePtr : flow_interpolation_details_create_custom(context, 0.5, 1, filter_box); case flow_interpolation_filter_Ginseng: return ex ? truePtr : flow_interpolation_details_create_custom(context, 3, 1, filter_ginseng); case flow_interpolation_filter_GinsengSharp: return ex ? truePtr : flow_interpolation_details_create_custom(context, 3, 0.9812505644269356, filter_ginseng); case flow_interpolation_filter_Jinc: return ex ? truePtr : flow_interpolation_details_create_custom(context, 6, 1.0, filter_jinc); } if (!checkExistenceOnly) { FLOW_error_msg(context, flow_status_Invalid_argument, "Invalid interpolation filter %d", (int)filter); } return NULL; }