From 65db0587a8f3233afa67e870aac38c494314ebeb Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Wed, 9 Jun 2010 17:27:42 +0000 Subject: [PATCH] Add av_compare_mod() Originally committed as revision 23551 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavutil/mathematics.c | 7 +++++++ libavutil/mathematics.h | 9 +++++++++ 2 files changed, 16 insertions(+) diff --git a/libavutil/mathematics.c b/libavutil/mathematics.c index c06cb16165..00b81f131e 100644 --- a/libavutil/mathematics.c +++ b/libavutil/mathematics.c @@ -144,6 +144,13 @@ int av_compare_ts(int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b){ 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 --git a/libavutil/mathematics.h b/libavutil/mathematics.h index e198aef8cb..889ce959fd 100644 --- a/libavutil/mathematics.h +++ b/libavutil/mathematics.h @@ -94,5 +94,14 @@ int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq) av_const; */ 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 */