Skip to content
Snippets Groups Projects
utils.c 30.7 KiB
Newer Older
  • Learn to ignore specific revisions
  • int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq){
        int64_t b= bq.num * (int64_t)cq.den;
        int64_t c= cq.num * (int64_t)bq.den;
        return av_rescale_rnd(a, b, c, AV_ROUND_NEAR_INF);
    }
    
    
    int64_t ff_gcd(int64_t a, int64_t b){
        if(b) return ff_gcd(b, a%b);
        else  return a;
    }
    
    
    double av_int2dbl(int64_t v){
        if(v+v > 0xFFELLU<<52)
            return 0.0/0.0;
        return ldexp(((v&(1LL<<52)-1) + (1LL<<52)) * (v>>63|1), (v>>52&0x7FF)-1075);
    }
    
    float av_int2flt(int32_t v){
        if(v+v > 0xFF000000U)
            return 0.0/0.0;
        return ldexp(((v&0x7FFFFF) + (1<<23)) * (v>>31|1), (v>>23&0xFF)-150);
    }
    
    int64_t av_dbl2int(double d){
        int e;
        if     ( !d) return 0;
        else if(d-d) return 0x7FF0000000000000LL + ((int64_t)(d<0)<<63) + (d!=d);
        d= frexp(d, &e);
        return (int64_t)(d<0)<<63 | (e+1022LL)<<52 | (int64_t)((fabs(d)-0.5)*(1LL<<53));
    }
    
    int32_t av_flt2int(float d){
        int e;
        if     ( !d) return 0;
        else if(d-d) return 0x7F800000 + ((d<0)<<31) + (d!=d);
        d= frexp(d, &e);
        return (d<0)<<31 | (e+126)<<23 | (int64_t)((fabs(d)-0.5)*(1<<24));
    }
    
    
    static int av_log_level = AV_LOG_INFO;
    
    static void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl)
    
        static int print_prefix=1;
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
        AVClass* avc= ptr ? *(AVClass**)ptr : NULL;
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
        if(print_prefix && avc) {
    	    fprintf(stderr, "[%s @ %p]", avc->item_name(ptr), avc);
    
    Falk Hüffner's avatar
    Falk Hüffner committed
        print_prefix= strstr(fmt, "\n") != NULL;
    
    static void (*av_log_callback)(void*, int, const char*, va_list) = av_log_default_callback;
    
    void av_log(void* avcl, int level, const char *fmt, ...)
    
    void av_vlog(void* avcl, int level, const char *fmt, va_list vl)
    
        av_log_callback(avcl, level, fmt, vl);
    
    }
    
    int av_log_get_level(void)
    {
        return av_log_level;
    }
    
    void av_log_set_level(int level)
    {
        av_log_level = level;
    }
    
    
    void av_log_set_callback(void (*callback)(void*, int, const char*, va_list))
    
    int avcodec_thread_init(AVCodecContext *s, int thread_count){
        return -1;
    }
    #endif
    
    
    unsigned int av_xiphlacing(unsigned char *s, unsigned int v)
    {
        unsigned int n = 0;
    
        while(v >= 0xff) {
            *s++ = 0xff;
            v -= 0xff;
            n++;
        }
        *s = v;
        n++;
        return n;
    }