# HG changeset patch # User michael # Date 1276104462 0 # Node ID 93bd29f34e990d4f4b64f7ef4601135babb02551 # Parent be49bac1a894d3ce57f27b661efa66bdfd01b90c Add av_compare_mod() diff -r be49bac1a894 -r 93bd29f34e99 mathematics.c --- a/mathematics.c Sat Jun 05 12:01:28 2010 +0000 +++ b/mathematics.c Wed Jun 09 17:27:42 2010 +0000 @@ -144,6 +144,13 @@ return 0; } +int64_t av_compare_mod(uint64_t a, uint64_t b, uint64_t mod){ + int64_t c= (a-b) & (mod-1); + if(c > (mod>>1)) + c-= mod; + return c; +} + #ifdef TEST #include "integer.h" #undef printf diff -r be49bac1a894 -r 93bd29f34e99 mathematics.h --- a/mathematics.h Sat Jun 05 12:01:28 2010 +0000 +++ b/mathematics.h Wed Jun 09 17:27:42 2010 +0000 @@ -94,5 +94,14 @@ */ int av_compare_ts(int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b); +/** + * Compare 2 integers modulo mod. + * That is we compare integers a and b for which only the least significant log2(mod) bits are known + * @param mod must be a power of 2 + * @returns a negative value if a is smaller than b + * a positiv value if a is greater than b + * 0 if a equals b + */ +int64_t av_compare_mod(uint64_t a, uint64_t b, uint64_t mod); #endif /* AVUTIL_MATHEMATICS_H */