int av_set_string3(void *obj, const char *name, const char *val, int alloc, const AVOption **o_out)

{

    int ret;

    const AVOption *o = av_opt_find(obj, name, NULL, 0, 0);

    if (o_out)

        *o_out = o;

    if (!o)

        return AVERROR_OPTION_NOT_FOUND;

    if (!val || o->offset<=0)

        return AVERROR(EINVAL);



    if (o->type == FF_OPT_TYPE_BINARY) {

        uint8_t **dst = (uint8_t **)(((uint8_t*)obj) + o->offset);

        int *lendst = (int *)(dst + 1);

        uint8_t *bin, *ptr;

        int len = strlen(val);

        av_freep(dst);

        *lendst = 0;

        if (len & 1) return AVERROR(EINVAL);

        len /= 2;

        ptr = bin = av_malloc(len);

        while (*val) {

            int a = hexchar2int(*val++);

            int b = hexchar2int(*val++);

            if (a < 0 || b < 0) {

                av_free(bin);

                return AVERROR(EINVAL);

            }

            *ptr++ = (a << 4) | b;

        }

        *dst = bin;

        *lendst = len;

        return 0;

    }

    if (o->type != FF_OPT_TYPE_STRING) {

        int notfirst=0;

        for (;;) {

            int i;

            char buf[256];

            int cmd=0;

            double d;



            if (*val == '+' || *val == '-')

                cmd= *(val++);



            for (i=0; i<sizeof(buf)-1 && val[i] && val[i]!='+' && val[i]!='-'; i++)

                buf[i]= val[i];

            buf[i]=0;



            {

                const AVOption *o_named = av_opt_find(obj, buf, o->unit, 0, 0);

                if (o_named && o_named->type == FF_OPT_TYPE_CONST)

                    d= o_named->default_val.dbl;

                else if (!strcmp(buf, "default")) d= o->default_val.dbl;

                else if (!strcmp(buf, "max"    )) d= o->max;

                else if (!strcmp(buf, "min"    )) d= o->min;

                else if (!strcmp(buf, "none"   )) d= 0;

                else if (!strcmp(buf, "all"    )) d= ~0;

                else {

                    int res = av_expr_parse_and_eval(&d, buf, const_names, const_values, NULL, NULL, NULL, NULL, NULL, 0, obj);

                    if (res < 0) {

                        av_log(obj, AV_LOG_ERROR, "Unable to parse option value \"%s\"\n", val);

                        return res;

                    }

                }

            }

            if (o->type == FF_OPT_TYPE_FLAGS) {

                if      (cmd=='+') d= av_get_int(obj, name, NULL) | (int64_t)d;

                else if (cmd=='-') d= av_get_int(obj, name, NULL) &~(int64_t)d;

            } else {

                if      (cmd=='+') d= notfirst*av_get_double(obj, name, NULL) + d;

                else if (cmd=='-') d= notfirst*av_get_double(obj, name, NULL) - d;

            }



            if ((ret = av_set_number2(obj, name, d, 1, 1, o_out)) < 0)

                return ret;

            val+= i;

            if (!*val)

                return 0;

            notfirst=1;

        }

        return AVERROR(EINVAL);

    }



    if (alloc) {

        av_free(*(void**)(((uint8_t*)obj) + o->offset));

        val= av_strdup(val);

    }



    memcpy(((uint8_t*)obj) + o->offset, &val, sizeof(val));

    return 0;

}

int av_set_string3(void *obj, const char *name, const char *val, int alloc, const AVOption **o_out)

{

    int ret;

    const AVOption *o = av_opt_find(obj, name, NULL, 0, 0);

    if (o_out)

        *o_out = o;

    if (!o)

        return AVERROR_OPTION_NOT_FOUND;

    if (!val || o->offset<=0)

        return AVERROR(EINVAL);



    if (o->type == FF_OPT_TYPE_BINARY) {

        uint8_t **dst = (uint8_t **)(((uint8_t*)obj) + o->offset);

        int *lendst = (int *)(dst + 1);

        uint8_t *bin, *ptr;

        int len = strlen(val);

        av_freep(dst);

        *lendst = 0;

        if (len & 1) return AVERROR(EINVAL);

        len /= 2;

        ptr = bin = av_malloc(len);

        while (*val) {

            int a = hexchar2int(*val++);

            int b = hexchar2int(*val++);

            if (a < 0 || b < 0) {

                av_free(bin);

                return AVERROR(EINVAL);

            }

            *ptr++ = (a << 4) | b;

        }

        *dst = bin;

        *lendst = len;

        return 0;

    }

    if (o->type != FF_OPT_TYPE_STRING) {

        int notfirst=0;

        for (;;) {

            int i;

            char buf[256];

            int cmd=0;

            double d;



            if (*val == '+' || *val == '-')

                cmd= *(val++);



            for (i=0; i<sizeof(buf)-1 && val[i] && val[i]!='+' && val[i]!='-'; i++)

                buf[i]= val[i];

            buf[i]=0;



            {

                const AVOption *o_named = av_opt_find(obj, buf, o->unit, 0, 0);

                if (o_named && o_named->type == FF_OPT_TYPE_CONST)

                    d= o_named->default_val.dbl;

                else if (!strcmp(buf, "default")) d= o->default_val.dbl;

                else if (!strcmp(buf, "max"    )) d= o->max;

                else if (!strcmp(buf, "min"    )) d= o->min;

                else if (!strcmp(buf, "none"   )) d= 0;

                else if (!strcmp(buf, "all"    )) d= ~0;

                else {

                    int res = av_expr_parse_and_eval(&d, buf, const_names, const_values, NULL, NULL, NULL, NULL, NULL, 0, obj);

                    if (res < 0) {

                        av_log(obj, AV_LOG_ERROR, "Unable to parse option value \"%s\"\n", val);

                        return res;

                    }

                }

            }

            if (o->type == FF_OPT_TYPE_FLAGS) {

                if      (cmd=='+') d= av_get_int(obj, name, NULL) | (int64_t)d;

                else if (cmd=='-') d= av_get_int(obj, name, NULL) &~(int64_t)d;

            } else {

                if      (cmd=='+') d= notfirst*av_get_double(obj, name, NULL) + d;

                else if (cmd=='-') d= notfirst*av_get_double(obj, name, NULL) - d;

            }



            if ((ret = av_set_number2(obj, name, d, 1, 1, o_out)) < 0)

                return ret;

            val+= i;

            if (!*val)

                return 0;

            notfirst=1;

        }

        return AVERROR(EINVAL);

    }



    if (alloc) {

        av_free(*(void**)(((uint8_t*)obj) + o->offset));

        val= av_strdup(val);

    }



    memcpy(((uint8_t*)obj) + o->offset, &val, sizeof(val));

    return 0;

}

int FUNC_0(void *VAR_0, const char *VAR_1, const char *VAR_2, int VAR_3, const AVOption **VAR_4)

