1*b9df5ad1SAndroid Build Coastguard Worker /* 2*b9df5ad1SAndroid Build Coastguard Worker * Copyright (C) 2012 The Android Open Source Project 3*b9df5ad1SAndroid Build Coastguard Worker * 4*b9df5ad1SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*b9df5ad1SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*b9df5ad1SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*b9df5ad1SAndroid Build Coastguard Worker * 8*b9df5ad1SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*b9df5ad1SAndroid Build Coastguard Worker * 10*b9df5ad1SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*b9df5ad1SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*b9df5ad1SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*b9df5ad1SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*b9df5ad1SAndroid Build Coastguard Worker * limitations under the License. 15*b9df5ad1SAndroid Build Coastguard Worker */ 16*b9df5ad1SAndroid Build Coastguard Worker 17*b9df5ad1SAndroid Build Coastguard Worker #include <audio_utils/roundup.h> 18*b9df5ad1SAndroid Build Coastguard Worker roundup(unsigned v)19*b9df5ad1SAndroid Build Coastguard Workerunsigned roundup(unsigned v) 20*b9df5ad1SAndroid Build Coastguard Worker { 21*b9df5ad1SAndroid Build Coastguard Worker // __builtin_clz is undefined for zero input 22*b9df5ad1SAndroid Build Coastguard Worker if (v == 0) { 23*b9df5ad1SAndroid Build Coastguard Worker v = 1; 24*b9df5ad1SAndroid Build Coastguard Worker } 25*b9df5ad1SAndroid Build Coastguard Worker int lz = __builtin_clz((int) v); 26*b9df5ad1SAndroid Build Coastguard Worker unsigned rounded = ((unsigned) 0x80000000) >> lz; 27*b9df5ad1SAndroid Build Coastguard Worker // 0x800000001 and higher are actually rounded _down_ to prevent overflow 28*b9df5ad1SAndroid Build Coastguard Worker if (v > rounded && lz > 0) { 29*b9df5ad1SAndroid Build Coastguard Worker rounded <<= 1; 30*b9df5ad1SAndroid Build Coastguard Worker } 31*b9df5ad1SAndroid Build Coastguard Worker return rounded; 32*b9df5ad1SAndroid Build Coastguard Worker } 33