Пример #1
0
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);
        }
    }
}
Пример #2
0
/*
 * 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 );
  }
Пример #3
0
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 */