Ticket #1485: channelutil_dtv_multiplex-updates-v2.patch

File channelutil_dtv_multiplex-updates-v2.patch, 8.4 KB (added by danielk, 18 years ago)

slightly modified multiplex update

  • libs/libmythtv/channelutil.cpp

     
    66#include "mythdbcon.h"
    77#include "dvbtables.h"
    88
    9 static uint get_dtv_multiplex(
    10     int         db_source_id,  QString     sistandard,
    11     uint        frequency,     QString     modulation,
    12     // DVB specific
    13     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)
     9static uint get_dtv_multiplex(int  db_source_id,  QString sistandard,
     10                              uint frequency,
     11                              // DVB specific
     12                              int  transport_id,  int     network_id)
    2013{
    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 
    2814    QString qstr =
    29         QString("SELECT mplexid "
    30                 "FROM dtv_multiplex "
    31                 "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 ":"");
     15        "SELECT mplexid "
     16        "FROM dtv_multiplex "
     17        "WHERE sourceid     = :SOURCEID   "
     18        "  AND sistandard   = :SISTANDARD ";
    4819
     20    if (sistandard.lower() != "dvb")
     21        qstr += "AND frequency    = :FREQUENCY   ";
     22    else
     23    {
     24        qstr += "AND transportid  = :TRANSPORTID ";
     25        qstr += "AND networkid    = :NETWORKID   ";
     26    }
    4927
    5028    MSqlQuery query(MSqlQuery::InitCon());
    5129    query.prepare(qstr);
    5230
    5331    query.bindValue(":SOURCEID",          db_source_id);
    54     query.bindValue(":FREQUENCY",         frequency);
    5532    query.bindValue(":SISTANDARD",        sistandard);
    5633
    57     if (modnl)
    58         query.bindValue(":MODULATION",    modulation);
    59     if (transport_id > 0)
     34    if (sistandard.lower() != "dvb")
     35        query.bindValue(":FREQUENCY",     frequency);
     36    else
     37    {
    6038        query.bindValue(":TRANSPORTID",   transport_id);
    61     if (network_id > 0)
    6239        query.bindValue(":NETWORKID",     network_id);
     40    }
    6341
    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 
    8842    if (!query.exec() || !query.isActive())
    8943    {
    90         MythContext::DBError("check_for_matching_dtv_multiplex 2", query);
     44        MythContext::DBError("get_dtv_multiplex", query);
    9145        return 0;
    9246    }
    9347
     
    11771
    11872    // If transport is already present, skip insert
    11973    uint mplex = get_dtv_multiplex(
    120         db_source_id,  sistandard,    frequency,      modulation,
     74        db_source_id,  sistandard,    frequency,
    12175        // DVB specific
    122         transport_id,  network_id,
    123         symbol_rate,   bandwidth,     polarity,
    124         inversion,     trans_mode,
    125         inner_FEC,     constellation, hierarchy,
    126         hp_code_rate,  lp_code_rate,  guard_interval);
     76        transport_id,  network_id);
    12777
    128     if (mplex)
    129     {
    130         VERBOSE(VB_SIPARSER, QString("insert_dtv_multiplex -- ") +
    131                 QString("already exists %1").arg(mplex));
    132         return mplex;
    133     }
     78    QString updateStr =
     79        "UPDATE dtv_multiplex "
     80        "SET sourceid         = :SOURCEID,      sistandard   = :SISTANDARD, "
     81        "    frequency        = :FREQUENCY,     modulation   = :MODULATION, "
     82        "    transportid      = :TRANSPORTID,   networkid    = :NETWORKID, "
     83        "    symbolrate       = :SYMBOLRATE,    bandwidth    = :BANDWIDTH, "
     84        "    polarity         = :POLARITY,      inversion    = :INVERSION, "
     85        "    transmission_mode= :TRANS_MODE,    fec          = :INNER_FEC, "
     86        "    constellation    = :CONSTELLATION, hierarchy    = :HIERARCHY, "
     87        "    hp_code_rate     = :HP_CODE_RATE,  lp_code_rate = :LP_CODE_RATE, "
     88        "    guard_interval   = :GUARD_INTERVAL "
     89        "WHERE sourceid    = :SOURCEID     AND "
     90        "      sistandard  = :SISTANDARD   AND "
     91        "      transportid = :TRANSPORTID  AND "
     92        "      networkid   = :NETWORKID ";
    13493
    135     query.prepare(
     94    if (sistandard.lower() != "dvb")
     95        updateStr += " AND frequency = :FREQUENCY ";
     96
     97    QString insertStr =
    13698        "INSERT INTO dtv_multiplex "
    13799        "  (sourceid,        sistandard,        frequency,  "
    138100        "   modulation,      transportid,       networkid,  "
     
    146108        "   :SYMBOLRATE,     :BANDWIDTH,        :POLARITY,  "
    147109        "   :INVERSION,      :TRANS_MODE,                   "
    148110        "   :INNER_FEC,      :CONSTELLATION,    :HIERARCHY, "
    149         "   :HP_CODE_RATE,   :LP_CODE_RATE,     :GUARD_INTERVAL);");
     111        "   :HP_CODE_RATE,   :LP_CODE_RATE,     :GUARD_INTERVAL);";
    150112
     113    query.prepare((mplex) ? updateStr : insertStr);
     114
     115    VERBOSE(VB_SIPARSER, "insert_dtv_multiplex -- "
     116            <<((mplex) ? "update" : "insert") << " " << mplex);
     117
    151118    query.bindValue(":SOURCEID",          db_source_id);
    152119    query.bindValue(":SISTANDARD",        sistandard);
    153120    query.bindValue(":FREQUENCY",         frequency);
     
    189156        return 0;
    190157    }
    191158
     159    if (mplex)
     160        return mplex;
     161
    192162    mplex = get_dtv_multiplex(
    193         db_source_id,  sistandard,    frequency,      modulation,
     163        db_source_id,  sistandard,    frequency,
    194164        // 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);
     165        transport_id,  network_id);
    200166
    201167    VERBOSE(VB_SIPARSER, QString("insert_dtv_multiplex -- ") +
    202168            QString("inserted %1").arg(mplex));
     
    219185            // DVB specific
    220186            tsid,                 netid,
    221187            -1,                   QChar(cd.BandwidthString()[0]),
    222             -1,                   -1,
     188            -1,                   'a',
    223189            QChar(cd.TransmissionModeString()[0]),
    224190            QString::null,                  cd.ConstellationString(),
    225191            QChar(cd.HierarchyString()[0]), cd.CodeRateHPString(),