static void encodeMainData(shine_global_config *config) { int gr, ch, sfb; shine_side_info_t si = config->side_info; for (gr = 0; gr < config->mpeg.granules_per_frame; gr++) { for (ch = 0; ch < config->wave.channels; ch++) { gr_info *gi = &(si.gr[gr].ch[ch].tt); unsigned slen1 = slen1_tab[gi->scalefac_compress]; unsigned slen2 = slen2_tab[gi->scalefac_compress]; int *ix = &config->l3_enc[ch][gr][0]; if (gr == 0 || si.scfsi[ch][0] == 0) for (sfb = 0; sfb < 6; sfb++) shine_putbits(&config->bs, config->scalefactor.l[gr][ch][sfb], slen1); if (gr == 0 || si.scfsi[ch][1] == 0) for (sfb = 6; sfb < 11; sfb++) shine_putbits(&config->bs, config->scalefactor.l[gr][ch][sfb], slen1); if (gr == 0 || si.scfsi[ch][2] == 0) for (sfb = 11; sfb < 16; sfb++) shine_putbits(&config->bs, config->scalefactor.l[gr][ch][sfb], slen2); if (gr == 0 || si.scfsi[ch][3] == 0) for (sfb = 16; sfb < 21; sfb++) shine_putbits(&config->bs, config->scalefactor.l[gr][ch][sfb], slen2); Huffmancodebits(config, ix, gi); } } }
/* * encodeMainData * -------------- * Encodes the spectrum and places the coded * main data in the buffer main. * Returns the number of bytes stored. */ static int encodeMainData(int l3_enc[2][2][samp_per_frame2], L3_side_info_t *si) { int gr, ch; bits = 0; by = 0; bi = 8; main_[0]=0; /* huffmancodes plus reservoir stuffing */ for(gr = 0; gr < config.mpeg.granules; gr++) for (ch = 0; ch < config.mpeg.channels; ch++) Huffmancodebits( l3_enc[gr][ch], &si->gr[gr].ch[ch].tt ); /* encode the spectrum */ /* ancillary data, used for reservoir stuffing overflow */ if(si->resv_drain) { int words = si->resv_drain >> 5; int remainder = si->resv_drain & 31; /* pad with zeros */ while(words--) putbits(main_, 0, 32 ); if(remainder) putbits(main_, 0, remainder ); }
static void encodeMainData( int l3_enc[2][2][576], III_side_info_t *si, III_scalefac_t *scalefac ) { int gr, ch, sfb, window, mode_gr; mode_gr = 2; for ( gr = 0; gr < mode_gr; gr++ ) for ( ch = 0; ch < stereo; ch++ ) scaleFactorsPH[gr][ch]->nrEntries = 0; for ( gr = 0; gr < mode_gr; gr++ ) for ( ch = 0; ch < stereo; ch++ ) codedDataPH[gr][ch]->nrEntries = 0; for ( gr = 0; gr < 2; gr++ ) { for ( ch = 0; ch < stereo; ch++ ) { BitHolder **pph = &scaleFactorsPH[gr][ch]; gr_info *gi = &(si->gr[gr].ch[ch].tt); unsigned slen1 = slen1_tab[ gi->scalefac_compress ]; unsigned slen2 = slen2_tab[ gi->scalefac_compress ]; int *ix = &l3_enc[gr][ch][0]; if ( (gi->window_switching_flag == 1) && (gi->block_type == 2) ) { if ( gi->mixed_block_flag ) { for ( sfb = 0; sfb < 8; sfb++ ) addBits( *pph, scalefac->l[gr][ch][sfb], slen1 ); for ( sfb = 3; sfb < 6; sfb++ ) for ( window = 0; window < 3; window++ ) addBits( *pph, scalefac->s[gr][ch][sfb][window], slen1 ); for ( sfb = 6; sfb < 12; sfb++ ) for ( window = 0; window < 3; window++ ) addBits( *pph, scalefac->s[gr][ch][sfb][window], slen2 ); } else { for ( sfb = 0; sfb < 6; sfb++ ) for ( window = 0; window < 3; window++ ) addBits( *pph, scalefac->s[gr][ch][sfb][window], slen1 ); for ( sfb = 6; sfb < 12; sfb++ ) for ( window = 0; window < 3; window++ ) addBits( *pph, scalefac->s[gr][ch][sfb][window], slen2 ); } } else { if ( (gr == 0) || (si->scfsi[ch][0] == 0) ) for ( sfb = 0; sfb < 6; sfb++ ) addBits( *pph, scalefac->l[gr][ch][sfb], slen1 ); if ( (gr == 0) || (si->scfsi[ch][1] == 0) ) for ( sfb = 6; sfb < 11; sfb++ ) addBits( *pph, scalefac->l[gr][ch][sfb], slen1 ); if ( (gr == 0) || (si->scfsi[ch][2] == 0) ) for ( sfb = 11; sfb < 16; sfb++ ) addBits( *pph, scalefac->l[gr][ch][sfb], slen2 ); if ( (gr == 0) || (si->scfsi[ch][3] == 0) ) for ( sfb = 16; sfb < 21; sfb++ ) addBits( *pph, scalefac->l[gr][ch][sfb], slen2 ); } Huffmancodebits( &codedDataPH[gr][ch], ix, gi ); } /* for ch */ } /* for gr */ } /* main_data */