{

    int VAR_5;

    const AVOption *VAR_6 = av_opt_find(VAR_0, VAR_1, NULL, 0, 0);

    if (VAR_4)

        *VAR_4 = VAR_6;

    if (!VAR_6)

        return AVERROR_OPTION_NOT_FOUND;

    if (!VAR_2 || VAR_6->offset<=0)

        return AVERROR(EINVAL);



    if (VAR_6->type == FF_OPT_TYPE_BINARY) {

        uint8_t **dst = (uint8_t **)(((uint8_t*)VAR_0) + VAR_6->offset);

        int *VAR_7 = (int *)(dst + 1);

        uint8_t *bin, *ptr;

        int VAR_8 = strlen(VAR_2);

        av_freep(dst);

        *VAR_7 = 0;

        if (VAR_8 & 1) return AVERROR(EINVAL);

        VAR_8 /= 2;

        ptr = bin = av_malloc(VAR_8);

        while (*VAR_2) {

            int VAR_9 = hexchar2int(*VAR_2++);

            int VAR_10 = hexchar2int(*VAR_2++);

            if (VAR_9 < 0 || VAR_10 < 0) {

                av_free(bin);

                return AVERROR(EINVAL);

            }

            *ptr++ = (VAR_9 << 4) | VAR_10;

        }

        *dst = bin;

        *VAR_7 = VAR_8;

        return 0;

    }

    if (VAR_6->type != FF_OPT_TYPE_STRING) {

        int VAR_11=0;

        for (;;) {

            int VAR_12;

            char VAR_13[256];

            int VAR_14=0;

            double VAR_15;



            if (*VAR_2 == '+' || *VAR_2 == '-')

                VAR_14= *(VAR_2++);



            for (VAR_12=0; VAR_12<sizeof(VAR_13)-1 && VAR_2[VAR_12] && VAR_2[VAR_12]!='+' && VAR_2[VAR_12]!='-'; VAR_12++)

                VAR_13[VAR_12]= VAR_2[VAR_12];

            VAR_13[VAR_12]=0;



            {

                const AVOption *VAR_16 = av_opt_find(VAR_0, VAR_13, VAR_6->unit, 0, 0);

                if (VAR_16 && VAR_16->type == FF_OPT_TYPE_CONST)

                    VAR_15= VAR_16->default_val.dbl;

                else if (!strcmp(VAR_13, "default")) VAR_15= VAR_6->default_val.dbl;

                else if (!strcmp(VAR_13, "max"    )) VAR_15= VAR_6->max;

                else if (!strcmp(VAR_13, "min"    )) VAR_15= VAR_6->min;

                else if (!strcmp(VAR_13, "none"   )) VAR_15= 0;

                else if (!strcmp(VAR_13, "all"    )) VAR_15= ~0;

                else {

                    int VAR_17 = av_expr_parse_and_eval(&VAR_15, VAR_13, const_names, const_values, NULL, NULL, NULL, NULL, NULL, 0, VAR_0);

                    if (VAR_17 < 0) {

                        av_log(VAR_0, AV_LOG_ERROR, "Unable to parse option value \"%s\"\n", VAR_2);

                        return VAR_17;

                    }

                }

            }

            if (VAR_6->type == FF_OPT_TYPE_FLAGS) {

                if      (VAR_14=='+') VAR_15= av_get_int(VAR_0, VAR_1, NULL) | (int64_t)VAR_15;

                else if (VAR_14=='-') VAR_15= av_get_int(VAR_0, VAR_1, NULL) &~(int64_t)VAR_15;

            } else {

                if      (VAR_14=='+') VAR_15= VAR_11*av_get_double(VAR_0, VAR_1, NULL) + VAR_15;

                else if (VAR_14=='-') VAR_15= VAR_11*av_get_double(VAR_0, VAR_1, NULL) - VAR_15;

            }



            if ((VAR_5 = av_set_number2(VAR_0, VAR_1, VAR_15, 1, 1, VAR_4)) < 0)

                return VAR_5;

            VAR_2+= VAR_12;

            if (!*VAR_2)

                return 0;

            VAR_11=1;

        }

        return AVERROR(EINVAL);

    }



    if (VAR_3) {

        av_free(*(void**)(((uint8_t*)VAR_0) + VAR_6->offset));

        VAR_2= av_strdup(VAR_2);

    }



    memcpy(((uint8_t*)VAR_0) + VAR_6->offset, &VAR_2, sizeof(VAR_2));

    return 0;

}

