MCPcopy Create free account
hub / github.com/DescentDevelopers/Descent3 / calc_bits

Function calc_bits

AudioEncode/aencode.cpp:763–898  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

761}
762
763int32_t calc_bits(Encoder &enc, int32_t val) {
764 static uint32_t calc_bits_data[] = {0x00, 0x13, 0x16, 0x03, 0x1D, 0x00};
765
766 int32_t bitPower = 3;
767 int32_t result = enc.m_numColumns * 5 + 20;
768
769 float halfVal = float(val) * 0.5f;
770 float *var_18 = enc.m_levelSlots[enc.m_levels];
771 float *var_8 = enc.m_levelSlots[enc.m_levels];
772
773 for (int32_t var_1C = 0; var_1C < enc.m_numColumns; ++var_1C) {
774 int32_t minValue = 0x10000;
775 int32_t maxValue = -0x10000;
776 if (enc.m_samples_per_subband > 0) {
777 float *pSlotData = var_8;
778 for (int ebp = enc.m_samples_per_subband; ebp != 0; --ebp) {
779 int32_t testVal = (int32_t)floor((*pSlotData + halfVal) / float(val));
780 if (minValue > testVal) {
781 minValue = testVal;
782 }
783
784 if (maxValue < testVal) {
785 maxValue = testVal;
786 }
787
788 pSlotData += enc.m_numColumns;
789 }
790 }
791
792 int32_t absMaxVal = abs(minValue);
793 if (absMaxVal < maxValue) {
794 absMaxVal = maxValue;
795 } else if (absMaxVal < -maxValue) {
796 absMaxVal = -maxValue;
797 }
798
799 if (absMaxVal == 0) {
800 minValue = 0;
801 enc.m_pFormatIdPerColumn[var_1C] = 0;
802 } else if (absMaxVal <= 4) {
803 int32_t ebx = 1;
804 int32_t var_28 = absMaxVal * 3 + 14;
805 if (absMaxVal != 1) {
806 ebx = ((absMaxVal - 2) < 1) ? 2 : 3;
807 }
808
809 minValue = 0;
810 maxValue = 0;
811 for (int ebp = 0; ebp < enc.m_samples_per_subband; ++ebp) {
812 int32_t v = (int)floor((var_18[(ebp * enc.m_numColumns) + var_1C] + halfVal) / float(val));
813 if (v) {
814 if (ebx != 1) {
815 if (v == -1 || v == 1) {
816 minValue += 4;
817 maxValue += 3;
818 } else {
819 minValue += ebx + 2;
820 maxValue += ebx + 1;

Callers 1

DetermineStepFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected