private void WriteFrame(ref FrameData psFrame, ref FrameResults results) { int bits; position = 0; EncodedOutput = new byte[4096]; int sizeRemainHeaders, sizeRemainFrames; results.SILength = GenerateHeader(ref psFrame); bits = 0; for (int gr = 0; gr < psFrame.NGranules; gr++) { for (int ch = 0; ch < psFrame.NChannels; ch++) { bits += WriteMainDataBits(psFrame.ScaleFactors[ch, gr], EncodedOutput); bits += WriteMainDataBits(psFrame.CodedData[ch, gr], EncodedOutput); bits += WriteMainDataBits(psFrame.UserSpectrum[ch, gr], EncodedOutput); } } bits += WriteMainDataBits(psFrame.UserFrameData, EncodedOutput); results.MainDataLength = bits; sizeRemainHeaders = 0; sizeRemainFrames = 0; results.NextBackPtr = (BitsRemaining / 8) + sizeRemainFrames - sizeRemainHeaders; }
public byte[] WriteToBitStream(int bitsPerFrame, ref FrameParams fr_ps, int[][][] l3_enc, ref SideInfo l3_side, int[][][] scalefact_l, int[][][][] scalefact_s, double[][][] xr, byte[] ancillary, int ancillary_bits) { OutputBit = 8; int mode_gr = 2; for (int gr = 0; gr < mode_gr; gr++) { for (int ch = 0; ch < fr_ps.Chn; ch++) { for (int i = 0; i < 576; i++) { if ((xr[ch][gr][i] < 0) && (l3_enc[ch][gr][i] > 0)) { l3_enc[ch][gr][i] *= -1; } } } } EncodeSideInfo(ref l3_side, ref fr_ps); EncodeMainData(l3_enc, ref l3_side, ref fr_ps, scalefact_l, scalefact_s); WriteAncillaryData(ancillary, ancillary_bits); if (l3_side.ResvDrain != 0) { DrainIntoAncillaryData(l3_side.ResvDrain); } SFrameData = new FrameData(bitsPerFrame, mode_gr, fr_ps.Chn, headerPH, frameSIPH, channelSIPH, spectrumSIPH, scaleFactorsPH, codedDataPH, userSpectrumPH, userFrameDataPH); sFrameResults = new FrameResults(); WriteFrame(ref SFrameData, ref sFrameResults); l3_side.MainDataBegin = sFrameResults.NextBackPtr; return(EncodedOutput); }