From 6b65c4ec54511871f345cfa76a499fa65d94c0b8 Mon Sep 17 00:00:00 2001 From: Nicolas George Date: Thu, 16 Apr 2020 21:36:00 +0200 Subject: [PATCH] lavu: add av_gcd_q(). --- doc/APIchanges | 3 +++ libavutil/rational.c | 9 +++++++++ libavutil/rational.h | 6 ++++++ libavutil/version.h | 4 ++-- 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/doc/APIchanges b/doc/APIchanges index 34ca7ec1bb..b3de5df0b6 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -15,6 +15,9 @@ libavutil: 2017-10-21 API changes, most recent first: +2020-05-23 - xxxxxxxxxx - lavu 56.47.100 - rational.h + Add av_gcd_q(). + 2020-05-22 - xxxxxxxxxx - lavu 56.46.101 - opt.h Add AV_OPT_FLAG_CHILD_CONSTS. diff --git a/libavutil/rational.c b/libavutil/rational.c index 35ee08877f..eb148ddb12 100644 --- a/libavutil/rational.c +++ b/libavutil/rational.c @@ -182,3 +182,12 @@ uint32_t av_q2intfloat(AVRational q) { return sign<<31 | (150-shift)<<23 | (n - (1<<23)); } + +AVRational av_gcd_q(AVRational a, AVRational b, int max_den, AVRational def) +{ + int64_t gcd, lcm; + + gcd = av_gcd(a.den, b.den); + lcm = (a.den / gcd) * b.den; + return lcm < max_den ? av_make_q(av_gcd(a.num, b.num), lcm) : def; +} diff --git a/libavutil/rational.h b/libavutil/rational.h index 5c6b67b4e9..cbb08a0baf 100644 --- a/libavutil/rational.h +++ b/libavutil/rational.h @@ -207,6 +207,12 @@ int av_find_nearest_q_idx(AVRational q, const AVRational* q_list); */ uint32_t av_q2intfloat(AVRational q); +/** + * Return the best rational so that a and b are multiple of it. + * If the resulting denominator is larger than max_den, return def. + */ +AVRational av_gcd_q(AVRational a, AVRational b, int max_den, AVRational def); + /** * @} */ diff --git a/libavutil/version.h b/libavutil/version.h index 20085dfde9..f63cd4ba79 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -79,8 +79,8 @@ */ #define LIBAVUTIL_VERSION_MAJOR 56 -#define LIBAVUTIL_VERSION_MINOR 46 -#define LIBAVUTIL_VERSION_MICRO 101 +#define LIBAVUTIL_VERSION_MINOR 47 +#define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ LIBAVUTIL_VERSION_MINOR, \