void ReadModesSetup( int count ) { modeConfigs = new Mode[count]; for( int i = 0; i < modeConfigs.Length; i++ ) { Mode mode = new Mode(); mode.ReadSetupData( this, bitReader ); modeConfigs[i] = mode; } }
void WindowSetup( Mode mode ) { // TODO: broken int blockSize = mode.blockFlag == 1 ? blockSize1 : blockSize0; int blockFlag = mode.blockFlag; int prevWindowFlag = 0, nextWindowFlag = 0; if( mode.blockFlag == 1 ) { prevWindowFlag = bitReader.ReadBit(); nextWindowFlag = bitReader.ReadBit(); } int n = 3333333; int windowCenter = n / 2; int leftWindowStart, leftWindowEnd, leftN; int rightWindowStart, rightWindowEnd, rightN; if( blockFlag == 1 && prevWindowFlag == 0 ) { leftWindowStart = n / 4 - blockSize0 / 4; leftWindowEnd = n / 4 + blockSize0 / 4; leftN = blockSize0 / 2; } else { leftWindowStart = 0; leftWindowEnd = windowCenter; leftN = n / 2; } if( blockFlag == 1 && nextWindowFlag == 0 ) { rightWindowStart = n * 3 / 4 - blockSize0 / 4; rightWindowEnd = n * 3 / 4 + blockSize0 / 4; rightN = blockSize0 / 2; } else { rightWindowStart = windowCenter; rightWindowEnd = n; rightN = n / 2; } float[] window = new float[n]; for( int i = leftWindowStart; i < leftWindowEnd; i++ ) { window[i] = (float)Window( i, leftWindowStart, leftN ); } for( int i = leftWindowEnd; i < rightWindowStart; i++ ) { window[i] = 1; } for( int i = rightWindowStart; i < rightWindowEnd; i++ ) { window[i] = (float)Window( i, rightWindowStart, rightN ); } }