Skip to content
Snippets Groups Projects
utils.c 93.4 KiB
Newer Older
  • Learn to ignore specific revisions
  • Fabrice Bellard's avatar
    Fabrice Bellard committed
        } else {
    
            /* no protocol means plain filename */
            av_strlcpy(path, url, path_size);
            return;
        }
    
        /* separate path from hostname */
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
            av_strlcpy(path, ls, path_size);
    
            ls = &p[strlen(p)]; // XXX
    
        /* the rest is hostname, use that to parse auth/port */
        if (ls != p) {
            /* authorization (user[:pass]@hostname) */
            if ((at = strchr(p, '@')) && at < ls) {
                av_strlcpy(authorization, p,
                           FFMIN(authorization_size, at + 1 - p));
                p = at + 1; /* skip '@' */
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
            }
    
            if (*p == '[' && (brk = strchr(p, ']')) && brk < ls) {
                /* [host]:port */
                av_strlcpy(hostname, p + 1,
                           FFMIN(hostname_size, brk - p));
                if (brk[1] == ':' && port_ptr)
                    *port_ptr = atoi(brk + 2);
            } else if ((col = strchr(p, ':')) && col < ls) {
                av_strlcpy(hostname, p,
                           FFMIN(col + 1 - p, hostname_size));
                if (port_ptr) *port_ptr = atoi(col + 1);
            } else
                av_strlcpy(hostname, p,
                           FFMIN(ls + 1 - p, hostname_size));
    
    void av_set_pts_info(AVStream *s, int pts_wrap_bits,
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
                         int pts_num, int pts_den)
    {
        s->pts_wrap_bits = pts_wrap_bits;
    
        s->time_base.num = pts_num;
        s->time_base.den = pts_den;
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    }
    
    /* fraction handling */
    
    /**
    
     * f = val + (num / den) + 0.5.
     *
     * 'num' is normalized so that it is such as 0 <= num < den.
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
     *
     * @param f fractional number
     * @param val integer value
     * @param num must be >= 0
    
     * @param den must be >= 1
    
    static void av_frac_init(AVFrac *f, int64_t val, int64_t num, int64_t den)
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    {
        num += (den >> 1);
        if (num >= den) {
            val += num / den;
            num = num % den;
        }
        f->val = val;
        f->num = num;
        f->den = den;
    }
    
    /**
    
     * Fractional addition to f: f = f + (incr / f->den).
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
     *
     * @param f fractional number
     * @param incr increment, can be positive or negative
     */
    
    static void av_frac_add(AVFrac *f, int64_t incr)
    
        int64_t num, den;
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    
        num = f->num + incr;
        den = f->den;
        if (num < 0) {
            f->val += num / den;
            num = num % den;
            if (num < 0) {
                num += den;
                f->val--;
            }
        } else if (num >= den) {
            f->val += num / den;
            num = num % den;
        }
        f->num = num;
    }