示例#1
0
文件: vf_dlopen.c 项目: zerix/mpv
static int name_to_imgfmt(const char *name)
{
    for (int n = 0; format_names[n].name; n++) {
        if (strcasecmp(format_names[n].name, name) == 0)
            return format_names[n].fmt;
    }
    return mp_imgfmt_from_name(bstr0(name), false);
}
示例#2
0
static int add_to_inout(char *sfmt, char *sflags, unsigned int *outfmt,
                        unsigned char *outflags)
{

    static char *flagstr[] = {
        "flip",
        "noflip",
        "yuvhack",
        "query",
        "static",
        NULL
    };

    int i, j, freeslots;
    unsigned char flags;

    for (i = 0; i < CODECS_MAX_OUTFMT && outfmt[i] != 0xffffffff; i++)
        /* NOTHING */;
    freeslots = CODECS_MAX_OUTFMT - i;
    if (!freeslots)
        goto err_out_too_many;

    flags = 0;
    if(sflags) {
        do {
            for (j = 0; flagstr[j] != NULL; j++)
                if (!strncmp(sflags, flagstr[j],
                             strlen(flagstr[j])))
                    break;
            if (flagstr[j] == NULL)
                goto err_out_parse_error;
            flags|=(1<<j);
            sflags+=strlen(flagstr[j]);
        } while (*(sflags++) == ',');

        if (*(--sflags) != '\0')
            goto err_out_parse_error;
    }

    do {
        for (j = 0; isalnum(sfmt[j]) || sfmt[j] == '_'; j++);
        unsigned int fmt = mp_imgfmt_from_name((bstr) {sfmt, j}, true);
        if (!fmt)
            goto err_out_parse_error;
        outfmt[i] = fmt;
        outflags[i] = flags;
        ++i;
        sfmt += j;
    } while ((*(sfmt++) == ',') && --freeslots);

    if (!freeslots)
        goto err_out_too_many;

    if (*(--sfmt) != '\0')
        goto err_out_parse_error;

    return 1;
err_out_too_many:
    mp_tmsg(MSGT_CODECCFG,MSGL_ERR,"too many out...");
    return 0;
err_out_parse_error:
    mp_tmsg(MSGT_CODECCFG,MSGL_ERR,"parse error");
    return 0;
}