Exemple #1
0
        /// <summary>
        /// Load Xing Header
        /// </summary>
        /// <param name="frame">Frame</param>
        /// <returns>Xing Header</returns>
        // Token: 0x060003C9 RID: 969 RVA: 0x0000D1D0 File Offset: 0x0000B3D0
        public static XingHeader LoadXingHeader(Mp3Frame frame)
        {
            XingHeader xingHeader = new XingHeader();

            xingHeader.frame = frame;
            int num;

            if (frame.MpegVersion == MpegVersion.Version1)
            {
                if (frame.ChannelMode != ChannelMode.Mono)
                {
                    num = 36;
                }
                else
                {
                    num = 21;
                }
            }
            else
            {
                if (frame.MpegVersion != MpegVersion.Version2)
                {
                    return(null);
                }
                if (frame.ChannelMode != ChannelMode.Mono)
                {
                    num = 21;
                }
                else
                {
                    num = 13;
                }
            }
            if (frame.RawData[num] == 88 && frame.RawData[num + 1] == 105 && frame.RawData[num + 2] == 110 && frame.RawData[num + 3] == 103)
            {
                xingHeader.startOffset = num;
                num += 4;
                XingHeader.XingHeaderOptions xingHeaderOptions = (XingHeader.XingHeaderOptions)XingHeader.ReadBigEndian(frame.RawData, num);
                num += 4;
                if ((xingHeaderOptions & XingHeader.XingHeaderOptions.Frames) != (XingHeader.XingHeaderOptions) 0)
                {
                    xingHeader.framesOffset = num;
                    num += 4;
                }
                if ((xingHeaderOptions & XingHeader.XingHeaderOptions.Bytes) != (XingHeader.XingHeaderOptions) 0)
                {
                    xingHeader.bytesOffset = num;
                    num += 4;
                }
                if ((xingHeaderOptions & XingHeader.XingHeaderOptions.Toc) != (XingHeader.XingHeaderOptions) 0)
                {
                    xingHeader.tocOffset = num;
                    num += 100;
                }
                if ((xingHeaderOptions & XingHeader.XingHeaderOptions.VbrScale) != (XingHeader.XingHeaderOptions) 0)
                {
                    xingHeader.vbrScale = XingHeader.ReadBigEndian(frame.RawData, num);
                    num += 4;
                }
                xingHeader.endOffset = num;
                return(xingHeader);
            }
            return(null);
        }