示例#1
0
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;
}
示例#2
0
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;
}
示例#3
0
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;
}