From abb089431d0467c3609207d0b27359ef08a6c16d Mon Sep 17 00:00:00 2001 From: wm4 Date: Wed, 6 Nov 2019 21:35:49 +0100 Subject: common: add a helper to round up to next power of 2 This is something relatively frequently needed, and there must be half a dozen ad-hoc implementations in mpv. The next commit uses this, the suspected duplicate implementations are hiding. --- common/common.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'common/common.c') diff --git a/common/common.c b/common/common.c index 967ab961c0..5068995ded 100644 --- a/common/common.c +++ b/common/common.c @@ -336,3 +336,17 @@ unsigned int mp_log2(uint32_t v) return 0; #endif } + +// If a power of 2, return it, otherwise return the next highest one, or 0. +// mp_round_next_power_of_2(65) == 128 +// mp_round_next_power_of_2(64) == 64 +// mp_round_next_power_of_2(0) == 1 +// mp_round_next_power_of_2(UINT32_MAX) == 0 +uint32_t mp_round_next_power_of_2(uint32_t v) +{ + for (int n = 0; n < 30; n++) { + if ((1 << n) >= v) + return 1 << n; + } + return 0; +} -- cgit v1.2.3