1 /* libFLAC - Free Lossless Audio Codec library 2 * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * - Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 11 * - Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * - Neither the name of the Xiph.org Foundation nor the names of its 16 * contributors may be used to endorse or promote products derived from 17 * this software without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR 23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 26 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 27 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32 #if HAVE_CONFIG_H 33 # include <config.h> 34 #endif 35 36 #include <math.h> 37 #include <string.h> 38 #include "private/bitmath.h" 39 #include "private/fixed.h" 40 #include "FLAC/assert.h" 41 42 #ifndef M_LN2 43 /* math.h in VC++ doesn't seem to have this (how Microsoft is that?) */ 44 #define M_LN2 0.69314718055994530942 45 #endif 46 47 #ifdef min 48 #undef min 49 #endif 50 #define min(x,y) ((x) < (y)? (x) : (y)) 51 52 #ifdef local_abs 53 #undef local_abs 54 #endif 55 #define local_abs(x) ((unsigned)((x)<0? -(x) : (x))) 56 57 #ifdef FLAC__INTEGER_ONLY_LIBRARY 58 /* rbps stands for residual bits per sample 59 * 60 * (ln(2) * err) 61 * rbps = log (-----------) 62 * 2 ( n ) 63 */ 64 static FLAC__fixedpoint local__compute_rbps_integerized(FLAC__uint32 err, FLAC__uint32 n) 65 { 66 FLAC__uint32 rbps; 67 unsigned bits; /* the number of bits required to represent a number */ 68 int fracbits; /* the number of bits of rbps that comprise the fractional part */ 69 70 FLAC__ASSERT(sizeof(rbps) == sizeof(FLAC__fixedpoint)); 71 FLAC__ASSERT(err > 0); 72 FLAC__ASSERT(n > 0); 73 74 FLAC__ASSERT(n <= FLAC__MAX_BLOCK_SIZE); 75 if(err <= n) 76 return 0; 77 /* 78 * The above two things tell us 1) n fits in 16 bits; 2) err/n > 1. 79 * These allow us later to know we won't lose too much precision in the 80 * fixed-point division (err<<fracbits)/n. 81 */ 82 83 fracbits = (8*sizeof(err)) - (FLAC__bitmath_ilog2(err)+1); 84 85 err <<= fracbits; 86 err /= n; 87 /* err now holds err/n with fracbits fractional bits */ 88 89 /* 90 * Whittle err down to 16 bits max. 16 significant bits is enough for 91 * our purposes. 92 */ 93 FLAC__ASSERT(err > 0); 94 bits = FLAC__bitmath_ilog2(err)+1; 95 if(bits > 16) { 96 err >>= (bits-16); 97 fracbits -= (bits-16); 98 } 99 rbps = (FLAC__uint32)err; 100 101 /* Multiply by fixed-point version of ln(2), with 16 fractional bits */ 102 rbps *= FLAC__FP_LN2; 103 fracbits += 16; 104 FLAC__ASSERT(fracbits >= 0); 105 106 /* FLAC__fixedpoint_log2 requires fracbits%4 to be 0 */ 107 { 108 const int f = fracbits & 3; 109 if(f) { 110 rbps >>= f; 111 fracbits -= f; 112 } 113 } 114 115 rbps = FLAC__fixedpoint_log2(rbps, fracbits, (unsigned)(-1)); 116 117 if(rbps == 0) 118 return 0; 119 120 /* 121 * The return value must have 16 fractional bits. Since the whole part 122 * of the base-2 log of a 32 bit number must fit in 5 bits, and fracbits 123 * must be >= -3, these assertion allows us to be able to shift rbps 124 * left if necessary to get 16 fracbits without losing any bits of the 125 * whole part of rbps. 126 * 127 * There is a slight chance due to accumulated error that the whole part 128 * will require 6 bits, so we use 6 in the assertion. Really though as 129 * long as it fits in 13 bits (32 - (16 - (-3))) we are fine. 130 */ 131 FLAC__ASSERT((int)FLAC__bitmath_ilog2(rbps)+1 <= fracbits + 6); 132 FLAC__ASSERT(fracbits >= -3); 133 134 /* now shift the decimal point into place */ 135 if(fracbits < 16) 136 return rbps << (16-fracbits); 137 else if(fracbits > 16) 138 return rbps >> (fracbits-16); 139 else 140 return rbps; 141 } 142 143 static FLAC__fixedpoint local__compute_rbps_wide_integerized(FLAC__uint64 err, FLAC__uint32 n) 144 { 145 FLAC__uint32 rbps; 146 unsigned bits; /* the number of bits required to represent a number */ 147 int fracbits; /* the number of bits of rbps that comprise the fractional part */ 148 149 FLAC__ASSERT(sizeof(rbps) == sizeof(FLAC__fixedpoint)); 150 FLAC__ASSERT(err > 0); 151 FLAC__ASSERT(n > 0); 152 153 FLAC__ASSERT(n <= FLAC__MAX_BLOCK_SIZE); 154 if(err <= n) 155 return 0; 156 /* 157 * The above two things tell us 1) n fits in 16 bits; 2) err/n > 1. 158 * These allow us later to know we won't lose too much precision in the 159 * fixed-point division (err<<fracbits)/n. 160 */ 161 162 fracbits = (8*sizeof(err)) - (FLAC__bitmath_ilog2_wide(err)+1); 163 164 err <<= fracbits; 165 err /= n; 166 /* err now holds err/n with fracbits fractional bits */ 167 168 /* 169 * Whittle err down to 16 bits max. 16 significant bits is enough for 170 * our purposes. 171 */ 172 FLAC__ASSERT(err > 0); 173 bits = FLAC__bitmath_ilog2_wide(err)+1; 174 if(bits > 16) { 175 err >>= (bits-16); 176 fracbits -= (bits-16); 177 } 178 rbps = (FLAC__uint32)err; 179 180 /* Multiply by fixed-point version of ln(2), with 16 fractional bits */ 181 rbps *= FLAC__FP_LN2; 182 fracbits += 16; 183 FLAC__ASSERT(fracbits >= 0); 184 185 /* FLAC__fixedpoint_log2 requires fracbits%4 to be 0 */ 186 { 187 const int f = fracbits & 3; 188 if(f) { 189 rbps >>= f; 190 fracbits -= f; 191 } 192 } 193 194 rbps = FLAC__fixedpoint_log2(rbps, fracbits, (unsigned)(-1)); 195 196 if(rbps == 0) 197 return 0; 198 199 /* 200 * The return value must have 16 fractional bits. Since the whole part 201 * of the base-2 log of a 32 bit number must fit in 5 bits, and fracbits 202 * must be >= -3, these assertion allows us to be able to shift rbps 203 * left if necessary to get 16 fracbits without losing any bits of the 204 * whole part of rbps. 205 * 206 * There is a slight chance due to accumulated error that the whole part 207 * will require 6 bits, so we use 6 in the assertion. Really though as 208 * long as it fits in 13 bits (32 - (16 - (-3))) we are fine. 209 */ 210 FLAC__ASSERT((int)FLAC__bitmath_ilog2(rbps)+1 <= fracbits + 6); 211 FLAC__ASSERT(fracbits >= -3); 212 213 /* now shift the decimal point into place */ 214 if(fracbits < 16) 215 return rbps << (16-fracbits); 216 else if(fracbits > 16) 217 return rbps >> (fracbits-16); 218 else 219 return rbps; 220 } 221 #endif 222 223 #ifndef FLAC__INTEGER_ONLY_LIBRARY 224 unsigned FLAC__fixed_compute_best_predictor(const FLAC__int32 data[], unsigned data_len, FLAC__float residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]) 225 #else 226 unsigned FLAC__fixed_compute_best_predictor(const FLAC__int32 data[], unsigned data_len, FLAC__fixedpoint residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]) 227 #endif 228 { 229 FLAC__int32 last_error_0 = data[-1]; 230 FLAC__int32 last_error_1 = data[-1] - data[-2]; 231 FLAC__int32 last_error_2 = last_error_1 - (data[-2] - data[-3]); 232 FLAC__int32 last_error_3 = last_error_2 - (data[-2] - 2*data[-3] + data[-4]); 233 FLAC__int32 error, save; 234 FLAC__uint32 total_error_0 = 0, total_error_1 = 0, total_error_2 = 0, total_error_3 = 0, total_error_4 = 0; 235 unsigned i, order; 236 237 for(i = 0; i < data_len; i++) { 238 error = data[i] ; total_error_0 += local_abs(error); save = error; 239 error -= last_error_0; total_error_1 += local_abs(error); last_error_0 = save; save = error; 240 error -= last_error_1; total_error_2 += local_abs(error); last_error_1 = save; save = error; 241 error -= last_error_2; total_error_3 += local_abs(error); last_error_2 = save; save = error; 242 error -= last_error_3; total_error_4 += local_abs(error); last_error_3 = save; 243 } 244 245 if(total_error_0 < min(min(min(total_error_1, total_error_2), total_error_3), total_error_4)) 246 order = 0; 247 else if(total_error_1 < min(min(total_error_2, total_error_3), total_error_4)) 248 order = 1; 249 else if(total_error_2 < min(total_error_3, total_error_4)) 250 order = 2; 251 else if(total_error_3 < total_error_4) 252 order = 3; 253 else 254 order = 4; 255 256 /* Estimate the expected number of bits per residual signal sample. */ 257 /* 'total_error*' is linearly related to the variance of the residual */ 258 /* signal, so we use it directly to compute E(|x|) */ 259 FLAC__ASSERT(data_len > 0 || total_error_0 == 0); 260 FLAC__ASSERT(data_len > 0 || total_error_1 == 0); 261 FLAC__ASSERT(data_len > 0 || total_error_2 == 0); 262 FLAC__ASSERT(data_len > 0 || total_error_3 == 0); 263 FLAC__ASSERT(data_len > 0 || total_error_4 == 0); 264 #ifndef FLAC__INTEGER_ONLY_LIBRARY 265 residual_bits_per_sample[0] = (FLAC__float)((total_error_0 > 0) ? log(M_LN2 * (FLAC__double)total_error_0 / (FLAC__double)data_len) / M_LN2 : 0.0); 266 residual_bits_per_sample[1] = (FLAC__float)((total_error_1 > 0) ? log(M_LN2 * (FLAC__double)total_error_1 / (FLAC__double)data_len) / M_LN2 : 0.0); 267 residual_bits_per_sample[2] = (FLAC__float)((total_error_2 > 0) ? log(M_LN2 * (FLAC__double)total_error_2 / (FLAC__double)data_len) / M_LN2 : 0.0); 268 residual_bits_per_sample[3] = (FLAC__float)((total_error_3 > 0) ? log(M_LN2 * (FLAC__double)total_error_3 / (FLAC__double)data_len) / M_LN2 : 0.0); 269 residual_bits_per_sample[4] = (FLAC__float)((total_error_4 > 0) ? log(M_LN2 * (FLAC__double)total_error_4 / (FLAC__double)data_len) / M_LN2 : 0.0); 270 #else 271 residual_bits_per_sample[0] = (total_error_0 > 0) ? local__compute_rbps_integerized(total_error_0, data_len) : 0; 272 residual_bits_per_sample[1] = (total_error_1 > 0) ? local__compute_rbps_integerized(total_error_1, data_len) : 0; 273 residual_bits_per_sample[2] = (total_error_2 > 0) ? local__compute_rbps_integerized(total_error_2, data_len) : 0; 274 residual_bits_per_sample[3] = (total_error_3 > 0) ? local__compute_rbps_integerized(total_error_3, data_len) : 0; 275 residual_bits_per_sample[4] = (total_error_4 > 0) ? local__compute_rbps_integerized(total_error_4, data_len) : 0; 276 #endif 277 278 return order; 279 } 280 281 #ifndef FLAC__INTEGER_ONLY_LIBRARY 282 unsigned FLAC__fixed_compute_best_predictor_wide(const FLAC__int32 data[], unsigned data_len, FLAC__float residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]) 283 #else 284 unsigned FLAC__fixed_compute_best_predictor_wide(const FLAC__int32 data[], unsigned data_len, FLAC__fixedpoint residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]) 285 #endif 286 { 287 FLAC__int32 last_error_0 = data[-1]; 288 FLAC__int32 last_error_1 = data[-1] - data[-2]; 289 FLAC__int32 last_error_2 = last_error_1 - (data[-2] - data[-3]); 290 FLAC__int32 last_error_3 = last_error_2 - (data[-2] - 2*data[-3] + data[-4]); 291 FLAC__int32 error, save; 292 /* total_error_* are 64-bits to avoid overflow when encoding 293 * erratic signals when the bits-per-sample and blocksize are 294 * large. 295 */ 296 FLAC__uint64 total_error_0 = 0, total_error_1 = 0, total_error_2 = 0, total_error_3 = 0, total_error_4 = 0; 297 unsigned i, order; 298 299 for(i = 0; i < data_len; i++) { 300 error = data[i] ; total_error_0 += local_abs(error); save = error; 301 error -= last_error_0; total_error_1 += local_abs(error); last_error_0 = save; save = error; 302 error -= last_error_1; total_error_2 += local_abs(error); last_error_1 = save; save = error; 303 error -= last_error_2; total_error_3 += local_abs(error); last_error_2 = save; save = error; 304 error -= last_error_3; total_error_4 += local_abs(error); last_error_3 = save; 305 } 306 307 if(total_error_0 < min(min(min(total_error_1, total_error_2), total_error_3), total_error_4)) 308 order = 0; 309 else if(total_error_1 < min(min(total_error_2, total_error_3), total_error_4)) 310 order = 1; 311 else if(total_error_2 < min(total_error_3, total_error_4)) 312 order = 2; 313 else if(total_error_3 < total_error_4) 314 order = 3; 315 else 316 order = 4; 317 318 /* Estimate the expected number of bits per residual signal sample. */ 319 /* 'total_error*' is linearly related to the variance of the residual */ 320 /* signal, so we use it directly to compute E(|x|) */ 321 FLAC__ASSERT(data_len > 0 || total_error_0 == 0); 322 FLAC__ASSERT(data_len > 0 || total_error_1 == 0); 323 FLAC__ASSERT(data_len > 0 || total_error_2 == 0); 324 FLAC__ASSERT(data_len > 0 || total_error_3 == 0); 325 FLAC__ASSERT(data_len > 0 || total_error_4 == 0); 326 #ifndef FLAC__INTEGER_ONLY_LIBRARY 327 #if defined _MSC_VER || defined __MINGW32__ 328 /* with MSVC you have to spoon feed it the casting */ 329 residual_bits_per_sample[0] = (FLAC__float)((total_error_0 > 0) ? log(M_LN2 * (FLAC__double)(FLAC__int64)total_error_0 / (FLAC__double)data_len) / M_LN2 : 0.0); 330 residual_bits_per_sample[1] = (FLAC__float)((total_error_1 > 0) ? log(M_LN2 * (FLAC__double)(FLAC__int64)total_error_1 / (FLAC__double)data_len) / M_LN2 : 0.0); 331 residual_bits_per_sample[2] = (FLAC__float)((total_error_2 > 0) ? log(M_LN2 * (FLAC__double)(FLAC__int64)total_error_2 / (FLAC__double)data_len) / M_LN2 : 0.0); 332 residual_bits_per_sample[3] = (FLAC__float)((total_error_3 > 0) ? log(M_LN2 * (FLAC__double)(FLAC__int64)total_error_3 / (FLAC__double)data_len) / M_LN2 : 0.0); 333 residual_bits_per_sample[4] = (FLAC__float)((total_error_4 > 0) ? log(M_LN2 * (FLAC__double)(FLAC__int64)total_error_4 / (FLAC__double)data_len) / M_LN2 : 0.0); 334 #else 335 residual_bits_per_sample[0] = (FLAC__float)((total_error_0 > 0) ? log(M_LN2 * (FLAC__double)total_error_0 / (FLAC__double)data_len) / M_LN2 : 0.0); 336 residual_bits_per_sample[1] = (FLAC__float)((total_error_1 > 0) ? log(M_LN2 * (FLAC__double)total_error_1 / (FLAC__double)data_len) / M_LN2 : 0.0); 337 residual_bits_per_sample[2] = (FLAC__float)((total_error_2 > 0) ? log(M_LN2 * (FLAC__double)total_error_2 / (FLAC__double)data_len) / M_LN2 : 0.0); 338 residual_bits_per_sample[3] = (FLAC__float)((total_error_3 > 0) ? log(M_LN2 * (FLAC__double)total_error_3 / (FLAC__double)data_len) / M_LN2 : 0.0); 339 residual_bits_per_sample[4] = (FLAC__float)((total_error_4 > 0) ? log(M_LN2 * (FLAC__double)total_error_4 / (FLAC__double)data_len) / M_LN2 : 0.0); 340 #endif 341 #else 342 residual_bits_per_sample[0] = (total_error_0 > 0) ? local__compute_rbps_wide_integerized(total_error_0, data_len) : 0; 343 residual_bits_per_sample[1] = (total_error_1 > 0) ? local__compute_rbps_wide_integerized(total_error_1, data_len) : 0; 344 residual_bits_per_sample[2] = (total_error_2 > 0) ? local__compute_rbps_wide_integerized(total_error_2, data_len) : 0; 345 residual_bits_per_sample[3] = (total_error_3 > 0) ? local__compute_rbps_wide_integerized(total_error_3, data_len) : 0; 346 residual_bits_per_sample[4] = (total_error_4 > 0) ? local__compute_rbps_wide_integerized(total_error_4, data_len) : 0; 347 #endif 348 349 return order; 350 } 351 352 void FLAC__fixed_compute_residual(const FLAC__int32 data[], unsigned data_len, unsigned order, FLAC__int32 residual[]) 353 { 354 const int idata_len = (int)data_len; 355 int i; 356 357 switch(order) { 358 case 0: 359 FLAC__ASSERT(sizeof(residual[0]) == sizeof(data[0])); 360 memcpy(residual, data, sizeof(residual[0])*data_len); 361 break; 362 case 1: 363 for(i = 0; i < idata_len; i++) 364 residual[i] = data[i] - data[i-1]; 365 break; 366 case 2: 367 for(i = 0; i < idata_len; i++) 368 #if 1 /* OPT: may be faster with some compilers on some systems */ 369 residual[i] = data[i] - (data[i-1] << 1) + data[i-2]; 370 #else 371 residual[i] = data[i] - 2*data[i-1] + data[i-2]; 372 #endif 373 break; 374 case 3: 375 for(i = 0; i < idata_len; i++) 376 #if 1 /* OPT: may be faster with some compilers on some systems */ 377 residual[i] = data[i] - (((data[i-1]-data[i-2])<<1) + (data[i-1]-data[i-2])) - data[i-3]; 378 #else 379 residual[i] = data[i] - 3*data[i-1] + 3*data[i-2] - data[i-3]; 380 #endif 381 break; 382 case 4: 383 for(i = 0; i < idata_len; i++) 384 #if 1 /* OPT: may be faster with some compilers on some systems */ 385 residual[i] = data[i] - ((data[i-1]+data[i-3])<<2) + ((data[i-2]<<2) + (data[i-2]<<1)) + data[i-4]; 386 #else 387 residual[i] = data[i] - 4*data[i-1] + 6*data[i-2] - 4*data[i-3] + data[i-4]; 388 #endif 389 break; 390 default: 391 FLAC__ASSERT(0); 392 } 393 } 394 395 void FLAC__fixed_restore_signal(const FLAC__int32 residual[], unsigned data_len, unsigned order, FLAC__int32 data[]) 396 { 397 int i, idata_len = (int)data_len; 398 399 switch(order) { 400 case 0: 401 FLAC__ASSERT(sizeof(residual[0]) == sizeof(data[0])); 402 memcpy(data, residual, sizeof(residual[0])*data_len); 403 break; 404 case 1: 405 for(i = 0; i < idata_len; i++) 406 data[i] = residual[i] + data[i-1]; 407 break; 408 case 2: 409 for(i = 0; i < idata_len; i++) 410 #if 1 /* OPT: may be faster with some compilers on some systems */ 411 data[i] = residual[i] + (data[i-1]<<1) - data[i-2]; 412 #else 413 data[i] = residual[i] + 2*data[i-1] - data[i-2]; 414 #endif 415 break; 416 case 3: 417 for(i = 0; i < idata_len; i++) 418 #if 1 /* OPT: may be faster with some compilers on some systems */ 419 data[i] = residual[i] + (((data[i-1]-data[i-2])<<1) + (data[i-1]-data[i-2])) + data[i-3]; 420 #else 421 data[i] = residual[i] + 3*data[i-1] - 3*data[i-2] + data[i-3]; 422 #endif 423 break; 424 case 4: 425 for(i = 0; i < idata_len; i++) 426 #if 1 /* OPT: may be faster with some compilers on some systems */ 427 data[i] = residual[i] + ((data[i-1]+data[i-3])<<2) - ((data[i-2]<<2) + (data[i-2]<<1)) - data[i-4]; 428 #else 429 data[i] = residual[i] + 4*data[i-1] - 6*data[i-2] + 4*data[i-3] - data[i-4]; 430 #endif 431 break; 432 default: 433 FLAC__ASSERT(0); 434 } 435 } 436