1 /* ----------------------------------------------------------------------------- 2 Software License for The Fraunhofer FDK AAC Codec Library for Android 3 4 Copyright 1995 - 2018 Fraunhofer-Gesellschaft zur Frderung der angewandten 5 Forschung e.V. All rights reserved. 6 7 1. INTRODUCTION 8 The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software 9 that implements the MPEG Advanced Audio Coding ("AAC") encoding and decoding 10 scheme for digital audio. This FDK AAC Codec software is intended to be used on 11 a wide variety of Android devices. 12 13 AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient 14 general perceptual audio codecs. AAC-ELD is considered the best-performing 15 full-bandwidth communications codec by independent studies and is widely 16 deployed. AAC has been standardized by ISO and IEC as part of the MPEG 17 specifications. 18 19 Patent licenses for necessary patent claims for the FDK AAC Codec (including 20 those of Fraunhofer) may be obtained through Via Licensing 21 (www.vialicensing.com) or through the respective patent owners individually for 22 the purpose of encoding or decoding bit streams in products that are compliant 23 with the ISO/IEC MPEG audio standards. Please note that most manufacturers of 24 Android devices already license these patent claims through Via Licensing or 25 directly from the patent owners, and therefore FDK AAC Codec software may 26 already be covered under those patent licenses when it is used for those 27 licensed purposes only. 28 29 Commercially-licensed AAC software libraries, including floating-point versions 30 with enhanced sound quality, are also available from Fraunhofer. Users are 31 encouraged to check the Fraunhofer website for additional applications 32 information and documentation. 33 34 2. COPYRIGHT LICENSE 35 36 Redistribution and use in source and binary forms, with or without modification, 37 are permitted without payment of copyright license fees provided that you 38 satisfy the following conditions: 39 40 You must retain the complete text of this software license in redistributions of 41 the FDK AAC Codec or your modifications thereto in source code form. 42 43 You must retain the complete text of this software license in the documentation 44 and/or other materials provided with redistributions of the FDK AAC Codec or 45 your modifications thereto in binary form. You must make available free of 46 charge copies of the complete source code of the FDK AAC Codec and your 47 modifications thereto to recipients of copies in binary form. 48 49 The name of Fraunhofer may not be used to endorse or promote products derived 50 from this library without prior written permission. 51 52 You may not charge copyright license fees for anyone to use, copy or distribute 53 the FDK AAC Codec software or your modifications thereto. 54 55 Your modified versions of the FDK AAC Codec must carry prominent notices stating 56 that you changed the software and the date of any change. For modified versions 57 of the FDK AAC Codec, the term "Fraunhofer FDK AAC Codec Library for Android" 58 must be replaced by the term "Third-Party Modified Version of the Fraunhofer FDK 59 AAC Codec Library for Android." 60 61 3. NO PATENT LICENSE 62 63 NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without 64 limitation the patents of Fraunhofer, ARE GRANTED BY THIS SOFTWARE LICENSE. 65 Fraunhofer provides no warranty of patent non-infringement with respect to this 66 software. 67 68 You may use this FDK AAC Codec software or modifications thereto only for 69 purposes that are authorized by appropriate patent licenses. 70 71 4. DISCLAIMER 72 73 This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright 74 holders and contributors "AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, 75 including but not limited to the implied warranties of merchantability and 76 fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 77 CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, 78 or consequential damages, including but not limited to procurement of substitute 79 goods or services; loss of use, data, or profits, or business interruption, 80 however caused and on any theory of liability, whether in contract, strict 81 liability, or tort (including negligence), arising in any way out of the use of 82 this software, even if advised of the possibility of such damage. 83 84 5. CONTACT INFORMATION 85 86 Fraunhofer Institute for Integrated Circuits IIS 87 Attention: Audio and Multimedia Departments - FDK AAC LL 88 Am Wolfsmantel 33 89 91058 Erlangen, Germany 90 91 www.iis.fraunhofer.de/amm 92 amm-info (at) iis.fraunhofer.de 93 ----------------------------------------------------------------------------- */ 94 95 /******************* Library for basic calculation routines ******************** 96 97 Author(s): Stefan Gewinner 98 99 Description: fixed point multiplication 100 101 *******************************************************************************/ 102 103 #if !defined(FIXMUL_H) 104 #define FIXMUL_H 105 106 #include "FDK_archdef.h" 107 #include "machine_type.h" 108 109 #if defined(__arm__) 110 #include "arm/fixmul_arm.h" 111 112 #elif defined(__mips__) 113 #include "mips/fixmul_mips.h" 114 115 #elif defined(__x86__) 116 #include "x86/fixmul_x86.h" 117 118 #endif /* all cores */ 119 120 /************************************************************************* 121 ************************************************************************* 122 Software fallbacks for missing functions 123 ************************************************************************** 124 **************************************************************************/ 125 126 #if !defined(FUNCTION_fixmuldiv2_DD) 127 #define FUNCTION_fixmuldiv2_DD 128 inline LONG fixmuldiv2_DD(const LONG a, const LONG b) { 129 return (LONG)((((INT64)a) * b) >> 32); 130 } 131 #endif 132 133 #if !defined(FUNCTION_fixmuldiv2BitExact_DD) 134 #define FUNCTION_fixmuldiv2BitExact_DD 135 inline LONG fixmuldiv2BitExact_DD(const LONG a, const LONG b) { 136 return (LONG)((((INT64)a) * b) >> 32); 137 } 138 #endif 139 140 #if !defined(FUNCTION_fixmul_DD) 141 #define FUNCTION_fixmul_DD 142 inline LONG fixmul_DD(const LONG a, const LONG b) { 143 return fixmuldiv2_DD(a, b) << 1; 144 } 145 #endif 146 147 #if !defined(FUNCTION_fixmulBitExact_DD) 148 #define FUNCTION_fixmulBitExact_DD 149 inline LONG fixmulBitExact_DD(const LONG a, const LONG b) { 150 return ((LONG)((((INT64)a) * b) >> 32)) << 1; 151 } 152 #endif 153 154 #if !defined(FUNCTION_fixmuldiv2_SS) 155 #define FUNCTION_fixmuldiv2_SS 156 inline LONG fixmuldiv2_SS(const SHORT a, const SHORT b) { 157 return ((LONG)a * b); 158 } 159 #endif 160 161 #if !defined(FUNCTION_fixmul_SS) 162 #define FUNCTION_fixmul_SS 163 inline LONG fixmul_SS(const SHORT a, const SHORT b) { return (a * b) << 1; } 164 #endif 165 166 #if !defined(FUNCTION_fixmuldiv2_SD) 167 #define FUNCTION_fixmuldiv2_SD 168 inline LONG fixmuldiv2_SD(const SHORT a, const LONG b) 169 #ifdef FUNCTION_fixmuldiv2_DS 170 { 171 return fixmuldiv2_DS(b, a); 172 } 173 #else 174 { 175 return fixmuldiv2_DD(FX_SGL2FX_DBL(a), b); 176 } 177 #endif 178 #endif 179 180 #if !defined(FUNCTION_fixmuldiv2_DS) 181 #define FUNCTION_fixmuldiv2_DS 182 inline LONG fixmuldiv2_DS(const LONG a, const SHORT b) 183 #ifdef FUNCTION_fixmuldiv2_SD 184 { 185 return fixmuldiv2_SD(b, a); 186 } 187 #else 188 { 189 return fixmuldiv2_DD(a, FX_SGL2FX_DBL(b)); 190 } 191 #endif 192 #endif 193 194 #if !defined(FUNCTION_fixmuldiv2BitExact_SD) 195 #define FUNCTION_fixmuldiv2BitExact_SD 196 inline LONG fixmuldiv2BitExact_SD(const SHORT a, const LONG b) 197 #ifdef FUNCTION_fixmuldiv2BitExact_DS 198 { 199 return fixmuldiv2BitExact_DS(b, a); 200 } 201 #else 202 { 203 return (LONG)((((INT64)a) * b) >> 16); 204 } 205 #endif 206 #endif 207 208 #if !defined(FUNCTION_fixmuldiv2BitExact_DS) 209 #define FUNCTION_fixmuldiv2BitExact_DS 210 inline LONG fixmuldiv2BitExact_DS(const LONG a, const SHORT b) 211 #ifdef FUNCTION_fixmuldiv2BitExact_SD 212 { 213 return fixmuldiv2BitExact_SD(b, a); 214 } 215 #else 216 { 217 return (LONG)((((INT64)a) * b) >> 16); 218 } 219 #endif 220 #endif 221 222 #if !defined(FUNCTION_fixmul_SD) 223 #define FUNCTION_fixmul_SD 224 inline LONG fixmul_SD(const SHORT a, const LONG b) { 225 #ifdef FUNCTION_fixmul_DS 226 return fixmul_DS(b, a); 227 #else 228 return fixmuldiv2_SD(a, b) << 1; 229 #endif 230 } 231 #endif 232 233 #if !defined(FUNCTION_fixmul_DS) 234 #define FUNCTION_fixmul_DS 235 inline LONG fixmul_DS(const LONG a, const SHORT b) { 236 #ifdef FUNCTION_fixmul_SD 237 return fixmul_SD(b, a); 238 #else 239 return fixmuldiv2_DS(a, b) << 1; 240 #endif 241 } 242 #endif 243 244 #if !defined(FUNCTION_fixmulBitExact_SD) 245 #define FUNCTION_fixmulBitExact_SD 246 inline LONG fixmulBitExact_SD(const SHORT a, const LONG b) 247 #ifdef FUNCTION_fixmulBitExact_DS 248 { 249 return fixmulBitExact_DS(b, a); 250 } 251 #else 252 { 253 return (LONG)(((((INT64)a) * b) >> 16) << 1); 254 } 255 #endif 256 #endif 257 258 #if !defined(FUNCTION_fixmulBitExact_DS) 259 #define FUNCTION_fixmulBitExact_DS 260 inline LONG fixmulBitExact_DS(const LONG a, const SHORT b) 261 #ifdef FUNCTION_fixmulBitExact_SD 262 { 263 return fixmulBitExact_SD(b, a); 264 } 265 #else 266 { 267 return (LONG)(((((INT64)a) * b) >> 16) << 1); 268 } 269 #endif 270 #endif 271 272 #if !defined(FUNCTION_fixpow2div2_D) 273 #define FUNCTION_fixpow2div2_D 274 inline LONG fixpow2div2_D(const LONG a) { return fixmuldiv2_DD(a, a); } 275 #endif 276 277 #if !defined(FUNCTION_fixpow2_D) 278 #define FUNCTION_fixpow2_D 279 inline LONG fixpow2_D(const LONG a) { return fixpow2div2_D(a) << 1; } 280 #endif 281 282 #if !defined(FUNCTION_fixpow2div2_S) 283 #define FUNCTION_fixpow2div2_S 284 inline LONG fixpow2div2_S(const SHORT a) { return fixmuldiv2_SS(a, a); } 285 #endif 286 287 #if !defined(FUNCTION_fixpow2_S) 288 #define FUNCTION_fixpow2_S 289 inline LONG fixpow2_S(const SHORT a) { 290 LONG result = fixpow2div2_S(a) << 1; 291 return result ^ (result >> 31); 292 } 293 #endif 294 295 #endif /* FIXMUL_H */ 296