public CaptionText(byte[] buffer, int index, string languageCode) { DataGroupId = (byte)(buffer[index] >> 2); DataGroupVersion = (byte)(buffer[index] & 0b00000011); DataGroupLinkNumber = buffer[index + 1]; LastDataGroupLinkNumber = buffer[index + 2]; DataGroupSize = (buffer[index + 3] << 8) + buffer[index + 4]; DataUnitLoopLength = (buffer[index + 12] << 16) + (buffer[index + 13] << 8) + buffer[index + 14]; CaptionTextUnits = new List <CaptionTextUnit>(1); var unitIndex = index + 15; int end = unitIndex + DataUnitLoopLength; while (unitIndex < end) { var unit = new CaptionTextUnit(); unit.UnitSeparator = buffer[unitIndex++]; unit.DataUnitParameter = buffer[unitIndex++]; unit.DataUnitSize = (buffer[unitIndex++] << 16) + (buffer[unitIndex++] << 8) + buffer[unitIndex++]; unit.AribText = new AribText(buffer, unitIndex, languageCode, unit.DataUnitSize); unitIndex += unit.DataUnitSize; if (unit.UnitSeparator == 0x1f && unit.DataUnitParameter == 0x20 && unit.AribText.Texts.Count > 0) // DataUnitParameter 0x20=Text, 0x35=Bitmap data { CaptionTextUnits.Add(unit); } } }
public CaptionText(byte[] buffer, int index, string languageCode) { DataGroupId = (byte)(buffer[index] >> 2); DataGroupVersion = (byte)(buffer[index] & VobSub.Helper.B00000011); DataGroupLinkNumber = buffer[index + 1]; LastDataGroupLinkNumber = buffer[index + 2]; DataGroupSize = (buffer[index + 3] << 8) + buffer[index + 4]; DataUnitLoopLength = (buffer[index + 12] << 16) + (buffer[index + 13] << 8) + buffer[index + 14]; CaptionTextUnits = new List<CaptionTextUnit>(1); var unitIndex = index + 15; int end = unitIndex + DataUnitLoopLength; while (unitIndex < end) { var unit = new CaptionTextUnit(); unit.UnitSeparator = buffer[unitIndex++]; unit.DataUnitParameter = buffer[unitIndex++]; unit.DataUnitSize = (buffer[unitIndex++] << 16) + (buffer[unitIndex++] << 8) + buffer[unitIndex++]; unit.AribText = new AribText(buffer, unitIndex, languageCode, unit.DataUnitSize); unitIndex += unit.DataUnitSize; if (unit.UnitSeparator == 0x1f && unit.DataUnitParameter == 0x20 && unit.AribText.Texts.Count > 0) // DataUnitParameter 0x20=Text, 0x35=Bitmap data { CaptionTextUnits.Add(unit); } } }