cobalt / cobalt / e83fce97d7405b0b5e569d961aa431b1112ac6ac / . / src / third_party / ffmpeg_includes / libav.56.1.0 / libavutil / mathematics.h

/* | |

* copyright (c) 2005 Michael Niedermayer <michaelni@gmx.at> | |

* | |

* This file is part of Libav. | |

* | |

* 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. | |

* | |

* 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 Libav; if not, write to the Free Software | |

* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |

*/ | |

#ifndef AVUTIL_MATHEMATICS_H | |

#define AVUTIL_MATHEMATICS_H | |

#include <stdint.h> | |

#include <math.h> | |

#include "attributes.h" | |

#include "rational.h" | |

#include "intfloat.h" | |

#ifndef M_LOG2_10 | |

#define M_LOG2_10 3.32192809488736234787 /* log_2 10 */ | |

#endif | |

#ifndef M_PHI | |

#define M_PHI 1.61803398874989484820 /* phi / golden ratio */ | |

#endif | |

#ifndef NAN | |

#define NAN av_int2float(0x7fc00000) | |

#endif | |

#ifndef INFINITY | |

#define INFINITY av_int2float(0x7f800000) | |

#endif | |

/** | |

* @addtogroup lavu_math | |

* @{ | |

*/ | |

enum AVRounding { | |

AV_ROUND_ZERO = 0, ///< Round toward zero. | |

AV_ROUND_INF = 1, ///< Round away from zero. | |

AV_ROUND_DOWN = 2, ///< Round toward -infinity. | |

AV_ROUND_UP = 3, ///< Round toward +infinity. | |

AV_ROUND_NEAR_INF = 5, ///< Round to nearest and halfway cases away from zero. | |

}; | |

/** | |

* Return the greatest common divisor of a and b. | |

* If both a and b are 0 or either or both are <0 then behavior is | |

* undefined. | |

*/ | |

int64_t av_const av_gcd(int64_t a, int64_t b); | |

/** | |

* Rescale a 64-bit integer with rounding to nearest. | |

* A simple a*b/c isn't possible as it can overflow. | |

*/ | |

int64_t av_rescale(int64_t a, int64_t b, int64_t c) av_const; | |

/** | |

* Rescale a 64-bit integer with specified rounding. | |

* A simple a*b/c isn't possible as it can overflow. | |

*/ | |

int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding) av_const; | |

/** | |

* Rescale a 64-bit integer by 2 rational numbers. | |

*/ | |

int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq) av_const; | |

/** | |

* Rescale a 64-bit integer by 2 rational numbers with specified rounding. | |

*/ | |

int64_t av_rescale_q_rnd(int64_t a, AVRational bq, AVRational cq, | |

enum AVRounding) av_const; | |

/** | |

* Compare 2 timestamps each in its own timebases. | |

* The result of the function is undefined if one of the timestamps | |

* is outside the int64_t range when represented in the others timebase. | |

* @return -1 if ts_a is before ts_b, 1 if ts_a is after ts_b or 0 if they represent the same position | |

*/ | |

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 | |

* @return a negative value if a is smaller than b | |

* a positive 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 */ |