Ticket #1420: mythtv_codec_chaching.patch

File mythtv_codec_chaching.patch, 1.6 KB (added by janne-mythtv@…, 15 years ago)
  • libs/libmythtv/mpeg/dvbdescriptors.cpp

     
    77// Decode a text string according to ETSI EN 300 468 Annex A
    88QString dvb_decode_text(const unsigned char *src, uint length)
    99{
     10    static QTextCodec * codecs[16];
    1011    QString result;
    1112
    1213    if (!length)
     
    3031        }
    3132        else if ((buf[0] >= 0x01) && (buf[0] <= 0x0B))
    3233        {
    33             QString coding = "ISO8859-" + QString::number(4 + buf[0]);
    34             QTextCodec *codec = QTextCodec::codecForName(coding);
    35             result = codec->toUnicode((const char*)buf + 1, length - 1);
     34            uint code = 4 + buf[0];
     35           
     36            if (!codecs[code-1]) {
     37                QString coding = "ISO8859-" + QString::number(code);
     38                codecs[code-1] = QTextCodec::codecForName(coding);
     39            }
     40            result = codecs[code-1]->toUnicode((const char*)buf + 1, length - 1);
    3641        }
    3742        else if (buf[0] == 0x10)
    3843        {
     
    4449
    4550            uint code = 1;
    4651            swab(buf + 1, &code, 2);
    47             QString coding = "ISO8859-" + QString::number(code);
    48             QTextCodec *codec = QTextCodec::codecForName(coding);
    49             result = codec->toUnicode((const char*)buf + 3, length - 3);
     52            if (!codecs[code-1]) {
     53                QString coding = "ISO8859-" + QString::number(code);
     54                codecs[code-1] = QTextCodec::codecForName(coding);
     55            }
     56            result = codecs[code-1]->toUnicode((const char*)buf + 3, length - 3);
    5057        }
    5158        else
    5259        {