diff --git a/libavutil/common.h b/libavutil/common.h index 6594f7dcbf..6f0f5827e0 100644 --- a/libavutil/common.h +++ b/libavutil/common.h @@ -76,6 +76,17 @@ */ #define FFNABS(a) ((a) <= 0 ? (a) : (-(a))) +/** + * Comparator. + * For two numerical expressions x and y, gives 1 if x > y, -1 if x < y, and 0 + * if x == y. This is useful for instance in a qsort comparator callback. + * Furthermore, compilers are able to optimize this to branchless code, and + * there is no risk of overflow with signed types. + * As with many macros, this evaluates its argument multiple times, it thus + * must not have a side-effect. + */ +#define FFDIFFSIGN(x,y) (((x)>(y)) - ((x)<(y))) + #define FFMAX(a,b) ((a) > (b) ? (a) : (b)) #define FFMAX3(a,b,c) FFMAX(FFMAX(a,b),c) #define FFMIN(a,b) ((a) > (b) ? (b) : (a))