CSPspEmu.Hle.Formats.audio.At3.SUB.MaiBitReader.addData C# (CSharp) Method

addData() public method

public addData ( byte src, int len_s ) : int
src byte
len_s int
return int
        public int addData(byte* src, int len_s)
        {
            int ret = _addData(src, len_s);
            #if DEBUG_BIT_READER
            Console.WriteLine("addData({0}) : {1}", len_s, BitConverter.ToString(src.GetArray(len_s)));
            #endif
            return ret;
        }

Usage Example

        public int decodeFrame(byte* p_frame_data, int data_len, out int p_chns, out short[] pp_sample_buf)
        {
            int rs = 0;

            var mbr0 = new MaiBitReader(data_len + 0x10);
            mbr0.addData(p_frame_data, data_len);
            var Pad = stackalloc byte[0x10];
            mbr0.addData(Pad, 0x10);

            if (mbr0.getWithI32Buffer(1) != 0)
            {
                rs = -1;
            }

            int counter_substream = 0;
            int counter_chn = 0;
            while (rs == 0)
            {
                int substream_type = mbr0.getWithI32Buffer(2);
                uint joint_flag = 0;
                uint chns = 0;

                if (substream_type == 0)
                {
                    joint_flag = 0;
                    chns = 1;
                }
                else if (substream_type == 1)
                {
                    joint_flag = 1;
                    chns = 2;
                }
                else if (substream_type == 3)
                {
                    break;
                }
                else
                {
                    rs = -1;
                }

                if (cores[counter_substream] == null)
                    cores[counter_substream] = new MaiAT3PlusCoreDecoder();

                if (0 != (rs = cores[counter_substream].parseStream(mbr0, chns, joint_flag)))
                    break;

                if (0 != (rs = cores[counter_substream].decodeStream(chns)))
                    break;

                for (int a0 = 0; a0 < chns; a0++)
                    cores[counter_substream].getAudioSamplesI16((uint)a0, new ManagedPointer<short>(sample_buf_tmp, 0x800 * (counter_chn++)));

                counter_substream++;
            }

            for (int a0 = 0; a0 < 0x800; a0++)
            {
                for (int a1 = 0; a1 < counter_chn; a1++)
                {
                    sample_buf[a0 * counter_chn + a1] = sample_buf_tmp[a1 * 0x800 + a0];
                }
            }
            mbr0.Dispose();

            p_chns = counter_chn;
            pp_sample_buf = sample_buf;

            return rs;
        }