Ticket #1485: channelutil_dtv_multiplex-updates.diff

File channelutil_dtv_multiplex-updates.diff, 9.2 KB (added by Stuart Auchterlonie, 15 years ago)

correct dtv_multiplex handling in channelutil

  • libs/libmythtv/channelutil.cpp

    old new  
    88
    99static uint get_dtv_multiplex(
    1010    int         db_source_id,  QString     sistandard,
    11     uint        frequency,     QString     modulation,
     11    uint        frequency,     QString     /*modulation*/,
    1212    // DVB specific
    1313    int         transport_id,  int         network_id,
    14     int         symbol_rate,   signed char bandwidth,
    15     signed char polarity,      signed char inversion,
    16     signed char trans_mode,
    17     QString     inner_FEC,     QString      constellation,
    18     signed char hierarchy,     QString      hp_code_rate,
    19     QString     lp_code_rate,  QString      guard_interval)
     14    int         /*symbol_rate*/,   signed char /*bandwidth*/,
     15    signed char /*polarity*/,      signed char /*inversion*/,
     16    signed char /*trans_mode*/,
     17    QString     /*inner_FEC*/,     QString      /*constellation*/,
     18    signed char /*hierarchy*/,     QString      /*hp_code_rate*/,
     19    QString     /*lp_code_rate*/,  QString      /*guard_interval*/)
    2020{
    21     bool modnl = !modulation.isNull();
    22     bool ifecn = !inner_FEC.isNull();
    23     bool consn = !constellation.isNull();
    24     bool hpcrn = !hp_code_rate.isNull();
    25     bool lpcrn = !lp_code_rate.isNull();
    26     bool ginul = !guard_interval.isNull();
    27 
    2821    QString qstr =
    2922        QString("SELECT mplexid "
    3023                "FROM dtv_multiplex "
    3124                "WHERE sourceid     = :SOURCEID   "
    32                 "  AND sistandard   = :SISTANDARD "
    33                 "  AND frequency    = :FREQUENCY  ") +
    34         QString((modnl)            ? "AND modulation   = :MODULATION  " : "") +
    35         QString((transport_id > 0) ? "AND transportid  = :TRANSPORTID " : "") +
    36         QString((network_id   > 0) ? "AND networkid    = :NETWORKID   " : "") +
    37         QString((symbol_rate >= 0) ? "AND symbolrate   = :SYMBOLRATE  " : "") +
    38         QString((bandwidth   >= 0) ? "AND bandwidth    = :BANDWIDTH   " : "") +
    39         QString((polarity    >= 0) ? "AND polarity     = :POLARITY    " : "") +
    40         QString((inversion   >= 0) ? "AND inversion    = :INVERSION   " : "") +
    41         QString((trans_mode  >= 0) ? "AND transmission_mode=:TRANS_MODE ":"") +
    42         QString((ifecn)            ? "AND fec          = :INNER_FEC   " : "") +
    43         QString((consn)            ? "AND constellation= :CONSTELLATION ":"") +
    44         QString((hierarchy   >= 0) ? "AND hierarchy    = :HIERARCHY   " : "") +
    45         QString((hpcrn)            ? "AND hp_code_rate = :HP_CODE_RATE ": "") +
    46         QString((lpcrn)            ? "AND lp_code_rate = :LP_CODE_RATE ": "") +
    47         QString((ginul)            ? "AND guard_interval=:GUARD_INTERVAL ":"");
     25                "  AND sistandard   = :SISTANDARD ");
     26
     27    if (QString::compare(sistandard,"atsc") == 0)
     28    {
     29                qstr.append("  AND frequency    = :FREQUENCY  ");
     30    }
    4831
     32    qstr.append(QString((transport_id > 0) ? "AND transportid  = :TRANSPORTID " : ""));
     33    qstr.append(QString((network_id   > 0) ? "AND networkid    = :NETWORKID   " : ""));
    4934
    5035    MSqlQuery query(MSqlQuery::InitCon());
    5136    query.prepare(qstr);
     
    5439    query.bindValue(":FREQUENCY",         frequency);
    5540    query.bindValue(":SISTANDARD",        sistandard);
    5641
    57     if (modnl)
    58         query.bindValue(":MODULATION",    modulation);
    5942    if (transport_id > 0)
    6043        query.bindValue(":TRANSPORTID",   transport_id);
    6144    if (network_id > 0)
    6245        query.bindValue(":NETWORKID",     network_id);
    6346
    64     if (symbol_rate >= 0)
    65         query.bindValue(":SYMBOLRATE",    symbol_rate);
    66     if (bandwidth >= 0)
    67         query.bindValue(":BANDWIDTH",     QString("%1").arg((char)bandwidth));
    68     if (polarity >= 0)
    69         query.bindValue(":POLARITY",      QString("%1").arg((char)polarity));
    70     if (inversion >= 0)
    71         query.bindValue(":INVERSION",     QString("%1").arg((char)inversion));
    72     if (trans_mode >= 0)
    73         query.bindValue(":TRANS_MODE",    QString("%1").arg((char)trans_mode));
    74 
    75     if (ifecn)
    76         query.bindValue(":INNER_FEC",     inner_FEC);
    77     if (consn)
    78         query.bindValue(":CONSTELLATION", constellation);
    79     if (hierarchy >= 0)
    80         query.bindValue(":HIERARCHY",     QString("%1").arg((char)hierarchy));
    81     if (hpcrn)
    82         query.bindValue(":HP_CODE_RATE",  hp_code_rate);
    83     if (lpcrn)
    84         query.bindValue(":LP_CODE_RATE",  lp_code_rate);
    85     if (ginul)
    86         query.bindValue(":GUARD_INTERVAL",guard_interval);
    87 
    8847    if (!query.exec() || !query.isActive())
    8948    {
    9049        MythContext::DBError("check_for_matching_dtv_multiplex 2", query);
     
    12887    if (mplex)
    12988    {
    13089        VERBOSE(VB_SIPARSER, QString("insert_dtv_multiplex -- ") +
    131                 QString("already exists %1").arg(mplex));
    132         return mplex;
     90                QString("updating %1").arg(mplex));
     91        QString qstr = QString(
     92            "UPDATE dtv_multiplex SET "
     93            "  sourceid=:SOURCEID, sistandard=:SISTANDARD, "
     94            "  frequency=:FREQUENCY, modulation=:MODULATION, "
     95            "  transportid=:TRANSPORTID, networkid=:NETWORKID, "
     96            "  symbolrate=:SYMBOLRATE, bandwidth=:BANDWIDTH, "
     97            "  polarity=:POLARITY, inversion=:INVERSION, "
     98            "  transmission_mode=:TRANS_MODE, fec=:INNER_FEC, "
     99            "  constellation=:CONSTELLATION, hierarchy=:HIERARCHY, "
     100            "  hp_code_rate=:HP_CODE_RATE, lp_code_rate=:LP_CODE_RATE, "
     101            "  guard_interval=:GUARD_INTERVAL "
     102            "WHERE "
     103            "  sourceid=:SOURCEID AND sistandard=:SISTANDARD "
     104            "  AND transportid=:TRANSPORTID AND networkid=:NETWORKID ");
     105        if (QString::compare(sistandard,"atsc") == 0)
     106        {
     107            qstr.append("  AND frequency    = :FREQUENCY  ");
     108        }
     109        query.prepare(qstr);
     110    }
     111    else
     112    {
     113        query.prepare(
     114            "INSERT into dtv_multiplex "
     115            "  (sourceid,        sistandard,        frequency,  "
     116            "   modulation,      transportid,       networkid,  "
     117            "   symbolrate,      bandwidth,         polarity,   "
     118            "   inversion,       transmission_mode,             "
     119            "   fec,             constellation,     hierarchy,  "
     120            "   hp_code_rate,    lp_code_rate,      guard_interval) "
     121            "VALUES "
     122            "  (:SOURCEID,       :SISTANDARD,       :FREQUENCY, "
     123            "   :MODULATION,     :TRANSPORTID,      :NETWORKID, "
     124            "   :SYMBOLRATE,     :BANDWIDTH,        :POLARITY,  "
     125            "   :INVERSION,      :TRANS_MODE,                   "
     126            "   :INNER_FEC,      :CONSTELLATION,    :HIERARCHY, "
     127            "   :HP_CODE_RATE,   :LP_CODE_RATE,     :GUARD_INTERVAL);");
    133128    }
    134 
    135     query.prepare(
    136         "INSERT INTO dtv_multiplex "
    137         "  (sourceid,        sistandard,        frequency,  "
    138         "   modulation,      transportid,       networkid,  "
    139         "   symbolrate,      bandwidth,         polarity,   "
    140         "   inversion,       transmission_mode,             "
    141         "   fec,             constellation,     hierarchy,  "
    142         "   hp_code_rate,    lp_code_rate,      guard_interval) "
    143         "VALUES "
    144         "  (:SOURCEID,       :SISTANDARD,       :FREQUENCY, "
    145         "   :MODULATION,     :TRANSPORTID,      :NETWORKID, "
    146         "   :SYMBOLRATE,     :BANDWIDTH,        :POLARITY,  "
    147         "   :INVERSION,      :TRANS_MODE,                   "
    148         "   :INNER_FEC,      :CONSTELLATION,    :HIERARCHY, "
    149         "   :HP_CODE_RATE,   :LP_CODE_RATE,     :GUARD_INTERVAL);");
    150129
    151130    query.bindValue(":SOURCEID",          db_source_id);
    152131    query.bindValue(":SISTANDARD",        sistandard);
     
    189168        return 0;
    190169    }
    191170
    192     mplex = get_dtv_multiplex(
    193         db_source_id,  sistandard,    frequency,      modulation,
    194         // DVB specific
    195         transport_id,  network_id,
    196         symbol_rate,   bandwidth,     polarity,
    197         inversion,     trans_mode,
    198         inner_FEC,     constellation, hierarchy,
    199         hp_code_rate,  lp_code_rate,  guard_interval);
    200 
    201     VERBOSE(VB_SIPARSER, QString("insert_dtv_multiplex -- ") +
    202             QString("inserted %1").arg(mplex));
    203 
     171    if (mplex == 0)
     172    {
     173        mplex = get_dtv_multiplex(
     174            db_source_id,  sistandard,    frequency,      modulation,
     175            // DVB specific
     176            transport_id,  network_id,
     177            symbol_rate,   bandwidth,     polarity,
     178            inversion,     trans_mode,
     179            inner_FEC,     constellation, hierarchy,
     180            hp_code_rate,  lp_code_rate,  guard_interval);
     181        VERBOSE(VB_SIPARSER, QString("insert_dtv_multiplex -- ") +
     182            QString("new multiplex %1").arg(mplex));
     183    }
    204184    return mplex;
    205185}
    206186
     
    219199            // DVB specific
    220200            tsid,                 netid,
    221201            -1,                   QChar(cd.BandwidthString()[0]),
    222             -1,                   -1,
     202            -1,                   'a',
    223203            QChar(cd.TransmissionModeString()[0]),
    224204            QString::null,                  cd.ConstellationString(),
    225205            QChar(cd.HierarchyString()[0]), cd.CodeRateHPString(),