DiiLocationDescriptor::DiiLocationDescriptor(const uint8_t * const buffer) : Descriptor(buffer) { ASSERT_MIN_DLEN(1); transportProtocolLabel = buffer[2]; for (size_t i = 0; i < descriptorLength - 1; i += 4) { ASSERT_MIN_DLEN(i + 5); diiLocations.push_back(new DiiLocation(&buffer[i + 3])); } }
FrequencyListDescriptor::FrequencyListDescriptor(const uint8_t * const buffer) : Descriptor(buffer) { ASSERT_MIN_DLEN(1); codingType = buffer[2] & 0x03; for (size_t i = 0; i < descriptorLength - 1; i += 4) { ASSERT_MIN_DLEN(i + 5); centreFrequencies.push_back(UINT32(&buffer[i + 3])); } }
ParentalRatingDescriptor::ParentalRatingDescriptor(const uint8_t * const buffer) : Descriptor(buffer) { for (size_t i = 0; i < descriptorLength; i += 4) { ASSERT_MIN_DLEN(i + 4); parentalRatings.push_back(new ParentalRating(&buffer[i + 2])); } }
GroupLinkDescriptor::GroupLinkDescriptor(const uint8_t * const buffer) : Descriptor(buffer) { ASSERT_MIN_DLEN(5); position = buffer[2]; groupId = r32(&buffer[3]); }
TVAIdDescriptor::TVAIdDescriptor(const uint8_t * const buffer) : Descriptor(buffer) { for (size_t i = 0; i < descriptorLength; i += 3) { ASSERT_MIN_DLEN(i + 3); identifier.push_back(new TVAIdentifier(&buffer[i + 2])); } }
CompressedModuleDescriptor::CompressedModuleDescriptor(const uint8_t * const buffer) : Descriptor(buffer) { ASSERT_MIN_DLEN(5); compressionMethod = buffer[2]; originalSize = r32(&buffer[3]); }
SubtitlingDescriptor::SubtitlingDescriptor(const uint8_t * const buffer) : Descriptor(buffer) { for (size_t i = 0; i < descriptorLength; i += 8) { ASSERT_MIN_DLEN(i + 8); subtitlings.push_back(new Subtitling(&buffer[i + 2])); } }
InfoDescriptor::InfoDescriptor(const uint8_t * const buffer) : Descriptor(buffer) { ASSERT_MIN_DLEN(3); iso639LanguageCode.assign((char *)&buffer[2], 3); info.assign((char *)&buffer[5], descriptorLength - 3); }
ServiceMoveDescriptor::ServiceMoveDescriptor(const uint8_t * const buffer) : Descriptor(buffer) { ASSERT_MIN_DLEN(6); newOriginalNetworkId = UINT16(&buffer[2]); newTransportStreamId = UINT16(&buffer[4]); newServiceId = UINT16(&buffer[6]); }
CpcmDeliverySignallingDescriptor::CpcmDeliverySignallingDescriptor(const uint8_t * const buffer) : Descriptor(buffer) { ASSERT_MIN_DLEN(2); extensionTag = buffer[2]; cpcmVersion = buffer[3]; selectorBytes.resize(descriptorLength - 2); memcpy(&selectorBytes[0], &buffer[4], descriptorLength - 2); }
CpDescriptor::CpDescriptor(const uint8_t * const buffer) : Descriptor(buffer) { ASSERT_MIN_DLEN(5); cpSystemId = UINT16(&buffer[3]); cpPid = DVB_PID(&buffer[5]); cpDataBytes.resize(descriptorLength - 5); memcpy(&cpDataBytes[0], &buffer[7], descriptorLength - 5); }
CaDescriptor::CaDescriptor(const uint8_t * const buffer) : Descriptor(buffer) { ASSERT_MIN_DLEN(4); caSystemId = UINT16(&buffer[2]); caPid = DVB_PID(&buffer[4]); caDataBytes.resize(descriptorLength - 4); memcpy(&caDataBytes[0], &buffer[6], descriptorLength - 4); }
ShortEventDescriptor::ShortEventDescriptor(const uint8_t * const buffer) : Descriptor(buffer) { size_t headerLength = 5; ASSERT_MIN_DLEN(headerLength); iso639LanguageCode.assign((char *)&buffer[2], 3); eventNameLength = buffer[5]; headerLength += eventNameLength; ASSERT_MIN_DLEN(headerLength); eventName.assign((char *)&buffer[6], eventNameLength); textLength = buffer[6 + eventNameLength]; headerLength += textLength; ASSERT_MIN_DLEN(headerLength); text.assign((char *)&buffer[7 + eventNameLength], textLength); }
LocationDescriptor::LocationDescriptor(const uint8_t * const buffer) : Descriptor(buffer) { ASSERT_MIN_DLEN(1); locationTag = buffer[2]; }
ScramblingDescriptor::ScramblingDescriptor(const uint8_t* const buffer):Descriptor(buffer) { ASSERT_MIN_DLEN(1); scramblingMode = buffer[2]; }
TimeShiftedServiceDescriptor::TimeShiftedServiceDescriptor(const uint8_t * const buffer) : Descriptor(buffer) { ASSERT_MIN_DLEN(2); referenceServiceId = UINT16(&buffer[2]); }
PrivateDataSpecifierDescriptor::PrivateDataSpecifierDescriptor(const uint8_t * const buffer) : Descriptor(buffer) { ASSERT_MIN_DLEN(4); privateDataSpecifier = UINT32(&buffer[2]); }
PdcDescriptor::PdcDescriptor(const uint8_t * const buffer) : Descriptor(buffer) { ASSERT_MIN_DLEN(3); programmeIdentificationLabel = ((buffer[2] & 0x0f) << 16) | UINT16(&buffer[3]); }
StreamIdentifierDescriptor::StreamIdentifierDescriptor(const uint8_t * const buffer) : Descriptor(buffer) { ASSERT_MIN_DLEN(1); componentTag = buffer[2]; }
AncillaryDataDescriptor::AncillaryDataDescriptor(const uint8_t * const buffer) : Descriptor(buffer) { ASSERT_MIN_DLEN(1); ancillaryDataIdentifier = buffer[2]; }