Commit | Line | Data |
---|---|---|

04d7f601 DB |
1 | /* |

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

3 | * | |

b78e7197 DB |
4 | * This file is part of FFmpeg. |

5 | * | |

6 | * FFmpeg is free software; you can redistribute it and/or | |

04d7f601 DB |
7 | * modify it under the terms of the GNU Lesser General Public |

8 | * License as published by the Free Software Foundation; either | |

b78e7197 | 9 | * version 2.1 of the License, or (at your option) any later version. |

04d7f601 | 10 | * |

b78e7197 | 11 | * FFmpeg is distributed in the hope that it will be useful, |

04d7f601 DB |
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |

13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |

14 | * Lesser General Public License for more details. | |

15 | * | |

16 | * You should have received a copy of the GNU Lesser General Public | |

b78e7197 | 17 | * License along with FFmpeg; if not, write to the Free Software |

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

19 | */ | |

20 | ||

5b21bdab DB |
21 | #ifndef FFMPEG_MATHEMATICS_H |

22 | #define FFMPEG_MATHEMATICS_H | |

c11c2bc2 | 23 | |

6ef29128 | 24 | #include <stdint.h> |

c11c2bc2 AS |
25 | #include "rational.h" |

26 | ||

27 | enum AVRounding { | |

28 | AV_ROUND_ZERO = 0, ///< round toward zero | |

29 | AV_ROUND_INF = 1, ///< round away from zero | |

30 | AV_ROUND_DOWN = 2, ///< round toward -infinity | |

31 | AV_ROUND_UP = 3, ///< round toward +infinity | |

32 | AV_ROUND_NEAR_INF = 5, ///< round to nearest and halfway cases away from zero | |

33 | }; | |

34 | ||

35 | /** | |

36 | * rescale a 64bit integer with rounding to nearest. | |

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

38 | */ | |

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

40 | ||

41 | /** | |

42 | * rescale a 64bit integer with specified rounding. | |

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

44 | */ | |

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

46 | ||

47 | /** | |

48 | * rescale a 64bit integer by 2 rational numbers. | |

49 | */ | |

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

51 | ||

5b21bdab | 52 | #endif /* FFMPEG_MATHEMATICS_H */ |