annotate src/libmad-0.15.1b/layer12.c @ 83:ae30d91d2ffe

Replace these with versions built using an older toolset (so as to avoid ABI compatibilities when linking on Ubuntu 14.04 for packaging purposes)
author Chris Cannam
date Fri, 07 Feb 2020 11:51:13 +0000
parents c7265573341e
children
rev   line source
Chris@0 1 /*
Chris@0 2 * libmad - MPEG audio decoder library
Chris@0 3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
Chris@0 4 *
Chris@0 5 * This program is free software; you can redistribute it and/or modify
Chris@0 6 * it under the terms of the GNU General Public License as published by
Chris@0 7 * the Free Software Foundation; either version 2 of the License, or
Chris@0 8 * (at your option) any later version.
Chris@0 9 *
Chris@0 10 * This program is distributed in the hope that it will be useful,
Chris@0 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Chris@0 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Chris@0 13 * GNU General Public License for more details.
Chris@0 14 *
Chris@0 15 * You should have received a copy of the GNU General Public License
Chris@0 16 * along with this program; if not, write to the Free Software
Chris@0 17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Chris@0 18 *
Chris@0 19 * $Id: layer12.c,v 1.17 2004/02/05 09:02:39 rob Exp $
Chris@0 20 */
Chris@0 21
Chris@0 22 # ifdef HAVE_CONFIG_H
Chris@0 23 # include "config.h"
Chris@0 24 # endif
Chris@0 25
Chris@0 26 # include "global.h"
Chris@0 27
Chris@0 28 # ifdef HAVE_LIMITS_H
Chris@0 29 # include <limits.h>
Chris@0 30 # else
Chris@0 31 # define CHAR_BIT 8
Chris@0 32 # endif
Chris@0 33
Chris@0 34 # include "fixed.h"
Chris@0 35 # include "bit.h"
Chris@0 36 # include "stream.h"
Chris@0 37 # include "frame.h"
Chris@0 38 # include "layer12.h"
Chris@0 39
Chris@0 40 /*
Chris@0 41 * scalefactor table
Chris@0 42 * used in both Layer I and Layer II decoding
Chris@0 43 */
Chris@0 44 static
Chris@0 45 mad_fixed_t const sf_table[64] = {
Chris@0 46 # include "sf_table.dat"
Chris@0 47 };
Chris@0 48
Chris@0 49 /* --- Layer I ------------------------------------------------------------- */
Chris@0 50
Chris@0 51 /* linear scaling table */
Chris@0 52 static
Chris@0 53 mad_fixed_t const linear_table[14] = {
Chris@0 54 MAD_F(0x15555555), /* 2^2 / (2^2 - 1) == 1.33333333333333 */
Chris@0 55 MAD_F(0x12492492), /* 2^3 / (2^3 - 1) == 1.14285714285714 */
Chris@0 56 MAD_F(0x11111111), /* 2^4 / (2^4 - 1) == 1.06666666666667 */
Chris@0 57 MAD_F(0x10842108), /* 2^5 / (2^5 - 1) == 1.03225806451613 */
Chris@0 58 MAD_F(0x10410410), /* 2^6 / (2^6 - 1) == 1.01587301587302 */
Chris@0 59 MAD_F(0x10204081), /* 2^7 / (2^7 - 1) == 1.00787401574803 */
Chris@0 60 MAD_F(0x10101010), /* 2^8 / (2^8 - 1) == 1.00392156862745 */
Chris@0 61 MAD_F(0x10080402), /* 2^9 / (2^9 - 1) == 1.00195694716243 */
Chris@0 62 MAD_F(0x10040100), /* 2^10 / (2^10 - 1) == 1.00097751710655 */
Chris@0 63 MAD_F(0x10020040), /* 2^11 / (2^11 - 1) == 1.00048851978505 */
Chris@0 64 MAD_F(0x10010010), /* 2^12 / (2^12 - 1) == 1.00024420024420 */
Chris@0 65 MAD_F(0x10008004), /* 2^13 / (2^13 - 1) == 1.00012208521548 */
Chris@0 66 MAD_F(0x10004001), /* 2^14 / (2^14 - 1) == 1.00006103888177 */
Chris@0 67 MAD_F(0x10002000) /* 2^15 / (2^15 - 1) == 1.00003051850948 */
Chris@0 68 };
Chris@0 69
Chris@0 70 /*
Chris@0 71 * NAME: I_sample()
Chris@0 72 * DESCRIPTION: decode one requantized Layer I sample from a bitstream
Chris@0 73 */
Chris@0 74 static
Chris@0 75 mad_fixed_t I_sample(struct mad_bitptr *ptr, unsigned int nb)
Chris@0 76 {
Chris@0 77 mad_fixed_t sample;
Chris@0 78
Chris@0 79 sample = mad_bit_read(ptr, nb);
Chris@0 80
Chris@0 81 /* invert most significant bit, extend sign, then scale to fixed format */
Chris@0 82
Chris@0 83 sample ^= 1 << (nb - 1);
Chris@0 84 sample |= -(sample & (1 << (nb - 1)));
Chris@0 85
Chris@0 86 sample <<= MAD_F_FRACBITS - (nb - 1);
Chris@0 87
Chris@0 88 /* requantize the sample */
Chris@0 89
Chris@0 90 /* s'' = (2^nb / (2^nb - 1)) * (s''' + 2^(-nb + 1)) */
Chris@0 91
Chris@0 92 sample += MAD_F_ONE >> (nb - 1);
Chris@0 93
Chris@0 94 return mad_f_mul(sample, linear_table[nb - 2]);
Chris@0 95
Chris@0 96 /* s' = factor * s'' */
Chris@0 97 /* (to be performed by caller) */
Chris@0 98 }
Chris@0 99
Chris@0 100 /*
Chris@0 101 * NAME: layer->I()
Chris@0 102 * DESCRIPTION: decode a single Layer I frame
Chris@0 103 */
Chris@0 104 int mad_layer_I(struct mad_stream *stream, struct mad_frame *frame)
Chris@0 105 {
Chris@0 106 struct mad_header *header = &frame->header;
Chris@0 107 unsigned int nch, bound, ch, s, sb, nb;
Chris@0 108 unsigned char allocation[2][32], scalefactor[2][32];
Chris@0 109
Chris@0 110 nch = MAD_NCHANNELS(header);
Chris@0 111
Chris@0 112 bound = 32;
Chris@0 113 if (header->mode == MAD_MODE_JOINT_STEREO) {
Chris@0 114 header->flags |= MAD_FLAG_I_STEREO;
Chris@0 115 bound = 4 + header->mode_extension * 4;
Chris@0 116 }
Chris@0 117
Chris@0 118 /* check CRC word */
Chris@0 119
Chris@0 120 if (header->flags & MAD_FLAG_PROTECTION) {
Chris@0 121 header->crc_check =
Chris@0 122 mad_bit_crc(stream->ptr, 4 * (bound * nch + (32 - bound)),
Chris@0 123 header->crc_check);
Chris@0 124
Chris@0 125 if (header->crc_check != header->crc_target &&
Chris@0 126 !(frame->options & MAD_OPTION_IGNORECRC)) {
Chris@0 127 stream->error = MAD_ERROR_BADCRC;
Chris@0 128 return -1;
Chris@0 129 }
Chris@0 130 }
Chris@0 131
Chris@0 132 /* decode bit allocations */
Chris@0 133
Chris@0 134 for (sb = 0; sb < bound; ++sb) {
Chris@0 135 for (ch = 0; ch < nch; ++ch) {
Chris@0 136 nb = mad_bit_read(&stream->ptr, 4);
Chris@0 137
Chris@0 138 if (nb == 15) {
Chris@0 139 stream->error = MAD_ERROR_BADBITALLOC;
Chris@0 140 return -1;
Chris@0 141 }
Chris@0 142
Chris@0 143 allocation[ch][sb] = nb ? nb + 1 : 0;
Chris@0 144 }
Chris@0 145 }
Chris@0 146
Chris@0 147 for (sb = bound; sb < 32; ++sb) {
Chris@0 148 nb = mad_bit_read(&stream->ptr, 4);
Chris@0 149
Chris@0 150 if (nb == 15) {
Chris@0 151 stream->error = MAD_ERROR_BADBITALLOC;
Chris@0 152 return -1;
Chris@0 153 }
Chris@0 154
Chris@0 155 allocation[0][sb] =
Chris@0 156 allocation[1][sb] = nb ? nb + 1 : 0;
Chris@0 157 }
Chris@0 158
Chris@0 159 /* decode scalefactors */
Chris@0 160
Chris@0 161 for (sb = 0; sb < 32; ++sb) {
Chris@0 162 for (ch = 0; ch < nch; ++ch) {
Chris@0 163 if (allocation[ch][sb]) {
Chris@0 164 scalefactor[ch][sb] = mad_bit_read(&stream->ptr, 6);
Chris@0 165
Chris@0 166 # if defined(OPT_STRICT)
Chris@0 167 /*
Chris@0 168 * Scalefactor index 63 does not appear in Table B.1 of
Chris@0 169 * ISO/IEC 11172-3. Nonetheless, other implementations accept it,
Chris@0 170 * so we only reject it if OPT_STRICT is defined.
Chris@0 171 */
Chris@0 172 if (scalefactor[ch][sb] == 63) {
Chris@0 173 stream->error = MAD_ERROR_BADSCALEFACTOR;
Chris@0 174 return -1;
Chris@0 175 }
Chris@0 176 # endif
Chris@0 177 }
Chris@0 178 }
Chris@0 179 }
Chris@0 180
Chris@0 181 /* decode samples */
Chris@0 182
Chris@0 183 for (s = 0; s < 12; ++s) {
Chris@0 184 for (sb = 0; sb < bound; ++sb) {
Chris@0 185 for (ch = 0; ch < nch; ++ch) {
Chris@0 186 nb = allocation[ch][sb];
Chris@0 187 frame->sbsample[ch][s][sb] = nb ?
Chris@0 188 mad_f_mul(I_sample(&stream->ptr, nb),
Chris@0 189 sf_table[scalefactor[ch][sb]]) : 0;
Chris@0 190 }
Chris@0 191 }
Chris@0 192
Chris@0 193 for (sb = bound; sb < 32; ++sb) {
Chris@0 194 if ((nb = allocation[0][sb])) {
Chris@0 195 mad_fixed_t sample;
Chris@0 196
Chris@0 197 sample = I_sample(&stream->ptr, nb);
Chris@0 198
Chris@0 199 for (ch = 0; ch < nch; ++ch) {
Chris@0 200 frame->sbsample[ch][s][sb] =
Chris@0 201 mad_f_mul(sample, sf_table[scalefactor[ch][sb]]);
Chris@0 202 }
Chris@0 203 }
Chris@0 204 else {
Chris@0 205 for (ch = 0; ch < nch; ++ch)
Chris@0 206 frame->sbsample[ch][s][sb] = 0;
Chris@0 207 }
Chris@0 208 }
Chris@0 209 }
Chris@0 210
Chris@0 211 return 0;
Chris@0 212 }
Chris@0 213
Chris@0 214 /* --- Layer II ------------------------------------------------------------ */
Chris@0 215
Chris@0 216 /* possible quantization per subband table */
Chris@0 217 static
Chris@0 218 struct {
Chris@0 219 unsigned int sblimit;
Chris@0 220 unsigned char const offsets[30];
Chris@0 221 } const sbquant_table[5] = {
Chris@0 222 /* ISO/IEC 11172-3 Table B.2a */
Chris@0 223 { 27, { 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, /* 0 */
Chris@0 224 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0 } },
Chris@0 225 /* ISO/IEC 11172-3 Table B.2b */
Chris@0 226 { 30, { 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, /* 1 */
Chris@0 227 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0 } },
Chris@0 228 /* ISO/IEC 11172-3 Table B.2c */
Chris@0 229 { 8, { 5, 5, 2, 2, 2, 2, 2, 2 } }, /* 2 */
Chris@0 230 /* ISO/IEC 11172-3 Table B.2d */
Chris@0 231 { 12, { 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 } }, /* 3 */
Chris@0 232 /* ISO/IEC 13818-3 Table B.1 */
Chris@0 233 { 30, { 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, /* 4 */
Chris@0 234 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } }
Chris@0 235 };
Chris@0 236
Chris@0 237 /* bit allocation table */
Chris@0 238 static
Chris@0 239 struct {
Chris@0 240 unsigned short nbal;
Chris@0 241 unsigned short offset;
Chris@0 242 } const bitalloc_table[8] = {
Chris@0 243 { 2, 0 }, /* 0 */
Chris@0 244 { 2, 3 }, /* 1 */
Chris@0 245 { 3, 3 }, /* 2 */
Chris@0 246 { 3, 1 }, /* 3 */
Chris@0 247 { 4, 2 }, /* 4 */
Chris@0 248 { 4, 3 }, /* 5 */
Chris@0 249 { 4, 4 }, /* 6 */
Chris@0 250 { 4, 5 } /* 7 */
Chris@0 251 };
Chris@0 252
Chris@0 253 /* offsets into quantization class table */
Chris@0 254 static
Chris@0 255 unsigned char const offset_table[6][15] = {
Chris@0 256 { 0, 1, 16 }, /* 0 */
Chris@0 257 { 0, 1, 2, 3, 4, 5, 16 }, /* 1 */
Chris@0 258 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, /* 2 */
Chris@0 259 { 0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, /* 3 */
Chris@0 260 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16 }, /* 4 */
Chris@0 261 { 0, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 } /* 5 */
Chris@0 262 };
Chris@0 263
Chris@0 264 /* quantization class table */
Chris@0 265 static
Chris@0 266 struct quantclass {
Chris@0 267 unsigned short nlevels;
Chris@0 268 unsigned char group;
Chris@0 269 unsigned char bits;
Chris@0 270 mad_fixed_t C;
Chris@0 271 mad_fixed_t D;
Chris@0 272 } const qc_table[17] = {
Chris@0 273 # include "qc_table.dat"
Chris@0 274 };
Chris@0 275
Chris@0 276 /*
Chris@0 277 * NAME: II_samples()
Chris@0 278 * DESCRIPTION: decode three requantized Layer II samples from a bitstream
Chris@0 279 */
Chris@0 280 static
Chris@0 281 void II_samples(struct mad_bitptr *ptr,
Chris@0 282 struct quantclass const *quantclass,
Chris@0 283 mad_fixed_t output[3])
Chris@0 284 {
Chris@0 285 unsigned int nb, s, sample[3];
Chris@0 286
Chris@0 287 if ((nb = quantclass->group)) {
Chris@0 288 unsigned int c, nlevels;
Chris@0 289
Chris@0 290 /* degrouping */
Chris@0 291 c = mad_bit_read(ptr, quantclass->bits);
Chris@0 292 nlevels = quantclass->nlevels;
Chris@0 293
Chris@0 294 for (s = 0; s < 3; ++s) {
Chris@0 295 sample[s] = c % nlevels;
Chris@0 296 c /= nlevels;
Chris@0 297 }
Chris@0 298 }
Chris@0 299 else {
Chris@0 300 nb = quantclass->bits;
Chris@0 301
Chris@0 302 for (s = 0; s < 3; ++s)
Chris@0 303 sample[s] = mad_bit_read(ptr, nb);
Chris@0 304 }
Chris@0 305
Chris@0 306 for (s = 0; s < 3; ++s) {
Chris@0 307 mad_fixed_t requantized;
Chris@0 308
Chris@0 309 /* invert most significant bit, extend sign, then scale to fixed format */
Chris@0 310
Chris@0 311 requantized = sample[s] ^ (1 << (nb - 1));
Chris@0 312 requantized |= -(requantized & (1 << (nb - 1)));
Chris@0 313
Chris@0 314 requantized <<= MAD_F_FRACBITS - (nb - 1);
Chris@0 315
Chris@0 316 /* requantize the sample */
Chris@0 317
Chris@0 318 /* s'' = C * (s''' + D) */
Chris@0 319
Chris@0 320 output[s] = mad_f_mul(requantized + quantclass->D, quantclass->C);
Chris@0 321
Chris@0 322 /* s' = factor * s'' */
Chris@0 323 /* (to be performed by caller) */
Chris@0 324 }
Chris@0 325 }
Chris@0 326
Chris@0 327 /*
Chris@0 328 * NAME: layer->II()
Chris@0 329 * DESCRIPTION: decode a single Layer II frame
Chris@0 330 */
Chris@0 331 int mad_layer_II(struct mad_stream *stream, struct mad_frame *frame)
Chris@0 332 {
Chris@0 333 struct mad_header *header = &frame->header;
Chris@0 334 struct mad_bitptr start;
Chris@0 335 unsigned int index, sblimit, nbal, nch, bound, gr, ch, s, sb;
Chris@0 336 unsigned char const *offsets;
Chris@0 337 unsigned char allocation[2][32], scfsi[2][32], scalefactor[2][32][3];
Chris@0 338 mad_fixed_t samples[3];
Chris@0 339
Chris@0 340 nch = MAD_NCHANNELS(header);
Chris@0 341
Chris@0 342 if (header->flags & MAD_FLAG_LSF_EXT)
Chris@0 343 index = 4;
Chris@0 344 else if (header->flags & MAD_FLAG_FREEFORMAT)
Chris@0 345 goto freeformat;
Chris@0 346 else {
Chris@0 347 unsigned long bitrate_per_channel;
Chris@0 348
Chris@0 349 bitrate_per_channel = header->bitrate;
Chris@0 350 if (nch == 2) {
Chris@0 351 bitrate_per_channel /= 2;
Chris@0 352
Chris@0 353 # if defined(OPT_STRICT)
Chris@0 354 /*
Chris@0 355 * ISO/IEC 11172-3 allows only single channel mode for 32, 48, 56, and
Chris@0 356 * 80 kbps bitrates in Layer II, but some encoders ignore this
Chris@0 357 * restriction. We enforce it if OPT_STRICT is defined.
Chris@0 358 */
Chris@0 359 if (bitrate_per_channel <= 28000 || bitrate_per_channel == 40000) {
Chris@0 360 stream->error = MAD_ERROR_BADMODE;
Chris@0 361 return -1;
Chris@0 362 }
Chris@0 363 # endif
Chris@0 364 }
Chris@0 365 else { /* nch == 1 */
Chris@0 366 if (bitrate_per_channel > 192000) {
Chris@0 367 /*
Chris@0 368 * ISO/IEC 11172-3 does not allow single channel mode for 224, 256,
Chris@0 369 * 320, or 384 kbps bitrates in Layer II.
Chris@0 370 */
Chris@0 371 stream->error = MAD_ERROR_BADMODE;
Chris@0 372 return -1;
Chris@0 373 }
Chris@0 374 }
Chris@0 375
Chris@0 376 if (bitrate_per_channel <= 48000)
Chris@0 377 index = (header->samplerate == 32000) ? 3 : 2;
Chris@0 378 else if (bitrate_per_channel <= 80000)
Chris@0 379 index = 0;
Chris@0 380 else {
Chris@0 381 freeformat:
Chris@0 382 index = (header->samplerate == 48000) ? 0 : 1;
Chris@0 383 }
Chris@0 384 }
Chris@0 385
Chris@0 386 sblimit = sbquant_table[index].sblimit;
Chris@0 387 offsets = sbquant_table[index].offsets;
Chris@0 388
Chris@0 389 bound = 32;
Chris@0 390 if (header->mode == MAD_MODE_JOINT_STEREO) {
Chris@0 391 header->flags |= MAD_FLAG_I_STEREO;
Chris@0 392 bound = 4 + header->mode_extension * 4;
Chris@0 393 }
Chris@0 394
Chris@0 395 if (bound > sblimit)
Chris@0 396 bound = sblimit;
Chris@0 397
Chris@0 398 start = stream->ptr;
Chris@0 399
Chris@0 400 /* decode bit allocations */
Chris@0 401
Chris@0 402 for (sb = 0; sb < bound; ++sb) {
Chris@0 403 nbal = bitalloc_table[offsets[sb]].nbal;
Chris@0 404
Chris@0 405 for (ch = 0; ch < nch; ++ch)
Chris@0 406 allocation[ch][sb] = mad_bit_read(&stream->ptr, nbal);
Chris@0 407 }
Chris@0 408
Chris@0 409 for (sb = bound; sb < sblimit; ++sb) {
Chris@0 410 nbal = bitalloc_table[offsets[sb]].nbal;
Chris@0 411
Chris@0 412 allocation[0][sb] =
Chris@0 413 allocation[1][sb] = mad_bit_read(&stream->ptr, nbal);
Chris@0 414 }
Chris@0 415
Chris@0 416 /* decode scalefactor selection info */
Chris@0 417
Chris@0 418 for (sb = 0; sb < sblimit; ++sb) {
Chris@0 419 for (ch = 0; ch < nch; ++ch) {
Chris@0 420 if (allocation[ch][sb])
Chris@0 421 scfsi[ch][sb] = mad_bit_read(&stream->ptr, 2);
Chris@0 422 }
Chris@0 423 }
Chris@0 424
Chris@0 425 /* check CRC word */
Chris@0 426
Chris@0 427 if (header->flags & MAD_FLAG_PROTECTION) {
Chris@0 428 header->crc_check =
Chris@0 429 mad_bit_crc(start, mad_bit_length(&start, &stream->ptr),
Chris@0 430 header->crc_check);
Chris@0 431
Chris@0 432 if (header->crc_check != header->crc_target &&
Chris@0 433 !(frame->options & MAD_OPTION_IGNORECRC)) {
Chris@0 434 stream->error = MAD_ERROR_BADCRC;
Chris@0 435 return -1;
Chris@0 436 }
Chris@0 437 }
Chris@0 438
Chris@0 439 /* decode scalefactors */
Chris@0 440
Chris@0 441 for (sb = 0; sb < sblimit; ++sb) {
Chris@0 442 for (ch = 0; ch < nch; ++ch) {
Chris@0 443 if (allocation[ch][sb]) {
Chris@0 444 scalefactor[ch][sb][0] = mad_bit_read(&stream->ptr, 6);
Chris@0 445
Chris@0 446 switch (scfsi[ch][sb]) {
Chris@0 447 case 2:
Chris@0 448 scalefactor[ch][sb][2] =
Chris@0 449 scalefactor[ch][sb][1] =
Chris@0 450 scalefactor[ch][sb][0];
Chris@0 451 break;
Chris@0 452
Chris@0 453 case 0:
Chris@0 454 scalefactor[ch][sb][1] = mad_bit_read(&stream->ptr, 6);
Chris@0 455 /* fall through */
Chris@0 456
Chris@0 457 case 1:
Chris@0 458 case 3:
Chris@0 459 scalefactor[ch][sb][2] = mad_bit_read(&stream->ptr, 6);
Chris@0 460 }
Chris@0 461
Chris@0 462 if (scfsi[ch][sb] & 1)
Chris@0 463 scalefactor[ch][sb][1] = scalefactor[ch][sb][scfsi[ch][sb] - 1];
Chris@0 464
Chris@0 465 # if defined(OPT_STRICT)
Chris@0 466 /*
Chris@0 467 * Scalefactor index 63 does not appear in Table B.1 of
Chris@0 468 * ISO/IEC 11172-3. Nonetheless, other implementations accept it,
Chris@0 469 * so we only reject it if OPT_STRICT is defined.
Chris@0 470 */
Chris@0 471 if (scalefactor[ch][sb][0] == 63 ||
Chris@0 472 scalefactor[ch][sb][1] == 63 ||
Chris@0 473 scalefactor[ch][sb][2] == 63) {
Chris@0 474 stream->error = MAD_ERROR_BADSCALEFACTOR;
Chris@0 475 return -1;
Chris@0 476 }
Chris@0 477 # endif
Chris@0 478 }
Chris@0 479 }
Chris@0 480 }
Chris@0 481
Chris@0 482 /* decode samples */
Chris@0 483
Chris@0 484 for (gr = 0; gr < 12; ++gr) {
Chris@0 485 for (sb = 0; sb < bound; ++sb) {
Chris@0 486 for (ch = 0; ch < nch; ++ch) {
Chris@0 487 if ((index = allocation[ch][sb])) {
Chris@0 488 index = offset_table[bitalloc_table[offsets[sb]].offset][index - 1];
Chris@0 489
Chris@0 490 II_samples(&stream->ptr, &qc_table[index], samples);
Chris@0 491
Chris@0 492 for (s = 0; s < 3; ++s) {
Chris@0 493 frame->sbsample[ch][3 * gr + s][sb] =
Chris@0 494 mad_f_mul(samples[s], sf_table[scalefactor[ch][sb][gr / 4]]);
Chris@0 495 }
Chris@0 496 }
Chris@0 497 else {
Chris@0 498 for (s = 0; s < 3; ++s)
Chris@0 499 frame->sbsample[ch][3 * gr + s][sb] = 0;
Chris@0 500 }
Chris@0 501 }
Chris@0 502 }
Chris@0 503
Chris@0 504 for (sb = bound; sb < sblimit; ++sb) {
Chris@0 505 if ((index = allocation[0][sb])) {
Chris@0 506 index = offset_table[bitalloc_table[offsets[sb]].offset][index - 1];
Chris@0 507
Chris@0 508 II_samples(&stream->ptr, &qc_table[index], samples);
Chris@0 509
Chris@0 510 for (ch = 0; ch < nch; ++ch) {
Chris@0 511 for (s = 0; s < 3; ++s) {
Chris@0 512 frame->sbsample[ch][3 * gr + s][sb] =
Chris@0 513 mad_f_mul(samples[s], sf_table[scalefactor[ch][sb][gr / 4]]);
Chris@0 514 }
Chris@0 515 }
Chris@0 516 }
Chris@0 517 else {
Chris@0 518 for (ch = 0; ch < nch; ++ch) {
Chris@0 519 for (s = 0; s < 3; ++s)
Chris@0 520 frame->sbsample[ch][3 * gr + s][sb] = 0;
Chris@0 521 }
Chris@0 522 }
Chris@0 523 }
Chris@0 524
Chris@0 525 for (ch = 0; ch < nch; ++ch) {
Chris@0 526 for (s = 0; s < 3; ++s) {
Chris@0 527 for (sb = sblimit; sb < 32; ++sb)
Chris@0 528 frame->sbsample[ch][3 * gr + s][sb] = 0;
Chris@0 529 }
Chris@0 530 }
Chris@0 531 }
Chris@0 532
Chris@0 533 return 0;
Chris@0 534 }