primitives.c revision 632e0c016c9a518b36f09988b740b3bc1199c3e4
1632e0c016c9a518b36f09988b740b3bc1199c3e4Glenn Kasten/* 2632e0c016c9a518b36f09988b740b3bc1199c3e4Glenn Kasten * Copyright (C) 2011 The Android Open Source Project 3632e0c016c9a518b36f09988b740b3bc1199c3e4Glenn Kasten * 4632e0c016c9a518b36f09988b740b3bc1199c3e4Glenn Kasten * Licensed under the Apache License, Version 2.0 (the "License"); 5632e0c016c9a518b36f09988b740b3bc1199c3e4Glenn Kasten * you may not use this file except in compliance with the License. 6632e0c016c9a518b36f09988b740b3bc1199c3e4Glenn Kasten * You may obtain a copy of the License at 7632e0c016c9a518b36f09988b740b3bc1199c3e4Glenn Kasten * 8632e0c016c9a518b36f09988b740b3bc1199c3e4Glenn Kasten * http://www.apache.org/licenses/LICENSE-2.0 9632e0c016c9a518b36f09988b740b3bc1199c3e4Glenn Kasten * 10632e0c016c9a518b36f09988b740b3bc1199c3e4Glenn Kasten * Unless required by applicable law or agreed to in writing, software 11632e0c016c9a518b36f09988b740b3bc1199c3e4Glenn Kasten * distributed under the License is distributed on an "AS IS" BASIS, 12632e0c016c9a518b36f09988b740b3bc1199c3e4Glenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13632e0c016c9a518b36f09988b740b3bc1199c3e4Glenn Kasten * See the License for the specific language governing permissions and 14632e0c016c9a518b36f09988b740b3bc1199c3e4Glenn Kasten * limitations under the License. 15632e0c016c9a518b36f09988b740b3bc1199c3e4Glenn Kasten */ 16632e0c016c9a518b36f09988b740b3bc1199c3e4Glenn Kasten 17632e0c016c9a518b36f09988b740b3bc1199c3e4Glenn Kasten#include <audio_utils/primitives.h> 18632e0c016c9a518b36f09988b740b3bc1199c3e4Glenn Kasten 19632e0c016c9a518b36f09988b740b3bc1199c3e4Glenn Kastenvoid ditherAndClamp(int32_t* out, int32_t const *sums, size_t c) 20632e0c016c9a518b36f09988b740b3bc1199c3e4Glenn Kasten{ 21632e0c016c9a518b36f09988b740b3bc1199c3e4Glenn Kasten size_t i; 22632e0c016c9a518b36f09988b740b3bc1199c3e4Glenn Kasten for (i=0 ; i<c ; i++) { 23632e0c016c9a518b36f09988b740b3bc1199c3e4Glenn Kasten int32_t l = *sums++; 24632e0c016c9a518b36f09988b740b3bc1199c3e4Glenn Kasten int32_t r = *sums++; 25632e0c016c9a518b36f09988b740b3bc1199c3e4Glenn Kasten int32_t nl = l >> 12; 26632e0c016c9a518b36f09988b740b3bc1199c3e4Glenn Kasten int32_t nr = r >> 12; 27632e0c016c9a518b36f09988b740b3bc1199c3e4Glenn Kasten l = clamp16(nl); 28632e0c016c9a518b36f09988b740b3bc1199c3e4Glenn Kasten r = clamp16(nr); 29632e0c016c9a518b36f09988b740b3bc1199c3e4Glenn Kasten *out++ = (r<<16) | (l & 0xFFFF); 30632e0c016c9a518b36f09988b740b3bc1199c3e4Glenn Kasten } 31632e0c016c9a518b36f09988b740b3bc1199c3e4Glenn Kasten} 32