2 #include "mpeg3private.h"
3 #include "mpeg3protos.h"
12 unsigned part2_3_length
;
14 unsigned scalefac_compress
;
16 unsigned mixed_block_flag
;
17 unsigned table_select
[3];
18 unsigned subblock_gain
[3];
22 unsigned region1start
;
23 unsigned region2start
;
25 unsigned scalefac_scale
;
26 unsigned count1table_select
;
33 unsigned main_data_begin
;
34 unsigned private_bits
;
37 struct gr_info_s gr
[2];
49 static int get_scale_factors_1(mpeg3_layer_t
*audio
,
51 struct gr_info_s
*gr_info
,
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}};
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)
65 numbits
= (num0
+ num1
) * 18;
67 if (gr_info
->mixed_block_flag
)
70 *scf
++ = mpeg3bits_getbits(audio
->stream
, num0
);
72 /* num0 * 17 + num1 * 18 */
77 *scf
++ = mpeg3bits_getbits(audio
->stream
, num0
);
79 *scf
++ = mpeg3bits_getbits(audio
->stream
, num1
);
80 /* short[13][0..2] = 0 */
88 int scfsi
= gr_info
->scfsi
;
92 /* scfsi < 0 => granule == 0 */
95 *scf
++ = mpeg3bits_getbits(audio
->stream
, num0
);
98 *scf
++ = mpeg3bits_getbits(audio
->stream
, num1
);
99 numbits
= (num0
+ num1
) * 10 + num0
;
107 for(i
= 0; i
< 6; i
++)
109 *scf
++ = mpeg3bits_getbits(audio
->stream
, num0
);
120 for(i
= 0; i
< 5; i
++)
121 *scf
++ = mpeg3bits_getbits(audio
->stream
, num0
);
131 for(i
= 0; i
< 5; i
++)
132 *scf
++ = mpeg3bits_getbits(audio
->stream
, num1
);
142 for(i
= 0; i
< 5; i
++)
143 *scf
++ = mpeg3bits_getbits(audio
->stream
, num1
);
150 *scf
++ = 0; /* no l[21] in original sources */
156 static int get_scale_factors_2(mpeg3_layer_t
*audio
,
158 struct gr_info_s
*gr_info
,
162 int i
, j
, n
= 0, numbits
= 0;
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 */
174 slen
= mpeg3_i_slen2
[gr_info
->scalefac_compress
>> 1];
176 slen
= mpeg3_n_slen2
[gr_info
->scalefac_compress
];
178 gr_info
->preflag
= (slen
>> 15) & 0x1;
181 if(gr_info
->block_type
== 2 )
184 if(gr_info
->mixed_block_flag
)
188 pnt
= stab
[n
][(slen
>> 12) & 0x7];
190 for(i
= 0; i
< 4; i
++)
192 int num
= slen
& 0x7;
196 for(j
= 0; j
< (int)(pnt
[i
]); j
++)
197 *scf
++ = mpeg3bits_getbits(audio
->stream
, num
);
198 numbits
+= pnt
[i
] * num
;
202 for(j
= 0; j
< (int)(pnt
[i
]); j
++)
208 for(i
= 0; i
< n
; i
++)
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); \
233 static int dequantize_sample(mpeg3_layer_t
*audio
,
234 float xr
[SBLIMIT
][SSLIMIT
],
236 struct gr_info_s
*gr_info
,
240 int shift
= 1 + gr_info
->scalefac_scale
;
241 float *xrpnt
= (float*)xr
;
243 int part2remain
= gr_info
->part2_3_length
- part2bits
;
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
);
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
274 l
[1] = bv
- l
[0]; l
[2] = 0;
278 l
[1] = region2
- l
[0];
284 if(gr_info
->block_type
== 2)
287 * decoding with short or mixed mode BandIndex table
290 int step
= 0, lwin
= 3, cb
= 0;
291 register float v
= 0.0;
294 if(gr_info
->mixed_block_flag
)
297 max
[0] = max
[1] = max
[2] = 2;
298 m
= mpeg3_map
[sfreq
][0];
299 me
= mpeg3_mapend
[sfreq
][0];
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];
310 for(i
= 0; i
< 2; i
++)
313 struct newhuff
*h
= mpeg3_ht
+ gr_info
->table_select
[i
];
314 for( ; lp
; lp
--, mc
--)
320 xrpnt
= ((float*)xr
) + (*m
++);
325 v
= gr_info
->pow2gain
[(*scf
++) << shift
];
330 v
= gr_info
->full_gain
[lwin
][(*scf
++) << shift
];
336 register short *val
= h
->table
;
338 while((y
= *val
++) < 0)
349 if(x
== 15 && h
->linbits
)
353 x
+= ((uint32_t)mask
) >> (BITSHIFT
+ 8 - h
->linbits
);
354 num
-= h
->linbits
+ 1;
357 *xrpnt
= -mpeg3_ispow
[x
] * v
;
359 *xrpnt
= mpeg3_ispow
[x
] * v
;
367 *xrpnt
= -mpeg3_ispow
[x
] * v
;
369 *xrpnt
= mpeg3_ispow
[x
] * v
;
377 if(y
== 15 && h
->linbits
)
381 y
+= ((uint32_t) mask
) >> (BITSHIFT
+ 8 - h
->linbits
);
382 num
-= h
->linbits
+ 1;
385 *xrpnt
= -mpeg3_ispow
[y
] * v
;
387 *xrpnt
= mpeg3_ispow
[y
] * v
;
395 *xrpnt
= -mpeg3_ispow
[y
] * v
;
397 *xrpnt
= mpeg3_ispow
[y
] * v
;
407 for( ;l3
&& (part2remain
+ num
> 0); l3
--)
409 struct newhuff
*h
= mpeg3_htc
+ gr_info
->count1table_select
;
410 register short *val
= h
->table
, a
;
413 while((a
= *val
++) < 0)
420 if(part2remain
+ num
<= 0)
422 num
-= part2remain
+ num
;
426 for(i
= 0; i
< 4; i
++)
433 xrpnt
= ((float*)xr
) + (*m
++);
438 v
= gr_info
->pow2gain
[(*scf
++) << shift
];
443 v
= gr_info
->full_gain
[lwin
][(*scf
++) << shift
];
452 if(part2remain
+ num
<= 0)
476 /* short band -> step=3 */
485 xrpnt
= ((float*)xr
) + *m
++;
486 /* optimize: field will be set to zero at the end of the function */
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];
509 * decoding with 'long' BandIndex table (block_type != 2)
511 int *pretab
= gr_info
->preflag
? pretab1
: pretab2
;
514 int *m
= mpeg3_map
[sfreq
][2];
515 register float v
= 0.0;
519 * long hash table values
521 for(i
= 0; i
< 3; i
++)
524 struct newhuff
*h
= mpeg3_ht
+ gr_info
->table_select
[i
];
526 for(; lp
; lp
--, mc
--)
537 v
= gr_info
->pow2gain
[((*scf
++) + (*pretab
++)) << shift
];
540 register short *val
= h
->table
;
542 while((y
= *val
++) < 0)
553 if(x
== 15 && h
->linbits
)
557 x
+= ((uint32_t) mask
) >> (BITSHIFT
+ 8 - h
->linbits
);
558 num
-= h
->linbits
+ 1;
561 *xrpnt
++ = -mpeg3_ispow
[x
] * v
;
563 *xrpnt
++ = mpeg3_ispow
[x
] * v
;
571 *xrpnt
++ = -mpeg3_ispow
[x
] * v
;
573 *xrpnt
++ = mpeg3_ispow
[x
] * v
;
580 if(y
== 15 && h
->linbits
)
584 y
+= ((uint32_t) mask
) >> (BITSHIFT
+ 8 - h
->linbits
);
585 num
-= h
->linbits
+ 1;
588 *xrpnt
++ = -mpeg3_ispow
[y
] * v
;
590 *xrpnt
++ = mpeg3_ispow
[y
] * v
;
598 *xrpnt
++ = -mpeg3_ispow
[y
] * v
;
600 *xrpnt
++ = mpeg3_ispow
[y
] * v
;
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
;
618 while((a
= *val
++) < 0)
625 if(part2remain
+ num
<= 0)
627 num
-= part2remain
+ num
;
631 for(i
= 0; i
< 4; i
++)
642 v
= gr_info
->pow2gain
[((*scf
++) + (*pretab
++)) << shift
];
649 if(part2remain
+ num
<= 0)
665 gr_info
->maxbandl
= max
+ 1;
666 gr_info
->maxb
= mpeg3_longLimit
[sfreq
][gr_info
->maxbandl
];
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));
678 while(xrpnt
< &xr
[SBLIMIT
][0])
681 while(part2remain
> 16)
683 mpeg3bits_getbits(audio
->stream
, 16); /* Dismiss stuffing Bits */
689 mpeg3bits_getbits(audio
->stream
, part2remain
);
694 printf("dequantize_sample: can't rewind stream %d bits! data=%02x%02x%02x%02x\n",
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 */
705 static int get_side_info(mpeg3_layer_t
*audio
,
706 struct sideinfo_s
*si
,
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]);
720 si
->private_bits
= mpeg3bits_getbits(audio
->stream
, tab
[2]);
722 si
->private_bits
= mpeg3bits_getbits(audio
->stream
, tab
[3]);
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
;
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 */
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");
772 /* region_count/start parameters are implicit in this case. */
773 if(!lsf
|| gr_info
->block_type
== 2)
774 gr_info
->region1start
= 36 >> 1;
777 /* check this again for 2.5 and sfreq=8 */
779 gr_info
->region1start
= 108 >> 1;
781 gr_info
->region1start
= 54 >> 1;
783 gr_info
->region2start
= 576 >> 1;
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);
806 static int hybrid(mpeg3_layer_t
*audio
,
807 float fsIn
[SBLIMIT
][SSLIMIT
],
808 float tsOut
[SSLIMIT
][SBLIMIT
],
810 struct gr_info_s
*gr_info
)
812 float *tspnt
= (float *) tsOut
;
813 float *rawout1
,*rawout2
;
818 int b
= audio
->mp3_blc
[ch
];
819 rawout1
= audio
->mp3_block
[b
][ch
];
821 rawout2
= audio
->mp3_block
[b
][ch
];
822 audio
->mp3_blc
[ch
] = b
;
825 if(gr_info
->mixed_block_flag
)
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);
835 bt
= gr_info
->block_type
;
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);
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
++)
856 for(i
= 0; i
< SSLIMIT
; i
++)
858 tspnt
[i
* SBLIMIT
] = *rawout1
++;
865 static int antialias(mpeg3_layer_t
*audio
,
866 float xr
[SBLIMIT
][SSLIMIT
],
867 struct gr_info_s
*gr_info
)
871 if(gr_info
->block_type
== 2)
873 if(!gr_info
->mixed_block_flag
)
879 sblim
= gr_info
->maxb
-1;
882 /* 31 alias-reduction operations between each pair of sub-bands */
883 /* with 8 butterflies between each pair */
887 float *xr1
= (float*)xr
[1];
889 for(sb
= sblim
; sb
; sb
--, xr1
+= 10)
898 for(ss
= 7; ss
>= 0; ss
--)
900 /* upper and lower butterfly inputs */
901 register float bu
, bd
;
904 *xr2
= (bu
* (*cs
) ) - (bd
* (*ca
) );
905 *xr1
++ = (bd
* (*cs
++) ) + (bu
* (*ca
++) );
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
],
918 struct gr_info_s
*gr_info
,
923 float (*xr
)[SBLIMIT
*SSLIMIT
] = (float (*)[SBLIMIT
*SSLIMIT
] ) xr_buf
;
924 struct mpeg3_bandInfoStruct
*bi
= &mpeg3_bandInfo
[sfreq
];
925 const float *tab1
, *tab2
;
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)
943 if(gr_info
->mixed_block_flag
)
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
++)
957 is_p
= scalefac
[sfb
* 3 + lwin
- gr_info
->mixed_block_flag
];
961 sb
= bi
->shortDiff
[sfb
];
962 idx
= bi
->shortIdx
[sfb
] + lwin
;
965 for( ; sb
> 0; sb
--, idx
+= 3)
967 float v
= xr
[0][idx
];
974 /* in the original: copy 10 to 11 , here: copy 11 to 12 maybe still wrong??? (copy 12 to 13?) */
976 is_p
= scalefac
[11 * 3 + lwin
- gr_info
->mixed_block_flag
];
977 sb
= bi
->shortDiff
[12];
978 idx
= bi
->shortIdx
[12] + lwin
;
984 for( ; sb
> 0; sb
--, idx
+= 3)
986 float v
= xr
[0][idx
];
991 } /* end for(lwin; .. ; . ) */
993 /* also check l-part, if ALL bands in the three windows are 'empty'
994 * and mode = mixed_mode
998 int sfb
= gr_info
->maxbandl
;
999 int idx
= bi
->longIdx
[sfb
];
1001 for ( ; sfb
< 8; sfb
++)
1003 int sb
= bi
->longDiff
[sfb
];
1005 int is_p
= scalefac
[sfb
];
1011 for( ; sb
> 0; sb
--, idx
++)
1013 float v
= xr
[0][idx
];
1014 xr
[0][idx
] = v
* t1
;
1015 xr
[1][idx
] = v
* t2
;
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
];
1032 is_p
= scalefac
[sfb
];
1038 for( ; sb
> 0; sb
--, idx
++)
1040 float v
= xr
[0][idx
];
1041 xr
[0][idx
] = v
* t1
;
1042 xr
[1][idx
] = v
* t2
;
1049 is_p
= scalefac
[20];
1052 /* copy l-band 20 to l-band 21 */
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
;
1067 int mpeg3audio_dolayer3(mpeg3_layer_t
*audio
,
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
;
1082 int output_offset
= 0;
1089 /* flip/init buffer */
1090 audio
->bsbufold
= audio
->bsbuf
;
1091 audio
->bsbuf
= audio
->bsspace
[audio
->bsnum
] + 512;
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 */
1132 if(audio
->mode
== MPG_MD_JOINT_STEREO
)
1134 ms_stereo
= (audio
->mode_ext
& 0x2) >> 1;
1135 i_stereo
= audio
->mode_ext
& 0x1;
1138 ms_stereo
= i_stereo
= 0;
1148 //printf(__FUNCTION__ " 6\n");
1150 if(get_side_info(audio
,
1158 mpeg3_layer_reset(audio
);
1159 return output_offset
;
1162 //printf(__FUNCTION__ " 7\n");
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",
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
]);
1194 part2bits
= get_scale_factors_2(audio
, scalefacs
[0], gr_info
, 0);
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
,
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
]);
1217 part2bits
= get_scale_factors_2(audio
, scalefacs
[1], gr_info
, i_stereo
);
1219 part2bits
= get_scale_factors_1(audio
, scalefacs
[1], gr_info
, 1, gr
);
1221 if(dequantize_sample(audio
,
1228 mpeg3_layer_reset(audio
);
1229 return output_offset
;
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
;
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
;
1255 gr_info
->maxb
= sideinfo
.ch
[0].gr
[gr
].maxb
;
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
++);
1272 register float *in0
= (float*)hybridIn
[0], *in1
= (float*)hybridIn
[1];
1273 for(i
= 0; i
< SSLIMIT
* gr_info
->maxb
; i
++)
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
++)
1299 mpeg3audio_synth_stereo(audio
,
1305 output_offset
+= 32;
1309 int p1
= output_offset
;
1312 mpeg3audio_synth_stereo(audio
,
1317 mpeg3audio_synth_stereo(audio
,
1324 output_offset
+= 32;
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)
1383 if((head
& 0xffff0000) == 0xfffe0000) return 1;
1385 if((head
& 0xffff0000) == 0xffed0000) return 1;
1391 /* Decode layer header */
1392 int mpeg3_layer_header(mpeg3_layer_t
*audio
, unsigned char *data
)
1395 int sampling_frequency_code
;
1402 if(mpeg3_layer_check(data
))
1407 header
= (data
[0] << 24) |
1411 if(header
& (1 << 20))
1413 lsf
= (header
& (1 << 19)) ? 0x0 : 0x1;
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
)
1432 sampling_frequency_code
= 6 + ((header
>> 10) & 0x3);
1434 sampling_frequency_code
= ((header
>> 10) & 0x3) + (lsf
* 3);
1437 if(audio
->samplerate
!= 0 &&
1438 sampling_frequency_code
!= audio
->sampling_frequency_code
)
1443 mode
= ((header
>> 6) & 0x3);
1444 channels
= (mode
== MPG_MD_MONO
) ? 1 : 2;
1446 * if(audio->channels < 0)
1448 * if(audio->channels != channels)
1453 // if(channels > audio->channels)
1454 // audio->channels = channels;
1455 audio
->channels
= channels
;
1456 audio
->layer
= layer
;
1458 audio
->mpeg35
= mpeg35
;
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)
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
)
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);
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
;
1494 audio
->ssize
= (audio
->channels
== 1) ? 9 : 17;
1496 audio
->ssize
= (audio
->channels
== 1) ? 17 : 32;
1497 if(audio
->error_protection
)
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
;
1510 * printf(__FUNCTION__ " bitrate=%d framesize=%d samplerate=%d channels=%d layer=%d\n",
1513 * audio->samplerate,
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];
1538 result
->channels
= -1;
1539 result
->stream
= mpeg3bits_new_stream(0, 0);
1540 mpeg3_new_decode_tables(result
);
1546 void mpeg3_delete_layer(mpeg3_layer_t
*audio
)
1548 mpeg3bits_delete_stream(audio
->stream
);