Ticket #9155: programid.diff

File programid.diff, 4.5 KB (added by Mark.Buechler@…, 9 years ago)

The patch..

  • libs/libmythtv/eithelper.cpp

     
    374374        QString rating_system = QString("");
    375375        QString advisory = QString("");
    376376        float stars = 0.0;
     377        QDate originalairdate;
    377378
    378379        if (EITFixUp::kFixDish & fix)
    379380        {
     
    420421                DishEventTagsDescriptor tags(tags_data);
    421422                seriesId  = tags.seriesid();
    422423                programId = tags.programid();
     424                originalairdate = tags.originalairdate(); // future use
     425
     426                if (programId.startsWith("MV") || programId.startsWith("SP"))
     427                    seriesId = "";
    423428            }
    424429
    425430            const unsigned char *properties_data =
  • libs/libmythtv/mpeg/dishdescriptors.cpp

     
    33#include "dishdescriptors.h"
    44#include "atsc_huffman.h"
    55#include "programinfo.h" // for subtitle types and audio and video properties
     6#include "dvbtables.h"
    67
    78QString DishEventNameDescriptor::Name(uint compression_type) const
    89{
     
    8182
    8283QString DishEventTagsDescriptor::programid(void) const
    8384{
    84     QString id;
     85    QString prefix = QString("");
    8586
    8687    if (DescriptorLength() != 8)
    8788        return QString::null;
    8889
    89     id.sprintf("%02x%02x%02x%02x%02x%02x%02x", _data[3], _data[4], _data[5],
    90                                                _data[6], _data[7], _data[8],
    91                                                _data[9]);
     90    QString series = seriesid();
     91    series.remove(0, 2);
    9292
    93     return id;
     93    uint episode = ((_data[6] & 0x3f) << 0x08) | _data[7];
     94
     95    if (_data[2] == 0x7c)
     96        prefix = "MV";
     97    else if (_data[2] == 0x7d)
     98        prefix = "SP";
     99    else if (_data[2] == 0x7e)
     100    {
     101        if (episode > 0)
     102            prefix = "EP";
     103        else
     104            prefix = "SH";
     105    } else
     106        return prefix;
     107
     108    QString id = QString("%1%2%3").arg(prefix).arg(series).arg(episode, 4, 0);
     109
     110    return id;     
    94111}
    95112
    96 QString DishEventTagsDescriptor::seriesid(void) const           
     113QString DishEventTagsDescriptor::seriesid(void) const
    97114{
    98     QString id;
     115    QString prefix = QString("");
    99116
    100117    if (DescriptorLength() != 8)
    101118        return QString::null;
    102119
    103     id.sprintf("%02x%02x%02x%01x", _data[3], _data[4], _data[5],
    104                                    ((_data[6] & 0xf0) >> 0x04));
     120    if (_data[2] == 0x7c)
     121        prefix = "MV";
     122    else if (_data[2] == 0x7d)
     123        prefix = "SP";
     124    else if (_data[2] == 0x7e)
     125        prefix = "EP";
     126    else
     127        return prefix;
    105128
     129    uint series  = (_data[3] << 0x12) | (_data[4] << 0x0a) | (_data[5] << 0x02) |
     130                    ((_data[6] & 0xc0) >> 0x06);
     131
     132    QString id = QString("%1%2").arg(prefix).arg(series, 8, 0);
     133
    106134    return id;
    107135}
    108136
     137QDate DishEventTagsDescriptor::originalairdate(void) const
     138{
     139    unsigned char mjd[5];
     140
     141    if (DescriptorLength() != 8)
     142        return QDate::QDate();
     143
     144    mjd[0] = _data[8];
     145    mjd[1] = _data[9];
     146    mjd[2] = 0;
     147    mjd[3] = 0;
     148    mjd[4] = 0;
     149
     150    QDateTime t = dvbdate2qt(mjd);
     151
     152    if (!t.isValid())
     153        return QDate::QDate();
     154
     155    QDate originalairdate = t.date();
     156
     157    if (originalairdate.year() < 1940)
     158        return QDate::QDate();
     159
     160    return originalairdate;
     161}
     162
    109163QMutex            DishEventMPAADescriptor::mpaaRatingsLock;
    110164map<uint,QString> DishEventMPAADescriptor::mpaaRatingsDesc;
    111165bool              DishEventMPAADescriptor::mpaaRatingsExists = false;
  • libs/libmythtv/mpeg/dishdescriptors.h

     
    88
    99#include <qmutex.h>
    1010#include <QString>
     11#include <QDate>
    1112
    1213#include "atscdescriptors.h"
    1314
     
    144145        assert(DescriptorID::dish_event_tags == DescriptorTag());
    145146    // descriptor_length        8   1.0
    146147    }
    147     // unknown                  8   2.0
    148     // seriesid                 28  3.0
    149     QString seriesid(void) const;
    150 
    151     // programid                42  3.0
     148    // seriesid                 64  2.0               
     149    QString seriesid(void) const;                 
    152150    QString programid(void) const;
     151    QDate originalairdate(void) const;
    153152};
    154153
    155154typedef enum