annotate ffmpeg/libavutil/mathematics.h @ 13:844d341cf643 tip

Back up before ISMIR
author Yading Song <yading.song@eecs.qmul.ac.uk>
date Thu, 31 Oct 2013 13:17:06 +0000
parents f445c3017523
children
rev   line source
yading@11 1 /*
yading@11 2 * copyright (c) 2005-2012 Michael Niedermayer <michaelni@gmx.at>
yading@11 3 *
yading@11 4 * This file is part of FFmpeg.
yading@11 5 *
yading@11 6 * FFmpeg is free software; you can redistribute it and/or
yading@11 7 * modify it under the terms of the GNU Lesser General Public
yading@11 8 * License as published by the Free Software Foundation; either
yading@11 9 * version 2.1 of the License, or (at your option) any later version.
yading@11 10 *
yading@11 11 * FFmpeg is distributed in the hope that it will be useful,
yading@11 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
yading@11 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
yading@11 14 * Lesser General Public License for more details.
yading@11 15 *
yading@11 16 * You should have received a copy of the GNU Lesser General Public
yading@11 17 * License along with FFmpeg; if not, write to the Free Software
yading@11 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
yading@11 19 */
yading@11 20
yading@11 21 #ifndef AVUTIL_MATHEMATICS_H
yading@11 22 #define AVUTIL_MATHEMATICS_H
yading@11 23
yading@11 24 #include <stdint.h>
yading@11 25 #include <math.h>
yading@11 26 #include "attributes.h"
yading@11 27 #include "rational.h"
yading@11 28 #include "intfloat.h"
yading@11 29
yading@11 30 #ifndef M_E
yading@11 31 #define M_E 2.7182818284590452354 /* e */
yading@11 32 #endif
yading@11 33 #ifndef M_LN2
yading@11 34 #define M_LN2 0.69314718055994530942 /* log_e 2 */
yading@11 35 #endif
yading@11 36 #ifndef M_LN10
yading@11 37 #define M_LN10 2.30258509299404568402 /* log_e 10 */
yading@11 38 #endif
yading@11 39 #ifndef M_LOG2_10
yading@11 40 #define M_LOG2_10 3.32192809488736234787 /* log_2 10 */
yading@11 41 #endif
yading@11 42 #ifndef M_PHI
yading@11 43 #define M_PHI 1.61803398874989484820 /* phi / golden ratio */
yading@11 44 #endif
yading@11 45 #ifndef M_PI
yading@11 46 #define M_PI 3.14159265358979323846 /* pi */
yading@11 47 #endif
yading@11 48 #ifndef M_SQRT1_2
yading@11 49 #define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */
yading@11 50 #endif
yading@11 51 #ifndef M_SQRT2
yading@11 52 #define M_SQRT2 1.41421356237309504880 /* sqrt(2) */
yading@11 53 #endif
yading@11 54 #ifndef NAN
yading@11 55 #define NAN av_int2float(0x7fc00000)
yading@11 56 #endif
yading@11 57 #ifndef INFINITY
yading@11 58 #define INFINITY av_int2float(0x7f800000)
yading@11 59 #endif
yading@11 60
yading@11 61 /**
yading@11 62 * @addtogroup lavu_math
yading@11 63 * @{
yading@11 64 */
yading@11 65
yading@11 66
yading@11 67 enum AVRounding {
yading@11 68 AV_ROUND_ZERO = 0, ///< Round toward zero.
yading@11 69 AV_ROUND_INF = 1, ///< Round away from zero.
yading@11 70 AV_ROUND_DOWN = 2, ///< Round toward -infinity.
yading@11 71 AV_ROUND_UP = 3, ///< Round toward +infinity.
yading@11 72 AV_ROUND_NEAR_INF = 5, ///< Round to nearest and halfway cases away from zero.
yading@11 73 AV_ROUND_PASS_MINMAX = 8192, ///< Flag to pass INT64_MIN/MAX through instead of rescaling, this avoids special cases for AV_NOPTS_VALUE
yading@11 74 };
yading@11 75
yading@11 76 /**
yading@11 77 * Return the greatest common divisor of a and b.
yading@11 78 * If both a and b are 0 or either or both are <0 then behavior is
yading@11 79 * undefined.
yading@11 80 */
yading@11 81 int64_t av_const av_gcd(int64_t a, int64_t b);
yading@11 82
yading@11 83 /**
yading@11 84 * Rescale a 64-bit integer with rounding to nearest.
yading@11 85 * A simple a*b/c isn't possible as it can overflow.
yading@11 86 */
yading@11 87 int64_t av_rescale(int64_t a, int64_t b, int64_t c) av_const;
yading@11 88
yading@11 89 /**
yading@11 90 * Rescale a 64-bit integer with specified rounding.
yading@11 91 * A simple a*b/c isn't possible as it can overflow.
yading@11 92 *
yading@11 93 * @return rescaled value a, or if AV_ROUND_PASS_MINMAX is set and a is
yading@11 94 * INT64_MIN or INT64_MAX then a is passed through unchanged.
yading@11 95 */
yading@11 96 int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding) av_const;
yading@11 97
yading@11 98 /**
yading@11 99 * Rescale a 64-bit integer by 2 rational numbers.
yading@11 100 */
yading@11 101 int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq) av_const;
yading@11 102
yading@11 103 /**
yading@11 104 * Rescale a 64-bit integer by 2 rational numbers with specified rounding.
yading@11 105 *
yading@11 106 * @return rescaled value a, or if AV_ROUND_PASS_MINMAX is set and a is
yading@11 107 * INT64_MIN or INT64_MAX then a is passed through unchanged.
yading@11 108 */
yading@11 109 int64_t av_rescale_q_rnd(int64_t a, AVRational bq, AVRational cq,
yading@11 110 enum AVRounding) av_const;
yading@11 111
yading@11 112 /**
yading@11 113 * Compare 2 timestamps each in its own timebases.
yading@11 114 * The result of the function is undefined if one of the timestamps
yading@11 115 * is outside the int64_t range when represented in the others timebase.
yading@11 116 * @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
yading@11 117 */
yading@11 118 int av_compare_ts(int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b);
yading@11 119
yading@11 120 /**
yading@11 121 * Compare 2 integers modulo mod.
yading@11 122 * That is we compare integers a and b for which only the least
yading@11 123 * significant log2(mod) bits are known.
yading@11 124 *
yading@11 125 * @param mod must be a power of 2
yading@11 126 * @return a negative value if a is smaller than b
yading@11 127 * a positive value if a is greater than b
yading@11 128 * 0 if a equals b
yading@11 129 */
yading@11 130 int64_t av_compare_mod(uint64_t a, uint64_t b, uint64_t mod);
yading@11 131
yading@11 132 /**
yading@11 133 * Rescale a timestamp while preserving known durations.
yading@11 134 *
yading@11 135 * @param in_ts Input timestamp
yading@11 136 * @param in_tb Input timesbase
yading@11 137 * @param fs_tb Duration and *last timebase
yading@11 138 * @param duration duration till the next call
yading@11 139 * @param out_tb Output timesbase
yading@11 140 */
yading@11 141 int64_t av_rescale_delta(AVRational in_tb, int64_t in_ts, AVRational fs_tb, int duration, int64_t *last, AVRational out_tb);
yading@11 142
yading@11 143 /**
yading@11 144 * @}
yading@11 145 */
yading@11 146
yading@11 147 #endif /* AVUTIL_MATHEMATICS_H */