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); }
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; }