public SubtitleSegment(byte[] buffer, int index)
        {
            if (buffer == null || buffer.Length < 7)
            {
                return;
            }

            SyncByte      = buffer[index];
            SegmentType   = buffer[index + 1];
            PageId        = Helper.GetEndianWord(buffer, index + 2);
            SegmentLength = Helper.GetEndianWord(buffer, index + 4);

            if (buffer.Length - 6 < SegmentLength)
            {
                return;
            }

            if (index + 6 + SegmentLength > buffer.Length)
            {
                return;
            }

            IsValid = true;

            switch (SegmentType)
            {
            case PageCompositionSegment:
                PageComposition = new PageCompositionSegment(buffer, index + 6, SegmentLength - 2);
                break;

            case RegionCompositionSegment:
                RegionComposition = new RegionCompositionSegment(buffer, index + 6, SegmentLength - 10);
                break;

            case ClutDefinitionSegment:
                ClutDefinition = new ClutDefinitionSegment(buffer, index + 6, SegmentLength);
                break;

            case ObjectDataSegment:
                ObjectData = new ObjectDataSegment(buffer, index + 6);
                break;

            case DisplayDefinitionSegment:
                DisplayDefinition = new DisplayDefinitionSegment(buffer, index + 6);
                break;

            case EndOfDisplaySetSegment:
                break;
            }
        }
        public SubtitleSegment(byte[] buffer, int index)
        {
            if (buffer == null || buffer.Length < 7)
                return;

            SyncByte = buffer[index];
            SegmentType = buffer[index + 1];
            PageId = Helper.GetEndianWord(buffer, index + 2);
            SegmentLength = Helper.GetEndianWord(buffer, index + 4);

            if (buffer.Length - 6 < SegmentLength)
                return;

            if (index + 6 + SegmentLength > buffer.Length)
                return;

            IsValid = true;

            switch (SegmentType)
            {
                case PageCompositionSegment:
                    PageComposition = new PageCompositionSegment(buffer, index + 6, SegmentLength-2);
                    break;
                case RegionCompositionSegment:
                    RegionComposition = new RegionCompositionSegment(buffer, index + 6, SegmentLength-10);
                    break;
                case ClutDefinitionSegment:
                    ClutDefinition = new ClutDefinitionSegment(buffer, index + 6, SegmentLength);
                    break;
                case ObjectDataSegment:
                    ObjectData = new ObjectDataSegment(buffer, index + 6);
                    break;
                case DisplayDefinitionSegment:
                    DisplayDefinition = new DisplayDefinitionSegment(buffer, index + 6);
                    break;
                case EndOfDisplaySetSegment:
                    break;
            }
        }