MCPcopy Create free account
hub / github.com/Moddable-OpenSource/moddable / III_exponents

Function III_exponents

modules/data/mp3/libmad/layer3.c:846–912  ·  view source on GitHub ↗

NAME: III_exponents() DESCRIPTION: calculate scalefactor exponents */

Source from the content-addressed store, hash-verified

844 DESCRIPTION: calculate scalefactor exponents
845*/
846static
847void III_exponents(struct channel const *channel,
848 unsigned int const *sfbwidth, signed int exponents[39])
849{
850 signed int gain;
851 unsigned int scalefac_multiplier, sfbi;
852 stack(__FUNCTION__, __FILE__, __LINE__);
853
854 gain = (signed int) channel->global_gain - 210;
855 scalefac_multiplier = (channel->flags & scalefac_scale) ? 2 : 1;
856
857 if (channel->block_type == 2) {
858 unsigned int l;
859 signed int gain0, gain1, gain2;
860
861 sfbi = l = 0;
862
863 if (channel->flags & mixed_block_flag) {
864 unsigned int premask;
865
866 premask = (channel->flags & preflag) ? ~0 : 0;
867
868 /* long block subbands 0-1 */
869
870 while (l < 36) {
871 exponents[sfbi] = gain -
872 (signed int) ((channel->scalefac[sfbi] + (pretab[sfbi] & premask)) <<
873 scalefac_multiplier);
874
875 l += sfbwidth[sfbi++];
876 }
877 }
878
879 /* this is probably wrong for 8000 Hz short/mixed blocks */
880
881 gain0 = gain - 8 * (signed int) channel->subblock_gain[0];
882 gain1 = gain - 8 * (signed int) channel->subblock_gain[1];
883 gain2 = gain - 8 * (signed int) channel->subblock_gain[2];
884
885 while (l < 576) {
886 exponents[sfbi + 0] = gain0 -
887 (signed int) (channel->scalefac[sfbi + 0] << scalefac_multiplier);
888 exponents[sfbi + 1] = gain1 -
889 (signed int) (channel->scalefac[sfbi + 1] << scalefac_multiplier);
890 exponents[sfbi + 2] = gain2 -
891 (signed int) (channel->scalefac[sfbi + 2] << scalefac_multiplier);
892
893 l += 3 * sfbwidth[sfbi];
894 sfbi += 3;
895 }
896 }
897 else { /* channel->block_type != 2 */
898 if (channel->flags & preflag) {
899 for (sfbi = 0; sfbi < 22; ++sfbi) {
900 exponents[sfbi] = gain -
901 (signed int) ((channel->scalefac[sfbi] + pretab[sfbi]) <<
902 scalefac_multiplier);
903 }

Callers 1

III_huffdecodeFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected