X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavutil%2Frational.h;h=5d7dab7fd0d2d5081ced7f19f8277537ba6e8dff;hb=7081620aca36e616ea96f71fd71d2703e3abae09;hp=2dd0c2c5948e5480877bb13ca6421e7a31428794;hpb=49bd8e4b843d9a92fdb8ef4361a551a1e019c65d;p=ffmpeg diff --git a/libavutil/rational.h b/libavutil/rational.h index 2dd0c2c5948..5d7dab7fd0d 100644 --- a/libavutil/rational.h +++ b/libavutil/rational.h @@ -2,20 +2,20 @@ * rational numbers * Copyright (c) 2003 Michael Niedermayer * - * This file is part of FFmpeg. + * This file is part of Libav. * - * FFmpeg is free software; you can redistribute it and/or + * Libav is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * - * FFmpeg is distributed in the hope that it will be useful, + * Libav is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software + * License along with Libav; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ @@ -29,8 +29,14 @@ #define AVUTIL_RATIONAL_H #include +#include #include "attributes.h" +/** + * @addtogroup lavu_math + * @{ + */ + /** * rational number numerator/denominator */ @@ -43,13 +49,16 @@ typedef struct AVRational{ * Compare two rationals. * @param a first rational * @param b second rational - * @return 0 if a==b, 1 if a>b and -1 if ab, -1 if a>63)|1; - else return 0; + if(tmp) return ((tmp ^ a.den ^ b.den)>>63)|1; + else if(b.den && a.den) return 0; + else if(a.num && b.num) return (a.num>>31) - (b.num>>31); + else return INT_MIN; } /** @@ -105,8 +114,21 @@ AVRational av_add_q(AVRational b, AVRational c) av_const; */ AVRational av_sub_q(AVRational b, AVRational c) av_const; +/** + * Invert a rational. + * @param q value + * @return 1 / q + */ +static av_always_inline AVRational av_inv_q(AVRational q) +{ + AVRational r = { q.den, q.num }; + return r; +} + /** * Convert a double precision floating point number to a rational. + * inf is expressed as {1,0} or {-1,0} depending on the sign. + * * @param d double to convert * @param max the maximum allowed numerator and denominator * @return (AVRational) d @@ -126,4 +148,8 @@ int av_nearer_q(AVRational q, AVRational q1, AVRational q2); */ int av_find_nearest_q_idx(AVRational q, const AVRational* q_list); +/** + * @} + */ + #endif /* AVUTIL_RATIONAL_H */