Skip to content
Snippets Groups Projects
utils.c 27.8 KiB
Newer Older
  • Learn to ignore specific revisions
  •             nd = 0;
                while (*p >= '0' && *p <= '9') {
                    nd = nd * 10 + *p++ - '0';
                }
                c = *p++;
                switch(c) {
                case '%':
                    goto addchar;
                case 'd':
                    if (percentd_found)
                        goto fail;
                    percentd_found = 1;
                    snprintf(buf1, sizeof(buf1), "%0*d", nd, number);
                    len = strlen(buf1);
                    if ((q - buf + len) > buf_size - 1)
                        goto fail;
                    memcpy(q, buf1, len);
                    q += len;
                    break;
                default:
                    goto fail;
                }
            } else {
            addchar:
                if ((q - buf) < buf_size - 1)
                    *q++ = c;
            }
        }
        if (!percentd_found)
            goto fail;
        *q = '\0';
        return 0;
     fail:
        *q = '\0';
        return -1;
    }
    
    
    static int gcd(INT64 a, INT64 b)
    {
        INT64 c;
    
        while (1) {
            c = a % b;
            if (c == 0)
                return b;
            a = b;
            b = c;
        }
    }
    
    void ticker_init(Ticker *tick, INT64 inrate, INT64 outrate)
    {
        int g;
    
        g = gcd(inrate, outrate);
        inrate /= g;
        outrate /= g;
    
        tick->value = -outrate/2;
    
        tick->inrate = inrate;
        tick->outrate = outrate;
        tick->div = tick->outrate / tick->inrate;
        tick->mod = tick->outrate % tick->inrate;
    }
    
    
    /**
     *
     * Print on stdout a nice hexa dump of a buffer
     * @param buf buffer
     * @param size buffer size
     */
    void av_hex_dump(UINT8 *buf, int size)
    {
        int len, i, j, c;
    
        for(i=0;i<size;i+=16) {
            len = size - i;
            if (len > 16)
                len = 16;
            printf("%08x ", i);
            for(j=0;j<16;j++) {
                if (j < len)
                    printf(" %02x", buf[i+j]);
                else
                    printf("   ");
            }
            printf(" ");
            for(j=0;j<len;j++) {
                c = buf[i+j];
                if (c < ' ' || c > '~')
                    c = '.';
                printf("%c", c);
            }
            printf("\n");
        }
    }