Fixed initialisation of tf in file_open(). Without setting the memory to 0,
[cinelerra_cv/mob.git] / libmpeg3 / audio / layer3.c
blob8d0450d1847e28a0c93f4c33a8fd251b21990557
1 #include "huffman.h"
2 #include "mpeg3private.h"
3 #include "mpeg3protos.h"
4 #include "tables.h"
6 #include <stdio.h>
7 #include <string.h>
9 struct gr_info_s
11 int scfsi;
12 unsigned part2_3_length;
13 unsigned big_values;
14 unsigned scalefac_compress;
15 unsigned block_type;
16 unsigned mixed_block_flag;
17 unsigned table_select[3];
18 unsigned subblock_gain[3];
19 unsigned maxband[3];
20 unsigned maxbandl;
21 unsigned maxb;
22 unsigned region1start;
23 unsigned region2start;
24 unsigned preflag;
25 unsigned scalefac_scale;
26 unsigned count1table_select;
27 float *full_gain[3];
28 float *pow2gain;
31 struct sideinfo_s
33 unsigned main_data_begin;
34 unsigned private_bits;
35 struct
37 struct gr_info_s gr[2];
38 } ch[2];
49 static int get_scale_factors_1(mpeg3_layer_t *audio,
50 int *scf,
51 struct gr_info_s *gr_info,
52 int ch,
53 int gr)
55 static unsigned char slen[2][16] =
56 {{0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4},
57 {0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3}};
58 int numbits;
59 int num0 = slen[0][gr_info->scalefac_compress];
60 int num1 = slen[1][gr_info->scalefac_compress];
62 if (gr_info->block_type == 2)
64 int i = 18;
65 numbits = (num0 + num1) * 18;
67 if (gr_info->mixed_block_flag)
69 for(i = 8; i; i--)
70 *scf++ = mpeg3bits_getbits(audio->stream, num0);
71 i = 9;
72 /* num0 * 17 + num1 * 18 */
73 numbits -= num0;
76 for( ; i; i--)
77 *scf++ = mpeg3bits_getbits(audio->stream, num0);
78 for(i = 18; i; i--)
79 *scf++ = mpeg3bits_getbits(audio->stream, num1);
80 /* short[13][0..2] = 0 */
81 *scf++ = 0;
82 *scf++ = 0;
83 *scf++ = 0;
85 else
87 int i;
88 int scfsi = gr_info->scfsi;
90 if(scfsi < 0)
92 /* scfsi < 0 => granule == 0 */
93 for(i = 11; i; i--)
95 *scf++ = mpeg3bits_getbits(audio->stream, num0);
97 for(i = 10; i; i--)
98 *scf++ = mpeg3bits_getbits(audio->stream, num1);
99 numbits = (num0 + num1) * 10 + num0;
100 *scf++ = 0;
102 else
104 numbits = 0;
105 if(!(scfsi & 0x8))
107 for(i = 0; i < 6; i++)
109 *scf++ = mpeg3bits_getbits(audio->stream, num0);
111 numbits += num0 * 6;
113 else
115 scf += 6;
118 if(!(scfsi & 0x4))
120 for(i = 0; i < 5; i++)
121 *scf++ = mpeg3bits_getbits(audio->stream, num0);
122 numbits += num0 * 5;
124 else
126 scf += 5;
129 if(!(scfsi & 0x2))
131 for(i = 0; i < 5; i++)
132 *scf++ = mpeg3bits_getbits(audio->stream, num1);
133 numbits += num1 * 5;
135 else
137 scf += 5;
140 if(!(scfsi & 0x1))
142 for(i = 0; i < 5; i++)
143 *scf++ = mpeg3bits_getbits(audio->stream, num1);
144 numbits += num1 * 5;
146 else
148 scf += 5;
150 *scf++ = 0; /* no l[21] in original sources */
153 return numbits;
156 static int get_scale_factors_2(mpeg3_layer_t *audio,
157 int *scf,
158 struct gr_info_s *gr_info,
159 int i_stereo)
161 unsigned char *pnt;
162 int i, j, n = 0, numbits = 0;
163 unsigned int slen;
164 static unsigned char stab[3][6][4] =
165 {{{ 6, 5, 5,5 }, { 6, 5, 7,3 }, { 11,10,0,0},
166 { 7, 7, 7,0 }, { 6, 6, 6,3 }, { 8, 8,5,0}},
167 {{ 9, 9, 9,9 }, { 9, 9,12,6 }, { 18,18,0,0},
168 {12,12,12,0 }, {12, 9, 9,6 }, { 15,12,9,0}},
169 {{ 6, 9, 9,9 }, { 6, 9,12,6 }, { 15,18,0,0},
170 { 6,15,12,0 }, { 6,12, 9,6 }, { 6,18,9,0}}};
172 /* i_stereo AND second channel -> do_layer3() checks this */
173 if(i_stereo)
174 slen = mpeg3_i_slen2[gr_info->scalefac_compress >> 1];
175 else
176 slen = mpeg3_n_slen2[gr_info->scalefac_compress];
178 gr_info->preflag = (slen >> 15) & 0x1;
180 n = 0;
181 if(gr_info->block_type == 2 )
183 n++;
184 if(gr_info->mixed_block_flag)
185 n++;
188 pnt = stab[n][(slen >> 12) & 0x7];
190 for(i = 0; i < 4; i++)
192 int num = slen & 0x7;
193 slen >>= 3;
194 if(num)
196 for(j = 0; j < (int)(pnt[i]); j++)
197 *scf++ = mpeg3bits_getbits(audio->stream, num);
198 numbits += pnt[i] * num;
200 else
202 for(j = 0; j < (int)(pnt[i]); j++)
203 *scf++ = 0;
207 n = (n << 1) + 1;
208 for(i = 0; i < n; i++)
209 *scf++ = 0;
211 return numbits;
214 static int pretab1[22] = {0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,3,3,3,2,0};
215 static int pretab2[22] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
218 * Dequantize samples (includes huffman decoding)
220 * 24 is enough because tab13 has max. a 19 bit huffvector
223 #define BITSHIFT ((sizeof(int32_t) - 1) * 8)
224 #define REFRESH_MASK \
225 while(num < BITSHIFT) \
227 mask |= mpeg3bits_getbits(audio->stream, 8) << (BITSHIFT - num); \
228 num += 8; \
229 part2remain -= 8; \
233 static int dequantize_sample(mpeg3_layer_t *audio,
234 float xr[SBLIMIT][SSLIMIT],
235 int *scf,
236 struct gr_info_s *gr_info,
237 int sfreq,
238 int part2bits)
240 int shift = 1 + gr_info->scalefac_scale;
241 float *xrpnt = (float*)xr;
242 int l[3],l3;
243 int part2remain = gr_info->part2_3_length - part2bits;
244 int *me;
245 int num = mpeg3bits_getbitoffset(audio->stream);
246 int32_t mask = mpeg3bits_getbits(audio->stream, num);
247 //printf("III_dequantize_sample 1 %08x %d\n", mask, num);
248 mask = mask << (BITSHIFT + 8 - num);
249 part2remain -= num;
252 int bv = gr_info->big_values;
253 int region1 = gr_info->region1start;
254 int region2 = gr_info->region2start;
256 l3 = ((576 >> 1) - bv) >> 1;
259 * we may lose the 'odd' bit here !!
260 * check this later again
263 if(bv <= region1)
265 l[0] = bv;
266 l[1] = 0;
267 l[2] = 0;
269 else
271 l[0] = region1;
272 if(bv <= region2)
274 l[1] = bv - l[0]; l[2] = 0;
276 else
278 l[1] = region2 - l[0];
279 l[2] = bv - region2;
284 if(gr_info->block_type == 2)
287 * decoding with short or mixed mode BandIndex table
289 int i, max[4];
290 int step = 0, lwin = 3, cb = 0;
291 register float v = 0.0;
292 register int *m, mc;
294 if(gr_info->mixed_block_flag)
296 max[3] = -1;
297 max[0] = max[1] = max[2] = 2;
298 m = mpeg3_map[sfreq][0];
299 me = mpeg3_mapend[sfreq][0];
301 else
303 max[0] = max[1] = max[2] = max[3] = -1;
304 /* max[3] not floatly needed in this case */
305 m = mpeg3_map[sfreq][1];
306 me = mpeg3_mapend[sfreq][1];
309 mc = 0;
310 for(i = 0; i < 2; i++)
312 int lp = l[i];
313 struct newhuff *h = mpeg3_ht + gr_info->table_select[i];
314 for( ; lp; lp--, mc--)
316 register int x,y;
317 if(!mc)
319 mc = *m++;
320 xrpnt = ((float*)xr) + (*m++);
321 lwin = *m++;
322 cb = *m++;
323 if(lwin == 3)
325 v = gr_info->pow2gain[(*scf++) << shift];
326 step = 1;
328 else
330 v = gr_info->full_gain[lwin][(*scf++) << shift];
331 step = 3;
336 register short *val = h->table;
337 REFRESH_MASK;
338 while((y = *val++) < 0)
340 if (mask < 0)
341 val -= y;
342 num--;
343 mask <<= 1;
345 x = y >> 4;
346 y &= 0xf;
349 if(x == 15 && h->linbits)
351 max[lwin] = cb;
352 REFRESH_MASK;
353 x += ((uint32_t)mask) >> (BITSHIFT + 8 - h->linbits);
354 num -= h->linbits + 1;
355 mask <<= h->linbits;
356 if(mask < 0)
357 *xrpnt = -mpeg3_ispow[x] * v;
358 else
359 *xrpnt = mpeg3_ispow[x] * v;
360 mask <<= 1;
362 else
363 if(x)
365 max[lwin] = cb;
366 if(mask < 0)
367 *xrpnt = -mpeg3_ispow[x] * v;
368 else
369 *xrpnt = mpeg3_ispow[x] * v;
370 num--;
371 mask <<= 1;
373 else
374 *xrpnt = 0.0;
376 xrpnt += step;
377 if(y == 15 && h->linbits)
379 max[lwin] = cb;
380 REFRESH_MASK;
381 y += ((uint32_t) mask) >> (BITSHIFT + 8 - h->linbits);
382 num -= h->linbits + 1;
383 mask <<= h->linbits;
384 if(mask < 0)
385 *xrpnt = -mpeg3_ispow[y] * v;
386 else
387 *xrpnt = mpeg3_ispow[y] * v;
388 mask <<= 1;
390 else
391 if(y)
393 max[lwin] = cb;
394 if(mask < 0)
395 *xrpnt = -mpeg3_ispow[y] * v;
396 else
397 *xrpnt = mpeg3_ispow[y] * v;
398 num--;
399 mask <<= 1;
401 else
402 *xrpnt = 0.0;
403 xrpnt += step;
407 for( ;l3 && (part2remain + num > 0); l3--)
409 struct newhuff *h = mpeg3_htc + gr_info->count1table_select;
410 register short *val = h->table, a;
412 REFRESH_MASK;
413 while((a = *val++) < 0)
415 if (mask < 0)
416 val -= a;
417 num--;
418 mask <<= 1;
420 if(part2remain + num <= 0)
422 num -= part2remain + num;
423 break;
426 for(i = 0; i < 4; i++)
428 if(!(i & 1))
430 if(!mc)
432 mc = *m++;
433 xrpnt = ((float*)xr) + (*m++);
434 lwin = *m++;
435 cb = *m++;
436 if(lwin == 3)
438 v = gr_info->pow2gain[(*scf++) << shift];
439 step = 1;
441 else
443 v = gr_info->full_gain[lwin][(*scf++) << shift];
444 step = 3;
447 mc--;
449 if((a & (0x8 >> i)))
451 max[lwin] = cb;
452 if(part2remain + num <= 0)
454 break;
456 if(mask < 0)
457 *xrpnt = -v;
458 else
459 *xrpnt = v;
460 num--;
461 mask <<= 1;
463 else
464 *xrpnt = 0.0;
465 xrpnt += step;
469 if(lwin < 3)
471 /* short band? */
472 while(1)
474 for( ;mc > 0; mc--)
476 /* short band -> step=3 */
477 *xrpnt = 0.0;
478 xrpnt += 3;
479 *xrpnt = 0.0;
480 xrpnt += 3;
482 if(m >= me)
483 break;
484 mc = *m++;
485 xrpnt = ((float*)xr) + *m++;
486 /* optimize: field will be set to zero at the end of the function */
487 if(*m++ == 0)
488 break;
489 /* cb */
490 m++;
494 gr_info->maxband[0] = max[0] + 1;
495 gr_info->maxband[1] = max[1] + 1;
496 gr_info->maxband[2] = max[2] + 1;
497 gr_info->maxbandl = max[3] + 1;
500 int rmax = max[0] > max[1] ? max[0] : max[1];
501 rmax = (rmax > max[2] ? rmax : max[2]) + 1;
502 gr_info->maxb = rmax ? mpeg3_shortLimit[sfreq][rmax] : mpeg3_longLimit[sfreq][max[3] + 1];
506 else
509 * decoding with 'long' BandIndex table (block_type != 2)
511 int *pretab = gr_info->preflag ? pretab1 : pretab2;
512 int i, max = -1;
513 int cb = 0;
514 int *m = mpeg3_map[sfreq][2];
515 register float v = 0.0;
516 int mc = 0;
519 * long hash table values
521 for(i = 0; i < 3; i++)
523 int lp = l[i];
524 struct newhuff *h = mpeg3_ht + gr_info->table_select[i];
526 for(; lp; lp--, mc--)
528 int x, y;
530 if(!mc)
532 mc = *m++;
533 cb = *m++;
534 if(cb == 21)
535 v = 0.0;
536 else
537 v = gr_info->pow2gain[((*scf++) + (*pretab++)) << shift];
540 register short *val = h->table;
541 REFRESH_MASK;
542 while((y = *val++) < 0)
544 if(mask < 0)
545 val -= y;
546 num--;
547 mask <<= 1;
549 x = y >> 4;
550 y &= 0xf;
553 if(x == 15 && h->linbits)
555 max = cb;
556 REFRESH_MASK;
557 x += ((uint32_t) mask) >> (BITSHIFT + 8 - h->linbits);
558 num -= h->linbits + 1;
559 mask <<= h->linbits;
560 if(mask < 0)
561 *xrpnt++ = -mpeg3_ispow[x] * v;
562 else
563 *xrpnt++ = mpeg3_ispow[x] * v;
564 mask <<= 1;
566 else
567 if(x)
569 max = cb;
570 if(mask < 0)
571 *xrpnt++ = -mpeg3_ispow[x] * v;
572 else
573 *xrpnt++ = mpeg3_ispow[x] * v;
574 num--;
575 mask <<= 1;
577 else
578 *xrpnt++ = 0.0;
580 if(y == 15 && h->linbits)
582 max = cb;
583 REFRESH_MASK;
584 y += ((uint32_t) mask) >> (BITSHIFT + 8 - h->linbits);
585 num -= h->linbits + 1;
586 mask <<= h->linbits;
587 if(mask < 0)
588 *xrpnt++ = -mpeg3_ispow[y] * v;
589 else
590 *xrpnt++ = mpeg3_ispow[y] * v;
591 mask <<= 1;
593 else
594 if(y)
596 max = cb;
597 if(mask < 0)
598 *xrpnt++ = -mpeg3_ispow[y] * v;
599 else
600 *xrpnt++ = mpeg3_ispow[y] * v;
601 num--;
602 mask <<= 1;
604 else
605 *xrpnt++ = 0.0;
610 * short (count1table) values
612 for( ; l3 && (part2remain + num > 0); l3--)
614 struct newhuff *h = mpeg3_htc + gr_info->count1table_select;
615 register short *val = h->table, a;
617 REFRESH_MASK;
618 while((a = *val++) < 0)
620 if(mask < 0)
621 val -= a;
622 num--;
623 mask <<= 1;
625 if(part2remain + num <= 0)
627 num -= part2remain + num;
628 break;
631 for(i = 0; i < 4; i++)
633 if(!(i & 1))
635 if(!mc)
637 mc = *m++;
638 cb = *m++;
639 if(cb == 21)
640 v = 0.0;
641 else
642 v = gr_info->pow2gain[((*scf++) + (*pretab++)) << shift];
644 mc--;
646 if((a & (0x8 >> i)))
648 max = cb;
649 if(part2remain + num <= 0)
651 break;
653 if(mask < 0)
654 *xrpnt++ = -v;
655 else
656 *xrpnt++ = v;
657 num--;
658 mask <<= 1;
660 else
661 *xrpnt++ = 0.0;
665 gr_info->maxbandl = max + 1;
666 gr_info->maxb = mpeg3_longLimit[sfreq][gr_info->maxbandl];
669 part2remain += num;
672 mpeg3bits_start_reverse(audio->stream);
673 mpeg3bits_getbits_reverse(audio->stream, num);
674 mpeg3bits_start_forward(audio->stream);
675 //printf("III_dequantize_sample 3 %d %04x\n", audio->stream->bit_number, mpeg3bits_showbits(audio->stream, 16));
676 num = 0;
678 while(xrpnt < &xr[SBLIMIT][0])
679 *xrpnt++ = 0.0;
681 while(part2remain > 16)
683 mpeg3bits_getbits(audio->stream, 16); /* Dismiss stuffing Bits */
684 part2remain -= 16;
687 if(part2remain > 0)
689 mpeg3bits_getbits(audio->stream, part2remain);
691 else
692 if(part2remain < 0)
694 printf("dequantize_sample: can't rewind stream %d bits! data=%02x%02x%02x%02x\n",
695 -part2remain,
696 (unsigned char)audio->stream->input_ptr[-3],
697 (unsigned char)audio->stream->input_ptr[-2],
698 (unsigned char)audio->stream->input_ptr[-1],
699 (unsigned char)audio->stream->input_ptr[0]);
700 return 1; /* -> error */
702 return 0;
705 static int get_side_info(mpeg3_layer_t *audio,
706 struct sideinfo_s *si,
707 int channels,
708 int ms_stereo,
709 long sfreq,
710 int single,
711 int lsf)
713 int ch, gr;
714 int powdiff = (single == 3) ? 4 : 0;
715 static const int tabs[2][5] = { { 2,9,5,3,4 } , { 1,8,1,2,9 } };
716 const int *tab = tabs[lsf];
718 si->main_data_begin = mpeg3bits_getbits(audio->stream, tab[1]);
719 if(channels == 1)
720 si->private_bits = mpeg3bits_getbits(audio->stream, tab[2]);
721 else
722 si->private_bits = mpeg3bits_getbits(audio->stream, tab[3]);
723 if(!lsf)
725 for(ch = 0; ch < channels; ch++)
727 si->ch[ch].gr[0].scfsi = -1;
728 si->ch[ch].gr[1].scfsi = mpeg3bits_getbits(audio->stream, 4);
732 for(gr = 0; gr < tab[0]; gr++)
734 for(ch = 0; ch < channels; ch++)
736 register struct gr_info_s *gr_info = &(si->ch[ch].gr[gr]);
738 gr_info->part2_3_length = mpeg3bits_getbits(audio->stream, 12);
739 gr_info->big_values = mpeg3bits_getbits(audio->stream, 9);
740 if(gr_info->big_values > 288)
742 fprintf(stderr,"get_side_info: big_values too large!\n");
743 gr_info->big_values = 288;
745 gr_info->pow2gain = mpeg3_gainpow2 + 256 - mpeg3bits_getbits(audio->stream, 8) + powdiff;
746 if(ms_stereo)
747 gr_info->pow2gain += 2;
748 gr_info->scalefac_compress = mpeg3bits_getbits(audio->stream, tab[4]);
750 if(mpeg3bits_getbits(audio->stream, 1))
752 /* window switch flag */
753 int i;
754 gr_info->block_type = mpeg3bits_getbits(audio->stream, 2);
755 gr_info->mixed_block_flag = mpeg3bits_getbits(audio->stream, 1);
756 gr_info->table_select[0] = mpeg3bits_getbits(audio->stream, 5);
757 gr_info->table_select[1] = mpeg3bits_getbits(audio->stream, 5);
759 * table_select[2] not needed, because there is no region2,
760 * but to satisfy some verifications tools we set it either.
762 gr_info->table_select[2] = 0;
763 for(i = 0; i < 3; i++)
764 gr_info->full_gain[i] = gr_info->pow2gain + (mpeg3bits_getbits(audio->stream, 3) << 3);
766 if(gr_info->block_type == 0)
768 fprintf(stderr,"Blocktype == 0 and window-switching == 1 not allowed.\n");
769 return 1;
772 /* region_count/start parameters are implicit in this case. */
773 if(!lsf || gr_info->block_type == 2)
774 gr_info->region1start = 36 >> 1;
775 else
777 /* check this again for 2.5 and sfreq=8 */
778 if(sfreq == 8)
779 gr_info->region1start = 108 >> 1;
780 else
781 gr_info->region1start = 54 >> 1;
783 gr_info->region2start = 576 >> 1;
785 else
787 int i, r0c, r1c;
788 for(i = 0; i < 3; i++)
789 gr_info->table_select[i] = mpeg3bits_getbits(audio->stream, 5);
791 r0c = mpeg3bits_getbits(audio->stream, 4);
792 r1c = mpeg3bits_getbits(audio->stream, 3);
793 gr_info->region1start = mpeg3_bandInfo[sfreq].longIdx[r0c + 1] >> 1 ;
794 gr_info->region2start = mpeg3_bandInfo[sfreq].longIdx[r0c + 1 + r1c + 1] >> 1;
795 gr_info->block_type = 0;
796 gr_info->mixed_block_flag = 0;
798 if(!lsf) gr_info->preflag = mpeg3bits_getbits(audio->stream, 1);
799 gr_info->scalefac_scale = mpeg3bits_getbits(audio->stream, 1);
800 gr_info->count1table_select = mpeg3bits_getbits(audio->stream, 1);
803 return 0;
806 static int hybrid(mpeg3_layer_t *audio,
807 float fsIn[SBLIMIT][SSLIMIT],
808 float tsOut[SSLIMIT][SBLIMIT],
809 int ch,
810 struct gr_info_s *gr_info)
812 float *tspnt = (float *) tsOut;
813 float *rawout1,*rawout2;
814 int bt, sb = 0;
818 int b = audio->mp3_blc[ch];
819 rawout1 = audio->mp3_block[b][ch];
820 b = -b + 1;
821 rawout2 = audio->mp3_block[b][ch];
822 audio->mp3_blc[ch] = b;
825 if(gr_info->mixed_block_flag)
827 sb = 2;
828 mpeg3audio_dct36(fsIn[0], rawout1, rawout2, mpeg3_win[0], tspnt);
829 mpeg3audio_dct36(fsIn[1], rawout1 + 18, rawout2 + 18, mpeg3_win1[0], tspnt + 1);
830 rawout1 += 36;
831 rawout2 += 36;
832 tspnt += 2;
835 bt = gr_info->block_type;
836 if(bt == 2)
838 for( ; sb < gr_info->maxb; sb += 2, tspnt += 2, rawout1 += 36, rawout2 += 36)
840 mpeg3audio_dct12(fsIn[sb] ,rawout1 ,rawout2 ,mpeg3_win[2] ,tspnt);
841 mpeg3audio_dct12(fsIn[sb + 1], rawout1 + 18, rawout2 + 18, mpeg3_win1[2], tspnt + 1);
844 else
846 for( ; sb < gr_info->maxb; sb += 2, tspnt += 2, rawout1 += 36, rawout2 += 36)
848 mpeg3audio_dct36(fsIn[sb], rawout1, rawout2, mpeg3_win[bt], tspnt);
849 mpeg3audio_dct36(fsIn[sb + 1], rawout1 + 18, rawout2 + 18, mpeg3_win1[bt], tspnt + 1);
853 for( ; sb < SBLIMIT; sb++, tspnt++)
855 int i;
856 for(i = 0; i < SSLIMIT; i++)
858 tspnt[i * SBLIMIT] = *rawout1++;
859 *rawout2++ = 0.0;
862 return 0;
865 static int antialias(mpeg3_layer_t *audio,
866 float xr[SBLIMIT][SSLIMIT],
867 struct gr_info_s *gr_info)
869 int sblim;
871 if(gr_info->block_type == 2)
873 if(!gr_info->mixed_block_flag)
874 return 0;
875 sblim = 1;
877 else
879 sblim = gr_info->maxb-1;
882 /* 31 alias-reduction operations between each pair of sub-bands */
883 /* with 8 butterflies between each pair */
886 int sb;
887 float *xr1 = (float*)xr[1];
889 for(sb = sblim; sb; sb--, xr1 += 10)
891 int ss;
892 float *cs, *ca;
893 float *xr2;
894 cs = mpeg3_aa_cs;
895 ca = mpeg3_aa_ca;
896 xr2 = xr1;
898 for(ss = 7; ss >= 0; ss--)
900 /* upper and lower butterfly inputs */
901 register float bu, bd;
902 bu = *--xr2;
903 bd = *xr1;
904 *xr2 = (bu * (*cs) ) - (bd * (*ca) );
905 *xr1++ = (bd * (*cs++) ) + (bu * (*ca++) );
909 return 0;
913 * III_stereo: calculate float channel values for Joint-I-Stereo-mode
915 static int calc_i_stereo(mpeg3_layer_t *audio,
916 float xr_buf[2][SBLIMIT][SSLIMIT],
917 int *scalefac,
918 struct gr_info_s *gr_info,
919 int sfreq,
920 int ms_stereo,
921 int lsf)
923 float (*xr)[SBLIMIT*SSLIMIT] = (float (*)[SBLIMIT*SSLIMIT] ) xr_buf;
924 struct mpeg3_bandInfoStruct *bi = &mpeg3_bandInfo[sfreq];
925 const float *tab1, *tab2;
927 int tab;
928 /* TODO: optimize as static */
929 static const float *tabs[3][2][2] =
931 { { mpeg3_tan1_1, mpeg3_tan2_1 } , { mpeg3_tan1_2, mpeg3_tan2_2 } },
932 { { mpeg3_pow1_1[0], mpeg3_pow2_1[0] } , { mpeg3_pow1_2[0], mpeg3_pow2_2[0] } } ,
933 { { mpeg3_pow1_1[1], mpeg3_pow2_1[1] } , { mpeg3_pow1_2[1], mpeg3_pow2_2[1] } }
936 tab = lsf + (gr_info->scalefac_compress & lsf);
937 tab1 = tabs[tab][ms_stereo][0];
938 tab2 = tabs[tab][ms_stereo][1];
940 if(gr_info->block_type == 2)
942 int lwin,do_l = 0;
943 if(gr_info->mixed_block_flag)
944 do_l = 1;
946 for(lwin = 0; lwin < 3; lwin++)
948 /* process each window */
949 /* get first band with zero values */
950 /* sfb is minimal 3 for mixed mode */
951 int is_p, sb, idx, sfb = gr_info->maxband[lwin];
952 if(sfb > 3) do_l = 0;
954 for( ; sfb < 12 ; sfb++)
956 /* scale: 0-15 */
957 is_p = scalefac[sfb * 3 + lwin - gr_info->mixed_block_flag];
958 if(is_p != 7)
960 float t1, t2;
961 sb = bi->shortDiff[sfb];
962 idx = bi->shortIdx[sfb] + lwin;
963 t1 = tab1[is_p];
964 t2 = tab2[is_p];
965 for( ; sb > 0; sb--, idx += 3)
967 float v = xr[0][idx];
968 xr[0][idx] = v * t1;
969 xr[1][idx] = v * t2;
974 /* in the original: copy 10 to 11 , here: copy 11 to 12 maybe still wrong??? (copy 12 to 13?) */
975 /* scale: 0-15 */
976 is_p = scalefac[11 * 3 + lwin - gr_info->mixed_block_flag];
977 sb = bi->shortDiff[12];
978 idx = bi->shortIdx[12] + lwin;
979 if(is_p != 7)
981 float t1, t2;
982 t1 = tab1[is_p];
983 t2 = tab2[is_p];
984 for( ; sb > 0; sb--, idx += 3)
986 float v = xr[0][idx];
987 xr[0][idx] = v * t1;
988 xr[1][idx] = v * t2;
991 } /* end for(lwin; .. ; . ) */
993 /* also check l-part, if ALL bands in the three windows are 'empty'
994 * and mode = mixed_mode
996 if(do_l)
998 int sfb = gr_info->maxbandl;
999 int idx = bi->longIdx[sfb];
1001 for ( ; sfb < 8; sfb++)
1003 int sb = bi->longDiff[sfb];
1004 /* scale: 0-15 */
1005 int is_p = scalefac[sfb];
1006 if(is_p != 7)
1008 float t1, t2;
1009 t1 = tab1[is_p];
1010 t2 = tab2[is_p];
1011 for( ; sb > 0; sb--, idx++)
1013 float v = xr[0][idx];
1014 xr[0][idx] = v * t1;
1015 xr[1][idx] = v * t2;
1018 else
1019 idx += sb;
1023 else
1025 /* ((gr_info->block_type != 2)) */
1026 int sfb = gr_info->maxbandl;
1027 int is_p, idx = bi->longIdx[sfb];
1028 for( ; sfb < 21; sfb++)
1030 int sb = bi->longDiff[sfb];
1031 /* scale: 0-15 */
1032 is_p = scalefac[sfb];
1033 if(is_p != 7)
1035 float t1, t2;
1036 t1 = tab1[is_p];
1037 t2 = tab2[is_p];
1038 for( ; sb > 0; sb--, idx++)
1040 float v = xr[0][idx];
1041 xr[0][idx] = v * t1;
1042 xr[1][idx] = v * t2;
1045 else
1046 idx += sb;
1049 is_p = scalefac[20];
1050 if(is_p != 7)
1052 /* copy l-band 20 to l-band 21 */
1053 int sb;
1054 float t1 = tab1[is_p], t2 = tab2[is_p];
1056 for(sb = bi->longDiff[21]; sb > 0; sb--, idx++)
1058 float v = xr[0][idx];
1059 xr[0][idx] = v * t1;
1060 xr[1][idx] = v * t2;
1063 } /* ... */
1064 return 0;
1067 int mpeg3audio_dolayer3(mpeg3_layer_t *audio,
1068 char *frame,
1069 int frame_size,
1070 float **output,
1071 int render)
1073 int gr, ch, ss;
1074 /* max 39 for short[13][3] mode, mixed: 38, long: 22 */
1075 int scalefacs[2][39];
1076 struct sideinfo_s sideinfo;
1077 int single = audio->single;
1078 int ms_stereo, i_stereo;
1079 int sfreq = audio->sampling_frequency_code;
1080 int stereo1, granules;
1081 int i;
1082 int output_offset = 0;
1084 //printf("1\n");
1085 // Skip header
1086 frame += 4;
1087 frame_size -= 4;
1089 /* flip/init buffer */
1090 audio->bsbufold = audio->bsbuf;
1091 audio->bsbuf = audio->bsspace[audio->bsnum] + 512;
1092 audio->bsnum ^= 1;
1094 /* Copy frame into history buffer */
1095 memcpy(audio->bsbuf, frame, frame_size);
1098 * printf(__FUNCTION__ " %d %02x%02x%02x%02x\n",
1099 * audio->first_frame,
1100 * (unsigned char)audio->bsbuf[0],
1101 * (unsigned char)audio->bsbuf[1],
1102 * (unsigned char)audio->bsbuf[2],
1103 * (unsigned char)audio->bsbuf[3]);
1107 if(!audio->first_frame)
1109 /* Set up bitstream to use buffer */
1110 mpeg3bits_use_ptr(audio->stream, audio->bsbuf);
1112 //printf(__FUNCTION__ " 4\n");
1113 //printf(__FUNCTION__ " 7 %x\n", mpeg3bits_showbits(audio->stream, 16));
1114 /* CRC must be skipped here for proper alignment with the backstep */
1115 if(audio->error_protection)
1116 mpeg3bits_getbits(audio->stream, 16);
1117 //printf(__FUNCTION__ " 8 %x\n", mpeg3bits_showbits(audio->stream, 16));
1118 //printf(__FUNCTION__ " 5\n");
1120 if(audio->channels == 1)
1122 /* stream is mono */
1123 stereo1 = 1;
1124 single = 0;
1126 else
1128 /* Stereo */
1129 stereo1 = 2;
1132 if(audio->mode == MPG_MD_JOINT_STEREO)
1134 ms_stereo = (audio->mode_ext & 0x2) >> 1;
1135 i_stereo = audio->mode_ext & 0x1;
1137 else
1138 ms_stereo = i_stereo = 0;
1140 if(audio->lsf)
1142 granules = 1;
1144 else
1146 granules = 2;
1148 //printf(__FUNCTION__ " 6\n");
1150 if(get_side_info(audio,
1151 &sideinfo,
1152 audio->channels,
1153 ms_stereo,
1154 sfreq,
1155 single,
1156 audio->lsf))
1158 mpeg3_layer_reset(audio);
1159 return output_offset;
1162 //printf(__FUNCTION__ " 7\n");
1163 /* Step back */
1164 if(sideinfo.main_data_begin >= 512)
1166 return output_offset;
1169 if(sideinfo.main_data_begin)
1172 * printf(__FUNCTION__ " 7 %d %d %d\n",
1173 * audio->ssize,
1174 * sideinfo.main_data_begin,
1175 * audio->prev_framesize);
1177 memcpy(audio->bsbuf + audio->ssize - sideinfo.main_data_begin,
1178 audio->bsbufold + audio->prev_framesize - sideinfo.main_data_begin,
1179 sideinfo.main_data_begin);
1180 mpeg3bits_use_ptr(audio->stream,
1181 audio->bsbuf + audio->ssize - sideinfo.main_data_begin);
1185 for(gr = 0; gr < granules; gr++)
1187 float hybridIn [2][SBLIMIT][SSLIMIT];
1188 float hybridOut[2][SSLIMIT][SBLIMIT];
1191 struct gr_info_s *gr_info = &(sideinfo.ch[0].gr[gr]);
1192 int32_t part2bits;
1193 if(audio->lsf)
1194 part2bits = get_scale_factors_2(audio, scalefacs[0], gr_info, 0);
1195 else
1196 part2bits = get_scale_factors_1(audio, scalefacs[0], gr_info, 0, gr);
1197 //printf("dolayer3 4 %04x\n", mpeg3bits_showbits(audio->stream, 16));
1199 if(dequantize_sample(audio,
1200 hybridIn[0],
1201 scalefacs[0],
1202 gr_info,
1203 sfreq,
1204 part2bits))
1206 mpeg3_layer_reset(audio);
1207 return output_offset;
1209 //printf("dolayer3 5 %04x\n", mpeg3bits_showbits(audio->stream, 16));
1212 if(audio->channels == 2)
1214 struct gr_info_s *gr_info = &(sideinfo.ch[1].gr[gr]);
1215 int32_t part2bits;
1216 if(audio->lsf)
1217 part2bits = get_scale_factors_2(audio, scalefacs[1], gr_info, i_stereo);
1218 else
1219 part2bits = get_scale_factors_1(audio, scalefacs[1], gr_info, 1, gr);
1221 if(dequantize_sample(audio,
1222 hybridIn[1],
1223 scalefacs[1],
1224 gr_info,
1225 sfreq,
1226 part2bits))
1228 mpeg3_layer_reset(audio);
1229 return output_offset;
1232 if(ms_stereo)
1234 int i;
1235 int maxb = sideinfo.ch[0].gr[gr].maxb;
1236 if(sideinfo.ch[1].gr[gr].maxb > maxb)
1237 maxb = sideinfo.ch[1].gr[gr].maxb;
1238 for(i = 0; i < SSLIMIT * maxb; i++)
1240 float tmp0 = ((float*)hybridIn[0])[i];
1241 float tmp1 = ((float*)hybridIn[1])[i];
1242 ((float*)hybridIn[0])[i] = tmp0 + tmp1;
1243 ((float*)hybridIn[1])[i] = tmp0 - tmp1;
1247 if(i_stereo)
1248 calc_i_stereo(audio, hybridIn, scalefacs[1], gr_info, sfreq, ms_stereo, audio->lsf);
1250 if(ms_stereo || i_stereo || (single == 3))
1252 if(gr_info->maxb > sideinfo.ch[0].gr[gr].maxb)
1253 sideinfo.ch[0].gr[gr].maxb = gr_info->maxb;
1254 else
1255 gr_info->maxb = sideinfo.ch[0].gr[gr].maxb;
1258 switch(single)
1260 case 3:
1262 register int i;
1263 register float *in0 = (float*)hybridIn[0], *in1 = (float*)hybridIn[1];
1264 /* *0.5 done by pow-scale */
1265 for(i = 0; i < SSLIMIT * gr_info->maxb; i++, in0++)
1266 *in0 = (*in0 + *in1++);
1268 break;
1269 case 1:
1271 register int i;
1272 register float *in0 = (float*)hybridIn[0], *in1 = (float*)hybridIn[1];
1273 for(i = 0; i < SSLIMIT * gr_info->maxb; i++)
1274 *in0++ = *in1++;
1276 break;
1279 //printf(__FUNCTION__ " 9\n");
1281 for(ch = 0; ch < stereo1; ch++)
1283 struct gr_info_s *gr_info = &(sideinfo.ch[ch].gr[gr]);
1284 //printf(__FUNCTION__ " 9.1\n");
1285 antialias(audio, hybridIn[ch], gr_info);
1286 //printf(__FUNCTION__ " 9.2\n");
1287 hybrid(audio, hybridIn[ch], hybridOut[ch], ch, gr_info);
1288 //printf(__FUNCTION__ " 9.3\n");
1291 //printf(__FUNCTION__ " 10\n");
1294 for(ss = 0; ss < SSLIMIT; ss++)
1296 if(single >= 0)
1298 if(render)
1299 mpeg3audio_synth_stereo(audio,
1300 hybridOut[0][ss],
1302 output[0],
1303 &(output_offset));
1304 else
1305 output_offset += 32;
1307 else
1309 int p1 = output_offset;
1310 if(render)
1312 mpeg3audio_synth_stereo(audio,
1313 hybridOut[0][ss],
1315 output[0],
1316 &p1);
1317 mpeg3audio_synth_stereo(audio,
1318 hybridOut[1][ss],
1320 output[1],
1321 &(output_offset));
1323 else
1324 output_offset += 32;
1329 else
1331 audio->first_frame = 0;
1334 //printf(__FUNCTION__ " 12\n");
1337 return output_offset;
1346 void mpeg3_layer_reset(mpeg3_layer_t *audio)
1348 //printf("mpeg3_layer_reset 1\n");
1349 audio->first_frame = 1;
1350 // audio->prev_framesize = 0;
1351 // bzero(audio->bsspace, sizeof(audio->bsspace));
1352 bzero(audio->mp3_block, sizeof(audio->mp3_block));
1353 bzero(audio->mp3_blc, sizeof(audio->mp3_blc));
1354 mpeg3audio_reset_synths(audio);
1362 /* Return 1 if the head check doesn't find a header. */
1363 int mpeg3_layer_check(unsigned char *data)
1365 uint32_t head = ((uint32_t)(data[0] << 24)) |
1366 ((uint32_t)(data[1] << 16)) |
1367 ((uint32_t)(data[2] << 8)) |
1368 ((uint32_t)data[3]);
1370 if((head & 0xffe00000) != 0xffe00000) return 1;
1372 if(!((head >> 17) & 3)) return 1;
1374 if(((head >> 12) & 0xf) == 0xf) return 1;
1376 if(!((head >> 12) & 0xf)) return 1;
1378 if(((head >> 10) & 0x3) == 0x3 ) return 1;
1380 if(((head >> 19) & 1) == 1 && ((head >> 17) & 3) == 3 && ((head >> 16) & 1) == 1)
1381 return 1;
1383 if((head & 0xffff0000) == 0xfffe0000) return 1;
1384 // JPEG header
1385 if((head & 0xffff0000) == 0xffed0000) return 1;
1387 return 0;
1391 /* Decode layer header */
1392 int mpeg3_layer_header(mpeg3_layer_t *audio, unsigned char *data)
1394 uint32_t header;
1395 int sampling_frequency_code;
1396 int layer;
1397 int lsf;
1398 int mpeg35;
1399 int channels;
1400 int mode;
1402 if(mpeg3_layer_check(data))
1404 return 0;
1407 header = (data[0] << 24) |
1408 (data[1] << 16) |
1409 (data[2] << 8) |
1410 data[3];
1411 if(header & (1 << 20))
1413 lsf = (header & (1 << 19)) ? 0x0 : 0x1;
1414 mpeg35 = 0;
1416 else
1418 lsf = 1;
1419 mpeg35 = 1;
1422 layer = 4 - ((header >> 17) & 3);
1424 //printf("mpeg3_layer_header 1 %08x %d\n", header, layer);
1425 if(audio->layer != 0 &&
1426 layer != audio->layer)
1428 return 0;
1431 if(mpeg35)
1432 sampling_frequency_code = 6 + ((header >> 10) & 0x3);
1433 else
1434 sampling_frequency_code = ((header >> 10) & 0x3) + (lsf * 3);
1437 if(audio->samplerate != 0 &&
1438 sampling_frequency_code != audio->sampling_frequency_code)
1440 return 0;
1443 mode = ((header >> 6) & 0x3);
1444 channels = (mode == MPG_MD_MONO) ? 1 : 2;
1446 * if(audio->channels < 0)
1447 * else
1448 * if(audio->channels != channels)
1449 * return 0;
1453 // if(channels > audio->channels)
1454 // audio->channels = channels;
1455 audio->channels = channels;
1456 audio->layer = layer;
1457 audio->lsf = lsf;
1458 audio->mpeg35 = mpeg35;
1459 audio->mode = mode;
1460 audio->sampling_frequency_code = sampling_frequency_code;
1461 audio->samplerate = mpeg3_freqs[audio->sampling_frequency_code];
1462 audio->error_protection = ((header >> 16) & 0x1) ^ 0x1;
1464 audio->bitrate_index = ((header >> 12) & 0xf);
1465 audio->padding = ((header >> 9) & 0x1);
1466 audio->extension = ((header >> 8) & 0x1);
1467 audio->mode_ext = ((header >> 4) & 0x3);
1468 audio->copyright = ((header >> 3) & 0x1);
1469 audio->original = ((header >> 2) & 0x1);
1470 audio->emphasis = header & 0x3;
1471 if(audio->channels > 1)
1472 audio->single = -1;
1473 else
1474 audio->single = 3;
1476 if(!audio->bitrate_index) return 0;
1477 audio->bitrate = 1000 * mpeg3_tabsel_123[audio->lsf][audio->layer - 1][audio->bitrate_index];
1479 audio->prev_framesize = audio->framesize - 4;
1480 switch(audio->layer)
1482 case 1:
1483 audio->framesize = (long)mpeg3_tabsel_123[audio->lsf][0][audio->bitrate_index] * 12000;
1484 audio->framesize /= mpeg3_freqs[audio->sampling_frequency_code];
1485 audio->framesize = ((audio->framesize + audio->padding) << 2);
1486 break;
1487 case 2:
1488 audio->framesize = (long)mpeg3_tabsel_123[audio->lsf][1][audio->bitrate_index] * 144000;
1489 audio->framesize /= mpeg3_freqs[audio->sampling_frequency_code];
1490 audio->framesize += audio->padding;
1491 break;
1492 case 3:
1493 if(audio->lsf)
1494 audio->ssize = (audio->channels == 1) ? 9 : 17;
1495 else
1496 audio->ssize = (audio->channels == 1) ? 17 : 32;
1497 if(audio->error_protection)
1498 audio->ssize += 2;
1499 audio->framesize = (long)mpeg3_tabsel_123[audio->lsf][2][audio->bitrate_index] * 144000;
1500 audio->framesize /= mpeg3_freqs[audio->sampling_frequency_code] << (audio->lsf);
1501 audio->framesize = audio->framesize + audio->padding;
1502 break;
1503 default:
1504 return 0;
1510 * printf(__FUNCTION__ " bitrate=%d framesize=%d samplerate=%d channels=%d layer=%d\n",
1511 * audio->bitrate,
1512 * audio->framesize,
1513 * audio->samplerate,
1514 * audio->channels,
1515 * audio->layer);
1519 if(audio->bitrate < 64000 && audio->layer != 3) return 0;
1520 if(audio->framesize > MAXFRAMESIZE) return 0;
1521 //printf("mpeg3_layer_header 10 %d\n", layer);
1523 return audio->framesize;
1533 mpeg3_layer_t* mpeg3_new_layer()
1535 mpeg3_layer_t *result = calloc(1, sizeof(mpeg3_layer_t));
1536 result->bsbuf = result->bsspace[1];
1537 result->bo = 1;
1538 result->channels = -1;
1539 result->stream = mpeg3bits_new_stream(0, 0);
1540 mpeg3_new_decode_tables(result);
1541 return result;
1546 void mpeg3_delete_layer(mpeg3_layer_t *audio)
1548 mpeg3bits_delete_stream(audio->stream);
1549 free(audio);