int FUNC_0(void *VAR_0, const char *VAR_1, const char *VAR_2, int VAR_3, const AVOption **VAR_4)
{ int VAR_5; const AVOption *VAR_6 = av_opt_find(VAR_0, VAR_1, NULL, 0, 0); if (VAR_4)
*VAR_4 = VAR_6; if (!VAR_6)
return AVERROR_OPTION_NOT_FOUND; if (!VAR_2 || VAR_6->offset<=0)
return AVERROR(EINVAL); if (VAR_6->type == FF_OPT_TYPE_BINARY) { uint8_t **dst = (uint8_t **)(((uint8_t*)VAR_0) + VAR_6->offset); int *VAR_7 = (int *)(dst + 1); uint8_t *bin, *ptr; int VAR_8 = strlen(VAR_2); av_freep(dst); *VAR_7 = 0; if (VAR_8 & 1) return AVERROR(EINVAL); VAR_8 /= 2; ptr = bin = av_malloc(VAR_8); while (*VAR_2) { int VAR_9 = hexchar2int(*VAR_2++); int VAR_10 = hexchar2int(*VAR_2++); if (VAR_9 < 0 || VAR_10 < 0) { av_free(bin); return AVERROR(EINVAL); } *ptr++ = (VAR_9 << 4) | VAR_10; } *dst = bin; *VAR_7 = VAR_8; return 0; } if (VAR_6->type != FF_OPT_TYPE_STRING) { int VAR_11=0; for (;;) { int VAR_12; char VAR_13[256]; int VAR_14=0; double VAR_15; if (*VAR_2 == '+' || *VAR_2 == '-')
VAR_14= *(VAR_2++); for (VAR_12=0; VAR_12<sizeof(VAR_13)-1 && VAR_2[VAR_12] && VAR_2[VAR_12]!='+' && VAR_2[VAR_12]!='-'; VAR_12++) VAR_13[VAR_12]= VAR_2[VAR_12]; VAR_13[VAR_12]=0; { const AVOption *VAR_16 = av_opt_find(VAR_0, VAR_13, VAR_6->unit, 0, 0); if (VAR_16 && VAR_16->type == FF_OPT_TYPE_CONST)
VAR_15= VAR_16->default_val.dbl; else if (!strcmp(VAR_13, "default")) VAR_15= VAR_6->default_val.dbl; else if (!strcmp(VAR_13, "max"    )) VAR_15= VAR_6->max; else if (!strcmp(VAR_13, "min"    )) VAR_15= VAR_6->min; else if (!strcmp(VAR_13, "none"   )) VAR_15= 0; else if (!strcmp(VAR_13, "all"    )) VAR_15= ~0; else { int VAR_17 = av_expr_parse_and_eval(&VAR_15, VAR_13, const_names, const_values, NULL, NULL, NULL, NULL, NULL, 0, VAR_0); if (VAR_17 < 0) { av_log(VAR_0, AV_LOG_ERROR, "Unable to parse option value \"%s\"\n", VAR_2); return VAR_17; } } } if (VAR_6->type == FF_OPT_TYPE_FLAGS) { if      (VAR_14=='+') VAR_15= av_get_int(VAR_0, VAR_1, NULL) | (int64_t)VAR_15; else if (VAR_14=='-') VAR_15= av_get_int(VAR_0, VAR_1, NULL) &~(int64_t)VAR_15; } else { if      (VAR_14=='+') VAR_15= VAR_11*av_get_double(VAR_0, VAR_1, NULL) + VAR_15; else if (VAR_14=='-') VAR_15= VAR_11*av_get_double(VAR_0, VAR_1, NULL) - VAR_15; } if ((VAR_5 = av_set_number2(VAR_0, VAR_1, VAR_15, 1, 1, VAR_4)) < 0)
return VAR_5; VAR_2+= VAR_12; if (!*VAR_2)
return 0; VAR_11=1; } return AVERROR(EINVAL); } if (VAR_3) { av_free(*(void**)(((uint8_t*)VAR_0) + VAR_6->offset)); VAR_2= av_strdup(VAR_2); } memcpy(((uint8_t*)VAR_0) + VAR_6->offset, &VAR_2, sizeof(VAR_2)); return 0; }