Example #1
0
        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;
        }
Example #2
0
        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);
        }