QMap<QString,QString> ExtendedEventDescriptor::Items(void) const { QMap<QString, QString> ret; uint index = 0; /* handle all items * minimum item size is for 8bit length + 8bit length */ while (LengthOfItems() - index >= 2) { QString item_description = dvb_decode_text (&_data[8 + index], _data[7 + index]); index += 1 + _data[7 + index]; QString item = dvb_decode_text (&_data[8 + index], _data[7 + index]); index += 1 + _data[7 + index]; ret.insertMulti (item_description, item); } return ret; }
QString dvb_decode_short_name(const unsigned char *src, uint raw_length) { if (raw_length > 50) { LOG(VB_SIPARSER, LOG_WARNING, QString("dvb_decode_short_name: name is %1 chars " "long. Unlikely to be a short name.") .arg(raw_length)); return ""; } if (((0x10 < src[0]) && (src[0] < 0x15)) || ((0x15 < src[0]) && (src[0] < 0x20))) { // TODO: Handle multi-byte encodings LOG(VB_SIPARSER, LOG_ERR, "dvb_decode_short_name: " "Multi-byte coded text is not yet supported."); return ""; } unsigned char *dst = new unsigned char[raw_length]; uint length = 0; // check for emphasis control codes for (uint i = 0; i < raw_length; i++) if (src[i] == 0x86) while ((++i < raw_length) && (src[i] != 0x87)) { if ((src[i] < 0x80) || (src[i] > 0x9F)) dst[length++] = src[i]; // replace CR/LF with a space else if (src[i] == 0x8A) dst[length++] = 0x20; } QString sStr = (!length) ? dvb_decode_text(src, raw_length) : decode_text(dst, length); delete [] dst; return sStr; }
QString SCTEComponentNameDescriptor::NameString(uint i) const { return dvb_decode_text(&_data[loc(i) + 4], StringLength(i)); }