Example #1
0
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;
}
Example #2
0
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;
}
Example #3
0
QString SCTEComponentNameDescriptor::NameString(uint i) const
{
    return dvb_decode_text(&_data[loc(i) + 4], StringLength(i));
}